<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
	<channel>
	<title>Flog Blog</title>
	<link>http://fojasaur.us/weblog/</link>
	<description />
	<generator>Mango 1.3.1</generator>
	
	
	






















	
		
		

		
		
			
			
						
			
			
			
			
			
		
		
		
	

	
					
		
	
	
	
	
	
	
	

		
	
		
	
 



	
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FojasBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="fojasblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>Playing with YUI</title>
         <description>&lt;p&gt;In an effort to further my JS knowledge, I started playing with a new javascript framework.  I've played with a few in the past, but I don't 
think I'd given &lt;a href="http://developer.yahoo.com/yui/" target="_blank" &gt;YUI&lt;/a&gt; a fair shake.  I've used some the CSS parts of the framework and their
JS compressor is probably the best one I've used.  The one missing element was my lack of real world use of the JS part of it.  
I was recently presented an opportunity to give it a try, so I decided to see what it's all about.&lt;/p&gt;
&lt;p&gt;I decided that the best way for me to figure out if I can get used to using it would be to take some old code and port it to YUI.  
My first test was to see if I could port my 
&lt;a href="http://fojasaur.us/weblog/post.cfm/rethinking-img-onerror" &gt;img onerror handler&lt;/a&gt; into YUI.  The point of the error handler was to replace
broken images on the page with a known working image.  The problem was figuring out how to do it unobtrusively and figuring out when to 
check for image errors.&lt;/p&gt;
&lt;p&gt;When shifting my jQuery thought process to a YUI thought process, I really only needed to learn about a few of the YUI objects.  
Since jQuery has a magic $ object that knows everything, it became a matter of figuring out which YUI objects replace the different
jQuery functions.  The YUI docs made it quite easy.&lt;/p&gt;
&lt;p&gt; Below is the code for my readjusted img error handler. A working example can be seen 
&lt;a href="http://fojasaur.us/weblog/assets/content/072809/test.cfm"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;http://yui.yahooapis.com/2.7.0/build/yahoo/yahoo-min.js&amp;quot;&lt;/span&gt; &amp;gt;&amp;lt;/ script&amp;gt;&lt;br /&gt;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;http://yui.yahooapis.com/2.7.0/build/event/event-min.js&amp;quot;&lt;/span&gt; &amp;gt;&amp;lt;/ script&amp;gt;&lt;br /&gt;&amp;lt; script src=&lt;span class='cc_value'&gt;&amp;quot;http://yui.yahooapis.com/2.7.0/build/selector/selector-min.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/ script&amp;gt;&lt;br /&gt;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &amp;gt;&lt;br /&gt;function errorReplace(arg){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;arg.setAttribute('src', '/weblog/assets/content/041509/images/funny_monkey.jpg');&lt;br /&gt;}&lt;br /&gt;YAHOO.util.Event.on(window, &lt;span class='cc_value'&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;yimages = YAHOO.util.Selector.query('img');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(var imgs in yimages) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var i = yimages[imgs]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if((typeof i.naturalWidth != &lt;span class='cc_value'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; i.naturalWidth == 0 ) || i.readyState == 'uninitialized' ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;errorReplace(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;})&lt;br /&gt;&amp;lt;/ script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So in this case, I just had to learn how to select elements and how to attach events to elements.  
Selecting was handled by the query function of the &lt;a href="http://developer.yahoo.com/yui/selector/" target="_blank" &gt;YAHOO.util.Selector&lt;/a&gt; 
object. "$(object)" simply becomes "YAHOO.util.Selector.query(object)".  &lt;/p&gt;
&lt;p&gt;Event binding was handled by the on function of the &lt;a href="http://developer.yahoo.com/yui/event/" target="_blank" &gt;YAHOO.util.Event&lt;/a&gt; 
object. "$(object).bind(event,function)" simply becomes "YAHOO.util.Event.on(object,event,function)".&lt;/p&gt;
&lt;p&gt;I was quite surprised by how easy the documentation was to use and how quickly I was able to write a few lines of code.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/j0pQcKwqzcY" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/playing-with-yui</link>
         <guid>http://fojasaur.us/weblog/post.cfm/playing-with-yui</guid>
         <category>yui</category><category>javascript</category>
         <pubDate>Tue, 28 Jul 2009 15:59:23 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>cfoutput, what are you doing?</title>
         <description>&lt;p&gt;When Seb Dugan &lt;a href="http://sebduggan.com/posts/cfoutput-cannot-take-a-function-as-its-query" &gt;pointed out in his blog&lt;/a&gt; that cfoutput can only accept the name of a query when looping 
over a variable, it got me thinking about the inner workings of a query based cfoutput.
Is the recordset local to the loop or does it mutate the passed in recordset?  I tried the following to see what would happen.  I'm adding a row to the query with every loop, then adjusting the value of the next row.
I put a maxrows attribute on the query just in case it tries to run infinitely.
&lt;/p&gt;

&lt;p&gt;
	&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfquery name=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT Top 5 0 as id FROM tblname&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfquery&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput maxrows=&lt;span class='cc_value'&gt;&amp;quot;20&amp;quot;&lt;/span&gt; query=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; queryAddRow(getContent) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getContent[ 'id' ][ getContent.currentrow +1 ] = 2200+getContent.RecordCount ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getContent[ 'id' ][ getContent.RecordCount ] = 1100+getContent.RecordCount ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeOutput(&lt;span class='cc_value'&gt;&amp;quot;#getContent.currentrow#:#id#&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;br /&gt;----------------------&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput query=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;#getContent.currentrow#:#id#&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;The output looks like this.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;
1:0
2:2206
3:2207
4:2208
5:2209
----------------------
1:0
2:2206
3:2207
4:2208
5:2209
6:2210
7:1107
8:1108
9:1109
10:1110
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;So the loop definitely changes the query variable, but the maxrows get set before anything happens.  If the query doesn't have enough rows compared to "maxrows" when the loop starts, 
then the maxrows attribute becomes the size of the recordset.  This seems similar to Barney Boisvert's issue with &lt;a href="http://www.barneyb.com/barneyblog/2009/06/17/riddle-me-this-cfloop/"&gt;cfloop&lt;/a&gt;.  
&lt;/p&gt;
&lt;p&gt;But wait, there's more.  To add to my confusion, it appears as though the recordset in the loop isn't really getting mutated.  It all depends on how you try to mutate the recordset.  The following code 
should use a cfquery to delete rows from the record set.&lt;/p&gt;
&lt;p&gt;
	&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput query=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentId = getContent[ 'id' ][ getContent.RecordCount ]  ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeOutput(&lt;span class='cc_value'&gt;&amp;quot;#getContent.currentrow#:#id#&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfquery dbtype=&lt;span class='cc_value'&gt;&amp;quot;query&amp;quot;&lt;/span&gt; name=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT * from getContent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE id &amp;lt;&amp;gt; #currentid#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfquery&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;br /&gt;----------------------&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput query=&lt;span class='cc_value'&gt;&amp;quot;getContent&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;#getContent.currentrow#:#id#&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;  The result looks like this.&lt;/p&gt;
&lt;p&gt;
	&lt;pre&gt;
1:0
1:2206
1:2207
1:2208
1:2209
1:2210
1:1107
1:1108
1:1109
1:1110
----------------------
	&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;So even though the recordset is empty when it leaves the loop, it still has values from inside the loop.  What's even more interesting to me is that the current row is always 1.  I'm not sure what to make of this.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/P50_hvE8ZWQ" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/cfoutput-what-are-you-doing</link>
         <guid>http://fojasaur.us/weblog/post.cfm/cfoutput-what-are-you-doing</guid>
         <category>coldfusion</category>
         <pubDate>Thu, 25 Jun 2009 17:55:08 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Rhino on Railo</title>
         <description>&lt;p&gt;After reading about Barney Boisvert's &lt;a href="http://www.barneyb.com/barneyblog/2009/05/16/cfyourfavoritelanguage-formerly-cfgroovy/"&gt;CFGroovy&lt;/a&gt;,  I was inspired  to try to get &lt;a href="http://www.mozilla.org/rhino/" &gt;Rhino&lt;/a&gt; running on Railo (I actually tried CF8 first, but couldn't get it to do anything useful).  For those that don't know, Rhino is an open source implementation of
JavaScript written in Java.  I've never actually used the Rhino implementation that comes with Java 1.6 or any of the JSR 223 interfaces, so this looked like it could be a fun experiment.&lt;/p&gt;
&lt;p&gt;To start, I downloaded Barney's CFGroovy project from his SVN repository.  The actually CFGroovy jar isn't needed, but the classloader and the taglib are. Once I put the taglib in the appropriate location, 
I was able to get a hold of Rhino by adding lang="js" (or javascript, rhino or ecmascript) to the script tag.&lt;/p&gt;
&lt;p&gt;While that part was easy, the part that I had difficulty figuring out was how to deal with the CF variables in Javascript.  This would have been easier if I could cfdump in JS, but I just used the tra and see method.  First, I made the incorrect assumption that I could use dot notation to access members of
the CF objects.  After I realized that was returning nulls, I tried bracket notation.  That also didn't work.  What I realized is that the objects that I was dealing with weren't actually javascript objects, they were 
still CF (or Java, depending on how you want to look at it) objects.  It seems as though I could only access objects using get/set methods .&lt;/p&gt;
&lt;p&gt;
	&lt;code&gt;&amp;lt;g:script lang=&lt;span class='cc_value'&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_comment'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// assuming that variables.myArray already exists&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var g = variables.get('myArray');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.set(g.size(),{'test':1});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.set(g.size(),[1,&lt;span class='cc_numeric'&gt;2&lt;/span&gt;,&lt;span class='cc_numeric'&gt;3&lt;/span&gt;]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/g:script&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;There was more fun trying to get the JS back into CF.  It seems as though the objects make it back to CF as type "sun.org.mozilla.javascript.internal.NativeObject" for the JS object and
"sun.org.mozilla.javascript.internal.NativeArray" for the array.  I had to do the following trickery just to get the data out of these. The get methods for both types are expecting an 
object of type "sun.org.mozilla.javascript.internal.Scriptable" as the second argument.&lt;/p&gt;
&lt;p&gt;
	&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#variables.myArray[0].get('test',variables.myArray[0])#&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#variables.myArray[1].get(&lt;span class='cc_numeric'&gt;0&lt;/span&gt;,variables.myArray[1])#&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;This didn't seem very fun to me at all.  I think the next step is to take the cfgroovy wrapper and alter it so that the variables getting passed back and forth get converted to JS arrays and objects
in the JS and then back to CF arrays and structs when they return.  I couldn't get any of this to work in CF8 because of an array out of bounds exception in the JS set method, but that's another thing.  
I've already wasted enough time doing this, so I'll save those issues for another day.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/OWc1GPevXjI" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/rhino-on-railo</link>
         <guid>http://fojasaur.us/weblog/post.cfm/rhino-on-railo</guid>
         <category>railo</category><category>coldfusion</category>
         <pubDate>Mon, 18 May 2009 20:50:38 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Goodbye sIFR</title>
         <description>&lt;p&gt;A few weeks ago a colleague of mine pointed me to a relatively new replacement for sIFR, so I thought I would try it out and see how it worked. 
 It's called &lt;a href="http://wiki.github.com/sorccu/cufon" target="_blank"&gt;Cufón&lt;/a&gt; and it seems to work much better than sIFR.  Here are some of the advantages:
 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Flash Needed - Not for the end user and I don't need it to make my fonts.  I just upload a font to their &lt;a href="http://cufon.shoqolate.com/generate/" target="_blank"&gt;generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Less http requests - sIFR makes a request to the server for a Flash piece to replace the text, it does that for every block of text it replaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course it does have it's faults, particularly:
	&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Text is not selectable - At least not in any browser that doesn't call itself IE&lt;/li&gt;
&lt;li&gt;Some missing features - Things like text decoration don't work in IE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I replaced all the h1, h2 and h3 tags on the site with cufón fonts in only a few minutes and so far I think it looks great.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/XdaO-ZpmCX8" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/goodbye-sifr</link>
         <guid>http://fojasaur.us/weblog/post.cfm/goodbye-sifr</guid>
         <category>css</category>
         <pubDate>Fri, 15 May 2009 18:12:42 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>My math should not be trusted</title>
         <description>&lt;p&gt;After reading a blog post on codinghorror.com (http://www.codinghorror.com/blog/archives/001266.html), I thought about the Kember hash script that I wrote a few days ago.  The script I wrote would likely never find the 
identity hash because it makes use of converting an int into a hexidecimal string.  I think that a CF int is just a signed Java Integer, so at most it can only go up to (2^31)-1 or 2,147,483,647.  So in base 16 it would go to
7FFFFFFF, which is 24 digits short of making it to a full md5 hash result.  I didn't write the script to actually try to find the Kember hash, mostly because I don't think it can be found in a reasonable amount of time.  I wrote 
in a very short amount of time that morning, so don't take it seriously.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/pB576T6izYQ" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/my-math-should-not-be-trusted-1</link>
         <guid>http://fojasaur.us/weblog/post.cfm/my-math-should-not-be-trusted-1</guid>
         
         <pubDate>Fri, 15 May 2009 15:27:31 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Coldfusion method initialization</title>
         <description>&lt;p&gt;I was playing around with CF to see if it was possible to have a function change it self after it has been called.  This something that I have done in JS a few times, like so.&lt;/p&gt;
&lt;p&gt;
	&lt;code&gt;var test = function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var a = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;test = function() {&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;return ++a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Doing this allow me to initialize a function, then change the behavior for the next time that it is called.  In the above example,
the function keeps track of a variable locally, but doesn't make it globally exposed to the page.  While trying to do this in CF, I was think of using the idea to build some way of caching variables.  
To get started I just tried creating an method that just creates another object and saves it to be used later.
I realize that I can do the following, but I thought it would be fun to try something different.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;getOtherObjectCached&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;public&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var local = structNew() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif NOT StructKeyExists(variables.instance,'otherobjectcached')&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset local.other = createObject(&lt;span class='cc_value'&gt;&amp;quot;component&amp;quot;&lt;/span&gt;, 'otherobject').init() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cflock name=&lt;span class='cc_value'&gt;&amp;quot;otherobj&amp;quot;&lt;/span&gt; timeout=&lt;span class='cc_value'&gt;&amp;quot;10&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;exclusive&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&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;&lt;span class='cc_cftag'&gt;&amp;lt;cfset StructInsert(variables.instance,'otherobjectcached', local.other,true) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cflock&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn variables.instance['otherobject'] /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;CF doesn't allow functions to be created inside other functions like JS does, so I thought I could trick it by creating another function, 
then replacing the original function with the other function dynamically. Here's what I tried.  The first function is what I want it to do after the first time it is run.  
The second is the function that should initialize the method.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;getOtherObjectAfterSet&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;private&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset variables.instance['otherobject'].Something += 1 /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#variables.instance['otherobject']#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;i came from getOtherObjectAfterSet&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn variables.instance['otherobject']&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;getOtherObject&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;public&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var local = structNew() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset local.other = createObject(&lt;span class='cc_value'&gt;&amp;quot;component&amp;quot;&lt;/span&gt;, 'otherobject').init() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local.other.Something = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local.other.doSomethingComplicated('!!!');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local.other.doSomethingDifferent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cflock name=&lt;span class='cc_value'&gt;&amp;quot;otherobj&amp;quot;&lt;/span&gt; timeout=&lt;span class='cc_value'&gt;&amp;quot;10&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;exclusive&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset StructInsert(variables.instance,'otherobject', local.other,true) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cflock&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset this.getOtherObject = getOtherObjectAfterSet /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#variables.instance['otherobject']#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;i came from getOtherObject&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn variables.instance['otherobject']&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I tried this in Railo and CF8 and it worked.  Not sure when I would actually use this, but it was good to know that I could.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/J3qTCKAhA64" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/coldfusion-method-initialization</link>
         <guid>http://fojasaur.us/weblog/post.cfm/coldfusion-method-initialization</guid>
         <category>coldfusion</category>
         <pubDate>Thu, 14 May 2009 18:33:34 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Railo EQ seems wrong</title>
         <description>&lt;p&gt;It appears as though Railo is doing something wrong.  The following should not return true, but it does in Railo.  Submitting bug...&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;#&lt;span class='cc_value'&gt;&amp;quot;0000000000000000000000000696E433&amp;quot;&lt;/span&gt; eq &lt;span class='cc_value'&gt;&amp;quot;5625627186710640143152E540486175&amp;quot;&lt;/span&gt;#&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/r9z9BDPK78Y" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/railo-eq-seems-wrong</link>
         <guid>http://fojasaur.us/weblog/post.cfm/railo-eq-seems-wrong</guid>
         <category>railo</category>
         <pubDate>Wed, 13 May 2009 17:54:18 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Kember Identity search</title>
         <description>&lt;p&gt;
	After reading about the &lt;a href="http://www.elliottkember.com/kember_identity.html" target="_blank" &gt;Kember identity hash&lt;/a&gt;, I decided to see if I could write something to find it.  My attempt will more than likely
	never find it since it is just starting from 0 and going up until it finds it, but I thought I would give it a try anyway.
&lt;/p&gt;
&lt;p&gt;The basic idea of it is that it makes ajax calls to the server and keeps calling the server until it finds the solution.  It starts at 0, then keeps incrementing.  It would probably be easier to find it by generating random numbers, 
but I was trying to avoid checking the same string twice. I set it up so that I can tell it where to start, how many open http requests it should have and how many tests each http request should make.  
It also has a link to make it stop. Below is the code.  I'm not very proud of it, but I slapped it together very quickly and have had it running all morning.  The file name should be coldfusion-Fojas.cfc&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfcomponent&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;!---&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sort of crappy attempt at finding the Kember Identity Hash&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;displays a page at /coldfusion-Fojas.cfc?&amp;amp;method=displaypage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;uses ajax calls to keep requesting hashes be created til it finds the answer&lt;br /&gt;---&amp;gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;getKemberIdentity&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;remote&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; returntype=&lt;span class='cc_value'&gt;&amp;quot;struct&amp;quot;&lt;/span&gt; returnformat=&lt;span class='cc_value'&gt;&amp;quot;JSON&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;hint=&lt;span class='cc_value'&gt;&amp;quot;I try to find a string that when hashed, will return itself.&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;startFrom&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;numeric&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;0&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;timesToTry&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;numeric&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;1000&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var kemberResult = structNew() /&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var randstr = &lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var hashstr = &lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var i = &lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfsilent&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;#val(arguments.startFrom)#&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;#val(arguments.timesToTry) + val(arguments.startFrom)#&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;i&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset randstr = ucase(FormatBaseN(i,&lt;span class='cc_numeric'&gt;16&lt;/span&gt;))&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset randstr = RepeatString(&lt;span class='cc_value'&gt;&amp;quot;0&amp;quot;&lt;/span&gt;,&lt;span class='cc_numeric'&gt;32&lt;/span&gt;-Len(randstr))&amp;amp;randstr&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset hashstr = hash(randstr, &lt;span class='cc_value'&gt;&amp;quot;MD5&amp;quot;&lt;/span&gt;, &lt;span class='cc_value'&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif randstr.Equals( hashstr)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset kemberResult.str = &lt;span class='cc_value'&gt;&amp;quot;#randstr# = #hashstr# - matched!!!!&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset kemberResult.success = 1 /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn kemberResult /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfsilent&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset kemberResult.str = &lt;span class='cc_value'&gt;&amp;quot;No! (startFrom: #arguments.startFrom# ): #randstr# - #hashstr#&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset kemberResult.success = 0 /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn (kemberResult) /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;successalert&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;remote&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;str&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;string&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#arguments.str#&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;displayPage&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;remote&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;startFrom&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;numeric&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;0&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;timesToTry&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;numeric&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;200000&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfargument name=&lt;span class='cc_value'&gt;&amp;quot;openrequests&amp;quot;&lt;/span&gt; type=&lt;span class='cc_value'&gt;&amp;quot;numeric&amp;quot;&lt;/span&gt; required=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;8&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var local = structNew() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfsavecontent variable=&lt;span class='cc_value'&gt;&amp;quot;local.retVal&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tried=#arguments.timesToTry#, starton=#arguments.startFrom#,keepgoing=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var request = function(divid) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var that = this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.divid = divid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.xhr = window.ActiveXObject ? new ActiveXObject(&lt;span class='cc_value'&gt;&amp;quot;Microsoft.XMLHTTP&amp;quot;&lt;/span&gt;) : new XMLHttpRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.readyChange = function(){&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;if (  that.xhr &amp;amp;&amp;amp; that.xhr.readyState == 4  &amp;amp;&amp;amp; that.xhr.status == 200) {&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;var response = that.xhr.responseText; &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;response = window[&lt;span class='cc_value'&gt;&amp;quot;eval&amp;quot;&lt;/span&gt;](&lt;span class='cc_value'&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + response + &lt;span class='cc_value'&gt;&amp;quot;)&amp;quot;&lt;/span&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;if(response.SUCCESS) {&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;nbsp;&amp;nbsp;&amp;nbsp;window.location = 'coldfusion-Fojas.cfc?method=successalert&amp;amp;success='+response.STR;&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;} else {&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;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(divid).innerHTML = response.STR;&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;nbsp;&amp;nbsp;&amp;nbsp;setTimeout(function(){that.makeRequest(starton, tried)},&lt;span class='cc_numeric'&gt;200&lt;/span&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;nbsp;&amp;nbsp;&amp;nbsp;starton += (&lt;span class='cc_numeric'&gt;1&lt;/span&gt;*tried);&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;}&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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.xhr.onreadystatechange = this.readyChange;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.makeRequest = function(startFrom,timesToTry){&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;if(keepgoing) {&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;this.xhr.open('get','coldfusion-Fojas.cfc?method=getKemberIdentity&amp;amp;startFrom='+startFrom+'&amp;amp;timesToTry='+timesToTry);&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;this.xhr.send(null); &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;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var r = [];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(var i = 1;i&amp;lt;=#arguments.openrequests#;i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r[i] = new request('d'+i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r[i].makeRequest(starton+(tried*(i-1)),tried);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;starton += (#arguments.openrequests#*tried);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;#arguments.openrequests#&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;local.i&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;d#local.i#&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_anchor'&gt;&amp;lt;a href=&lt;span class='cc_value'&gt;&amp;quot;##&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;keepgoing=0;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;stop the madness&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfsavecontent&amp;gt;&lt;/span&gt;#local.retVal#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfcomponent&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/6HsbJWZvbHA" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/kember-identity-search</link>
         <guid>http://fojasaur.us/weblog/post.cfm/kember-identity-search</guid>
         <category>coldfusion</category>
         <pubDate>Wed, 13 May 2009 16:03:43 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Using CF to detect mobile browsers</title>
         <description>&lt;p&gt;Mostly for my reference, I'm writing about a ColdFusion function that can be used to test if a user is browsing with a mobile device.  This function can be adjusted depending on what needs to be done, but it treats iPhones, Android and Opera Mini as regular web browsers.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;isMobileDevice&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var retVal &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif refind(&lt;span class='cc_value'&gt;&amp;quot;/(iphone|ipod|android|opera_mini)/i&amp;quot;&lt;/span&gt;,cgi.HTTP_ACCEPT) &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn retVal = false&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfelseif cgi.http_accept contains &lt;span class='cc_value'&gt;&amp;quot;text/vnd.wap.wml&amp;quot;&lt;/span&gt; or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      cgi.http_accept contains 'application/vnd.wap.xhtml+xml' or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      structKeyExists(cgi,&lt;span class='cc_value'&gt;&amp;quot;HTTP_X_WAP_PROFILE&amp;quot;&lt;/span&gt;) or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      (structKeyExists(cgi,&lt;span class='cc_value'&gt;&amp;quot;HTTP__ACCEPT&amp;quot;&lt;/span&gt;) and refind(&lt;span class='cc_value'&gt;&amp;quot;/wap\.|\.wap/i&amp;quot;&lt;/span&gt;,cgi.HTTP_ACCEPT) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn retVal = true /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn retVal&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/2aSAOe3n4Q4" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/using-cf-to-detect-mobile-browsers</link>
         <guid>http://fojasaur.us/weblog/post.cfm/using-cf-to-detect-mobile-browsers</guid>
         <category>coldfusion</category>
         <pubDate>Mon, 11 May 2009 17:52:42 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Rethinking img onerror</title>
         <description>&lt;p&gt;After reevaluating a previous attempt at &lt;a href="/weblog/post.cfm/the-elusive-img-onerror-event" &gt;&lt;/a&gt;preventing broken images on pages&lt;/a&gt;, I decided on a different solution.  The image should have a readyState if we are using IE and a naturalwidth for other browsers, so I used these to test if the image was there.&lt;/p&gt;
&lt;p&gt;I tested this in IE7, FF3, Chrome 2 and Safari3.  This time I loop through all the images after the window is done loading (not after dom is done).  By waiting until the window is done, I can be sure that all images are done loading.  &lt;/p&gt;
&lt;p&gt;The code can be seen working &lt;a href="/weblog/assets/content/041509/test2.cfm"&gt;here&lt;/a&gt;.
&lt;p&gt;&lt;code&gt;function errorReplace(arg){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(arg).attr('src', 'images/funny_monkey.jpg');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(window).bind('load', function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('img').each(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if((typeof this.naturalWidth != &lt;span class='cc_value'&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; this.naturalWidth == 0 ) || this.readyState == 'uninitialized' ) {&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;errorReplace(this);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/code&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/utSZ-Fg30hw" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/rethinking-img-onerror</link>
         <guid>http://fojasaur.us/weblog/post.cfm/rethinking-img-onerror</guid>
         <category>jquery</category><category>javascript</category>
         <pubDate>Mon, 27 Apr 2009 16:11:38 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Railo allow extending a cfc with a relative path</title>
         <description>&lt;p&gt;While bored, I just ran a quick test in Railo to see if I can can extend a cfc that was sitting in a parent directory and it turns out I can.  I tested this by having a component extend another component using "../" in the extends attribute.&lt;/p&gt;
&lt;p&gt;In the parent object "/ExtendMe.cfc":&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfcomponent name=&lt;span class='cc_value'&gt;&amp;quot;ExtendMe&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;CallMe&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn &lt;span class='cc_value'&gt;&amp;quot;I am Your Father.&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfcomponent&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;In the child object "/child/Object.cfc":&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfcomponent name=&lt;span class='cc_value'&gt;&amp;quot;object&amp;quot;&lt;/span&gt; extends=&lt;span class='cc_value'&gt;&amp;quot;../ExtendMe&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;Test&amp;quot;&lt;/span&gt; access=&lt;span class='cc_value'&gt;&amp;quot;public&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt; returntype=&lt;span class='cc_value'&gt;&amp;quot;any&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn this /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfcomponent&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;Then a simple template to display my results:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset  test = createObject('component','child.Object')&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#test.callme()#&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;This gives me this result.&lt;/p&gt;
&lt;p&gt;&lt;img src="/weblog/assets/content/041609/dump.gif" alt="Dump - I am Your Father."/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/PbS9dOj4Elw" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/railo-allow-extending-a-cfc-with-a-relative-path</link>
         <guid>http://fojasaur.us/weblog/post.cfm/railo-allow-extending-a-cfc-with-a-relative-path</guid>
         <category>railo</category>
         <pubDate>Thu, 16 Apr 2009 15:51:50 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>The elusive img onerror event</title>
         <description>&lt;p&gt;While reading a quickie post from Raymond Camden at InsideRIA about using jQuery to fix broken images (&lt;a href="http://www.insideria.com/2009/03/jquery-quickie---broken-images.html" &gt;http://www.insideria.com/2009/03/jquery-quickie---broken-images.html&lt;/a&gt;), I became a little confused that it actually worked.  It relies on the error event that is fired by an image being intercepted by jQuery to know when to replace a broken image.  The problem that I was seeing is that if the event gets attached when the DOM is ready, wouldn't it be possible for the image to fire its error event before the DOM is ready?
&lt;/p&gt;
&lt;p&gt;I tested this by creating the following file.  I used a sleeping thread to cause the page load to take longer than normal.  The first broken image should finish its request before the page has been completely downloaded.  I tried replacing the images with an inline script as well because I couldn't think of any other way of fixing it.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Image Test&lt;span class='cc_normaltag'&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt; script src=&lt;span class='cc_value'&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt; script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;function errorReplace(arg){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(arg).attr('src', 'images/funny_monkey.jpg');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('img').error(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;errorReplace(this);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This is some content. Here is the first image...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/monkeyvk.gif&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Another paragraph, first broken image...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/test-bad.jpg&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Another paragraph, another broken image... this time replace with inline error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/test-badstill.jpg&amp;quot;&lt;/span&gt; onerror=&lt;span class='cc_value'&gt;&amp;quot;errorReplace(this)&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='comment'&gt;&amp;lt;!--- send this to the browser, then wait around for a bit ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfflush&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset thread = CreateObject(&lt;span class='cc_value'&gt;&amp;quot;java&amp;quot;&lt;/span&gt;, &lt;span class='cc_value'&gt;&amp;quot;java.lang.Thread&amp;quot;&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset thread.sleep(&lt;span class='cc_numeric'&gt;500&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Good image. After a delay&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/monkeyvk1.gif&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Another paragraph, another bad image.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/test-badagain.jpg&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Last paragraph, another bad image. inline replace&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img src=&lt;span class='cc_value'&gt;&amp;quot;images/test-badagainstill.jpg&amp;quot;&lt;/span&gt;  onerror=&lt;span class='cc_value'&gt;&amp;quot;errorReplace(this)&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;You can see the results &lt;a href="/weblog/assets/content/041509/test.cfm" &gt;here, http://www.fojasaur.us/weblog/assets/content/041509/test.cfm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see the first broken image never gets replaced because it has already fired its error before jQuery gets a hold of it.  In addition to the jQuery way not working if the error happens before DOM load, it also doesn't work in IE at all.  It appears as though using the inline onerror is the only way to get it to work consistently.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/84bjezp7GRw" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/the-elusive-img-onerror-event</link>
         <guid>http://fojasaur.us/weblog/post.cfm/the-elusive-img-onerror-event</guid>
         <category>jquery</category><category>javascript</category>
         <pubDate>Wed, 15 Apr 2009 14:14:15 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Dont put all scripts at the bottom</title>
         <description>&lt;p&gt;While looking at Hal Helm's post on &lt;a href="http://www.halhelms.com/blog/index.cfm/2009/4/8/Learning-jQuery-Day-5--Enhanced-Tabs"&gt;learning jQuery&lt;/a&gt;, I though about how the "&lt;a href="http://developer.yahoo.com/performance/rules.html" &gt;Yahoo! Best practices for Speeding Up Your Web Site&lt;/a&gt;" may be making developers do things without thinking about it.  I'm guilty of thinking that putting all the scripts at the bottom makes your website faster, but then I ran into a case where it made it seem slower.&lt;/p&gt;
&lt;p&gt;The case where the issue occurred was when I was using &lt;a href="http://code.google.com/p/swfobject/"&gt;swfobject&lt;/a&gt; to replace an image on the page with a swf.  When the scripts were at the bottom, swfobject wouldn't replace the image until the js at the bottom of the page told it to do so.  When it was at the top, the script blocked the page load, but as soon as the swf was inserted into the page before the image could be seen.&lt;/p&gt;
&lt;p&gt;Here's what I mean. I created the following test files to prove my point.  The first file is the js that tells swf object what to do.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;// loader.js&lt;br /&gt;(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;swfobject.embedSWF(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_value'&gt;&amp;quot;http://www.youtube.com/v/h5X4TSbGreA&amp;amp;hl=en&amp;amp;fs=1&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_value'&gt;&amp;quot;flash&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_value'&gt;&amp;quot;560&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_value'&gt;&amp;quot;340&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_value'&gt;&amp;quot;8.0.0&amp;quot;&lt;/span&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;null, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{wmode: &lt;span class='cc_value'&gt;&amp;quot;transparent&amp;quot;&lt;/span&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;})();&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;I created a cfm file to simulate a long load time.  This will be included as a js include before the swf object config.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='comment'&gt;&amp;lt;!--- blocker.cfm ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset thread = CreateObject(&lt;span class='cc_value'&gt;&amp;quot;java&amp;quot;&lt;/span&gt;, &lt;span class='cc_value'&gt;&amp;quot;java.lang.Thread&amp;quot;&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset thread.sleep(&lt;span class='cc_numeric'&gt;50&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;var a=1&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Then I have 2 test pages, one with the scripts at the top, the other with the scripts at the bottom&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;!DOCTYPE html PUBLIC &lt;span class='cc_value'&gt;&amp;quot;&lt;span class='cc_comment'&gt;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span class='cc_value'&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='comment'&gt;&amp;lt;!-- index.html  --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;html xmlns=&lt;span class='cc_value'&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Home Page&lt;span class='cc_normaltag'&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I have scripts at the bottom&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;wrapper&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;a name=&lt;span class='cc_value'&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&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;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;flash&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img id=&lt;span class='cc_value'&gt;&amp;quot;alt-img&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;holder.jpg&amp;quot;&lt;/span&gt; alt=&lt;span class='cc_value'&gt;&amp;quot;Home Flash&amp;quot;&lt;/span&gt; style=&lt;span class='cc_value'&gt;&amp;quot;height:340px;width:560px;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;swfobject.js&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;blocker.cfm&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;loader.js&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;!DOCTYPE html PUBLIC &lt;span class='cc_value'&gt;&amp;quot;&lt;span class='cc_comment'&gt;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span class='cc_value'&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='comment'&gt;&amp;lt;!-- index2.html  --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;html xmlns=&lt;span class='cc_value'&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Home Page&lt;span class='cc_normaltag'&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;swfobject.js&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;blocker.cfm&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt; script type=&lt;span class='cc_value'&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;loader.js&amp;quot;&lt;/span&gt; &amp;gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I have scripts at the top&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;wrapper&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;a name=&lt;span class='cc_value'&gt;&amp;quot;top&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&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;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;flash&amp;quot;&lt;/span&gt; &amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_image'&gt;&amp;lt;img id=&lt;span class='cc_value'&gt;&amp;quot;alt-img&amp;quot;&lt;/span&gt; src=&lt;span class='cc_value'&gt;&amp;quot;holder.jpg&amp;quot;&lt;/span&gt; alt=&lt;span class='cc_value'&gt;&amp;quot;Home Flash&amp;quot;&lt;/span&gt; style=&lt;span class='cc_value'&gt;&amp;quot;height:340px;width:560px;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;You can see it all slapped together &lt;a href="/weblog/assets/content/040909/index.html"&gt;here (scripts at bottom)&lt;/a&gt; and &lt;a href="/weblog/assets/content/040909/index2.html"&gt;here (scripts at top)&lt;/a&gt;.  While the page appears to load slower for scripts on top page, the user doesn't get the placeholder image displayed.  Since the place holder is there for users without JS enabled, it could get confusing if they see the placeholder, then get the real thing a little bit later.  Some may have the opinion that it's fine if the image loads, but it just bothers me.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/O5zBUHj7Tgc" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/dont-put-all-scripts-at-the-bottom</link>
         <guid>http://fojasaur.us/weblog/post.cfm/dont-put-all-scripts-at-the-bottom</guid>
         <category>frontend performance</category><category>javascript</category>
         <pubDate>Thu, 09 Apr 2009 16:09:28 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Coldfusion Implicit Structs are confusing</title>
         <description>&lt;p&gt;While trying to comprehend why CF allows stupid code like the code found here in &lt;a href="http://www.bennadel.com/blog/1556-Ability-To-Leverage-ColdFusion-Bug-Will-Mean-Errors-Later.htm"&gt;Ben Nadel's Post&lt;/a&gt;, I realized that I could probably make CF do even dumber things.  There is definitely something screwy with the way that coldfusion creats structs.  I slapped to gether the following code to see what was up.  The first array is incrementing a variable on the left side, this is where the badness happens.&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr = arrayNew(&lt;span class='cc_numeric'&gt;1&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset i=arraylen(arr)+1&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;3&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;j&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr[ i++ ] = {test=i}&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;i = #i#&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#arr#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;with implicit struct, increment on left side&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr = arrayNew(&lt;span class='cc_numeric'&gt;1&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset i=arraylen(arr)+1&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;3&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;j&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr[ i ] = {test=i++}&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;i = #i#&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#arr#&amp;quot;&lt;/span&gt; label=&lt;span class='cc_value'&gt;&amp;quot;with implicit struct, increment on right side&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr = arrayNew(&lt;span class='cc_numeric'&gt;1&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset i=arraylen(arr)+1&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfloop from=&lt;span class='cc_value'&gt;&amp;quot;1&amp;quot;&lt;/span&gt; to=&lt;span class='cc_value'&gt;&amp;quot;3&amp;quot;&lt;/span&gt; index=&lt;span class='cc_value'&gt;&amp;quot;j&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset arr[ i++ ] = i&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;i = #i#&lt;span class='cc_cftag'&gt;&amp;lt;/cfoutput&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfloop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfdump var=&lt;span class='cc_value'&gt;&amp;quot;#arr#&amp;quot;&lt;/span&gt;  label=&lt;span class='cc_value'&gt;&amp;quot;no implicit structs&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfabort&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Oddly these are the results.&lt;/p&gt;
&lt;p&gt;&lt;img src="/weblog/assets/content/040709/arrayjunk.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Not sure what that code compiles to, but it seems as though the i on the left side is local to that cfset somehow.  Railo gets the correct results below,&lt;/p&gt;
&lt;p&gt;&lt;img src="/weblog/assets/content/040709/arrayjunk-railo.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/tfy9Co7najM" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/coldfusion-implicit-structs-are-confusing</link>
         <guid>http://fojasaur.us/weblog/post.cfm/coldfusion-implicit-structs-are-confusing</guid>
         <category>coldfusion</category>
         <pubDate>Tue, 07 Apr 2009 18:39:40 GMT</pubDate>
      </item>






















    
   
		
      <item>
         <title>Mango Blog and CFFormProtect again</title>
         <description>&lt;p&gt;It has been brought to my attention by &lt;a href="http://www.visual28.com"&gt;Mark Aplet&lt;/a&gt; that there is a baseplugin.cfc that makes plugin development easier.  In my last post (&lt;a href="/weblog/post.cfm/mangoblog-and-cfformprotect"&gt;http://fojasaur.us/weblog/post.cfm/mangoblog-and-cfformprotect&lt;/a&gt;), I put the cfformprotect files in the root directory.  I used the getAssetPath() function from the baseplugin so that I could put the cfformprotect files where ever I want.  There is one minor change that I made to the cfformprotect files.  CFFormProtect takes a path at the beginning of the cffp.cfm file, so I changed the cfset to a cfparam.  Line 3 should now look like this:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfparam name=&lt;span class='cc_value'&gt;&amp;quot;cffpPath&amp;quot;&lt;/span&gt; default=&lt;span class='cc_value'&gt;&amp;quot;/cfformprotect&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That makes it so that I can set a file path before I include cfformprotect.&lt;/p&gt;
&lt;p&gt;The installation is the same, except now you need to put cfformprotect in the /assets/plugin folder.  This makes it easier if you do not have access to the webroot.&lt;/p&gt;
&lt;p&gt;&lt;a href="/weblog/assets/cfformprotect-plugin-v2.zip" target="_blank"&gt;Download CFFormProtect Plugin&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/FojasBlog/~4/cF4ljcC9SLo" height="1" width="1"/&gt;</description>
         <link>http://fojasaur.us/weblog/post.cfm/mango-blog-and-cfformprotect-again</link>
         <guid>http://fojasaur.us/weblog/post.cfm/mango-blog-and-cfformprotect-again</guid>
         <category>coldfusion</category><category>mango blog</category>
         <pubDate>Thu, 02 Apr 2009 21:26:05 GMT</pubDate>
      </item>






















    
   
   


	
   </channel>
</rss>

