<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>RSS feed for InstantSpot site Progressive Overload</title><link>http://ajlcom.instantspot.com</link><description>Aaron Lynch on web development and other stuff</description><language>en-us</language><copyright>This work is Copyright &#xA9; 2009 by Progressive Overload</copyright><generator>RSSVille ColdFusion FeedMaker, version 1.0</generator><pubDate>Sun, 22 Nov 2009 03:40:19 GMT</pubDate><item><title>Coldfusion on the Google App Engine with Open BlueDragon</title><link>http://ajlcom.instantspot.com/blog/2009/11/20/Coldfusion-on-the-Google-App-Engine-with-Open-BlueDragon</link><description>&lt;p&gt;&lt;strong&gt;The future is now!&amp;nbsp; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A little melodramatic maybe, but this technology is exciting.&amp;nbsp; Free cfml app servers with clustering (including data and file storage).&amp;nbsp;&lt;/p&gt; &lt;p&gt;First, if you don&apos;t know what the Google App&amp;nbsp;Engine is yet, go &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;here&lt;/a&gt; first and do a little reading.&amp;nbsp; Once you have read enough of that to be sufficiently excited, we need to set up the development and deployment tools.&amp;nbsp; Paul Kukiel has put together a really nice demo on how to do this &lt;a href=&quot;http://blog.kukiel.net/2009/09/coldfusion-on-google-app-engine-with.html&quot;&gt;here&lt;/a&gt;.&amp;nbsp; &lt;strong&gt;NOTE&amp;nbsp;THERE&amp;nbsp;IS&amp;nbsp;ONE&amp;nbsp;THING&amp;nbsp;THAT&amp;nbsp;IS&amp;nbsp;INCORRECT&amp;nbsp;IN&amp;nbsp;THE&amp;nbsp;VIDEO &amp;nbsp; &lt;/strong&gt; Do not delete the &amp;quot;war&amp;quot; directory, merely paste the openbd war over the existing one.&amp;nbsp; This is important.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Next, reading and writing data with the Google datastore.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt;Storing data in a scalable web application can be tricky. A user could be interacting with any of dozens of web servers at a given time, and the user&apos;s next request could go to a different web server than the one that handled the previous request. All web servers need to be interacting with data that is also spread out across dozens of machines, possibly in different locations around the world.  &lt;br /&gt; &lt;/blockquote&gt;&lt;blockquote&gt;Thanks to Google App Engine, you don&apos;t have to worry about any of that. App Engine&apos;s infrastructure takes care of all of the distribution, replication and load balancing of data behind a simple API&amp;mdash;and you get a powerful query engine and transactions as well.&lt;/blockquote&gt; &lt;p&gt;Thanks to the fine people at Open BlueDragon, this task is made very very simple.&amp;nbsp; Every cfc in the openBD GAE inherits the following methods from component.cfc.&amp;nbsp; GoogleWrite(), GoogleRead(), and GoogleKey().&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;-- Example object Status.cfc:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfcomponent displayname=&amp;quot;Status&amp;quot; output=&amp;quot;false&amp;quot;&amp;gt;   &amp;lt;cfproperty name=&amp;quot;Message&amp;quot; displayname=&amp;quot;Message&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;  &amp;lt;cfproperty name=&amp;quot;DateTimeCreated&amp;quot; displayname=&amp;quot;DateTimeCreated&amp;quot; type=&amp;quot;date&amp;quot; /&amp;gt;   &amp;lt;cffunction name=&amp;quot;init&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;Status&amp;quot;&amp;gt;   &amp;lt;cfreturn this/&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;getMessage&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;string&amp;quot;&amp;gt;   &amp;lt;cfreturn this.Message /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;setMessage&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;void&amp;quot;&amp;gt;   &amp;lt;cfargument name=&amp;quot;Message&amp;quot; type=&amp;quot;string&amp;quot; required=&amp;quot;true&amp;quot; /&amp;gt;   &amp;lt;cfset this.Message = arguments.Message /&amp;gt;   &amp;lt;cfreturn /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;getDateTimeCreated&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;date&amp;quot;&amp;gt;   &amp;lt;cfreturn this.DateTimeCreated /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;setDateTimeCreated&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;void&amp;quot;&amp;gt;   &amp;lt;cfargument name=&amp;quot;DateTimeCreated&amp;quot; type=&amp;quot;date&amp;quot; required=&amp;quot;true&amp;quot; /&amp;gt;   &amp;lt;cfset this.DateTimeCreated = arguments.DateTimeCreated /&amp;gt;   &amp;lt;cfreturn /&amp;gt;  &amp;lt;/cffunction&amp;gt;    &amp;lt;/cfcomponent&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;-- Writing data to the datastore:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfscript&amp;gt; //saving a new Status to Google datastore Status = createObject( &amp;quot;component&amp;quot;, &amp;quot;model.Status&amp;quot; ).init(); Status.setMessage( &amp;quot;I love Google App Engine and OpenBD!&amp;quot; ); Status.setDateTimeCreated( Now() );  /*now all we do is call the googleWrite() method on our object, notice this returns the objects new google key*/ googleKey = Status.googleWrite(); &amp;lt;/cfscript&amp;gt; &lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;-- &lt;strong&gt;Querying the datastore:&lt;/strong&gt;&amp;nbsp; for more on this visit the &lt;a href=&quot;http://wiki.openbluedragon.org/wiki/index.php/GoogleAppEngine:Datastore&quot;&gt;openBD wiki page on the datastore&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;!--- notice dbtype=&amp;quot;google&amp;quot; and the quasi-SQL  ---&amp;gt; &amp;lt;cfquery dbtype=&amp;quot;google&amp;quot; name=&amp;quot;result&amp;quot;&amp;gt; Select from Status &amp;lt;/cfquery&amp;gt;  &amp;lt;!--- The result of this query, is an array of matching Status objects.  Not the usual query recordset. ---&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Securing your new web app&lt;/strong&gt; with the UserServiceFactory (com.google.appengine.api.users.UserServiceFactory)&lt;/p&gt; &lt;p&gt;Once I figured this step out, it was almost embarassingly easy to secure a page, allowing access only to validated Google account holders.&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfscript&amp;gt; UserServiceFactory = CreateObject(&amp;quot;java&amp;quot;,&amp;quot;com.google.appengine.api.users.UserServiceFactory&amp;quot;);  User = UserServiceFactory.getUserService().getCurrentUser();  /*Here I am doing a test to see if there is a valid user object returned, aka &amp;quot;logged in&amp;quot;.  At this time, I haven&apos;t found the ideal solution for this*/  isLoggedIn = false;  try{    user.getEmail();    isLoggedIn = true; } catch (any excpt){}  &amp;lt;/cfscript&amp;gt;  &amp;lt;!---  building login/logut links  ---&amp;gt;  &amp;lt;cfif NOT isLoggedIn&amp;gt; YOU NEED TO &amp;lt;a href=&amp;quot;&amp;lt;cfoutput&amp;gt;#UserServiceFactory.getUserService().createLoginURL(toString(&amp;quot;http://#cgi.SERVER_NAME#&amp;quot;))#&amp;lt;/cfoutput&amp;gt;&amp;quot;&amp;gt;LOGIN&amp;lt;/a&amp;gt; &amp;lt;cfelse&amp;gt;  &amp;lt;cfoutput&amp;gt;#request.user.getEmail()#&amp;lt;/cfoutput&amp;gt;:  All your email are belong to us   &amp;lt;br /&amp;gt;  &amp;lt;a href=&amp;quot;&amp;lt;cfoutput&amp;gt;#UserServiceFactory.getUserService().createLogoutURL(toString(&amp;quot;http://#cgi.SERVER_NAME#&amp;quot;))#&amp;lt;/cfoutput&amp;gt;&amp;quot;&amp;gt;LOGOUT&amp;lt;/a&amp;gt; &amp;lt;/cfif&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Time to build some real applications.&lt;/strong&gt;&amp;nbsp; Early indications from some experimentation by &lt;a href=&quot;http://www.daveshuck.com&quot;&gt;Dave Shuck&lt;/a&gt;, are revealing that the Mach-ii MVC framework along with the Coldspring IOC framework are working on the Google&amp;nbsp;App Engine.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Other features, new or otherwise:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/python/config/cron.html&quot;&gt;cron support&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/python/tools/uploadingdata.html&quot;&gt;database import&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/securedataconnector/&quot;&gt;access to firewalled data&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There is just no reason that we as cfml developers shouldn&apos;t be churning out app after app on this platform.&amp;nbsp;&lt;/p&gt;</description><pubDate>Sat, 21 Nov 2009 03:54:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/11/20/Coldfusion-on-the-Google-App-Engine-with-Open-BlueDragon</guid><category>ColdFusion,Web Development,BlueDragon,Internet,Google App Engine</category></item><item><title>Progressive Overload</title><link>http://ajlcom.instantspot.com/blog/2009/10/29/Progressive-Overload</link><description>&lt;p&gt;Progressive Overload is the name of my blog as of yesterday (10/28/09).&amp;nbsp; I think the concept is extremely important to making gains in the weight room, but there might be some carry-over into other areas of our lives.&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Progressive overload&lt;/strong&gt; is the gradual increase of stress placed upon the body during exercise training. It was developed by Thomas Delorme, M.D. while he rehabilitated soldiers after World War II.&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-0&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_overload#cite_note-0&quot;&gt;&lt;/a&gt;&lt;/sup&gt; This technique is recognized as a fundamental principle for success in various forms of strength training programs including fitness training, weight lifting, high intensity training and physical therapy programs. &lt;/em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_overload&quot;&gt;(from wikipedia)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Moral of the story, if you want to improve in a certain area of your life, never stop pushing yourself...it should always be hard if you want to always get better.&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 29 Oct 2009 13:55:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/10/29/Progressive-Overload</guid><category>Musings,Web Development,Fitness</category></item><item><title>Mixing a little Flex with my Mach-II</title><link>http://ajlcom.instantspot.com/blog/2009/10/23/Mixing-a-little-Flex-with-my-MachII</link><description>&lt;p&gt;One of my latest projects was to create a little contact manager / sales tool to integrate with an existing  system (written in Mach-II).&amp;nbsp; Requirements dictated that I needed to have access to my already logged in user (must be aware of client session). &amp;quot;Down the road&amp;quot; requirements, are that we&apos;d like to make an AIR port of this new feature as a standalone application. As a big fan of Flex, I thought it would be a great opportunity to test the efficacy of writing this new feature as a drop in Flex mini-application.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Since security is handled by the existing application,&amp;nbsp; we needed to make sure the functionality of this app respected the existing security guidelines.&amp;nbsp; The best way I could think of was also the easiest...just start calling events and see what happens.&lt;/p&gt; &lt;p&gt;Lucky for me, it all just worked.&amp;nbsp; So here are a few examples that might help get you started if you are working on the same sort of project.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On creationComplete I call a method named &amp;quot;init()&amp;quot; to get that user&apos;s set of contact data:&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt; private var myLoader:URLLoader;  public function init():void {  var myReq:URLRequest = new URLRequest(&apos;/index.cfm/event/GetContactData);  myLoader = new URLLoader()  myLoader.addEventListener(Event.COMPLETE, dataComplete);  myLoader.load(myReq); }&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Important:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; Notice the event listener I added to call the dataComplete method once the request was completed.&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Once we have that initial set of data, all that is left is to start POSTing the create/edit/deletes the user is making to his contacts.&lt;/p&gt; &lt;p&gt;Here is an example of doing an HTTP POST request and passing my Contact object to a Mach-II event:&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;private function saveContact(Contact:ContactVO):void {  var myHTTPService:HTTPService = new HTTPService;  myHTTPService.method= &amp;quot;POST&amp;quot;;  myHTTPService.url = &apos;/index.cfm/event/SaveContact&apos;;  myHTTPService.addEventListener(ResultEvent.RESULT,function():void{init()});  myHTTPService.send(Contact);  Alert.show(&apos;Contact has been saved.&apos;); }&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Note:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; Check out how we send the Contact object without doing anything tricky?&amp;nbsp; All of the properties of my ContactVO are available as event Args in my Mach-II listener.&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here is another example of doing an HTTP POST request, but passing individual variables:&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;private function submitNote(htmlText:String,plainText:String,Contact:ContactVO):void {  var myHTTPService:HTTPService = new HTTPService;  var obj:Object = new Object();  myHTTPService.method= &amp;quot;POST&amp;quot;;  myHTTPService.url = &apos;/index.cfm/event/saveNote&apos;;  obj[&apos;notetext&apos;] = htmlText;  obj[&apos;notepreview&apos;] = plainText;  obj[&apos;contactid&apos;] = Contact.ContactId;  myHTTPService.addEventListener(ResultEvent.RESULT,function():void{init()});  myHTTPService.send(obj); }&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Note:&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&amp;nbsp; Notice how we create an object and define the properties we want to send, and then pass that new object in the POST.&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 23 Oct 2009 15:11:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/10/23/Mixing-a-little-Flex-with-my-MachII</guid><category>ColdFusion,MachII,Web Development,Flex</category></item><item><title>Programmers and Gluteal Atrophy</title><link>http://ajlcom.instantspot.com/blog/2009/10/22/Programmers-and-Gluteal-Atrophy</link><description>&lt;p&gt;As a man approaching my mid-30&apos;s and having had an office job for right at 10 yrs now, I was very surprised what awaited me the first time I went back to deadlifting and squatting.&amp;nbsp; I was weak!&amp;nbsp; So shocked was I by this that I thought that surely something must be wrong and/or broken inside me.&amp;nbsp; Not only did I feel weaker than I thought I should be, but I was extremely inflexible.&amp;nbsp; Ten years of sitting around was causing me problems.&lt;/p&gt; &lt;p&gt;From wikipedia:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Sitting for long periods can lead to the gluteal muscles atrophying through constant pressure and disuse. This may be associated with (although not necessarily the cause of) lower back pain, difficulty with some movements that naturally require the gluteal muscles, such as rising from the seated position, and climbing stairs.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;About a year and half ago, I started to get myself back into the routine of working out.&amp;nbsp; I mainly focused on running at first (more on that in another post) but eventually realized that I hated running :) and I loved moving heavy weights.&amp;nbsp;&amp;nbsp; It has taken me several months of dedicated deadlifting and squatting to begin to feel like I am approaching a good baseline strength (totalling 1000 lbs between bench/deadlift/squat) and my back is feeling better than it has in probably a decade.&lt;/p&gt; &lt;p&gt;So to all of my fellow programmers out there, get into the gym and deadlift.&amp;nbsp; You will be glad you did!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 22 Oct 2009 05:40:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/10/22/Programmers-and-Gluteal-Atrophy</guid><category>Web Development,Fitness</category></item><item><title>Added Self-Documentation on Scriptalizer.com</title><link>http://ajlcom.instantspot.com/blog/2009/03/05/Added-SelfDocumentation-on-Scriptalizercom</link><description>&lt;p&gt;Minor update to &lt;a href=&quot;http://www.scriptalizer.com&quot;&gt;Scriptalizer.com&lt;/a&gt; today.&amp;nbsp; I added the option to include a comment block in the generated file.&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;/***************************  File generated by Scriptalizer.com DateTime: Thursday, March 5, 2009 2:24:36 PM CST  File list:  SpryData.js  SpryEffects.js  SpryXML.js  xpath.js *****************************/ &lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;As you can see, this will help you remember what files you &amp;quot;squished&amp;quot; together :)&lt;/p&gt; &lt;p&gt;FYI, saved over 100K on those Spry files.&lt;/p&gt; &lt;h3&gt;Javascript Filesize summary:&lt;/h3&gt; &lt;ul&gt;     &lt;li&gt;Size before: 217.45 KB&lt;/li&gt;     &lt;li&gt;Size after: 113.64 KB&lt;/li&gt;     &lt;li&gt;&lt;strong&gt;103.80KB SAVED!&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 05 Mar 2009 21:08:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/03/05/Added-SelfDocumentation-on-Scriptalizercom</guid><category>Web Development,Javascript,CSS</category></item><item><title>Possible javascript file MIME types</title><link>http://ajlcom.instantspot.com/blog/2009/02/11/Possible-javascript-file-MIME-types</link><description>&lt;p&gt;Here is a list of potential MIME types for uploaded javascript files.&amp;nbsp; If you know of more please comment here.&amp;nbsp;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;text/ecmascript&lt;/li&gt;     &lt;li&gt;application/ecmascript&lt;/li&gt;     &lt;li&gt;text/jscript&lt;/li&gt;     &lt;li&gt;application/x-js&lt;/li&gt;     &lt;li&gt;application/javascript&lt;/li&gt;     &lt;li&gt;application/x-javascript&lt;/li&gt;     &lt;li&gt;text/javascript&lt;/li&gt;     &lt;li&gt;text/x-js&lt;/li&gt; &lt;/ul&gt;</description><pubDate>Wed, 11 Feb 2009 16:03:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/02/11/Possible-javascript-file-MIME-types</guid><category>Web Development,Javascript</category></item><item><title>Looking to hire ColdFusion/Flex Developer (Addison, TX)</title><link>http://ajlcom.instantspot.com/blog/2009/01/29/Looking-to-hire-ColdFusionFlex-Developer-Addison-TX</link><description>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am looking to hire a full time (on site only) ColdFusion developer.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The type of applications we work on range from support of old legacy applications to object oriented ColdFusion business layer with Flex 3 UI.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Experience working in frameworks is a major plus.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;Industry&lt;/strong&gt;:  Mortgage software&lt;br /&gt; &lt;strong&gt;Location&lt;/strong&gt;: Addison, TX&lt;br /&gt; &lt;strong&gt;Start Date&lt;/strong&gt;: Immediate&lt;br /&gt; &lt;strong&gt;Salary&lt;/strong&gt;: Depends on Experience&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;meta http-equiv=&quot;CONTENT-TYPE&quot; content=&quot;text/html; charset=utf-8&quot;&gt; &lt;title&gt;&lt;/title&gt; &lt;meta name=&quot;GENERATOR&quot; content=&quot;OpenOffice.org 2.4  (Linux)&quot;&gt;  &lt;style type=&quot;text/css&quot;&gt;  &lt;!--   @page { size: 8.5in 11in; margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;     &lt;/meta&gt; &lt;/meta&gt; &lt;/font&gt;&lt;/p&gt; &lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;About FICS&lt;/strong&gt;:&lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;br /&gt; FICS is a small, family owned company (50ish employees).   &lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;Founded in 1983 and headquartered in Dallas, Texas, Financial Industry Computer Systems, Inc.&lt;br /&gt; (FICS&amp;reg;) specializes in providing flexible, comprehensive residential and commercial technology &lt;br /&gt; solutions to the mortgage industry. FICS&apos; solutions are designed around the latest technology, &lt;br /&gt; while incorporating innovative imaging and Web-based capabilities into its full suite of products.&lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;&lt;font&gt;Job Function:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;font face=&quot;Arial&quot;&gt;&lt;br /&gt; &lt;/font&gt;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;Troubleshooting/enhancing/support of existing web applications.&lt;/font&gt;&lt;/li&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;Developing primarily in ColdFusion with more and more Flex/ActionSript as we are moving towards Flex as our main UI technology.&lt;/font&gt;&lt;/li&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;HTML, JavaScript, CSS, minor image manipulation/creation (buttons, etc) &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;At least 2 years ColdFusion experience&lt;/font&gt;&lt;/li&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;Web  design/layout experience with HTML, CSS and JavaScript&lt;/font&gt;&lt;/li&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;ActionScript/Flex  experience is a plus&lt;/font&gt;&lt;/li&gt;     &lt;li&gt;&lt;font face=&quot;Arial&quot;&gt;A  good troubleshooting ability is necessary.&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Please send resumes to aaronjlynch AT gmail DOT com&lt;/p&gt; &lt;p&gt;Thanks!&lt;/p&gt; &lt;p&gt;Aaron&lt;/p&gt;</description><pubDate>Thu, 29 Jan 2009 14:07:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/01/29/Looking-to-hire-ColdFusionFlex-Developer-Addison-TX</guid><category>ColdFusion,Web Development,Flex</category></item><item><title>Scriptalizer.com updates:  yuicompressor 2.4.1 and CSS combination/compression</title><link>http://ajlcom.instantspot.com/blog/2009/01/26/Scriptalizercom-updates--yuicompressor-241-and-CSS-combinationcompression</link><description>&lt;p&gt;Couple quick notes on Scriptalizer.com:&lt;/p&gt; &lt;p&gt;I think it is cool that the app has quietly worked its way up to almost 40,000 KB of trimmed white space/carriage returns/etc (and even earned itself 18 diggs as of this post).&lt;/p&gt; &lt;p&gt;Today I rolled some updates out to the site.&amp;nbsp; Scriptalizer uses the yuicompressor to do its minfication so I updated the jar to the lastest available version (2.4.1).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Now offering CSS combination and compression!&amp;nbsp; &lt;/strong&gt;There is an additional file upload element on the form now.&amp;nbsp; Allowing you to upload multiple javascript and css files for combination and minification/compression.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.scriptalizer.com&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://scriptalizer.com/images/ScriptalizerIcon.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy and&amp;nbsp; &lt;em&gt;PLEASE&lt;/em&gt; let me know if there is any odd behavior.&lt;/p&gt; &lt;p&gt;Thanks for reading!&lt;/p&gt; &lt;p&gt;AJL&lt;/p&gt;</description><pubDate>Mon, 26 Jan 2009 06:15:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/01/26/Scriptalizercom-updates--yuicompressor-241-and-CSS-combinationcompression</guid><category>Internet,Web Development,Javascript,CSS</category></item><item><title>Simple Session Timeout for Flex App</title><link>http://ajlcom.instantspot.com/blog/2009/01/22/Simple-Session-Timeout-for-Flex-App</link><description>&lt;p&gt;If you have ever done any development in Flex you know that there isn&apos;t a good counterpart to ColdFusion&apos;s session management (ie timeout length and such).&amp;nbsp; So, what do you do if you want to time a user out from a secure are of your Flex application?&amp;nbsp;&lt;/p&gt; &lt;p&gt;The application in this case is comprised of many individual view components running through one single main view.&amp;nbsp; So the code in my examples is located in that main view component.&lt;/p&gt; &lt;p&gt;The Timer:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;quot;The Timer class is the interface to Flash Player timers. You can create new Timer objects to   run code on a specified time sequence. Use the &lt;/em&gt;&lt;strong&gt;start()&lt;/strong&gt;&lt;em&gt; method to start a timer.&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Once we have the flash Timer imported we need to create three methods:&amp;nbsp;&lt;/p&gt; &lt;p&gt;One to initialize the timer, one to call when the timer is finished, and one that resets the timer.&amp;nbsp; As you can see in the examples, any time the mouse moves the timer is cleared which has the effect of keeping our &amp;quot;session&amp;quot; alive.&lt;/p&gt; &lt;p&gt;The method initTimer() is called upon creationComplete of that main view component.&amp;nbsp; &lt;strong&gt;creationComplete=&amp;quot;initTimer()&amp;quot;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;public var myTimer:Timer;     private function initTimer():void {      myTimer = new Timer(300000);      myTimer.addEventListener(&amp;quot;timer&amp;quot;,logout);      this.addEventListener(MouseEvent.MOUSE_MOVE, resetTimer);      myTimer.start(); }  private function logout(event:Event):void {     //place code here to run your log out routine     }  private function resetTimer(event:Event):void {      myTimer.reset();      initTimer();  }&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;NOTE:&amp;nbsp; For those wondering, this particular application does not require a session be maintained server side as we reauthenticate each request as it is received.&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2009 13:15:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/01/22/Simple-Session-Timeout-for-Flex-App</guid><category>Web Development,Flex</category></item><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>