<?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" 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.6</generator>
	
	 
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FusionGrokker" /><feedburner:info uri="fusiongrokker" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>Customer Support and Time Zones</title>
         <description>&lt;p&gt;Let's talk about customer support. It's your first line of defense when customers are affected by bugs, so it should be a very high priority.&lt;/p&gt;

&lt;p&gt;Of course I'm being set off (again) by &lt;a href="http://fusiongrokker.com/post/the-dude-does-not-abide-long-standing-bugs"&gt;ongoing issues with PhoneGap Build&lt;/a&gt;. Probably around 80% of my work is developing PhoneGap based mobile apps. And again, the site is &lt;a href="http://pgbuildstat.us/"&gt;experiencing issues&lt;/a&gt;...&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/2013/05/pgbuildstatus.png" alt="FAIL FAIL FAIL FAIL FAIL" /&gt;&lt;/p&gt;

&lt;p&gt;This particular problem is not even one covered in my previous rant. They have (when occasionally bothering to respond to customer support tickets) mentioned that there were issues with the process that does compilations notifying the website that compile was complete, for one or two platforms. Well, if I had to guess, I'd say the issue is now more widespread. I uploaded a build around 2 hours ago and it still hasn't been marked as completed for a single platform.&lt;/p&gt;

&lt;p&gt;But that's not what I'm flying off the handle about, today. No, today is about Time Zones in relation to customer support.&lt;/p&gt;

&lt;p&gt;For the uninitiated, there's this whole section of the planet in a time zone called US-East, where a shitload of people &amp;mdash; yours truly included &amp;mdash; live and work. And while they don't post profiles of all of their employees, we can extrapolate based on their posting habits and the occasional twitter bio, and estimate that Adobe has two teams working on PhoneGap Build: One in India, and one in San Francisco, California.&lt;/p&gt;

&lt;p&gt;These two time zones are almost directly opposite one another, so you might think that between them they could cover customer support needs fairly well; in 12 hour blocks, with one team handing over everything to the other team at the end of the day, never going un-covered.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Woe, but were that true.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Instead, what seems to happen is that at some point in the Indian late afternoon or early evening they punch out, and the customer support portal goes dark for the night. While it does feel a bit rare, subjectively, let's say that when the SF team wakes up and heads into the office, they do in fact pay attention to the support portal. It often doesn't feel that way, as someone who's under deadlines and frustrated with a support black-out, but let's give them the benefit of the doubt for the sake of argument.&lt;/p&gt;

&lt;p&gt;If the India team stops handling customer support at 5pm in their local time, and the SF team starts handling support at 8am in their local time, then there's a chunk of time un-covered there. At first glance that time block doesn't seem so bad. It's 5:00pm until 8:30pm in India, or 4:30am to 8:00am in SF. But if we look at that time frame for US-East, that's 7:30am to 11:00am &amp;mdash; &lt;strong&gt;basically the first half of every day is radio silence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/2013/05/pgb_tweet.png" style="float:right;margin-left:10px"/&gt;Not just radio silence, but when a big problem happens, like, you know, NOTHING WORKS, then we're sitting on our hands and our deadlines for half a day waiting for someone, anyone, to come save the day. When &lt;em&gt;my&lt;/em&gt; applications are &lt;em&gt;useless&lt;/em&gt; I get a notification, and I drag my ass out of bed no matter what time it is, and I don't go back to bed until it's fixed.&lt;/p&gt;

&lt;p&gt;This is &lt;em&gt;geographic discrimination&lt;/em&gt;, and it &lt;em&gt;suuuuuuuuucks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And let's be honest here: they're not jumping on tickets at 8am in SF. More like 11am, if at all.&lt;/p&gt;

&lt;p&gt;I know I sound like a broken record, here, but come on guys. &lt;strong&gt;This service is the fucking cats pajamas... when it works.&lt;/strong&gt; To quote a colleague of mine, if you could keep it online we would "fly to California just to throw a stack of money at you."&lt;/p&gt;

&lt;p&gt;For at least two weeks now they've responded to every one of my "hey, btw, your service is down" tweets, &lt;strong&gt;more than 12 hours later&lt;/strong&gt; (&lt;em&gt;often even 24+ hours later!&lt;/em&gt;), with something along the lines of "sorry, we're making some changes soon to address this!". I don't think your definition of "soon" and mine are the same.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/VQ7J41tWmrU/customer-support-and-time-zones</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/customer-support-and-time-zones</guid>
         <category>Adobe</category><category>PhoneGap</category>
         <pubDate>Tue, 21 May 2013 15:02:16 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/customer-support-and-time-zones</feedburner:origLink></item> 
      <item>
         <title>cf.Objective() Baseball BOF Logistics</title>
         <description>&lt;p&gt;For those of you who will be coming to our &lt;a href="http://fusiongrokker.com/post/extracurricular-baseball-bof-at-cf-objective-2013"&gt;group outing to the Twins vs. Red Sox baseball game&lt;/a&gt; on Saturday evening, here's what you need to know logistically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We'll congregate on the 2nd floor near the bridge into the mall, after the conference closing remarks, and plan to catch the 5:12 train&lt;/strong&gt; -- that should leave plenty of time to use the restroom and drop things (e.g. your laptop) off back in your hotel room before we leave. You won't be able to bring any food or drinks into the ballpark, so don't plan on bringing them with you. Please try to meet at the rally point by 5:00. &lt;em&gt;&lt;strong&gt;Don't forget your ticket!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The train station is just a short walk across the sky-bridge and through the mall:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://www.evernote.com/shard/s240/sh/3a327072-9641-441b-a610-b59c83f8b917/fe84bcd707f765e1506bbfd117060464/deep/0/Screenshot%205/17/13%204:18%20PM.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;You should probably also plan to eat dinner at the ballpark -- game duration can be a bit unpredictable but you should expect at least 3 hours (plus a ~45 minute ride back).&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://forecast.io/#/f/44.9790,-93.2649"&gt;forecast&lt;/a&gt; is currently calling for (potentially) some light rain, and temperatures in the upper 70's &amp;amp; low 80's (that's F... 24-27 C for you Brits). Personally I'll probably just plan on getting a little bit wet. A little water never hurt anyone! If you didn't pack any rain gear and you're so inclined, I'm sure there are places in the mall that would be happy to sell you a poncho or rain coat. The stadium should also be selling ponchos, but supply may be limited and you can expect them to overcharge.&lt;/p&gt;

&lt;p&gt;In order to streamline the train-catching process, please try to take a few minutes to run down to the train station tonight or tomorrow and purchase your light rail tickets. We're going from &lt;strong&gt;Mall of America Station&lt;/strong&gt; to &lt;strong&gt;Target Field Station&lt;/strong&gt; (and back again), and each leg of the trip should cost USD $1.75.&lt;/p&gt;

&lt;p&gt;Enjoy the rest of the conference, and if I don't bump into you before Saturday afternoon, I'll see you then!&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/B3jhSjttUlg/cf-objective-baseball-bof-logistics</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/cf-objective-baseball-bof-logistics</guid>
         <category>cf.Objective()</category>
         <pubDate>Fri, 17 May 2013 21:23:11 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/cf-objective-baseball-bof-logistics</feedburner:origLink></item> 
      <item>
         <title>Using Taffy Without an Application.cfc Base Class</title>
         <description>&lt;p&gt;One of the most common complaints I hear about Taffy is that it requires that you extend its base class in your Application.cfc...&lt;/p&gt;

&lt;pre class='prettyprint'&gt;component extends="taffy.core.api" {}
&lt;/pre&gt;

&lt;p&gt;Sometimes you don't want to do this. Maybe you have another base class you're using, or you just don't want to. Whatever your reasons, it's a dealbreaker.&lt;/p&gt;

&lt;p&gt;Talking with &lt;a href="https://twitter.com/cfchris"&gt;Chris Phillips&lt;/a&gt; at cf.Objective() today, I had an epiphany that it should be possible to get Taffy running without extending &lt;code class='prettyprint'&gt;taffy.core.api&lt;/code&gt; from your Application.cfc. The only reason it's been a requirement thus far was to automatically bootstrap in Taffy's handling of the &lt;code class='prettyprint'&gt;onApplicationStart&lt;/code&gt;, &lt;code class='prettyprint'&gt;onRequestStart&lt;/code&gt;, and &lt;code class='prettyprint'&gt;onRequest&lt;/code&gt; events.&lt;/p&gt;

&lt;p&gt;But if you're willing to wire those up manually, you can write your Application.cfc any way you like as long as -- at some point -- you hand off the request to the appropriate Taffy method. Here's an Application.cfc that uses Taffy as an internal object without using extends in Application.cfc:&lt;/p&gt;

&lt;pre class='prettyprint'&gt;component {

    function onApplicationStart(){
        application.taffy = createObject('taffy.core.api');
        application.taffy.onApplicationStart();
    }

    function onRequestStart(thePage){
        application.taffy.onRequestStart( arguments.thePage );
    }

    function onRequest(thePage){
        application.taffy.onRequest( arguments.thePage );
    }

}
&lt;/pre&gt;

&lt;p&gt;You can put whatever you want before and after those calls that defer to Taffy's internal implementations (e.g. the rest of your application), and it should still work exactly as described in the documentation -- &lt;code class='prettyprint'&gt;variables.framework&lt;/code&gt; would still be used, etc -- but I haven't tested this extensively yet.&lt;/p&gt;

&lt;p&gt;Just a little tidbit that I thought some of you may be interested to hear.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/IZ1sCNV8Mho/using-taffy-without-an-application-cfc-base-class</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/using-taffy-without-an-application-cfc-base-class</guid>
         <category>Taffy</category>
         <pubDate>Fri, 17 May 2013 20:06:12 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/using-taffy-without-an-application-cfc-base-class</feedburner:origLink></item> 
      <item>
         <title>The Dude Does Not Abide (Long-standing Bugs)</title>
         <description>&lt;p&gt;We're all people. I acknowledge that. Nobody likes getting yelled at. So I apologize in advance for what I'm about to do. I don't mean to hurt anyone's feelings, but if nobody speaks up, we can never expect change.&lt;/p&gt;

&lt;p&gt;I used to think that my personal Hell was getting stuck head-first in a small space and not being able to squeeze back out (claustrophobia like woah)... Today I'm officially changing my personal Hell to long-standing bugs that affect a significant number of people and get little-to-no response, resolution, or worst of all, communication on what's taking so long.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm looking at you, Phonegap Build.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would rather get stuck in a tiny space than continue to put up with your bugs and lack of communication on their resolution status.&lt;/p&gt;

&lt;p&gt;The worst part is that I fucking &lt;em&gt;LOVE&lt;/em&gt; Phonegap Build. Independent manual builds for multiple platforms &lt;em&gt;suuuuuuuuuuucks&lt;/em&gt;, so this service was begging to be built from day 1. The often-buggy or for-some-reason-offline debugger (weinre) is pretty sweet, too... when it works. If you were to start charging for the service, my company would be first in line with our checkbook open, fervently clicking our pen over and over until you named a price and told us to whom we should make the check payable.&lt;/p&gt;

&lt;p&gt;But for fuck's sake, it's been &lt;a href="https://github.com/phonegap/build/issues/9"&gt;nearly a year since it was reported that you're building android apps with the wrong icon in place for XHDPI (highest-resolution, aka best-screen) devices&lt;/a&gt;, and it's just a matter of copying the correct file into a folder before you compile the damn APK. It's &lt;em&gt;so&lt;/em&gt; rudimentary that I've managed to write &lt;a href="https://github.com/atuttle/pgb-fix-icon"&gt;a tool that completely automates the fix&lt;/a&gt; including repackaging, re-signing, and re-zipaligning. If it's just a matter of copying the correct file into a folder, why hasn't it been fixed? And if the issue is &lt;em&gt;not&lt;/em&gt; that simple, why aren't you communicating that to us? The icon is a pretty damn important part of an app, Android has the highest market share, and XHDPI devices are getting more and more popular every day.&lt;/p&gt;

&lt;p&gt;It was &lt;a href="https://github.com/phonegap/build/issues/9#issuecomment-7835053"&gt;9 months ago&lt;/a&gt; (August 2012) the last time Adobe commented at all on the issue, and that comment claimed that the bug should be fixed. The slew of comments since then says otherwise. What... the... actual... fuck?&lt;/p&gt;

&lt;p&gt;Moving on...&lt;/p&gt;

&lt;p&gt;I've reported &lt;a href="http://community.phonegap.com/nitobi/topics/make_links_use_external_broswer_consistently"&gt;over&lt;/a&gt; and &lt;a href="http://community.phonegap.com/nitobi/topics/browseronly_attribute_does_not_work_on_ios"&gt;over&lt;/a&gt; that linking to external sites in a way that opens the device's native browser, rather than taking over the Phonegap Webview, &lt;strong&gt;does not work as documented&lt;/strong&gt;, or at all, for that matter. I first reported the issue on April 5th, 2012 -- more than a year ago.&lt;/p&gt;

&lt;p&gt;I've got an app that I just upgraded from Phonegap version 1.5 to version 2.5, recompiled by Phonegap Build, and here's how external links work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS
&lt;ul&gt;&lt;li&gt;do abso-fucking-lutely nothing&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Android
&lt;ul&gt;&lt;li&gt;open the link in the Phonegap Webview&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And yes, I've tried every possible permutation of &lt;a href="https://build.phonegap.com/docs/config-xml"&gt;white-listing the domains&lt;/a&gt; (search for "&amp;lt;access", since they don't expose any deep-linkable ID's... fail, fail, fail, fail...). There's also &lt;a href="http://community.phonegap.com/nitobi/topics/make_links_use_external_broswer_consistently#reply_10713584"&gt;this user-proposed "navigator.app.loadURL" solution&lt;/a&gt;, but for some god-forsaken reason, Phonegap doesn't support  the "navigator.app" object (&lt;em&gt;at all!&lt;/em&gt;) on iOS -- it's Android only, &lt;a href="http://community.phonegap.com/nitobi/topics/navigator_app_not_available_at_all_on_ios"&gt;&lt;em&gt;by design&lt;/em&gt;&lt;/a&gt;. (Way to provide a consistent API across devices there, guys...)&lt;/p&gt;

&lt;p&gt;Considering the number of links that modern apps generally want to open, this is a big fucking deal.&lt;/p&gt;

&lt;p&gt;There's good news for this issue, too, though. According to &lt;a href="http://docs.phonegap.com/en/2.7.0/cordova_inappbrowser_inappbrowser.md.html#window.open"&gt;the Phonegap 2.7 documentation&lt;/a&gt; (note that at the time of writing, the latest Phonegap version supported by Phonegap Build is 2.5.0), a new syntax will be available for opening links using the ChildBrowser plugin and the device-native browser:&lt;/p&gt;

&lt;pre class='prettyprint'&gt;window.open('http://google.com', '_blank'); //childBrowser plugin
window.open('http://google.com', '_system'); //device-native browser
&lt;/pre&gt;

&lt;p&gt;That's great and all, but we don't have 2.7 support on Build yet. On a whim, I tried both syntaxes on my Phonegap 2.5-based app built with Phonegap Build -- and it works... mostly.&lt;/p&gt;

&lt;pre class='prettyprint'&gt;window.open('http://google.com', '_blank'); //childBrowser
&lt;/pre&gt;

&lt;p&gt;This syntax should open the childBrowser plugin, and as far as I can tell it seems like that might be what it's doing, but the top of it is getting cut off -- I can only see a few pixels along the bottom of the url bar and buttons, so it's kind of a guess. Whether or not it's trying to load the childBrowser plugin for this, it's not working properly.&lt;/p&gt;

&lt;pre class='prettyprint'&gt;window.open('http://google.com', '_system'); //device-native browser
&lt;/pre&gt;

&lt;p&gt;Almost as if by magic, this seems to work. I couldn't believe my eyes. I took a closer look at the Phonegap 2.5 documentation and wouldn't you know it? &lt;a href="http://docs.phonegap.com/en/2.5.0/cordova_inappbrowser_inappbrowser.md.html#window.open"&gt;It's documented.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why haven't they been communicating this to us in the bug reports? I never saw it before today because I had been trying to avoid the ChildBrowser if possible. Only by giving up did I find the answer. Fail, fail, fail, fail, &lt;strong&gt;fail.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I can live with bugs. I have plenty in my own projects. I do not accept bugs + a year without resolution + no communication. This is stupid, and not in a good way.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/cray.jpg" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Again, I don't want to hurt anyone's feelings. I'm not trying to get anyone fired. What I am trying to do is get you (Adobe) to &lt;em&gt;communicate&lt;/em&gt; more effectively. Reply on bug reports (more than once a year, please), and if fixes are not what we expect then let us know it's going to take some time. When you shrink away into the shadows, it makes us feel neglected and abandoned, and that does nobody any good.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/czlWl0cmrAQ/the-dude-does-not-abide-long-standing-bugs</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/the-dude-does-not-abide-long-standing-bugs</guid>
         
         <pubDate>Thu, 09 May 2013 14:14:10 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/the-dude-does-not-abide-long-standing-bugs</feedburner:origLink></item> 
      <item>
         <title>Extracurricular Baseball BOF at cf.Objective() 2013</title>
         <description>&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/baseball.objective.png" style="float:right;margin-left:5px" /&gt;Hat tip to &lt;a href="https://twitter.com/jimecore/status/327153994009018368"&gt;Jim Fasoline&lt;/a&gt; for the idea!&lt;/p&gt;

&lt;p&gt;I'm going to be staying an extra night after cf.Objective() this year (Saturday night, the 18th), and thought it would be fun to get a group together to go to the Twins vs. Red Sox game. I picked Saturday because I don't want to miss the BOF night or the Lightning Talks -- and I would recommend you not skip them either. They're always a good time!&lt;/p&gt;

&lt;p&gt;Since the game is at 6:10 on Saturday night, we'll meet up immediately following the conference closing remarks, and head straight over to the stadium.&lt;/p&gt;

&lt;p&gt;If you want to go, I suggest you buy tickets now! Yesterday the cheapest available tickets were $18, and today it looks like they're $22 and up. Don't really sweat where your seat is; I think the plan is to spend the majority of our time in Standing Room areas, and walking around to check out the stadium and the selection of local craft beers.&lt;/p&gt;

&lt;p&gt;I have it on good authority &lt;a href="http://www.12robots.com"&gt;from a local&lt;/a&gt; that we can expect basically door-to-door service from the light rail, and the ride should take just under an hour (which is why we'll meet immediately following the closing remarks).&lt;/p&gt;

&lt;p&gt;So again, if you're interested, buy your tickets now and leave a comment here so we can stay in touch to keep organized. So far we have myself and my fellow speaker &lt;a href="http://cfobjective.com/speakers/carol-hamilton/"&gt;Carol Hamilton&lt;/a&gt; as confirmed going... who else is going to join us?&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/iIOWq831NcQ/extracurricular-baseball-bof-at-cf-objective-2013</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/extracurricular-baseball-bof-at-cf-objective-2013</guid>
         <category>cf.Objective()</category>
         <pubDate>Fri, 26 Apr 2013 18:34:18 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/extracurricular-baseball-bof-at-cf-objective-2013</feedburner:origLink></item> 
      <item>
         <title>cf.Objective() Lightning Talks are in danger!</title>
         <description>&lt;p&gt;This morning Tim Cunningham, this year's overlord of all things cf.Objective(), tweeted that we're far short of the minimum number of Lightning Talk proposals to make them worth hosting. As I write this, there are only 3 proposals. I'll be submitting one myself after I publish this post, but that doesn't even get us to the half-way point.&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;@&lt;a href="https://twitter.com/adamtuttle"&gt;adamtuttle&lt;/a&gt; If we don't have 10 there really is no point of hosting them.&lt;/p&gt;&amp;mdash; Tim (@TimCunningham71) &lt;a href="https://twitter.com/TimCunningham71/status/323793982096293888"&gt;April 15, 2013&lt;/a&gt;&lt;/blockquote&gt;

&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;Personally I think that the Lightning Talks are one of the most fun events at cf.Objective(). Short, usually funny and/or interesting presentations, and everyone has already gone out for dinner (and usually a few drinks) so everyone's in a great mood. The atmosphere in the room is electric.&lt;/p&gt;

&lt;p&gt;Some of the more memorable topics from the last few years have ranged from Beer (homebrewing), to Adoption, to &lt;a href="http://codebassradio.net/2011/05/18/cf-objective-2011-ben-nadels-lightning-talk/"&gt;Ben Nadel's epic Love Story&lt;/a&gt;, to what amounted to a job posting (showing off some of the fun stuff that the position offered). So clearly you don't have to talk about anything technical -- but you can. That's the beauty of it. You talk about whatever you're passionate about -- it's totally open ended.&lt;/p&gt;

&lt;p&gt;But if we don't get at least 6 more proposals this year -- by tomorrow, Tuesday the 16th -- they won't happen at all this year. Do you want that to happen? You don't want that to happen.&lt;/p&gt;

&lt;p&gt;So propose something. Or if you've got nothing to talk about, prod your favorite presenter or interesting person to get them to submit something!&lt;/p&gt;

&lt;p&gt;&lt;style&gt;.twitter-tweet { margin: 10px auto !important; }&lt;/style&gt;&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/Wuc9mnv-JUw/cf-objective-lightning-talks-are-in-danger</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/cf-objective-lightning-talks-are-in-danger</guid>
         <category>cf.Objective()</category>
         <pubDate>Mon, 15 Apr 2013 13:46:54 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/cf-objective-lightning-talks-are-in-danger</feedburner:origLink></item> 
      <item>
         <title>Can you draw in a Dr. Seuss style? I need your help!</title>
         <description>&lt;p&gt;I have a Lightning Talk concept that I'd like to do at this year's &lt;a href="http://www.cfobjective.com"&gt;cf.Objective()&lt;/a&gt;, but in order to really pull it off I'm going to need someone with a modicum of drawing skills (of which I have none) who would be willing to draw up a few illustrations for my slides -- in the art style of Dr. Seuss.&lt;/p&gt;

&lt;p&gt;If you're not familiar with Lightning Talks, they are based on the popular but copyrighted &lt;a href="http://en.wikipedia.org/wiki/Pecha_kucha"&gt;"Pecha Kucha"&lt;/a&gt; (pronounced "pi-chach-ka") presentation style, where you get 20 slides each automatically advanced after 20 seconds, for a total presentation time of almost 7 minutes. So at most I'll need 20 drawings, but possibly less. Also, they need not be highly refined or even in color. I'd be thrilled just to get some sketches in pen that have been scanned.&lt;/p&gt;

&lt;p&gt;Considering it's a 7 minute presentation that I might be lucky to give twice, I don't have a lot of money to spend on it... but I would be willing to barter for some of my time programming, if that's something you'd be interested in.&lt;/p&gt;

&lt;p&gt;Please &lt;a href="http://fusiongrokker.com/page/contact-me"&gt;get in touch via my contact form&lt;/a&gt; if you're interested!&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/OCYgWHDaTus/can-you-draw-in-a-dr-seuss-style-i-need-your-help</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/can-you-draw-in-a-dr-seuss-style-i-need-your-help</guid>
         <category>Off Topic</category>
         <pubDate>Fri, 12 Apr 2013 15:45:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/can-you-draw-in-a-dr-seuss-style-i-need-your-help</feedburner:origLink></item> 
      <item>
         <title>Taffy 1.3, codename: Excelsior</title>
         <description>&lt;p&gt;Today I'm happy to officially release version 1.3 of Taffy, continuing my quest to keep to a greatly-reduced release cycle:&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;a href="http://fusiongrokker.com/assets/content/taffy_releases.png"&gt;&lt;img src="http://fusiongrokker.com/assets/content/taffy_releases_tn.png" alt="Taffy release history" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;I don't want to release so often it's annoying to have to upgrade, but still often enough to get bug fixes and new features out. How does 2 releases a year sound?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/atuttle/Taffy/archive/v1.3.0.zip" class="btn btn-success"&gt;Download Taffy 1.3.0 stable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the release notes for &lt;strong&gt;Taffy 1.3.0&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meta / Project Management Changes
&lt;ul&gt;&lt;li&gt;From this point forward, the &lt;code class='prettyprint'&gt;master&lt;/code&gt; branch will be used for day-to-day development, not just merging in stable releases. Stable releases will still be available for download via &lt;a href="https://github.com/atuttle/Taffy/tags"&gt;the tags page&lt;/a&gt;. Should any maintenance releases be necessary, they'll be done in branches created from the applicable release tag.&lt;/li&gt;
&lt;li&gt;We've had an extensive test suite for a while now, but I've finally setup a Jenkins instance and am doing a bit of continuous integration. You can see the build stats here: &lt;a href="http://fusiongrokker.com:8080/job/Taffy/"&gt;&lt;img src="http://fusiongrokker.com:8080/job/Taffy/badge/icon" /&gt;&lt;/a&gt; and this badge has been added to the &lt;a href="https://github.com/atuttle/Taffy#readme"&gt;ReadMe&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Bugs Fixed:
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/105"&gt;#105&lt;/a&gt; - Static URIs that would match dynamic URIs are now allowed (&lt;code class='prettyprint'&gt;/user/logout&lt;/code&gt; would previously conflict with &lt;code class='prettyprint'&gt;/user/{userId}&lt;/code&gt;). Pay special attention to &lt;a href="https://github.com/atuttle/Taffy/wiki/Configuration-via-Metadata#uri-matching-order"&gt;URI Matching Order&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/120"&gt;#120&lt;/a&gt; - Added support for &lt;code class='prettyprint'&gt;*/*&lt;/code&gt; Accept header value. &lt;em&gt;Thanks to Brian Quackenbush&lt;/em&gt; for the patch!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/124"&gt;#124&lt;/a&gt; - Fixed a Railo-specific bug blocking resources from being loaded when the resources folder isn't in the web root. &lt;em&gt;Thanks to Jean-Bernard van Zuylen for the initial bug report and the &lt;a href="https://github.com/atuttle/Taffy/pull/133"&gt;pull request!&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/129"&gt;#129&lt;/a&gt; - Fixed a bug that MANY people have asked about recently: when you don't supply &lt;em&gt;any&lt;/em&gt; form of requested return format (via header or URL "extension"), the dreaded "your default mime type is not implemented" error was returned. Jean-Bernard van Zuylen provided an &lt;a href="https://github.com/atuttle/Taffy/issues/129"&gt;epic detailed bug report&lt;/a&gt;, as well as &lt;a href="https://github.com/atuttle/Taffy/pull/132"&gt;the pull request that ultimately fixed it&lt;/a&gt;. A regular open source hero!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/130"&gt;#130&lt;/a&gt; - Fixed a regression in changes to the dashboard to use the new endpoint url param. &lt;em&gt;This one was also reported and fixed via pull request by Jean-Bernard van Zuylen.&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;New Features:
&lt;ul&gt;&lt;li&gt;Added a new &lt;a href="https://github.com/atuttle/Taffy/wiki/Index-of-API-Methods#querytoarrayquery-data"&gt;queryToArray&lt;/a&gt; helper method for transforming query objects into an array of structures, preserving column name case.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/91"&gt;#91&lt;/a&gt; - A &lt;a href="https://www.evernote.com/shard/s240/sh/6b166322-d8a8-4209-8de1-7348abd8baca/3b4072548cd291ded70ae60f1d4d5583/deep/0/Taffy%20messaging%20when%20no%20resources%20are%20defined.jpg"&gt;message&lt;/a&gt; is now displayed if Taffy can't find any resources.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/99"&gt;#99&lt;/a&gt; - Show dashboard without the &lt;code class='prettyprint'&gt;?dashboard&lt;/code&gt; query param (just browse to the root of your API). See deprecations, below.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/102"&gt;#102&lt;/a&gt; - Added support for DI/1 bean factory. See &lt;a href="https://github.com/atuttle/Taffy/blob/1.3-dev/examples/api_DI1/Application.cfc"&gt;this example&lt;/a&gt; for a sample implementation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/103"&gt;#103&lt;/a&gt; - Added &lt;a href="https://github.com/atuttle/Taffy/wiki/Environment-Specific-Configuration"&gt;environment-based configuration&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/108"&gt;#108&lt;/a&gt; - Added helper method &lt;code class='prettyprint'&gt;getBasicAuthCredentials()&lt;/code&gt; to api.cfc (so you can &lt;a href="https://github.com/atuttle/Taffy/wiki/Authentication-and-Security"&gt;use it in your Application.cfc&lt;/a&gt;). It returns a structure with keys &lt;code class='prettyprint'&gt;username&lt;/code&gt; and &lt;code class='prettyprint'&gt;password&lt;/code&gt;, and if &lt;em&gt;NO&lt;/em&gt; basic auth credentials have been included in the request then both values will be blank.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/109"&gt;#109&lt;/a&gt; - Added helper method &lt;code class='prettyprint'&gt;saveLog()&lt;/code&gt; to resource classes, which delegates to your &lt;a href="https://github.com/atuttle/Taffy/wiki/Exception-Logging-Adapters"&gt;configured exception logger&lt;/a&gt;. You may now use: &lt;code class='prettyprint'&gt;saveLog(cfcatch)&lt;/code&gt; from inside a resource.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/115"&gt;#115&lt;/a&gt; - You can now &lt;a href="https://github.com/atuttle/Taffy/wiki/So-you-want-to:-Use-Taffy's-built-in-Dependency-Injection-to-resolve-dependencies-of-your-resources"&gt;use properties instead of setters&lt;/a&gt; to have Taffy autowire dependencies. (Setters are not deprecated; this is just an additional option.)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/pull/117"&gt;#117&lt;/a&gt; - Added support for &lt;a href="https://github.com/atuttle/Taffy/wiki/List-of-all-variables.framework-settings"&gt;endpointURLParam&lt;/a&gt;. &lt;em&gt;Thanks &lt;a href="https://github.com/marbetschar"&gt;Marco Betschart&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/122"&gt;#122&lt;/a&gt; - Added support for &lt;a href="https://github.com/atuttle/Taffy/wiki/List-of-all-variables.framework-settings"&gt;ETag based caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atuttle/Taffy/issues/128"&gt;#128&lt;/a&gt; - Now support &lt;strong&gt;Access-Control-Allow-Headers&lt;/strong&gt; to list allowable headers for Cross-Domain requests. &lt;em&gt;Thanks to &lt;a href="https://github.com/marbetschar"&gt;Marco Betschart&lt;/a&gt; for the bug report and the patch!&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Deprecations:
&lt;ul&gt;&lt;li&gt;Using &lt;code class='prettyprint'&gt;?dashboard&lt;/code&gt; to display the dashboard is now deprecated in favor of simply browsing to the root of your API, with or without /index.cfm in the url. E.g. &lt;code class='prettyprint'&gt;http://api.acme.com/&lt;/code&gt; or &lt;code class='prettyprint'&gt;http://api.acme.com/index.cfm&lt;/code&gt; instead of the old &lt;code class='prettyprint'&gt;http://api.acme.com/?dashboard&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, the full changelog history is available on the &lt;a href="https://github.com/atuttle/Taffy/wiki/Releases"&gt;Release History&lt;/a&gt; page of the wiki.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/KQAiznkePHI/taffy-1-3-codename-excelsior</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/taffy-1-3-codename-excelsior</guid>
         <category>My projects</category><category>Taffy</category>
         <pubDate>Fri, 12 Apr 2013 12:00:00 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/taffy-1-3-codename-excelsior</feedburner:origLink></item> 
      <item>
         <title>How much Taffy is 5 pounds?</title>
         <description>&lt;p&gt;This much:&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;a href="http://fusiongrokker.com/assets/content/taffy.jpg" title="5 pound bag of Taffy on my head"&gt;&lt;img src="http://fusiongrokker.com/assets/content/taffy_tn.jpg" alt="5 pound bag of Taffy on my head" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;If you're going to CFObjective, please come ask me for some Taffy. If you don't, my teeth will surely rot out of my head.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/3nv_Zg4MPRk/how-much-taffy-is-5-pounds</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/how-much-taffy-is-5-pounds</guid>
         <category>cf.Objective()</category><category>Conferences</category><category>Taffy</category>
         <pubDate>Thu, 11 Apr 2013 17:12:33 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/how-much-taffy-is-5-pounds</feedburner:origLink></item> 
      <item>
         <title>ColdFusion (Taffy and Mura) job opening</title>
         <description>&lt;p&gt;I've been contacted by a recruiter from &lt;a href="http://www.fusionalliance.com/"&gt;Fusion Alliance&lt;/a&gt; about a job opening where they're looking for someone to do ColdFusion programming with Taffy and Mura. It sounds like working remotely is an option, but in case you're in the area the customer site is in Dayton, Ohio.&lt;/p&gt;

&lt;p&gt;I don't know much about the project aside from the fact that it will be using both Mura and Taffy -- that and their target delivery date is at the end of June.&lt;/p&gt;

&lt;p&gt;If you're interested, contact Amy here:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Amy Denison&lt;br/&gt;
  Corporate Recruiter&lt;br/&gt;
  Office: 513.618.6675&lt;br/&gt;
  Mobile: 513.544.4414&lt;br/&gt;
  &lt;a href="http://www.fusionalliance.com"&gt;fusionalliance.com&lt;/a&gt;&lt;br/&gt;
  &lt;a href="http://www.linkedin.com/in/amycampbell5"&gt;LinkedIn&lt;/a&gt;&lt;br/&gt;
  &lt;a href="http://twitter.com/FusionAmyD"&gt;Twitter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/droywn-1MsA/coldfusion-taffy-and-mura-job-opening</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/coldfusion-taffy-and-mura-job-opening</guid>
         <category>Jobs</category><category>Taffy</category>
         <pubDate>Tue, 09 Apr 2013 12:08:27 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/coldfusion-taffy-and-mura-job-opening</feedburner:origLink></item> 
      <item>
         <title>Bootstrap Typeahead Customization Examples</title>
         <description>&lt;p&gt;Last night, after receiving many requests to provide working examples for my &lt;a href="http://fusiongrokker.com/post/heavily-customizing-a-bootstrap-typeahead"&gt;Heavily Customizing a Bootstrap Typeahead&lt;/a&gt; post, I've updated the original post with inline, embedded, live-running examples. I'm using a service called &lt;a href="http://plnkr.co/"&gt;Plnkr&lt;/a&gt; (pronounced "Plunker," I assume), which has a really nice interface for working on, and more importantly, sharing example JavaScript code.&lt;/p&gt;

&lt;p&gt;Here are some screenshots of it in action on the bootstrap typeahead customization post. When it first loads you can see the example running live. If you choose to look at the source code at some point you can get back to the live running view by clicking the "play" button in the upper right:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/plnkr_running.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;And here's how you can find the source code. One really nice feature of plnkr (over something like jsfiddle) is that you can have numerous files, even of the same type, so many JS files for example, in one sample. In these examples I've got my "api data" in a static JSON file that I'm loading via AJAX. It's technically not an API but it demonstrates the idea and expected data format quite well.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/plnkr_code.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;I know that in the past I've &lt;a href="http://fusiongrokker.com/post/bloggers-stop-outsourcing-your-code-samples"&gt;railed against bloggers "outsourcing" code samples&lt;/a&gt;, and believe me the irony is not lost on me. Firstly, You'll note that I haven't removed any of the code samples that were originally included in the post. They're still there. The plnkr samples are just adding more value. Secondly, this is a lot more than simple code snippets.&lt;/p&gt;

&lt;p&gt;I still feel like people who embed gists in their blogs are being lazy, because the only benefit would seem to be the no-effort syntax highlighting and formatting... But this live-running example functionality is not something easily duplicated, and it is pretty compelling for embedded demos.&lt;/p&gt;

&lt;p&gt;For now consider me conflicted on the matter. I still believe that your blog should own and be the primary source for the example code, but I can also see how it would be annoying to have the code both inline and in a plnkr. For now I plan to just continue to play with Plnkr when appropriate to see if I can find a happy medium. Maybe I'll embed the original source code in posts as HTML comments or something... Who knows?&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/7tgAZ4u8ii4/bootstrap-typeahead-customization-examples</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/bootstrap-typeahead-customization-examples</guid>
         <category>Meta</category>
         <pubDate>Thu, 21 Mar 2013 16:16:14 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/bootstrap-typeahead-customization-examples</feedburner:origLink></item> 
      <item>
         <title>Tattle On Your Applications with snitch.io</title>
         <description>&lt;p&gt;I made a thing! You could even call it a bootstrapped startup. It's my first though, so please be gentle...&lt;/p&gt;

&lt;p&gt;For the last three weeks I've been spending almost all of my nights and weekends (and I do mean almost all. My average bed-time was around 3am and there was more than one all-nighter...) creating &lt;a href="http://www.snitch.io"&gt;snitch.io&lt;/a&gt;, a hosted exception logging and analytics service.&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;img src="http://fusiongrokker.com/assets/content/snitch_dash.png" alt="Screenshot of snitch.io dashboard" /&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;What does that mean? It means that instead of emailing yourself whenever your application has an error, you send it to snitch.io via our REST API. We automatically provide statistical information about the errors you send us. Currently we can show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The number of errors grouped by many different time metrics:
&lt;ul&gt;&lt;li&gt;Last 60 minutes, grouped by minute&lt;/li&gt;
&lt;li&gt;Last 24 hours, grouped by hour&lt;/li&gt;
&lt;li&gt;Last 30 days, grouped by day&lt;/li&gt;
&lt;li&gt;And several more...&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;The number of times each unique exception has occurred (since you started sending us data)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The occurrences count metric is interesting. If the data you send includes a stacktrace then we hash that and use it as the unique identifier. This means that if the exact same error happens 20 times, you'll see 20 occurrences listed. If you don't include a stacktrace, then we hash the entire data object that you send, and use it the same way.&lt;/p&gt;

&lt;p&gt;This next feature hasn't landed yet, but you can easily see how we can take this data and show you which errors in your application happen most frequently, or which have recently spiked, and so on. And speaking of features, &lt;a href="https://trello.com/board/snitch-io/5127d3a55f1a8084630024a6"&gt;our roadmap is public&lt;/a&gt; and public voting is enabled; so you can see and even have a voice in shaping the future of snitch.io!&lt;/p&gt;

&lt;p&gt;Now, if you're not comfortable working with a REST API directly, I've already started &lt;a href="https://github.com/snitchio"&gt;a collection of API wrappers&lt;/a&gt;, including a CFC for your CFML applications. You can pass it a native &lt;code class='prettyprint'&gt;cfcatch&lt;/code&gt; object from a try/catch block, or the exception object in your Application.cfc's &lt;code class='prettyprint'&gt;onError()&lt;/code&gt; method, and these look and work beautifully in snitch.io. The exception detail reports we provide should look pretty familiar to CFML developers:&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;img src="http://fusiongrokker.com/assets/content/snitch_detail.png" alt="Screenshot of exception detail" /&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;Of course, in the unlikely event that our API goes down or just takes too long to respond, the wrappers fall back to emailing you -- so you're absolutely no worse off than currently. I'll also throw this out there: If you are an existing customer and you contribute a new wrapper or get an accepted pull request to an existing wrapper, I'll make sure we credit you for a free month or some free notifications or something, to say thanks!&lt;/p&gt;

&lt;h2&gt;Pricing&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;$5/month gets you 500 exceptions/month&lt;/li&gt;
&lt;li&gt;$15/month gets you 1,500 exceptions/month&lt;/li&gt;
&lt;li&gt;$40/month gets you 4,000 exceptions/month&lt;/li&gt;
&lt;li&gt;If you need more than 4,000 exceptions/month, &lt;a href="mailto:adam@snitch.io"&gt;email me&lt;/a&gt; or jump in #snitch.io on freenode (irc) and we can figure something out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current prices may change, but at least for now we're charging: $0.01 per exception logged, on monthly subscription plans. We'll soon be adding notifications through things like web-hooks, tweets, SMS, Amazon SNS, and so forth. Notification types that are free to us are free to you. That means that web-hooks and tweets are and always will be free, but we're going to charge a small fee -- probably $0.01 -- per other notification.&lt;/p&gt;

&lt;h2&gt;What do you think?&lt;/h2&gt;

&lt;p&gt;I'd love to hear your feedback: good, bad, or otherwise. As I said, this is my first startup, and it's only just getting started. I've got tons of ideas and I'm eager to make this into the best exception logging service available.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/pOGv_tp3eUo/tattle-on-your-applications-with-snitch-io</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/tattle-on-your-applications-with-snitch-io</guid>
         <category>snitch.io</category>
         <pubDate>Mon, 18 Mar 2013 16:30:20 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/tattle-on-your-applications-with-snitch-io</feedburner:origLink></item> 
      <item>
         <title>General Pull Request Etiquette</title>
         <description>&lt;p&gt;Having spent the better part of the last few years working on, using, and contributing back to open source projects on GitHub I've found a few rules of thumb that I tend to follow that I sometimes see others breaking -- probably unintentionally. I thought I'd list them here, and if you disagree or want to add to the list then we can talk it out in the comments.&lt;/p&gt;

&lt;p&gt;I should start by saying that while I did draw the inspiration for this post from &lt;a href="https://github.com/atuttle/cf-json-tests/pull/1"&gt;Carl Von Stetten's recent pull request&lt;/a&gt; for my &lt;a href="https://github.com/atuttle/cf-json-tests"&gt;CF-JSON-Tests repo&lt;/a&gt;, I am in no way picking on Carl, or anyone else that might not follow these suggestions. Again, these are rules that I've realized that I subconsciously made up for myself to make the job of evaluating my pull requests easier and less stressful for the person on the receiving end of the request. Having experienced first hand the simultaneous joy and frustration of having someone find your project worthy of their contribution, but not having the time to immediately evaluate and accept the PR, I know that every bit of effort I put into making their job easier is appreciated. So, thank you Carl for your pull request, and please don't take any of the below as an attack on you!&lt;/p&gt;

&lt;h3&gt;Change as little as possible to accomplish your goal&lt;/h3&gt;

&lt;p&gt;I use the setting in SublimeText to trim whitespace on save. When the project author(s) don't use a similar setting, I tend to see a lot of blank-line differences in my diffs pre-commit:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://fusiongrokker.com/assets/content/diff_lines.png" alt="Whitespace changes" /&gt;&lt;/p&gt;

&lt;p&gt;The only change visible here is that my IDE has stripped out unnecessary whitespace. This is just noise to a project author. When I'm contributing my changes back, I do not commit these line changes &lt;em&gt;at all&lt;/em&gt;. Fortunately, Git makes this incredibly easy. I stage just the functional changes, and then after committing I can easily discard the whitespace changes (effectively putting the whitespace characters back into the file).&lt;/p&gt;

&lt;p&gt;Not only is this a courteous thing to do when sending a pull request, it's a smart way to treat your own repositories. I do commit whitespace changes to my repos, but never mixed in with functional changes; always grouped together with any other whitespace changes, and it bears repeating: no functional changes. I also include a commit message that says something like "whitespace". That way if I ever have to go back and do a bisect or otherwise look for where a bug was introduced, I can easily ignore any commits that are whitespace-only.&lt;/p&gt;

&lt;h3&gt;Include test cases if at all possible&lt;/h3&gt;

&lt;p&gt;Some changes are untestable (or at least not easily automated), or sometimes the project doesn't already have any testing setup. In these cases it's somewhat excusable, though still not ideal, not to include test cases with your pull requests.&lt;/p&gt;

&lt;p&gt;But if the project already has testing setup, you should include tests with your pull requests for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you don't write it, someone else has to; and nobody understands the problem better than you do while you're adding the feature or fixing the bug.&lt;/li&gt;
&lt;li&gt;You really should be running the existing test suite to make sure you haven't introduced a regression with your changes -- and since you're already working with the tests, why not add some for your changes?&lt;/li&gt;
&lt;li&gt;It's the only way to help prevent those that come after you from introducing bugs into your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a project doesn't have any tests at all, even just creating the first test or two would be a great pull request.&lt;/p&gt;

&lt;h3&gt;Strong Opinions, Weakly Held&lt;/h3&gt;

&lt;p&gt;Be ready and willing to explain why you did what you did: Was there another approach that you tried that might seem more obvious at first glance but once implemented had too many edge cases? If something seems more obvious than your solution (right or not) then the author may ask you about it.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A couple years ago, I was talking the Institute’s Bob Johansen about wisdom, and he explained that – to deal with an uncertain future and still move forward – they advise people to have “strong opinions, which are weakly held.”  They've been giving this advice for years, and I understand that it was first developed by Instituite Director Paul Saffo.  Bob explained that weak opinions are problematic because people aren’t inspired to develop the best arguments possible for them, or to put forth the energy required to test them. Bob explained that it was just as important, however, to not be too attached to what you believe because, otherwise, it undermines your ability to “see” and “hear” evidence that clashes with your opinions. This is what psychologists sometimes call the problem of “confirmation bias.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;-- &lt;a href="http://bobsutton.typepad.com/my_weblog/2006/07/strong_opinions.html"&gt;Bob Sutton&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should be capable of explaining the choices you made, but don't feel that the code embodies you. Sometimes you get it right, sometimes not. You are not a failure because your pull request was not accepted. In fact, you might even define success as being willing to walk away from code that you've written while being happy about it. After all, you want what's best for the project, right?&lt;/p&gt;

&lt;h3&gt;Don't be afraid to be the noob&lt;/h3&gt;

&lt;p&gt;Everyone is always a noob at something. Sometimes the best way to learn and improve is to put some code out there and see how it stands up to scrutiny. Again: You are not your code. Everyone looks at code they wrote 6 months ago and cringes -- everyone that's learning, at least, and most developers are.&lt;/p&gt;

&lt;h3&gt;Just do it!&lt;/h3&gt;

&lt;p&gt;It doesn't matter if you're a total noob or a 30 year veteran, open source is (usually) a complete meritocracy. The best ideas rise to the top no matter where they came from. The only requirement is that you try.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/ypZ1uZN90Ws/general-pull-request-etiquette</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/general-pull-request-etiquette</guid>
         <category>Open Source</category>
         <pubDate>Thu, 14 Mar 2013 12:15:39 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/general-pull-request-etiquette</feedburner:origLink></item> 
      <item>
         <title>You Can Help Fix ColdFusion JSON Serialization</title>
         <description>&lt;p&gt;Over the weekend I got word from Rakshith, the ColdFusion product manager, that it was ok to share the following news with the community at large. &lt;/p&gt;

&lt;p&gt;Adobe plans to continue improving the JSON (de)serialization functionality that was added in ColdFusion 8, at the very least including those improvements in the next version of ColdFusion (&lt;a href="http://blogs.coldfusion.com/assets/content/roadmap/ColdFusion%20RoadMap.pdf"&gt;codenamed "splendor"&lt;/a&gt; (pdf) [...gag me with a spoon]). Considering we have this awesome updater, I'd also love to see a patch for CF10, but that may be a pipe dream. Still, any improvement would be welcome.&lt;/p&gt;

&lt;p&gt;So what's wrong with &lt;code class='prettyprint'&gt;serializeJSON&lt;/code&gt;? Currently, there are many edge cases that serialize incorrectly, necessitating the use of an alternate serializer like &lt;a href="http://cfjson.riaforge.org/"&gt;CFJSON&lt;/a&gt; or my personal preference &lt;a href="http://jsonutil.riaforge.org/"&gt;JSONUtil&lt;/a&gt;. For example:&lt;/p&gt;

&lt;pre class='prettyprint'&gt;WriteOutput( serializeJson( { foo: '3' } ) ); //should be {"foo":"3"}

=&amp;gt; {"FOO":3}
&lt;/pre&gt;

&lt;p&gt;Not only is the key name annoyingly upper-cased, but the value, which was a string containing the number 3, has been converted to the numeric value 3.&lt;/p&gt;

&lt;p&gt;These are two known issues. There are a bunch of these issues that are known, and possibly some that are still unknown. Fortunately, Adobe is being forthright with us in sharing the fact that they're attempting to fix the bugs, and they're happy to accept feedback and bug repro cases.&lt;/p&gt;

&lt;p&gt;To that end, I've taken the first step and created a set of tests demonstrating all of the issues of which I am aware. Those &lt;a href="https://github.com/atuttle/cf-json-tests"&gt;tests are on GitHub&lt;/a&gt;, you can see them &lt;a href="http://fusiongrokker.com/demo/json/"&gt;run against ACF 9.0.1 here&lt;/a&gt;, and I am &lt;del&gt;happy to accept&lt;/del&gt; begging to you send pull requests with additional tests for more bugs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Showing the bugs in action is paramount to getting them fixed. If you know of a bug, and you don't report it, you only have yourself to blame for it not being fixed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you aren't familiar with writing tests using JavaScript, &lt;a href="https://github.com/atuttle/cf-json-tests/blob/master/index.cfm#L41"&gt;take a look at the code&lt;/a&gt;. It's very readable and you just mind find that it's easier than you thought... But if you're too lazy, or you still just don't quite have the hang of it, I would settle for you &lt;a href="https://github.com/atuttle/cf-json-tests/issues"&gt;filing a bug against the repo&lt;/a&gt;, so that someone can add a test for it.&lt;/p&gt;

&lt;p&gt;One last thing: Do you have ACF10 hosting and want to volunteer to host a copy of the tests? It would be helpful! &lt;a href="http://fusiongrokker.com/page/contact-me"&gt;Contact me!&lt;/a&gt;&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/QGKkKxZQgPI/you-can-help-fix-coldfusion-json-serialization</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/you-can-help-fix-coldfusion-json-serialization</guid>
         <category>ColdFusion</category>
         <pubDate>Mon, 11 Mar 2013 11:58:41 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/you-can-help-fix-coldfusion-json-serialization</feedburner:origLink></item> 
      <item>
         <title>My Sublime Keymap &amp; Common KB Shortcuts</title>
         <description>&lt;p&gt;What follows is nothing new or unique; it's just a collection of keyboard shortcuts and tips that I've picked up from various blog posts, videos, and personal recommendations from friends over the last ~year of using Sublime full time. I'll go over each setting on its own here in the post, but if you just want the keybindings, &lt;a href="https://gist.github.com/atuttle/5111814"&gt;you can find them in this gist&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Comma first!&lt;/strong&gt; You'll notice that I'm using a comma-first formatting. I like it because it makes missing (or superfluous, in the case of the first line) commas stick out like a sore thumb. You don't have to like it or use it, but it suits me well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Line swapping&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;{ "keys": ["alt+up"], "command": "swap_line_up" }
,{ "keys": ["alt+down"], "command": "swap_line_down" }
&lt;/pre&gt;

&lt;p&gt;Alt+up / Alt+down to move lines up or down. This is a neat trick I picked up from Eclipse back in the day, and I use it a lot; especially to move large chunks of code -- just highlight several lines and use it. &lt;/p&gt;

&lt;h3&gt;Duplicate line&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["ctrl+alt+down"], "command": "duplicate_line" }
&lt;/pre&gt;

&lt;p&gt;Ctrl + Alt + Down creates a copy of the current line on the next line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip:&lt;/strong&gt; If you have less than 1 line selected, that text is duplicated and placed after the selection. No more copy+paste to create a quick series of &lt;code class='prettyprint'&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;...&lt;/p&gt;

&lt;h3&gt;Delete line&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["alt+d"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} }
&lt;/pre&gt;

&lt;p&gt;Another favorite shortcut from Eclipse was Cmd+D; but Sublime does something &lt;del&gt;else&lt;/del&gt; &lt;strong&gt;better&lt;/strong&gt; with Cmd+D, so with a little effort I re-trained my brain to use Alt+D instead.&lt;/p&gt;

&lt;h3&gt;Split View&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;,{
    "keys": ["ctrl+alt+left"]
    ,"command": "set_layout"
    ,"args": {
        "cols": [0.0, 0.75, 1.0]
        ,"rows": [0.0, 1.0]
        ,"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
    }
}
,{
    "keys": ["ctrl+alt+right"]
    ,"command": "set_layout"
    ,"args": {
        "cols": [0.0, 0.25, 1.0]
        ,"rows": [0.0, 1.0]
        ,"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
    }
}
&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;I don't always use split view, but when I do, it's &lt;strong&gt;F&amp;amp;^%ing useful&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I use the above commands in conjunction with the built-in commands for Super+Alt+1/2/... Using Super+Alt+2 puts you in split-mode with each side taking up 50%, but sometimes you want to focus more on one side or the other. For instance, maybe your CSS is nice and tidy and doesn't need much horizontal space, so you want to give that available space to the HTML on the other side. With the above additions, Ctrl+Alt+Right gives 75% of the code's screen real estate to the right pane and 25% to the left (think "focus right") and Ctrl+Alt+Left ("focus left") gives 75% to the left pane and 25% to the right. Rarely do I ever need 3 panes, but when I do I just resort to the mouse for any resizing that needs to be done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip:&lt;/strong&gt; Use Super+K+B to toggle off the file navigator for even more screen real estate during split view.&lt;/p&gt;

&lt;p&gt;In addition to the above shortcuts that arrange panes, these move the cursor to the specified pane (e.g. super+1 focuses the left-most pane, super+2 focuses the 2nd pane from the left, etc):&lt;/p&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["super+1"], "command": "focus_group", "args": { "group": 0 } }
,{ "keys": ["super+2"], "command": "focus_group", "args": { "group": 1 } }
,{ "keys": ["super+3"], "command": "focus_group", "args": { "group": 2 } }
,{ "keys": ["super+4"], "command": "focus_group", "args": { "group": 3 } }
&lt;/pre&gt;

&lt;p&gt;And these shortcuts move the focused file to the specified pane:&lt;/p&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["alt+1"], "command": "move_to_group", "args": { "group": 0 } }
,{ "keys": ["alt+2"], "command": "move_to_group", "args": { "group": 1 } }
,{ "keys": ["alt+3"], "command": "move_to_group", "args": { "group": 2 } }
,{ "keys": ["alt+4"], "command": "move_to_group", "args": { "group": 3 } }
&lt;/pre&gt;

&lt;h3&gt;Bookmarks&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["f3"], "command": "next_bookmark" }
,{ "keys": ["shift+f3"], "command": "prev_bookmark" }
,{ "keys": ["super+f3"], "command": "toggle_bookmark" }
,{ "keys": ["super+shift+f3"], "command": "clear_bookmarks" }
,{ "keys": ["alt+f3"], "command": "select_all_bookmarks" }
&lt;/pre&gt;

&lt;p&gt;Bookmarks are crazy-useful when you find yourself jumping back and forth around a long file. When working on an app with a &lt;em&gt;long&lt;/em&gt; Mach-II.xml file I'll often bookmark the section of events that I'm working on, and views, and listeners, so that I can quickly jump back and forth between these sections.&lt;/p&gt;

&lt;p&gt;All of these are modifications to the built-in bookmark settings because I use a plugin called &lt;a href="https://github.com/titoBouzout/SideBarEnhancements"&gt;Sidebar Enhancements&lt;/a&gt; to add in some extra functionality for improving keyboard-focused workflow, and it overrides the default F2 shortcut for flipping between bookmarks into a rename-focused-file action. I spent many years on Windows, so I'm actually quite happy to have this action and F2 is easily remembered because Windows uses F2 for file renames; so I just bumped everything for bookmarks up to F3 instead.&lt;/p&gt;

&lt;h3&gt;Create XML/HTML Tag Pair&lt;/h3&gt;

&lt;pre class='prettyprint'&gt;,{ "keys": ["alt+,"], "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } }
&lt;/pre&gt;

&lt;p&gt;This is another re-mapping of built-in functionality. By default the shortcut for this is Ctrl+Shift+W, but I found that awkward to perform, so I switched it to Alt+&amp;lt; (it's really Alt+, but I think of it as Alt+&amp;lt; because I'm creating a tag-pair). This is a very handy tool, because it changes the closing tag to match the opening tag as you type. It defaults to a P, but the "p" portion is highlighted and if you overwrite that to "div" then the closing tag automatically becomes &lt;code class='prettyprint'&gt;&amp;lt;/div&amp;gt;&lt;/code&gt;. Another great thing about this is that when you hit space and start adding tag attributes, they are &lt;em&gt;not&lt;/em&gt; added to the closing tag. It's one of those elegant moments where everything just works perfectly. I love this shortcut!&lt;/p&gt;

&lt;h2&gt;Other Keyboard Shortcuts&lt;/h2&gt;

&lt;p&gt;Quickly, here's a list of other built-in shortcuts that I find myself doing all day, every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Super+K+B toggles the file navigator&lt;/li&gt;
&lt;li&gt;Super+P opens file search. File search is &lt;em&gt;super&lt;/em&gt; powerful!
&lt;ul&gt;&lt;li&gt;Fuzzy matching: you don't have to spell perfectly or even do consecutive chunks. Say I wanted to open "RecruitWeb.less" but I have 3 of them in different folders, named main, mobile, and new. If I hit Super+P and start typing "mobrecrless" it matches mobile/RecruitWeb.less.&lt;/li&gt;
&lt;li&gt;Line-jumps: Jumping into a file to fix a bug and you know the line number? select your file with fuzzy matching then add a colon and the line number: "mobrecrless:47" puts your cursor on line 47 of the file you choose.&lt;/li&gt;
&lt;li&gt;Symbol search: Instead of using a colon to jump to a specific line, say you know the CSS selector you want to modify but you don't know where it is in the file. Use "@" and start typing the selector: "mobrecrless@.ui-widget"&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Super+Shift+P opens the command palette, from which you can run package control, or toggle the minimap, or execute just about any command for which you can't remember the keyboard shortcut. This uses fuzzy matching as well.&lt;/li&gt;
&lt;li&gt;Super+Alt+Left/Right flip between open tabs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Plugins Without Which I Can't Live&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://wbond.net/sublime_packages/package_control"&gt;Package Control&lt;/a&gt;:&lt;/strong&gt; Don't leave home without it! Use this to install and enable/disable other plugins. Very handy! And the reason I won't include links to the rest of these plugins, because you can just search for them on Package Control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sidebar Enhancements:&lt;/strong&gt; Adds the aforementioned F2 to rename, confirm deletes, and many other goodies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced New File:&lt;/strong&gt; Super+Alt+N to create a new file and you can type out its path relative to the project root, so if I have a project open and type "assets/less/style.less" it will create style.less at the specified location within the project, creating any of the folders necessary in that path (and open the file for editing).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gist:&lt;/strong&gt; I store all of my snippets in &lt;a href="https://gist.github.com/atuttle-snippets"&gt;their own github account&lt;/a&gt; so that they are not tied to my editor, and they can be shared, forked, and collaborated on. There is a small latency initiating an "insert gist" command while it indexes my available snippets, but I find that I use them infrequently enough that it doesn't bother me. If I used them more regularly I would probably do something local. Using gists also means I don't have to use the sublime snippet syntax, which is not difficult, but it is another set of (minor) "lock-in" that I would have to go back and remove if/when I move on to another editor in the future.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live Reload:&lt;/strong&gt; because refreshing pages to see your changes is for chumps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown:&lt;/strong&gt; I write a lot of things in &lt;a href="http://daringfireball.net/projects/markdown/"&gt;markdown&lt;/a&gt;, including blog posts here and elsewhere, articles for things like &lt;a href="http://learncfinaweek.com/"&gt;Learn CF In A Week&lt;/a&gt;, and so on. It's become a core part of how I write. This plugin adds syntax highlighting for Markdown.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think that about covers it... for now. I seem to be continuously evolving how I use Sublime, which is a tremendous part of what makes it so useful: you can mold it to the way you like to work.&lt;/p&gt;
</description>
         <link>http://feedproxy.google.com/~r/FusionGrokker/~3/Y2CXmpkCqU8/my-sublime-keymap-common-kb-shortcuts</link>
         <guid isPermaLink="false">http://fusiongrokker.com/post/my-sublime-keymap-common-kb-shortcuts</guid>
         <category>Meta</category><category>Sublime</category>
         <pubDate>Fri, 08 Mar 2013 13:06:26 GMT</pubDate>
      <feedburner:origLink>http://fusiongrokker.com/post/my-sublime-keymap-common-kb-shortcuts</feedburner:origLink></item> 
   </channel>
</rss>
