<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
	<title>FusionGrokker</title>
	<link>http://fusiongrokker.com/</link>
	<description>A blog about ColdFusion, Rich Internet Applications, and life as a developer.</description>
	<generator>Mango 1.2.2</generator>
	
	
		
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NerdFusion" type="application/rss+xml" /><item>
         <title>Popular Posts Pod Plugin for Mango</title>
         <description>&lt;p&gt;I've created a plugin for Mango Blog that will list your N most popular (most commented) posts in a pod, at the &lt;a href="http://www.mangoblog.org/forums/messages.cfm?threadid=6E70F6D7-3048-2A53-7082C71277FAF34A"&gt;request&lt;/a&gt; of &lt;a href="http://www.angry-fly.com/"&gt;Russ Johnson&lt;/a&gt;. I've been meaning to figure out how to make custom pods in &lt;a href="http://mangoblog.org"&gt;Mango&lt;/a&gt;, so it seemed like a good place to dive in.&lt;/p&gt;
&lt;p&gt;The plugin seems to work fine for me in my development site and on another Mango blog I have (not in use here on FusionGrokker &amp;#8211; my theme isn't pod enabled), but I've been told by a friend who tried it that he had trouble with it and didn't see the pod show up. Everyone is short on time these days, so I've decided to throw this out to the community and see if anyone can find anything wrong with it. As far as I can tell, it should work fine, and generally I would just post it and call it done&amp;#8230; but with the only report I've gotten back so far being negative, I'd like some more feedback.&lt;/p&gt;
&lt;p&gt;&lt;a title="Download Mango Popular Posts Pod Plugin" href="http://mangopopular.riaforge.org/index.cfm?event=action.download" target="_blank"&gt;&lt;img src="http://mangopopular.riaforge.org/images/downloadproject.gif" alt="Download Mango Popular Posts Pod Plugin" width="167" height="27" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some things to do to find issues (if there are any).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is your Mango installation up to date? You should be at version 1.2.2, at least.&lt;/li&gt;
&lt;li&gt;Is your theme pod-enabled? It must be. If you can view the "pod manager" section in admin and it doesn't say that your theme &lt;em&gt;isn't&lt;/em&gt; pod enabled, then it is.&lt;/li&gt;
&lt;li&gt;Did you correctly spell the Pod ID when you added it in Pod Manager? ("Popular Posts" the space is required, but the text is case-insensitive)&lt;/li&gt;
&lt;li&gt;Make sure no errors or warnings are captured by Mango when activating the plugin or viewing your blog. To check this:
&lt;ul&gt;
&lt;li&gt;De-activate the plugin, if it's active&lt;/li&gt;
&lt;li&gt;Delete these files, if they exist&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;/components/utilities/logs/error.log.html&lt;/li&gt;
&lt;li&gt;/components/utilities/logs/warning.log.html&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Activate the plugin; &lt;em&gt;check for existence of error log or warning log&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Configure; &lt;em&gt;check for existence of error log or warning log&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;View your blog homepage, pod should be displayed; &lt;em&gt;check for existence of error log or warning log&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like I said, it works fine for me. Hopefully it will work for you too. If any of the above steps cause the error and/or warning logs to come back for you, please feel free to email them to me. My email address is in the License.txt included in the zip, as well as the license blurb at the top of all of the other included files.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/449727899" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/449727899/popular-posts-pod-plugin-for-mango</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/popular-posts-pod-plugin-for-mango</guid>
         <category>My projects</category><category>Mango</category>
         <pubDate>Tue, 11 Nov 2008 17:01:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/popular-posts-pod-plugin-for-mango</feedburner:origLink></item>	
      <item>
         <title>Easily Cache the Return Value of Any Function</title>
         <description>&lt;p&gt;Work in web development long enough, and you'll run into caching. When done appropriately, it can be a real life saver. In CFML, we have several caching tools at our disposal.&lt;/p&gt;
&lt;p&gt;The built in &lt;a href="http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&amp;amp;file=00000222.htm"&gt;cfcache&lt;/a&gt; function will cache an entire page, and there are a bunch of projects on &lt;a href="http://www.riaforge.org/"&gt;RIA Forge&lt;/a&gt; (search for "cache") that deal with caching of whole pages, partial pages, and specific data; and use various methods from memcached to underlying java caching. And of course, you can always roll your own cache using a persistent scope (application, session, client, or cookie) and some date comparison.&lt;/p&gt;
&lt;p&gt;After about the 100th time of rolling my own custom caching, I decided it was time to wrap it up in a nice little UDF.&lt;/p&gt;
&lt;p&gt;Before I show you the code, here's an example of how to use it:&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;currentTime&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class='cc_cftag'&gt;&amp;lt;cfreturn &lt;span class='cc_value'&gt;&amp;quot;The current time is #timeformat(now())#&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;quot;&lt;/span&gt;/&amp;gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cffunction&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#cacheCallback(&lt;span class='cc_value'&gt;&amp;quot;myApp.CurrentTime&amp;quot;&lt;/span&gt;, CreateTimeSpan(&lt;span class='cc_numeric'&gt;0&lt;/span&gt;,&lt;span class='cc_numeric'&gt;0&lt;/span&gt;,&lt;span class='cc_numeric'&gt;2&lt;/span&gt;,&lt;span class='cc_numeric'&gt;0&lt;/span&gt;), variables.currentTime)#&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pretty simple, right? The first argument is a unique string that's used as the cache key, to identify which bit of data we're caching. The second is how long the cache is good for, and the third argument is a reference to a simple function that displays the current time.&lt;/p&gt;
&lt;p&gt;Notice that the 3rd argument is not a string containing the name of the function to be executed, but actually a reference to the function itself. My &lt;strong&gt;cacheCallback&lt;/strong&gt; function will check to see if the cache is expired, and either return the cached value or re-run the function being passed in and return the result, as appropriate.&lt;/p&gt;
&lt;p&gt;A fourth and optional (boolean) parameter will force a cache refresh if true.&lt;/p&gt;
&lt;p&gt;This has already proven useful, as a fellow Mango Blog plugin developer is using it to cache API results from services like Twitter and Flickr in some plugins he'll be releasing soon.&lt;/p&gt;
&lt;p&gt;Here's the code for the cacheCallback function:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;function cacheCallback(cacheKey, duration, callback){&lt;br /&gt;   var data = &lt;span class='cc_value'&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;  &lt;span class='cc_comment'&gt; //optional argument: forceRefresh&lt;/span&gt;&lt;br /&gt;   if (arrayLen(arguments) eq&lt;span class='cc_numeric'&gt; 4&lt;/span&gt;){&lt;br /&gt;      arguments.forceRefresh=arguments[4];&lt;br /&gt;   }else{&lt;br /&gt;      arguments.forceRefresh=false;&lt;br /&gt;   }&lt;br /&gt;  &lt;span class='cc_comment'&gt; //clean cachekey of periods that will cause errors&lt;/span&gt;&lt;br /&gt;   arguments.cacheKey = replace(arguments.cacheKey, '.', '_', 'ALL');&lt;br /&gt;  &lt;span class='cc_comment'&gt; //ensure cache structure is setup&lt;/span&gt;&lt;br /&gt;   if (not structKeyExists(application, &lt;span class='cc_value'&gt;&amp;quot;CCBCache&amp;quot;&lt;/span&gt;)){&lt;br /&gt;      application.CCBCache = StructNew();&lt;br /&gt;   }&lt;br /&gt;   if (not structKeyExists(application.CCBCache, arguments.cacheKey)){&lt;br /&gt;      application.CCBCache[arguments.cacheKey] = StructNew();&lt;br /&gt;   }&lt;br /&gt;   if (not structKeyExists(application.CCBCache[arguments.cacheKey], &lt;span class='cc_value'&gt;&amp;quot;timeout&amp;quot;&lt;/span&gt;)){&lt;br /&gt;      application.CCBCache[arguments.cacheKey].timeout = dateAdd('yyyy',-10,now());&lt;br /&gt;   }&lt;br /&gt;   if (not structKeyExists(application.CCBCache[arguments.cacheKey], &lt;span class='cc_value'&gt;&amp;quot;data&amp;quot;&lt;/span&gt;)){&lt;br /&gt;      application.CCBCache[arguments.cacheKey].data = '';&lt;br /&gt;   }&lt;br /&gt;  &lt;span class='cc_comment'&gt; //update cache if expired&lt;/span&gt;&lt;br /&gt;   if (arguments.forceRefresh&lt;br /&gt;      or&lt;br /&gt;      dateCompare(now(), application.CCBCache[arguments.cacheKey].timeout) eq&lt;span class='cc_numeric'&gt; 1&lt;/span&gt;){&lt;br /&gt;      data = arguments.callback();&lt;br /&gt;      application.CCBCache[arguments.cacheKey].data = data;&lt;br /&gt;      application.CCBCache[arguments.cacheKey].timeout = arguments.duration;&lt;br /&gt;   }&lt;br /&gt;   return application.CCBCache[arguments.cacheKey].data;&lt;br /&gt;}&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfscript&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I've submitted this to CFLib, so hopefully it will be approved soon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I tried for a while to figure out a way to pass arguments into the callback function, but never came up with anything. When I added a callbackArgs argument and passed that in as an argumentCollection to the callback function, CF threw an error telling me that I couldn't use named arguments in this case. I also tried to use &lt;a href="http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&amp;amp;file=00000281.htm"&gt;CFInvoke&lt;/a&gt;, but that required passing in a string containing the name of the function instead of a reference to it, which while it would actually work with some massaging, wouldn't work as well in an Object Oriented architecture where passing objects (like function references) as arguments is common practice.&lt;/p&gt;
&lt;p&gt;So for now, your callback functions must run without any arguments. If anyone has any other ideas for how to pass in arguments, I'm all ears.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/420488207" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/420488207/easily-cache-the-return-value-of-any-function</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/easily-cache-the-return-value-of-any-function</guid>
         <category>ColdFusion</category>
         <pubDate>Tue, 14 Oct 2008 12:00:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/easily-cache-the-return-value-of-any-function</feedburner:origLink></item>	
      <item>
         <title>New Themes for Mango Blogs</title>
         <description>&lt;p&gt;&lt;a href="http://www.mangoblog.org"&gt;Mango Blog&lt;/a&gt; comes with some great themes, and with Mango's awesome custom tag access to data, it's super simple to create your own or modify an existing one to suit your tastes. But not everyone is a designer or has time to give it a shot. My buddy &lt;a href="http://www.visual28.com/"&gt;Mark&lt;/a&gt; has created &lt;a href="http://www.mangowear.com/"&gt;a new site devoted to Mango themes called &lt;span style="font-weight: bold;"&gt;MangoWear&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are both free and "premium" (paid) themes, but judging by his portfolio and free themes, I would say that they are definitely worth the cost if you don't want to do the work yourself.&lt;/p&gt;
&lt;p&gt;So far there are only a couple of themes available, but it should be growing all the time. &lt;a href="http://www.mangowear.com/"&gt;Go check it out&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/419513770" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/419513770/new-themes-for-mango-blogs</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/new-themes-for-mango-blogs</guid>
         <category>Mango</category>
         <pubDate>Mon, 13 Oct 2008 13:13:44 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/new-themes-for-mango-blogs</feedburner:origLink></item>	
      <item>
         <title>HTML/CSS Tip: Specifying Multiple Classes</title>
         <description>&lt;p&gt;Since CFML developers are essentially very specialized web developers, I feel that it's important to continually learn and improve my skills not only with CFML, but also with HTML and CSS. Here's a trick I picked up earlier this year that I think could benefit &lt;em&gt;a lot&lt;/em&gt; of people.&lt;/p&gt;
&lt;p&gt;The beauty of CSS is that you can write simple, reusable rules that can be applied throughout your site to provide a consistent look and feel without setting individual display properties on every object on the page. You already knew that.&lt;/p&gt;
&lt;p&gt;But let's say that you want all of your site's button elements to have the same overall style: a specific font, a background and border color, and maybe a set of color changes for hover (not displayed in IE). But on certain pages, you want all buttons to have a fixed width so that their edges line up when stacked vertically, and on other pages you want widths to be automatic so that you can fit more in a single horizontal row. This is a great case for multiple classes.&lt;/p&gt;
&lt;p&gt;Take these two HTML samples (from different pages) for example. We'll start with our set of vertically stacked buttons:&lt;/p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;buttons&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doStuff1();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&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_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doStuff2();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;2&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&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_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doStuff3();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;3&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;And now our single row of horizontal buttons:&lt;/p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;div id=&lt;span class='cc_value'&gt;&amp;quot;buttons&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doFoo();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Foo&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doBar();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Bar&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard&amp;quot;&lt;/span&gt; onclick=&lt;span class='cc_value'&gt;&amp;quot;doFooBar();&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Foo &amp;amp; Bar&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;Let's make them flat, with a light shade of gray for their background, and a darker shade of gray for their border. Add some font styling and a hover style, and they start to look pretty decent:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;button.standard{&lt;br /&gt;  background-color: #eee;&lt;br /&gt;  border: 1px solid #bbb;&lt;br /&gt;  text-align: center;&lt;br /&gt;  color: #666;&lt;br /&gt;  font-family: Tahoma, Verdana, Helvetica;&lt;br /&gt;  font-weight: bold;&lt;br /&gt;}&lt;br /&gt;button.standard:hover{&lt;br /&gt;  background-color: #935232;&lt;br /&gt;  color: #fff;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, here are the two classes that we'll use to specify widths:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;button.autoW{&lt;br /&gt;  width: auto;&lt;br /&gt;}&lt;br /&gt;button.fixedW{&lt;br /&gt;  width: 200px;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To apply these size style classes without losing our other styles, we can add them to the class attribute, as if it were a space-delimited list, like so:&lt;/p&gt;
&lt;code&gt;&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;button class=&lt;span class='cc_value'&gt;&amp;quot;standard fixedW&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;...&lt;span class='cc_normaltag'&gt;&lt;span class='cc_formtag'&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;Now, we can have consistent color &amp;amp; hover styles for our site, and be able to specify either a fixed or automatic width for it. Using this method, if you decide later that you want your button hover color to be something different, you only have to change it in one place.&lt;/p&gt;
&lt;p&gt;I've tested this with IE6 and 7, Safari, and Firefox 1-3. I presume Opera and other modern browsers also support this functionality.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/412960515" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/412960515/html-css-tip-specify-multiple-classes</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/html-css-tip-specify-multiple-classes</guid>
         <category>HTML/CSS</category>
         <pubDate>Mon, 06 Oct 2008 13:14:12 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/html-css-tip-specify-multiple-classes</feedburner:origLink></item>	
      <item>
         <title>Announcing my Twitter Bot: TwitMeBack</title>
         <description>&lt;p&gt;Over a few evenings last week and over the weekend I wrote a twitter bot. It's not a client or a mashup. It simply looks for you to say certain things and replies later. It's basically a glorified alarm clock &amp;#8212; one that you can set and receive via text message (if you have twitter setup for mobile updates).&lt;/p&gt;
&lt;p&gt;The syntax is pretty simple:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@twitmeback in 15 time to make the donuts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@twitmeback in 1:45 check parking meter&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can specify the duration until you're reminded in either [hours]:[minutes] or just in a count of minutes.&lt;/p&gt;
&lt;p&gt;Where I think this really gets useful is that it can do direct messages, too. Personally I prefer to keep mobile updates to directs only, so if I want a text message reminder, it needs to be in the form of a direct message. The bot will automatically follow you back if you follow it (it checks every half hour). Then, you can set reminders via direct message, like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;d twitmeback in 30 don't forget to submit your time sheet&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;d twitmeback in 4:00 lunch time!&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If your reminder is received via DM, it will remind you via DM. This way, your reminders can be totally private (if that's what you want), or work totally from text message.&lt;/p&gt;
&lt;p&gt;Lastly, you can also specify a DM reminder by starting your message with "d", like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@twitmeback d in 90 is the pizza here yet?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now go forth, and be reminded.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/406239749" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/406239749/announcing-my-twitter-bot-twitmeback</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/announcing-my-twitter-bot-twitmeback</guid>
         <category>My projects</category>
         <pubDate>Sun, 28 Sep 2008 21:05:25 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/announcing-my-twitter-bot-twitmeback</feedburner:origLink></item>	
      <item>
         <title>Windows Tip: No to All</title>
         <description>&lt;p&gt;Everyone agrees that Microsoft is not the really best when it comes to usability, right?&lt;/p&gt;
&lt;p&gt;We've probably all looked at this dialogue at some point during our lives and said, "How about a No to All button, Microsoft?"&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content//no-to-all.png" alt="No To All, where are you?" width="426" height="254" /&gt;&lt;/p&gt;
&lt;p&gt;But did you know it's possible? Hold the shift key while you click the "No" button, and Windows will act as if there were a "No to All" button and you clicked it.&lt;/p&gt;
&lt;p&gt;You're welcome.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/398072426" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/398072426/windows-tip-no-to-all</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/windows-tip-no-to-all</guid>
         <category>Misc</category>
         <pubDate>Sat, 20 Sep 2008 12:15:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/windows-tip-no-to-all</feedburner:origLink></item>	
      <item>
         <title>Ask a Grokker: Why can't I activate an inactive Plugin in Mango?</title>
         <description>&lt;p&gt;&lt;span style="font-style: italic;"&gt;Hey, everyone else is doing it. Why not me?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Mark asks,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have been getting a lot of comment spam on one of my mango installs. I took a look and the captcha is not showing up anymore. The plug in's page says it's deactivated, however trying to activate it says it's already active? Have you see this before?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In fact, I &lt;span style="font-style: italic;"&gt;have &lt;/span&gt;seen this before. I'm not sure what causes it, but what happens is somehow one of Mango's preferences files gets out of sync. Luckily, it's fairly easy to fix.&lt;/p&gt;
&lt;p&gt;Open up the file &lt;span style="font-weight: bold;"&gt;pluginprefs.cfm&lt;/span&gt;, which should be in the root of your Mango install. Look (or search) for:&lt;/p&gt;
&lt;code&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;userPlugins&amp;quot;&lt;/span&gt; ...&lt;/code&gt;
&lt;p&gt;&amp;#8230;and take a look at the value. There, you'll find the plugin listed that you're having difficulty activating. Remove it from the list, save the file, and try again to activate the plugin. In this case, the value to remove is "LylaCaptcha", as this is the plugin that can't be activated.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/393192384" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/393192384/ask-a-grokker-why-can-t-i-activate-x-inactive-plugin-in-mango</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/ask-a-grokker-why-can-t-i-activate-x-inactive-plugin-in-mango</guid>
         <category>Ask a Grokker</category><category>Mango</category>
         <pubDate>Mon, 15 Sep 2008 13:00:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/ask-a-grokker-why-can-t-i-activate-x-inactive-plugin-in-mango</feedburner:origLink></item>	
      <item>
         <title>ColdSpring 1.2 released, website updated</title>
         <description>&lt;p&gt;Along with the long awaited &lt;a href="http://www.coldspringframework.org/index.cfm/go/code"&gt;1.2 release of ColdSpring&lt;/a&gt;, the worlds best CFC IoC/AOP framework has a &lt;a href="http://www.coldspringframework.org/"&gt;brand spanking new website&lt;/a&gt;, which looks great; and includes a total overhaul of the &lt;a href="http://www.coldspringframework.org/coldspring/examples/quickstart/"&gt;online documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Congratulations to Chris Scott &amp;#8212; manager of the &lt;a href="http://phillycfug.org/"&gt;Philadelphia CFUG&lt;/a&gt;, and project lead for ColdSpring &amp;#8212; and the rest of the ColdSpring team. Looks like a job well done!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/390710494" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/390710494/coldspring-1-2-released-website-updated</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/coldspring-1-2-released-website-updated</guid>
         <category>Frameworks</category>
         <pubDate>Fri, 12 Sep 2008 14:19:43 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/coldspring-1-2-released-website-updated</feedburner:origLink></item>	
      <item>
         <title>Related Entries plugin for Mango Blog</title>
         <description>&lt;p&gt;This plugin has been a long time in the making. It's something I knew from the outset that I would want in Mango, but after getting my feet wet by writing &lt;a href="/page/projects"&gt;a few other small plugins&lt;/a&gt;, I knew I could do it. I made it as simple as I could, but there are still a couple of things you will need to know; one of which is that you might need to modify your theme to broadcast a new event in a couple of places. This new event is going to be a part of future versions of Mango, so there isn't any worry about future-compatability and worries when upgrading.&lt;/p&gt;
&lt;p&gt;First of all, though &lt;strong&gt;you need a small update to the core of Mango&lt;/strong&gt;. &lt;em&gt;Even if you've got the latest version of Mango (1.1)!&lt;/em&gt; Laura &lt;a href="http://www.mangoblog.org/docs/about/plugins/plugin-ideas#comment-B46AC799-3048-2A53-70CE292C75CA981B"&gt;posted a comment on the plugin ideas page&lt;/a&gt; with a link to the update zip file, and an explanation that it included a new plugin (home page chooser), some core modifications that were needed to support that plugin, and most importantly, some bug fixes &amp;#8212; one of which is necessary for back-linking of related entries to work correctly. So before you do anything else, make sure you &lt;em&gt;grab&lt;/em&gt; and &lt;em&gt;install&lt;/em&gt; &lt;a href="http://www.mangoblog.org/docs/about/plugins/plugin-ideas#comment-B46AC799-3048-2A53-70CE292C75CA981B"&gt;that update&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Once you've got the Mango update installed, go ahead and &lt;strong&gt;&lt;a href="/share/RelatedEntries-0.1.zip"&gt;download my Related Entries plugin&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now about that event. It's really simple to add. Open up your theme's index.cfm and post.cfm files (and archives, and other places you may want to show related entries&amp;#8230;). The code to broadcast the event is really simple:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;mango:Event name=&lt;span class='cc_value'&gt;&amp;quot;beforePostContentEnd&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Simple, right? And where do you put it? Anywhere, really&amp;#8230; &lt;em&gt;within reason&lt;/em&gt;. It uses contextual information to look up related entries data for the current post, so you must broadcast it inside of a &lt;strong&gt;&lt;/strong&gt; (custom tag) block. So for example, here's the relevant information from my theme's index.cfm template:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;mango:Posts count=&lt;span class='cc_value'&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;mango:Post&amp;gt;&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;mango:Event name=&lt;span class='cc_value'&gt;&amp;quot;beforePostContentEnd&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;p class=&lt;span class='cc_value'&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Posted in ...&lt;span class='cc_normaltag'&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/mango:Post&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/mango:Posts&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;That's almost it! After you install the plugin, and add the event broadcast to your theme, there's just 2 more things.&lt;/p&gt;
&lt;p&gt;First, relate a couple of entries. Edit a post, and look at the bottom of the form.&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content/RelatedEntries.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This new section should be displayed at or toward the bottom of the form. As it explains, you select a category from the left column to see its entries from the selected categories (use control to select multiple). Then click on any entries from the center column that you want to relate to the current entry; they will be displayed in the right column. (This is all done with jQuery ajax!) To remove an entry from the right column, double click it. When you submit the form, the posts in the right column will be marked as related to the current entry; and in addition to that, the current entry will be related to those posts.&lt;/p&gt;
&lt;p&gt;When you submit the form, if you get an error that looks like this, then you didn't &lt;a href="http://www.mangoblog.org/docs/about/plugins/plugin-ideas#comment-B46AC799-3048-2A53-70CE292C75CA981B"&gt;install the update&lt;/a&gt;!:&lt;/p&gt;
&lt;p&gt;&lt;img src="/assets/content/RelatedEntriesError.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If you don't get the above error, then your data should be good to go. Now, you just need to style it.&lt;/p&gt;
&lt;p&gt;When you've got related entries data, the event you're broadcasting is going to be replaced with some code along this line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;div class=&lt;span class='cc_value'&gt;&amp;quot;related&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;h2 id=&lt;span class='cc_value'&gt;&amp;quot;RelatedEntries&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Related Entries:&lt;span class='cc_normaltag'&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;a href=&lt;span class='cc_value'&gt;&amp;quot;http://server/post/your-post&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Post Title&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;a href=&lt;span class='cc_value'&gt;&amp;quot;http://server/post/your-post&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Post Title&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;a href=&lt;span class='cc_value'&gt;&amp;quot;http://server/post/your-post&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Post Title&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So, you can define some css rules for .related, #RelatedEntries (or .related h2), and .related ul, .related ul li, .related ul li a.&lt;/p&gt;
&lt;p&gt;That's it. Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;One note for the future:&lt;/span&gt; The update I talk about above should be included in Mango 1.2, so if you've got 1.2 (or later) installed, don't worry about the update.&lt;/p&gt;
&lt;p&gt;In case you missed the link before, you can &lt;a href="/share/RelatedEntries-0.1.zip"&gt;&lt;strong&gt;Download my Related Entries Mango Blog Plugin right here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/388610998" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/388610998/related-entries-plugin-for-mango-blog</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/related-entries-plugin-for-mango-blog</guid>
         <category>AJAX</category><category>ColdFusion</category><category>JavaScript</category><category>My projects</category><category>Mango</category>
         <pubDate>Wed, 10 Sep 2008 12:00:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/related-entries-plugin-for-mango-blog</feedburner:origLink></item>	
      <item>
         <title>Tracking the storm&amp;#8230; Redux</title>
         <description>&lt;p&gt;A couple of days ago I used &lt;a href="http://www.coldfusionjedi.com/index.cfm/2008/8/28/Tracking-the-storm-with-ColdFusion"&gt;Rays code&lt;/a&gt; for tracking hurricane distance from your local zip code to add tracking of Hurricane Hanna to my family blog. Then my father in law was kind enough to point out that it was wrong. &lt;em&gt;Way wrong! &lt;/em&gt;It was reporting distances of over 3,000 miles, when we're really less than 300 miles from it.&lt;/p&gt;
&lt;p&gt;Closer inspection of the code showed that Ray accidentally swapped the order of latitude and longitude assignments from the NHC feed; and wasn't accounting for Southern and Western hemispheres being represented as a negative number. Ray posted about some changes he made &lt;a href="http://www.coldfusionjedi.com/index.cfm/2008/8/28/Tracking-the-storm-with-ColdFusion#c1062598F-19B9-E658-9DD365F2C07CC753"&gt;in a comment&lt;/a&gt; on his post to fix these problems (if only I had seen those before now!).&lt;/p&gt;
&lt;p&gt;Ray is going to post his updated script soon, but mine is below.&lt;/p&gt;
&lt;p&gt;In addition to the same fixes, I've added a touch of encapsulation (though I did remove the zip lookup stuff once I knew the lat/long for my zip &amp;#8212; because this was easily the slowest part of the whole script) and setup caching with a forced refresh, and refreshing if the previous attempt had any problems. Here's my entire script:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='comment'&gt;&amp;lt;!--- catch previous hit found no data ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfif structKeyExists(application, &lt;span class='cc_value'&gt;&amp;quot;hannaData&amp;quot;&lt;/span&gt;) and findNoCase(&lt;span class='cc_value'&gt;&amp;quot;check back later&amp;quot;&lt;/span&gt;, application.hannaData)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset application.hannaData = getHannaData() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset application.hannaDataUpdated = now() /&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='comment'&gt;&amp;lt;!--- allow force cache refresh ---&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfif structKeyExists(url, &lt;span class='cc_value'&gt;&amp;quot;updateHanna&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 application.hannaData = getHannaData() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset application.hannaDataUpdated = now() /&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='comment'&gt;&amp;lt;!--- catch first hit of application lifecycle ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfif not structKeyExists(application, &lt;span class='cc_value'&gt;&amp;quot;hannaData&amp;quot;&lt;/span&gt;) or not structKeyExists(application, &lt;span class='cc_value'&gt;&amp;quot;hannaData&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 application.hannaData = getHannaData() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset application.hannaDataUpdated = now() /&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='comment'&gt;&amp;lt;!--- catch cache outdated ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfif structKeyExists(application, &lt;span class='cc_value'&gt;&amp;quot;hannaDataUpdated&amp;quot;&lt;/span&gt;) and dateCompare(now(), application.hannaDataUpdated, &lt;span class='cc_value'&gt;&amp;quot;n&amp;quot;&lt;/span&gt;) gt&lt;span class='cc_numeric'&gt; 10&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 application.hannaData = getHannaData() /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset application.hannaDataUpdated = now() /&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfoutput&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#application.hannaData#&lt;span class='cc_normaltag'&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_normaltag'&gt;&amp;lt;small&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;em&amp;gt;&lt;/span&gt;Updated: #timeFormat(application.hannaDataUpdated, &lt;span class='cc_value'&gt;&amp;quot;h:MM tt&amp;quot;&lt;/span&gt;)#&lt;span class='cc_normaltag'&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;/small&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;br /&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfscript&amp;gt;&lt;/span&gt;&lt;br /&gt;/**&lt;br /&gt; * Calculates the distance between two latitudes and longitudes.&lt;br /&gt; * This funciton uses forumlae from Ed Williams Aviation Foundry website at http://williams.best.vwh.net/avform.htm.&lt;br /&gt; * &lt;br /&gt; * @param lat1 &amp;nbsp;&amp;nbsp;&amp;nbsp; Latitude of the first point in degrees. (Required)&lt;br /&gt; * @param lon1 &amp;nbsp;&amp;nbsp;&amp;nbsp; Longitude of the first point in degrees. (Required)&lt;br /&gt; * @param lat2 &amp;nbsp;&amp;nbsp;&amp;nbsp; Latitude of the second point in degrees. (Required)&lt;br /&gt; * @param lon2 &amp;nbsp;&amp;nbsp;&amp;nbsp; Longitude of the second point in degrees. (Required)&lt;br /&gt; * @param units &amp;nbsp;&amp;nbsp;&amp;nbsp; Unit to return distance in. Options are: km (kilometers), sm (statute miles), nm (nautical miles), or radians.  (Required)&lt;br /&gt; * @return Returns a number or an error string. &lt;br /&gt; * @author Tom Nunamaker (&amp;amp;#116;&amp;amp;#111;&amp;amp;#109;&amp;amp;#64;&amp;amp;#116;&amp;amp;#111;&amp;amp;#115;&amp;amp;#104;&amp;amp;#111;&amp;amp;#112;&amp;amp;#46;&amp;amp;#99;&amp;amp;#111;&amp;amp;#109;) &lt;br /&gt; * @version 1, May 14,&lt;span class='cc_numeric'&gt; 2002&lt;/span&gt; &lt;br /&gt; */&lt;br /&gt;function LatLonDist(lat1,lon1,lat2,lon2,units)&lt;br /&gt;{&lt;br /&gt;&lt;span class='cc_comment'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Check to make sure latitutdes and longitudes are valid&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(lat1 GT&lt;span class='cc_numeric'&gt; 90&lt;/span&gt; OR lat1 LT -90 OR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lon1 GT&lt;span class='cc_numeric'&gt; 180&lt;/span&gt; OR lon1 LT -180 OR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lat2 GT&lt;span class='cc_numeric'&gt; 90&lt;/span&gt; OR lat2 LT -90 OR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lon2 GT&lt;span class='cc_numeric'&gt; 280&lt;/span&gt; OR lon2 LT -280) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return (&lt;span class='cc_value'&gt;&amp;quot;Incorrect parameters&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;lat1 = lat1 * pi()/180;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;lon1 = lon1 * pi()/180;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;lat2 = lat2 * pi()/180;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;lon2 = lon2 * pi()/180;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnitConverter = 1.150779448; &lt;span class='cc_comment'&gt; //standard is statute miles&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(units eq 'nm') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnitConverter = 1.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(units eq 'km') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnitConverter = 1.852;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;distance = 2*asin(sqr((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2)); &lt;span class='cc_comment'&gt; //radians&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(units neq 'radians'){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;distance = UnitConverter * 60 * distance * 180/pi();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return (distance);&lt;br /&gt;}&lt;br /&gt;&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;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;logit&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;void&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &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;   &lt;span class='cc_cftag'&gt;&amp;lt;cflog file=&lt;span class='cc_value'&gt;&amp;quot;hurricane_hanna&amp;quot;&lt;/span&gt; text=&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;span class='cc_cftag'&gt;&amp;lt;cffunction name=&lt;span class='cc_value'&gt;&amp;quot;getHannaData&amp;quot;&lt;/span&gt; returntype=&lt;span class='cc_value'&gt;&amp;quot;string&amp;quot;&lt;/span&gt; output=&lt;span class='cc_value'&gt;&amp;quot;false&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 dst = 0/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var long = 0/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var longdir = &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;cfset var lat = 0/&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset var latdir = &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;cfset var hannaXML = &lt;span class='cc_value'&gt;&amp;quot;http://www.nhc.noaa.gov/nhc_at3.xml&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 results = &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;cfset var match = &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;cfset var regex = &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;cfset var text = &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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cffeed source=&lt;span class='cc_value'&gt;&amp;quot;#hannaXML#&amp;quot;&lt;/span&gt; query=&lt;span class='cc_value'&gt;&amp;quot;results&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif not results.recordCount&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 logit(&lt;span class='cc_value'&gt;&amp;quot;Error - no feed entries&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;Unable to track hurricane Hanna (no data provided), check back later.&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;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='comment'&gt;&amp;lt;!--- find &lt;span class='cc_value'&gt;&amp;quot;Public Advisory&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;cfquery name=&lt;span class='cc_value'&gt;&amp;quot;pa&amp;quot;&lt;/span&gt; dbtype=&lt;span class='cc_value'&gt;&amp;quot;query&amp;quot;&lt;/span&gt; maxrows=&lt;span class='cc_value'&gt;&amp;quot;1&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   rsslink, content, title&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from   results&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where   title like '%HANNA Public Advisory Number%'&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif not pa.recordCount&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 logit(&lt;span class='cc_value'&gt;&amp;quot;Error - cound't find a matching entry&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;Couldn't find information on hurricane Hanna, check back later.&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;/cfif&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfhttp url=&lt;span class='cc_value'&gt;&amp;quot;#pa.rsslink#&amp;quot;&lt;/span&gt; result=&lt;span class='cc_value'&gt;&amp;quot;results&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 text = results.fileContent&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='comment'&gt;&amp;lt;!--- strip extra white space ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset text = reReplace(text, &lt;span class='cc_value'&gt;&amp;quot;[\r\n]+&amp;quot;&lt;/span&gt;, &lt;span class='cc_value'&gt;&amp;quot; &amp;quot;&lt;/span&gt;, &lt;span class='cc_value'&gt;&amp;quot;all&amp;quot;&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset regex = &lt;span class='cc_value'&gt;&amp;quot;CENTER OF TROPICAL STORM HANNA WAS LOCATED NEAR LATITUDE ([[:digit:]\.]+)[[:space:]]*([NORTH|SOUTH|EAST|WEST]+)...LONGITUDE ([[:digit:]\.]+)[[:space:]]*([NORTH|SOUTH|EAST|WEST]+)&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='comment'&gt;&amp;lt;!--- now look for: THE CENTER OF TROPICAL STORM HANNA WAS LOCATED NEAR LATITUDE 19.1 NORTH...LONGITUDE 74.4 WEST ---&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset match = reFind(regex, text,&lt;span class='cc_numeric'&gt; 1&lt;/span&gt;, true)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfif arrayLen(match.pos) is&lt;span class='cc_numeric'&gt; 5&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 lat = mid(text, match.pos[2], match.len[2])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span class='cc_cftag'&gt;&amp;lt;cfset latdir = mid(text, match.pos[3], match.len[3])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span class='cc_cftag'&gt;&amp;lt;cfset long = mid(text, match.pos[4], match.len[4])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span class='cc_cftag'&gt;&amp;lt;cfset longdir = mid(text, match.pos[5], match.len[5])&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span class='cc_cftag'&gt;&amp;lt;cfif longdir eq &lt;span class='cc_value'&gt;&amp;quot;WEST&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset long = -1 * long /&amp;gt;&lt;/span&gt;&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;cfif latdir eq &lt;span class='cc_value'&gt;&amp;quot;SOUTH&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfset lat = -1 * lat /&amp;gt;&lt;/span&gt;&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;cfelse&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;span class='cc_cftag'&gt;&amp;lt;cfset logit(&lt;span class='cc_value'&gt;&amp;quot;Error - couldn't find my matches in the string&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;Couldn't find lat/long location info for hurricane Hanna, check back later.&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;/cfif&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;cfset dst = latLonDist(lat,long,&lt;span class='cc_numeric'&gt;39&lt;/span&gt;.98,-75.82,&lt;span class='cc_value'&gt;&amp;quot;sm&amp;quot;&lt;/span&gt;)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset logit(&lt;span class='cc_value'&gt;&amp;quot;distance:&amp;quot;&lt;/span&gt; &amp;amp; dst)&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset rtn = &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;cfset rtn &amp;amp;= &lt;span class='cc_value'&gt;&amp;quot;&lt;span class='cc_normaltag'&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;&lt;/span&gt;Distance:&lt;span class='cc_normaltag'&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; &amp;quot;&lt;/span&gt; &amp;amp; numberFormat(dst,',&lt;span class='cc_numeric'&gt;9&lt;/span&gt;.99') &amp;amp; &lt;span class='cc_value'&gt;&amp;quot; miles&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;small&amp;gt;&lt;/span&gt;As of: &lt;span class='cc_anchor'&gt;&amp;lt;a &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 rtn &amp;amp;= &lt;span class='cc_value'&gt;&amp;quot;href='&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 rtn &amp;amp;= pa.rsslink /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset rtn &amp;amp;= &lt;span class='cc_value'&gt;&amp;quot;'&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;#replaceNoCase(pa.title, 'Tropical Storm HANNA Public ', '')#&lt;span class='cc_normaltag'&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;&lt;span class='cc_anchor'&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&amp;quot;&lt;/span&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfset rtn &amp;amp;= &lt;span class='cc_value'&gt;&amp;quot;Hanna Lat: #lat# #latdir#&lt;span class='cc_normaltag'&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;/span&gt;Hanna Long: #long# #longdir#&lt;span class='cc_normaltag'&gt;&amp;lt;/small&amp;gt;&lt;/span&gt;&amp;quot;&lt;/span&gt; /&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class='cc_cftag'&gt;&amp;lt;cfreturn  rtn /&amp;gt;&lt;/span&gt;&lt;br /&gt;&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/NerdFusion/~4/385198613" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/385198613/tracking-the-storm-redux</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/tracking-the-storm-redux</guid>
         <category>ColdFusion</category>
         <pubDate>Sat, 06 Sep 2008 18:19:58 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/tracking-the-storm-redux</feedburner:origLink></item>	
      <item>
         <title>Introducing SmartType Mango Blog Plugin</title>
         <description>&lt;p&gt;Last night I quickly threw together a &lt;a href="http://www.mangoblog.org/"&gt;Mango Blog&lt;/a&gt; plugin for something I've wanted ever since leaving WordPress: Smart Dashes. Since it was possible with the component I was implementing, I also added conversion of elipses.&lt;/p&gt;
&lt;p&gt;I can't take any credit for any of the difficult parts of this; all I did was wrap &lt;a href="http://sebduggan.com/pages/projects/smarttype"&gt;Seb's Code&lt;/a&gt; in a Mango plugin.&lt;/p&gt;
&lt;p&gt;From the &lt;a title="SmartType Mango Plugin" href="/page/projects/smarttype-mango-blog-plugin"&gt;project page&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SmartType Mango Blog Plugin is a simple implementation of &lt;a href="http://sebduggan.com/pages/projects/smarttype"&gt;Seb Duggan's SmartType ColdFusion Component&lt;/a&gt; to prettify &lt;strong&gt;post&lt;/strong&gt; and &lt;strong&gt;page&lt;/strong&gt; content and titles. It implements his replacement for elipses (&amp;#46;.. as &amp;#8230;) and &lt;a href="http://en.wikipedia.org/wiki/Dash#En_dash_versus_em_dash"&gt;en and em dashes&lt;/a&gt;
(&amp;#45; as &amp;#8211; and &amp;#45;- or &amp;#45;&amp;#45;- as &amp;#8212;). Folks who have used WordPress in the
past should be familiar with this behavior, except that I'm not
changing single or double quotes. That was one of the things I hated
about WordPress, because it always messed up my code samples.&lt;/p&gt;
&lt;p&gt;If you want to include in an elipses, single dash, or set of dashes, without it being replaced, preceed it with a back-slash: \&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download it here: &lt;a href="/uploads/SmartTypeMangoPlugin.0.1.zip"&gt;SmartType Mango Blog Plugin 0.1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Install Instructions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Unzip to the &lt;strong&gt;components/plugins/user/&lt;/strong&gt; folder&lt;/li&gt;
&lt;li&gt;Activate in the &lt;strong&gt;Add-ons&lt;/strong&gt; section of your Mango Blog Admin&lt;/li&gt;
&lt;li&gt;There is no step 3.&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/370872486" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/370872486/introducing-smarttype-mango-blog-plugin</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/introducing-smarttype-mango-blog-plugin</guid>
         <category>My projects</category><category>Mango</category>
         <pubDate>Thu, 21 Aug 2008 12:00:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/introducing-smarttype-mango-blog-plugin</feedburner:origLink></item>	
      <item>
         <title>CF8 Certification, Here I Come!</title>
         <description>&lt;p&gt;Last year I got my first ColdFusion certification, just in time for a new version of CF to come out and make me feel like I was behind again. Since the test is only $150, I figure I might as well upgrade to a CF8 certification.&lt;/p&gt;
&lt;p&gt;I've heard rumors that thanks to &lt;a title="The CF Jedi Himself" href="http://www.coldfusionjedi.com"&gt;Ray&lt;/a&gt;, the CF8 exam is much tougher than the CF7 exam. And since it's going to be harder, and I really don't want to lose the "Advanced" level, I'm going to prepare pretty hard. Last year I did self-study, and it was pretty overwhelming &amp;#8212; there's just so much material and you don't get a great idea for what to study. This year, I'm going to prepare with the &lt;a href="http://centrasoft.com/"&gt;recently released CF8 Exam Buster&lt;/a&gt; training software.&lt;/p&gt;
&lt;p&gt;I've already got it installed and gone through the first test, and I'm confident it's going to help me be prepared for the exam. I'll post again after I get my exam results and let you know what I think of CF8 Exam Buster, and whether or not I maintained my "advanced" level certification.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/368118272" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/368118272/cf8-certification-here-i-come</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/cf8-certification-here-i-come</guid>
         <category>ColdFusion 8</category>
         <pubDate>Mon, 18 Aug 2008 13:43:38 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/cf8-certification-here-i-come</feedburner:origLink></item>	
      <item>
         <title>Protect your websites, logs, and inbox from SQL Injection</title>
         <description>&lt;p&gt;If you're like me you leave error reporting emails on for most of the sites that you build, so that wherever possible you are alerted to potential problems &amp;#8212; like &lt;a href="http://www.coldfusionmuse.com/index.cfm/2008/7/18/Injection-Using-CAST-And-ASCII"&gt;the recent wave of SQL Injection attacks&lt;/a&gt; &amp;#8212; before the website owner (your client) knows they're being attacked, and hopefully, before an attack is successful. Of course, you're a responsible coder and you're logging and reporting errors, and then hunting down and eradicating the buggy code&amp;#8230; &lt;em&gt;right?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But as was &lt;a href="http://twitter.com/coldfusion/statuses/881602864"&gt;pointed out&lt;/a&gt; this moring on twitter by &lt;a href="http://www.adrocknaphobia.com/"&gt;Adam Lehman&lt;/a&gt;, if you log and subsequently email yourself or anyone else for every single error your website throws, you could end up flooding your own inbox (or worse, the inboxes of your clients and coworkers!) with error reports; essentially causing a Denial Of Service attack on yourself. And you may overly tax your server's resources in the process. It doesn't get much more lose-lose than that.&lt;/p&gt;
&lt;p&gt;As &lt;a href="http://www.coldfusionmuse.com/index.cfm/2008/7/18/Injection-Using-CAST-And-ASCII"&gt;ColdFusion Muse points out&lt;/a&gt;, a majority of recent attacks have been an attempt to append some javascript to every text field in a database, and they are using a very specific method: Declaring a text variable that contains some TSQL instructions, and then evaluating it. And like something out of a bad comedey, a few hours after reading Mark's post, it started happening to two of the websites my group manages. And boy, did the emails start coming.&lt;/p&gt;
&lt;p&gt;Luckily, because the attack is so specific, it's easy to head off.&lt;/p&gt;
&lt;p&gt;If you're using Application.cfm, just add this somewhere near the top:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfif findNoCase(&lt;span class='cc_value'&gt;&amp;quot;DECLARE%20@S&amp;quot;&lt;/span&gt;, cgi.query_string)&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;cfabort/&amp;gt;&lt;/span&gt;&lt;span class='cc_cftag'&gt;&amp;lt;/cfif&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And of course, if you're using Application.cfc, you can just put it in the onRequestStart function. Either way, you should position this code so that it is run before any significant work is done on the web server. There's really no generic reason it can't be line 1.&lt;/p&gt;
&lt;p&gt;By doing this, you'll protect yourself from this specific attack (but not all SQL Injection) and stop all of those nagging error emails and log entries. Then you can focus on important things like making sure all of your queries use CFQueryParam.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/359528453" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/359528453/protect-your-websites-logs-and-inbox-from-sql-injection</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/protect-your-websites-logs-and-inbox-from-sql-injection</guid>
         <category>ColdFusion</category>
         <pubDate>Fri, 08 Aug 2008 15:26:03 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/protect-your-websites-logs-and-inbox-from-sql-injection</feedburner:origLink></item>	
      <item>
         <title>Even prettier SES URLs in Mango</title>
         <description>&lt;p&gt;Tonight I installed &lt;a href="http://cheeso.members.winisp.net/IIRF.aspx"&gt;Ionic's ISAPI Rewrite filter&lt;/a&gt; on my server and set it up for this domain. I've always been a fan of the www-less URL, so now you don't have a choice &amp;#8212; I'm redirecting you here. In addition to that, I'm making urls like /page.cfm/projects/burnt-mango accessable as /page/projects/burnt-mango. I even took it a step further and redirect you to the new pretty format from the old ugly format, in case there are any errant URL's going around.&lt;/p&gt;
&lt;p&gt;The first thing I had to do, once I got the ISAPI filter installed and running, was to define my rewrite rules:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# force removal of www. prefix on all requests&lt;br /&gt;RewriteCond %{HTTP_HOST} ^www\.fusiongrokker\.com [I,U]&lt;br /&gt;RewriteRule ^/(.*) http://fusiongrokker.com/$1 [I,R=301,U]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This takes care of getting rid of "www." from the URL. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;###### Mango Blog stuff&lt;br /&gt;#redirect old url's to their new fancy url's&lt;br /&gt;RewriteRule ^/post.cfm/(.*)$ /post/$1 [R=301,I,U]&lt;br /&gt;RewriteRule ^/page.cfm/(.*)$ /page/$1 [R=301,I,U]&lt;br /&gt;RewriteRule ^/archives.cfm/(.*)$ /archives/$1 [R=301,I,U] &lt;br /&gt;RewriteRule ^/author.cfm/(.*)$ /author/$1 [R=301,I,U]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These will &lt;strong&gt;redirect&lt;/strong&gt; you from the old page.cfm/page-name format to the new page/page-name format.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#standard mango rewrites&lt;br /&gt;RewriteRule ^/post/(.*)$ /post.cfm/$1 [I,U,L]&lt;br /&gt;RewriteRule ^/page/(.*)$ /page.cfm/$1 [I,U,L]&lt;br /&gt;RewriteRule ^/archives/(.*)$ /archives.cfm/$1 [I,U,L] &lt;br /&gt;RewriteRule ^/author/(.*)$ /author.cfm/$1 [I,U,L]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And lastly, these &lt;strong&gt;rewrite&lt;/strong&gt; the new page/page-name format as page.cfm/page-name so that Mango can still interpret them correctly.&lt;/p&gt;
&lt;p&gt;Notice that for all of my redirects ([R] flag) I'm using R=301. 301 is the status code for Moved Permantently, rathern than the default of 302, Moved Temporarily. This will tell search engine spiders and other smart things to update themselves; as well as preserve any PageRank that the old URL might have had. The &lt;strong&gt;L&lt;/strong&gt; flag stands for "Last" and indicates that no further rules should be processed after this one is matched. In this case, I'm using it to prevent circular references, where going to page/page-name rewrites as page.cfm/page-name, which redirects to page/page-name which rewrites as&amp;#8230; yeah.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; As suggested by Seb Duggan in the comments, I've combined the above rules into these two simple lines:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#redirect old url's to their new fancy url's&lt;br /&gt;RewriteRule ^/(post|page|archives|author).cfm/(.*)$ /$1/$2 [R=301,I,U]&lt;br /&gt;#standard mango rewrites&lt;br /&gt;RewriteRule ^/(post|page|archives|author)/(.*)$ /$1.cfm/$2 [I,U,L]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After the rules are in place, we have to tell Mango how to output URLs in the new format. It uses a special file called config.cfm which contains your blog settings.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;searchUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;archives/search/&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;postUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;post/{postName}&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;authorUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;author/{authorAlias}&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;archivesUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;archives/&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;categoryUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;archives/category/{categoryName}&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class='cc_normaltag'&gt;&amp;lt;entry key=&lt;span class='cc_value'&gt;&amp;quot;pageUrl&amp;quot;&lt;/span&gt; value=&lt;span class='cc_value'&gt;&amp;quot;page/{pageHierarchyNames}{pageName}&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These are just the relevant settings, of course. They should use the format that you want the user to see the URL as, because this is what Mango uses to format its links.&lt;/p&gt;
&lt;p&gt;I keep finding more and more reasons to love Mango. This is just another one of them.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/358963599" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/358963599/even-prettier-ses-urls-in-mango</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/even-prettier-ses-urls-in-mango</guid>
         <category>Mango</category>
         <pubDate>Thu, 31 Jul 2008 04:20:20 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/even-prettier-ses-urls-in-mango</feedburner:origLink></item>	
      <item>
         <title>The Survey For People Who Make Websites</title>
         <description>&lt;p&gt;This year is A List Apart's second year running their &lt;a href="http://alistapart.com/articles/survey2008"&gt;Survey For People Who Make Websites&lt;/a&gt;. I just completed it (18 pages, average 2-3 questions per page) in about 8 minutes, so what are you waiting for?&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://alistapart.com/articles/survey2008"&gt;&lt;img src="/images/i-took-the-2008-survey.gif" alt="" width="180" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NerdFusion/~4/358963600" height="1" width="1"/&gt;</description>
         <link>http://feeds.feedburner.com/~r/NerdFusion/~3/358963600/the-survey-for-people-who-make-websites</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/the-survey-for-people-who-make-websites</guid>
         <category>Meta</category>
         <pubDate>Tue, 29 Jul 2008 12:21:45 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/the-survey-for-people-who-make-websites</feedburner:origLink></item>
	
   </channel>
</rss>
