<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Orange is my favorite color</title>
	
	<link>http://www.ghidinelli.com</link>
	<description />
	<lastBuildDate>Wed, 05 Jun 2013 17:05:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OrangeIsMyFavoriteColor" /><feedburner:info uri="orangeismyfavoritecolor" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>37.772329</geo:lat><geo:long>-122.41087</geo:long><feedburner:emailServiceId>OrangeIsMyFavoriteColor</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>CFPAYMENT now on GitHub</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/-vEZGgwz5GM/cfpayment-now-on-github</link>
		<comments>http://www.ghidinelli.com/2013/06/05/cfpayment-now-on-github#comments</comments>
		<pubDate>Wed, 05 Jun 2013 17:05:29 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[My Software]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[cfpayment]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1557</guid>
		<description><![CDATA[CFPAYMENT, the open source payment processing library for ColdFusion, is now hosted on GitHub for your forking pleasure]]></description>
			<content:encoded><![CDATA[<p>I see people in ColdFusion land still reinventing the wheel in writing payment gateways.  Stop!  Believe me when I tell you there are 502 ways for a payment request to fail and I&#8217;ve experienced every single one of them!  The open source payment processing library, CFPAYMENT, has processed tens of millions of dollars in production applications over the past 5 years.  Either use one of our supported gateways (including the very cool <a href="http://www.stripe.com">Stripe</a>) or write a tiny amount of code to translate requests from your gateway of choice.</p>
<p>To encourage you to leverage rather than rebuild, I&#8217;ve moved the source to GitHub where you can fork and pull:</p>
<p><a href="https://github.com/ghidinelli/cfpayment">https://github.com/ghidinelli/cfpayment</a></p>
<p>There&#8217;s also a <a href="https://groups.google.com/forum/?fromgroups#!forum/cfpayment">Google group</a> where I provide support if you want to use a gateway we don&#8217;t yet include.  I&#8217;ll help you understand how to use the library and extend it so you don&#8217;t go through the pain of learning the hard way how transactions can fail in production.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=-vEZGgwz5GM:COviD9-GhoU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=-vEZGgwz5GM:COviD9-GhoU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=-vEZGgwz5GM:COviD9-GhoU:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/-vEZGgwz5GM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2013/06/05/cfpayment-now-on-github/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2013/06/05/cfpayment-now-on-github</feedburner:origLink></item>
		<item>
		<title>Turbo Stack Traces for Tough Debugging</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/is3aHEaF4Gk/turbo-stack-traces-for-tough-debugging</link>
		<comments>http://www.ghidinelli.com/2013/04/02/turbo-stack-traces-for-tough-debugging#comments</comments>
		<pubDate>Tue, 02 Apr 2013 21:51:09 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1547</guid>
		<description><![CDATA[Here&#8217;s a guerilla debugging tactic based upon an old post of mine, Finding Memory Leaks in Coldfusion JVM, and some inspiration from Charlie Arehart.  I&#8217;m in the process of migrating from ColdFusion 8 to 10 and am encountering some unexpected errors.  This stack trace snippet should strike fear into the heart of any [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a guerilla debugging tactic based upon an old post of mine, <a href="http://www.ghidinelli.com/2009/07/16/finding-memory-leaks-coldfusion-jvm">Finding Memory Leaks in Coldfusion JVM</a>, and some inspiration from <a href="http://www.carehart.org/blog/client/index.cfm/2009/6/24/easier_thread_dumps">Charlie Arehart</a>.  I&#8217;m in the process of migrating from ColdFusion 8 to 10 and am encountering some unexpected errors.  This stack trace snippet should strike fear into the heart of any developer:</p>
<pre><code>ava.lang.StackOverflowError at org.apache.xerces.dom.ParentNode.item(Unknown Source) at
net.sf.saxon.dom.NodeWrapper$ChildEnumeration.skipFollowingTextNodes(NodeWrapper.java:1166) at
net.sf.saxon.dom.NodeWrapper$ChildEnumeration.next(NodeWrapper.java:1194) at
net.sf.saxon.tree.util.Navigator$EmptyTextFilter.next(Navigator.java:918) at
net.sf.saxon.tree.util.Navigator$DescendantEnumeration.advance(Navigator.java:1052) at
net.sf.saxon.tree.util.Navigator$DescendantEnumeration.advance(Navigator.java:1111) at
net.sf.saxon.tree.util.Navigator$BaseEnumeration.next(Navigator.java:949) at
net.sf.saxon.tree.util.Navigator$DescendantEnumeration.advance(Navigator.java:1043) at
net.sf.saxon.tree.util.Navigator$BaseEnumeration.next(Navigator.java:949) at
... (endless repeat)</code></pre>
<p>Something is stuck in a loop but because the stack trace fills up, you can&#8217;t see any of the lines of code being executed just before the ka-blammo.  So, what to do?  </p>
<h2>Brute Force Debugging</h2>
<p>My solution was to swipe a perl script <a href="http://unix.stackexchange.com/questions/43185/run-unix-command-precisely-at-very-short-intervals-without-accumulating-time-lag">to run commands at very short intervals</a> and dump jstack output into a series of text files.  Low-tech, but effective.  This is the timer.pl script:</p>
<pre><code>#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw/time sleep/;

sub launch {
    return if fork;
    exec @_;
    die "Couldn't exec";
}

$SIG{CHLD} = 'IGNORE';

my $interval = shift;
my $start = time();
while (1) {
    launch(@ARGV);
    $start += $interval;
    sleep $start - time();
}</code></pre>
<p>And a separate shell script, dump.sh, so the redirect would create a new file every time it was run.  9892 is just the process id of the ColdFusion instance:</p>
<pre><code>#!/bin/sh
sudo -u nobody /usr/java/latest/bin/jstack 9892 &gt; t_$(date '+%Y%m%d%H%M%S_%N')</code></pre>
<p>I tried running it every second, but that wasn&#8217;t enough to catch the stack overflow in the act.  I upped it to every 500ms, 100ms and finally 50ms until it caught the offending code.  Here&#8217;s the command in action:</p>
<pre><code>perl timer.pl 0.05 ./dump.sh </code></pre>
<p>That says run the dump.sh every 50ms which will output to files formatted like t_20130402171521_009840232 using the current date and time.</p>
<h2>Results</h2>
<p>Running every 50ms, it doesn&#8217;t take long to fill up a directory so I started the script on the command line and in my web browser, triggered the offending code.  Here&#8217;s what my directory looks like:</p>
<pre><code> 52 t_20130402171519_959011475
 52 t_20130402171520_009648175
 52 t_20130402171520_060316767
 52 t_20130402171520_110450371
 52 t_20130402171520_160301392
 52 t_20130402171520_210357359
 52 t_20130402171520_260432922
 52 t_20130402171520_309171913
 52 t_20130402171520_360033048
 52 t_20130402171520_409978373
 52 t_20130402171520_459903958
 52 t_20130402171520_510488116
 52 t_20130402171520_558777256
 60 t_20130402171520_610244244
 72 t_20130402171520_659494494
136 t_20130402171520_709058569
136 t_20130402171520_760286651
136 t_20130402171520_810351161
136 t_20130402171520_860382457
136 t_20130402171520_910136459
136 t_20130402171520_960370954
136 t_20130402171521_009840232
 72 t_20130402171521_059986004
136 t_20130402171521_110340195
136 t_20130402171521_160277982
136 t_20130402171521_209090149
 84 t_20130402171521_260090368
136 t_20130402171521_310428721
136 t_20130402171521_367027484
136 t_20130402171521_410303418
136 t_20130402171521_460314216
136 t_20130402171521_509053355
136 t_20130402171521_560120477
136 t_20130402171521_610417764
128 t_20130402171521_677647036
136 t_20130402171521_712667159
136 t_20130402171521_758884870
136 t_20130402171521_810562747
136 t_20130402171521_860425517
...</code></pre>
<p>That&#8217;s kilobytes in the first column, filename in the second.  You can see the steady state while I&#8217;m going to push the button in the web browser and then very quickly the stack traces get larger as code is executing.  What I wasn&#8217;t getting until I stepped down to 50ms iterations were the intermediate 72kb and 84kb stack trace which actually showed the offending lines between the stack overflows churning.</p>
<p>While this hasn&#8217;t solved the problem yet, at least I know where to go looking (and it&#8217;s at <em>you</em>, XmlSearch()) to continue the troubleshooting process.</p>
<h2>Conclusion</h2>
<p>This is a pretty hacky solution but if you&#8217;re this far into the deep end of the &#8220;what do I do?&#8221; pool, it&#8217;s a useful technique.  A line debugger would be far better but I can&#8217;t replicate this in my test environment.  So, forget the &#8220;right&#8221; way to do it and let&#8217;s just get <em>some</em>  useful information so we can make progress.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=is3aHEaF4Gk:m67ng3PlHvw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=is3aHEaF4Gk:m67ng3PlHvw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=is3aHEaF4Gk:m67ng3PlHvw:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/is3aHEaF4Gk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2013/04/02/turbo-stack-traces-for-tough-debugging/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2013/04/02/turbo-stack-traces-for-tough-debugging</feedburner:origLink></item>
		<item>
		<title>jQuery TableSorter finds new life</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/CJBLjvNi9Ho/jquery-tablesorter-finds-new-life</link>
		<comments>http://www.ghidinelli.com/2013/03/30/jquery-tablesorter-finds-new-life#comments</comments>
		<pubDate>Sat, 30 Mar 2013 18:22:54 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1545</guid>
		<description><![CDATA[jQuery TableSorter plugin finds new life thanks to Rob Garrison and brings an updated Grouping plugin to create collapsible groups of like items from HTML tables]]></description>
			<content:encoded><![CDATA[<p>Many moons ago, I helped write the docs for <a href="http://www.tablesorter.com">TableSorter</a>, a jQuery plugin for sorting HTML tables.  It was last updated in 2008 but it&#8217;s as useful today as it was then.  Thankfully, Rob Garrison has been making <a href="https://github.com/Mottie/tablesorter">significant updates</a> to it on GitHub.  Importantly, he&#8217;s also brought in and radically improved one of my favorite widgets for Grouping.  This lets you click a header and see collapsible groups.  While the old widget was pretty limited, Rob has gone wild with this one giving you all kind of formatting capability over how the groups are formed and titled.</p>
<p>Two huge thumbs up: take a look at this <a href="http://mottie.github.com/tablesorter/docs/example-widget-grouping.html">jQuery table grouping demo</a>.  </p>
<p>If you&#8217;re using TableSorter 2.0.3 or 2.0.5 from 2008, take a look at Rob&#8217;s version today.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=CJBLjvNi9Ho:Mn_BAxjP8FM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=CJBLjvNi9Ho:Mn_BAxjP8FM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=CJBLjvNi9Ho:Mn_BAxjP8FM:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/CJBLjvNi9Ho" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2013/03/30/jquery-tablesorter-finds-new-life/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2013/03/30/jquery-tablesorter-finds-new-life</feedburner:origLink></item>
		<item>
		<title>Faster unit tests with ColdSpring and MXUnit</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/7qb2VlwBH5w/faster-unit-tests-with-coldspring-and-mxunit</link>
		<comments>http://www.ghidinelli.com/2013/03/27/faster-unit-tests-with-coldspring-and-mxunit#comments</comments>
		<pubDate>Thu, 28 Mar 2013 00:07:32 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[My Software]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[coldspring]]></category>
		<category><![CDATA[mxunit]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1540</guid>
		<description><![CDATA[Make unit testing faster and more isolated by instructing Coldspring to only load the relevant beans for your test.]]></description>
			<content:encoded><![CDATA[<p>Nerd post today.  Most of my <a href="http://www.mxunit.org">MXUnit</a> unit tests look something like:</p>
<pre><code>&lt;cffunction name="setUp" returntype="void" access="public"&gt;
	&lt;cfscript&gt;
		variables.beanFactory = createObject("component", "coldspring.beans.DefaultXmlBeanFactory").init();
		variables.beanFactory.loadBeansFromXmlFile("/config/globalbeans.xml", true);
		variables.service = variables.beanFactory.getBean("BatchbookService");
	&lt;/cfscript&gt;

	&lt;cfset localMode = true /&gt;
&lt;/cffunction&gt;</code></pre>
<p>You can read more about my <a href="http://www.ghidinelli.com/2012/08/25/unit-testing-trick-developing-against-apis">localMode trick for testing remote APIs</a> but I&#8217;m simply loading up my Coldspring configuration file for my app which includes dozens and dozens and dozens of beans.  I have three problems with this:</p>
<ol>
<li>The unit tests depend on the configuration used to run the site which might not always be in my environment</li>
<li>It slows down my tests by generating beans that my unit test doesn&#8217;t need</li>
<li>My production and test bean config may not be the same (credentials, etc)</li>
</ol>
<p>I might be able to get around #2 by using lazy init but the principle still holds: the unit test should be as standalone as possible.  In the case I&#8217;m working on today, I have a client I&#8217;ve written (<a href="https://github.com/ghidinelli/cfpayment">and released</a>) for a third party API from <a href="http://www.batchbook.com">Batchbook</a>.  But I need to have some Batchbook-to-My-App conversions of JSON to queries and so forth.  I don&#8217;t want to bake those into my publicly-released client so what I really want in my production app is some bean config that looks like:</p>
<pre><code>&lt;bean id="BatchbookService" class="model.external.batchbook.BatchbookService"&gt;
	&lt;constructor-arg name="BatchbookClient"&gt;
		&lt;bean class="model.external.batchbook.batchbook"&gt;
	        &lt;constructor-arg name="apikey"&gt;&lt;value&gt;password&lt;/value&gt;&lt;/constructor-arg&gt;
	        &lt;constructor-arg name="endpoint"&gt;&lt;value&gt;https://somehost.batchbook.com/api/v1&lt;/value&gt;&lt;/constructor-arg&gt;
			&lt;constructor-arg name="restconsumer"&gt;&lt;ref bean="restconsumer" /&gt;&lt;/constructor-arg&gt;
			&lt;constructor-arg name="JSONUtil"&gt;&lt;ref bean="JSONUtil" /&gt;&lt;/constructor-arg&gt;
		&lt;/bean&gt;
	&lt;/constructor-arg&gt;
&lt;/bean&gt;
&lt;bean id="RestConsumer" class="model.external.restconsumer" /&gt;
&lt;bean id="JSONUtil" class="model.utils.JSONUtil" /&gt;</code></pre>
<p>But if my BatchbookClient is a nested constructor-arg, how can I get it from the beanfactory to test it?  </p>
<h2>Alternative Coldspring Configurations</h2>
<p>Turns out there&#8217;s more than one way to load beans into Coldspring and passing a path to an XML configuration file is just one.  Looking over the <a href="http://www.coldspringframework.org/downloads/ColdSpring_Reference.pdf">1.0 reference guide</a>, I found two additional methods of interest:</p>
<ul>
<li>loadBeansFromXmlRaw(xmlStringConfig, true)</li>
<li>loadBeansFromXmlObj(parsedXmlConfig, true)</li>
</ul>
<p>Applying that to my current unit test, my setup method now looks like:</p>
<pre><code>&lt;cffunction name="setup"&gt;
	&lt;cfset var beanConfigs = "" /&gt;
	&lt;cfset var localMode = true /&gt;

	&lt;cfsavecontent variable="beanConfigs"&gt;
		&lt;beans&gt;
			&lt;bean id="BatchbookService" class="model.external.batchbook.BatchbookService"&gt;
				&lt;constructor-arg name="BatchbookClient"&gt;&lt;ref bean="BatchbookClient" /&gt;&lt;/constructor-arg&gt;
			&lt;/bean&gt;
			&lt;bean id="BatchbookClient" class="model.external.batchbook.batchbook"&gt;
		        &lt;constructor-arg name="apikey"&gt;&lt;value&gt;password&lt;/value&gt;&lt;/constructor-arg&gt;
		        &lt;constructor-arg name="endpoint"&gt;&lt;value&gt;https://somehost.batchbook.com/api/v1&lt;/value&gt;&lt;/constructor-arg&gt;
				&lt;constructor-arg name="restconsumer"&gt;&lt;ref bean="restconsumer" /&gt;&lt;/constructor-arg&gt;
				&lt;constructor-arg name="JSONUtil"&gt;&lt;ref bean="JSONUtil" /&gt;&lt;/constructor-arg&gt;
			&lt;/bean&gt;
			&lt;bean id="RestConsumer" class="model.external.restconsumer" /&gt;
			&lt;bean id="JSONUtil" class="model.utils.JSONUtil" /&gt;
		&lt;/beans&gt;
	&lt;/cfsavecontent&gt;

	&lt;cfscript&gt;
		variables.beanFactory = createObject("component", "coldspring.beans.DefaultXmlBeanFactory").init();
		variables.beanFactory.loadBeansFromXmlRaw(beanConfigs, true);

		variables.bb = variables.beanFactory.getBean("BatchbookClient");
		variables.svc = variables.beanFactory.getBean("BatchbookService");
	&lt;/cfscript&gt;

&lt;/cffunction&gt;</code></pre>
<p>Coldspring now instantiates much quicker and it only loads beans related to my unit test.  Plus, I have the flexibility to directly address the BatchbookClient and run it through its paces alongside the BatchbookService. </p>
<p>If you only have a few unit tests, these improvements won&#8217;t mean much but as your test suites grow (and you work towards continuous deployment&#8230;) you will find that speeding up testing is always a good thing and helps encourage you to do it.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=7qb2VlwBH5w:xUJXnD72V0o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=7qb2VlwBH5w:xUJXnD72V0o:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=7qb2VlwBH5w:xUJXnD72V0o:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/7qb2VlwBH5w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2013/03/27/faster-unit-tests-with-coldspring-and-mxunit/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2013/03/27/faster-unit-tests-with-coldspring-and-mxunit</feedburner:origLink></item>
		<item>
		<title>Happy New Year</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/9yPcIAxGzaE/happy-new-year</link>
		<comments>http://www.ghidinelli.com/2012/12/31/happy-new-year#comments</comments>
		<pubDate>Mon, 31 Dec 2012 21:54:33 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Racing]]></category>
		<category><![CDATA[Web/Internet]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1521</guid>
		<description><![CDATA[2013: maximum attack!]]></description>
			<content:encoded><![CDATA[<p>2012 was like a bolt of lightning.  I hope 2013 is as exciting as Graham Hill taking pole at a wet Spa Francorchamps in 1965:</p>
<p><a href="http://www.flickr.com/photos/bestf1pictures/7892509328/lightbox/"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/12/tumblr_mfwo63cndu1rnh3rzo1_1280-300x202.jpg" alt="Graham Hill, Spa Franchorchamps, 1965" title="Graham Hill, Spa Franchorchamps, 1965" width="300" height="202" class="aligncenter" /></a></p>
<p>Pic linked from <a href="http://wren2972.tumblr.com/image/39315178896">wren</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=9yPcIAxGzaE:IQw7EobcqdM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=9yPcIAxGzaE:IQw7EobcqdM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=9yPcIAxGzaE:IQw7EobcqdM:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/9yPcIAxGzaE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/12/31/happy-new-year/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/12/31/happy-new-year</feedburner:origLink></item>
		<item>
		<title>25 Hours of Thunderhill – 2012</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/YLL-vMwsefo/25-hours-of-thunderhill-2012</link>
		<comments>http://www.ghidinelli.com/2012/12/12/25-hours-of-thunderhill-2012#comments</comments>
		<pubDate>Thu, 13 Dec 2012 02:37:04 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[endurance]]></category>
		<category><![CDATA[Racing]]></category>
		<category><![CDATA[thunderhill]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1518</guid>
		<description><![CDATA[This is how I spent my last weekend:

I returned for a second year to co-drive the #3 Tiger Racing BMW M3 in the world&#8217;s longest sports car endurance race.  For 25 hours, the goal is to keep circulating to amass the most laps.
In reality, what is a season of racing for the machine also [...]]]></description>
			<content:encoded><![CDATA[<p>This is how I spent my last weekend:</p>
<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/12/25hourstartinggrid.jpg"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/12/25hourstartinggrid-300x191.jpg" alt="Starting Grid for Tiger Racing" title="Starting Grid for Tiger Racing" width="300" height="191" class="aligncenter size-medium wp-image-1516" /></a></p>
<p>I returned for a second year to co-drive the #3 Tiger Racing BMW M3 in the world&#8217;s longest sports car endurance race.  For 25 hours, the goal is to keep circulating to amass the most laps.</p>
<p>In reality, what is a season of racing for the machine also tends to bring a season full of drama in one short day.  Mechanical failures, collisions with other drivers, sleep deprivation and all-out thrashing by crews to get cars back on track are what make this the ultimate team event.  </p>
<p>Drivers have it relatively easy &#8211; we can usually sneak a bit of shut-eye or leave the track to get refreshed.  The crew usually stays glued to the pit box for 25 hours straight, fingers crossed for nothing other than routine driver swaps, tire changes and refueling but ready for the almost inevitable issues that pop up over 2300 miles of racing.</p>
<p>We had our fair share of issues, starting with an early collision which forced us out of contention but we completed more than half the distance and had a lot of fun doing it.  I drove two stints for about 90 laps around the 2.86 mile <a href="http://www.thunderhill.com">Thunderhill Raceway</a> and set the fastest time for our team at 3:30am during a night stint.</p>
<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/12/64660_10152345445500074_934394284_n.jpg"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/12/64660_10152345445500074_934394284_n-300x198.jpg" alt="Nightime at Thunderhill" title="Nightime at Thunderhill" width="300" height="198" class="aligncenter size-medium wp-image-1517" /></a></p>
<p>Both of my stints were in the dark actually and it&#8217;s a time that I absolutely love driving.  The air is cold and once the tires are hot, it&#8217;s a great segment of the race to make up time.  </p>
<p>One of the challenges of sharing a car with other drivers is that we aren&#8217;t always the same size.  This year I had a new seat insert courtesy of <a href="http://www.racecarseat.com/">Troy Stevens</a> which made a radical difference in my comfort over the course of an hour and forty minutes in the car.  I had my <a href="http://www.saferacer.com">SafeRacer</a> gear on from head to toe, including a <a href="http://www.saferacer.com/stilo/?manufacturerid=82">Stilo ST4F helmet</a>, <a href="http://www.saferacer.com/alpine-stars-2012-gp-tech-suit.html?productid=2450">Alpinestars race suit and gloves</a> and a great Alpinestars <a href="http://www.saferacer.com/alpine-stars-2012-zx-longsleeve-underwear-top.html?productid=2482">Carbon-X base layer</a> that wicked away my sweat so I was both safe <em>and</em> comfortable.   I&#8217;ve been working hard on my fitness and it paid off.</p>
<p>I look forward to 2013 and returning to put it all together yet again for a run at a podium.</p>
<p>(images couresy of team photographer <a href="http://www.ingosimages.com/">IngosImages.com</a>)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=YLL-vMwsefo:0y6hR__t1IM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=YLL-vMwsefo:0y6hR__t1IM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=YLL-vMwsefo:0y6hR__t1IM:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/YLL-vMwsefo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/12/12/25-hours-of-thunderhill-2012/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/12/12/25-hours-of-thunderhill-2012</feedburner:origLink></item>
		<item>
		<title>Cover Photo Published</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/T8RFzLsGeTI/cover-photo-published</link>
		<comments>http://www.ghidinelli.com/2012/11/09/cover-photo-published#comments</comments>
		<pubDate>Fri, 09 Nov 2012 18:09:39 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Racing]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[SCCA]]></category>
		<category><![CDATA[sfrscca]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1513</guid>
		<description><![CDATA[I'm a fancy pants published photographer.  My home smells of rich mahogany now.]]></description>
			<content:encoded><![CDATA[<p>I shot this photo at Mazda Raceway Laguna Seca a couple of months ago and it was published on the cover of an <a href="http://www.sfrscca.org">SCCA magazine</a> this month!  GoPro is a big advertiser which might have had something to do with it. <img src='http://www.ghidinelli.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/11/sfrscca-thewheel-cover-nov2012.jpg"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/11/sfrscca-thewheel-cover-nov2012.jpg" alt="SFR SCCA The Wheel cover for November 2012" title="SFR SCCA The Wheel cover for November 2012" width="457" height="573" class="aligncenter size-full wp-image-1514" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=T8RFzLsGeTI:4YVNNi7Wnwc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=T8RFzLsGeTI:4YVNNi7Wnwc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=T8RFzLsGeTI:4YVNNi7Wnwc:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/T8RFzLsGeTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/11/09/cover-photo-published/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/11/09/cover-photo-published</feedburner:origLink></item>
		<item>
		<title>DoesWhat Interview</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/MjHjFQW4DEM/doeswhat-interview</link>
		<comments>http://www.ghidinelli.com/2012/09/05/doeswhat-interview#comments</comments>
		<pubDate>Wed, 05 Sep 2012 18:20:58 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Racing]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1491</guid>
		<description><![CDATA[My recent interview on startups, travel and motorsports is live on doeswhat.com]]></description>
			<content:encoded><![CDATA[<p>I was recently interviewed by Alex Hawke of DoesWhat.com &#8211; they have a very cool library of <a href="http://doeswhat.com">interviews with entrepreneurs</a> from the tech/software space.  There are a lot of big names and I feel privileged to be included.  I liked the questions that Alex asked &#8211; it gave me a chance to both look forward and reflect on how I got here.  </p>
<p>My favorite question was &#8220;What are you most excited about, auto racing, travel or startups?&#8221;  <a href="http://doeswhat.com/2012/08/29/interview-with-brian-ghidinelli-motorsportreg-com/">See what I said</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=MjHjFQW4DEM:6YKRk8pxe2M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=MjHjFQW4DEM:6YKRk8pxe2M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=MjHjFQW4DEM:6YKRk8pxe2M:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/MjHjFQW4DEM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/09/05/doeswhat-interview/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/09/05/doeswhat-interview</feedburner:origLink></item>
		<item>
		<title>Unit testing trick for developing against remote APIs</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/GVpx9is-0W0/unit-testing-trick-developing-against-apis</link>
		<comments>http://www.ghidinelli.com/2012/08/25/unit-testing-trick-developing-against-apis#comments</comments>
		<pubDate>Sat, 25 Aug 2012 15:38:44 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1476</guid>
		<description><![CDATA[One approach to conditionally using mocks in unit tests for remote/REST API library development]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing a lot of development of API libraries over the past year while integrating remote services into <a href="http://www.motorsportreg.com">MotorsportReg.com</a>.  I struggled with how to best perform unit tests to verify the code works locally as well as integration tests to know it works with the remote API which we don&#8217;t control.</p>
<p>The problem is you don&#8217;t want to (or can&#8217;t&#8230;) always send every request over the wire to the remote API.  You might develop offline, the remote API might have limits, or real requests may take a long time which is not practical for rapid testing.  Sometimes we want to use a mock response and other times we want to connect to the third party to make sure things function properly.  How do we write unit tests and integration tests without duplicating our work?  </p>
<h2>Conditionally Using Mocks</h2>
<p>A &#8220;mock&#8221; is an arbitrarily defined data structure or object that mimics behavior.  <a href="http://mxunit.org">MxUnit</a> describes mocks providing &#8220;the ability to easily and quickly define behaviors for dependencies&#8221; which allow us to test more discretely without worrying about dependent data structures, objects or behaviors.</p>
<p>Since the concept of an integration test is different for a headless client library, my approach has been to use MxUnit&#8217;s injectMethod() to conditionally override a method for mocking:</p>
<pre><code>&lt;cffunction name="offlineInjector" access="private" hint="conditionally injects a mock if we are running tests in offline mode vs. integration mode"&gt;
  &lt;cfif localMode&gt;
    &lt;cfset makePublic(arguments[1], arguments[4]) /&gt;
    &lt;cfset injectMethod(argumentCollection = arguments) /&gt;
  &lt;/cfif&gt;
&lt;/cffunction&gt;</code></pre>
<p>localMode is defined in the setup method and is a simple boolean.  I replace all usage of injectMethod() to instead use my offlineInjector():</p>
<p><code>&lt;cfset offlineInjector(clientsvc, this, "anExampleListMock", "myMethodToReplace") /&gt;</code></p>
<p>Each time the test is run, the method will be mocked only if localMode is true.  Otherwise, the client library will use connect to the remote API to execute the request.  I do most of my development with localMode = true and set it to false when I&#8217;m ready to verify everything works both locally and remotely.</p>
<p>There are probably many ways to skin this cat and this has been working well for me without duplicating test code.  I used it most recently to wrap up integration with <a href="http://www.emailcenterpro">EmailCenterPro</a> and their <a href="http://services.emailcenterpro.com/api">REST API</a> which lets us use templated emails to send service agreements and welcome new customers as part of our sales process.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=GVpx9is-0W0:jfHo8PQgspw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=GVpx9is-0W0:jfHo8PQgspw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=GVpx9is-0W0:jfHo8PQgspw:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/GVpx9is-0W0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/08/25/unit-testing-trick-developing-against-apis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/08/25/unit-testing-trick-developing-against-apis</feedburner:origLink></item>
		<item>
		<title>Sonoma Sprints &amp; Spec Miata Festival Video</title>
		<link>http://feedproxy.google.com/~r/OrangeIsMyFavoriteColor/~3/OueBN6OCx_o/sonoma-sprints-spec-miata-festival-video</link>
		<comments>http://www.ghidinelli.com/2012/07/23/sonoma-sprints-spec-miata-festival-video#comments</comments>
		<pubDate>Mon, 23 Jul 2012 16:50:09 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Racing]]></category>
		<category><![CDATA[sfrscca]]></category>
		<category><![CDATA[specmiata]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1467</guid>
		<description><![CDATA[Racing at the inaugural Sonoma Sprints returns a threesome of podiums with champagne.  Plus, video with three camera angles!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/07/smf-carousel-group-photo.JPG"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/07/smf-carousel-group-photo-300x225.jpg" alt="smf-carousel-group-photo" title="smf-carousel-group-photo" width="300" height="225" class="alignright size-medium wp-image-1470" /></a>Been a crazy couple of months but I got the #12 out for a couple of race weekends at Mazda Raceway Laguna Seca and Infineon/Sears Point.  As a San Francisco Region board member for the last year and a half, I developed an idea to turn our annual Infineon Raceway Double Regional event into the &#8220;Sonoma Sprints&#8221;, hopefully the beginnings of a west coast championship race combined with our incredibly popular Spec Miata Festival.</p>
<p>To help build the biggest, most competitive field possible, I campaigned to change the format to a Double Rational, which is SCCA&#8217;s National and Regional racing on track simultaneously.  Drivers who primarily race National races would make the tow to earn points and run at Infineon (which hasn&#8217;t had a National in well over 5 years) and those who already know how competitive our regional weekends are (40-50 Spec Miatas on average) could come do battle as well.  Philosophically and economically, I see no reason to have the distinction between Regional and National racing in the way it&#8217;s currently implemented and for this event, I wanted to have huge, competitive fields.</p>
<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/07/IMG_23721.JPG"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/07/IMG_23721-200x300.jpg" alt="Jennifer and I post race" title="Jennifer and I post race" width="200" height="300" class="alignleft size-medium wp-image-1473" /></a>For an inaugural event, I don&#8217;t think too many people were disappointed.  The Spec Miata group actually sold out more than 10 days in advance of the event when we reached the limit for number of cars permitted on track by the rules.  Spec Racer Ford saw huge contingents make the haul from Oregon and Southern California.  Our formula car fields looked every bit as full as the Runoffs last year at Road America.  The weather was gorgeous, the races were mostly under green flags and the feedback was very positive.  It will take a long time before we have the prestige of Chicago Region&#8217;s June Sprints (which is now in its 57th year&#8230;) but there is no doubt that we had the competitiveness required of a big race.</p>
<p><a href="http://www.ghidinelli.com/wp-content/uploads/2012/07/7548056578_94adc4d57b_k.jpg"><img src="http://www.ghidinelli.com/wp-content/uploads/2012/07/7548056578_94adc4d57b_k-300x199.jpg" alt="Darin (left) and me (right) spraying the champagne!" title="Darin (left) and me (right) spraying the champagne!" width="300" height="199" class="alignright size-medium wp-image-1468" /></a>I had a great weekend, with a lot of old friends making their way back out to the track.  TFB Performance finally put humpty dumpty #12 back together again so I could go racing and we had a good haul with one 3rd and two 2nds.  Former trailer-sharing-partner Kevin Baillie and I had friends and family out on Sunday for the two races along with my semi-annual Taco Truck catering program and it was another huge success.  To end the weekend, I got to stand on the podium with the <a href="http://www.aimtires.com">AIM Tires</a> trophy girls and a big bottle of champagne.  Despite not standing on the top step (kudos to Polsley for great drives all weekend long), this was one of the most fun weekends I&#8217;ve had and something I hope we can do every summer.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/fBLKYHaGz5o?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>Props to SafeRacer whose <a href="http://www.saferacer.com/fresh-air-systems-carbon-x-cool-shirt.html?productid=345">Cool Suit system</a> kept me cool as a cucumber during the 40-minute races in the heat.  The ability to focus on the race and not think about how hot you are is a huge competitive advantage.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=OueBN6OCx_o:Xqd_GG6LJLU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=OueBN6OCx_o:Xqd_GG6LJLU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?a=OueBN6OCx_o:Xqd_GG6LJLU:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/OrangeIsMyFavoriteColor?d=2mJPEYqXBVI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OrangeIsMyFavoriteColor/~4/OueBN6OCx_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2012/07/23/sonoma-sprints-spec-miata-festival-video/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.ghidinelli.com/2012/07/23/sonoma-sprints-spec-miata-festival-video</feedburner:origLink></item>
	</channel>
</rss>
