<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Orange is my favorite color &#187; Research/HOWTO</title>
	<atom:link href="http://www.ghidinelli.com/c/research/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ghidinelli.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Jan 2017 17:45:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sleep Deprivation, Caffeine and Cold Showers</title>
		<link>http://www.ghidinelli.com/2016/03/25/sleep-deprivation-caffeine-cold-showers</link>
		<comments>http://www.ghidinelli.com/2016/03/25/sleep-deprivation-caffeine-cold-showers#comments</comments>
		<pubDate>Fri, 25 Mar 2016 19:42:35 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Research/HOWTO]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1707</guid>
		<description><![CDATA[How cold water replaced caffeine in my sleep-deprived, new-parent, busy-morning routine]]></description>
			<content:encoded><![CDATA[<p>I frequently describe my life as &#8220;trying to fit 10 gallons into a 5-gallon hat&#8221;. It&#8217;s a self-imposed problem due to my love of so many different interests (and perhaps a penchant for &#8220;being busy&#8221; that I&#8217;m trying to break). I recently added a newborn baby girl to the mix which means the structure and routine I relied on has been tossed out the window and I find myself needing new techniques to excel.</p>
<h2>Caffeine</h2>
<p>Introduce our good friend caffeine. It&#8217;s always good for a pick me up, especially when I&#8217;m feeling slow in the morning. I&#8217;m not a coffee drinker but traveling in India and Southeast Asia got me hooked on a good cup of tea. Chai is my preference, but not the sugary kind you would get out of a box at Starbucks. I have a milk frother at home that makes a nice latte-esque cup from black tea leaves and spices. Side note: if you want a no-sugar-added chai at a Starbucks, ask for a &#8220;Chai Tea Misto&#8221;. It&#8217;s chai tea bags with steamed milk priced like a tea so about half the cost of a chai latte. Half the Starbucks don&#8217;t know how to make it though, so be clear it&#8217;s <em>not</em> a latte.</p>
<p>As a Northern Californian going through a drought, I have separately been working to minimize my showers. My shower takes about 2 minutes to get hot water so we let it run into a 5-gallon bucket. Once it gets warm, I would jump in, get wet, turn the water off. Wash my hair, my body and then turn the water back on to rinse before getting out. As someone who loves long, hot showers, this is both soul-crushing and terribly efficient. Combined with better managing our sprinklers and more water-efficient washer/dryer, we cut our overall water usage by 35%.</p>
<p>Let&#8217;s weave these threads together. Busy life. Little sleep. Newborn baby. Water restrictions. How can I optimize my physical feeling each day? </p>
<h2>Cold Showers</h2>
<p>There&#8217;s a lot of research and/or hype about cold showers in the fitness world. They are claimed to help with fat loss and promote muscular recovery among other things. I am not a researcher and have no opinion on those. What I can tell you is that cold showers can wake up even the most sleep deprived new parent and kick start your day. Best part? The effect lasts for hours!</p>
<p>If you search for &#8220;cold shower challenge&#8221;, you&#8217;ll find lots of suggested protocols. I started with a regular hot shower and progressively added cold water finishes. Just for a few seconds. Then a few more seconds. Then a few more and so on until I worked up to half my shower under cold water. Here&#8217;s how I&#8217;m doing it now:</p>
<ol>
<li>Run a hot shower (into the bucket to save water which we use to water plants)</li>
<li>Get in right as the water gets hot, scrub my face vigorously, quickly get wet (under 60 seconds)</li>
<li>Turn water off, wash my hair and body</li>
<li>Turn water back on to hot and begin to rinse</li>
<li>Immediately move water to cold, as cold as you can without the shower turning off</li>
<li>Try to remain calm as your body goes from 130F water to 60F water, finish rinsing off (another 60 seconds). Embrace the feeling.</li>
<li>Exit the shower WIDE AWAKE</li>
</ol>
<p>My mind is buzzing as I dry off and I walk into my home office with not so much a thought about needing a cup of chai. </p>
<p>My home is generally pretty cold so I used to stay in the shower for long periods of time to warm up my cold extremities. Now when I turn the cold water rinse off, the air temperature feels warm and I&#8217;m in no rush to dry off or put on clothes. If you&#8217;ve ever gone wakeboarding in a cold lake, it&#8217;s like how falling back into the water can feel great after the wind chill factor of being towed behind a boat at 20mph.</p>
<p>I still enjoy a good cup of chai because it&#8217;s delicious but I have found that using caffeine as a crutch has all but disappeared. And in a weird way, I now <em>enjoy</em> the feeling of shock as the cold water hits my head and the adrenaline starts running. </p>
<p>You can easily start with a 5-second cold finish. Move that to 10. Then 20. How about a minute? Try it out and tell me what happens below!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2016/03/25/sleep-deprivation-caffeine-cold-showers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing the Fred Jehle Spanish Verb Database</title>
		<link>http://www.ghidinelli.com/2011/12/06/announcing-fred-jehle-spanish-verb-database</link>
		<comments>http://www.ghidinelli.com/2011/12/06/announcing-fred-jehle-spanish-verb-database#comments</comments>
		<pubDate>Wed, 07 Dec 2011 00:29:24 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[espanol]]></category>
		<category><![CDATA[spanish]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1397</guid>
		<description><![CDATA[Download a free database of 600 conjugated Spanish verbs under a Creative Commons license courtesy of Professor Fred Jehle]]></description>
			<content:encoded><![CDATA[<p>On a recent trip to Mexico I had the chance to use my Spanish (oh I&#8217;m <em>quite</em> the Renaissance man) and found that what I lose first is my ability to quickly say &#8220;he did X&#8221; or &#8220;they do Y&#8221;.  Worse is my need to reverse-engineer what I’m hearing back to an infinitive.  If someone says &#8220;Ellos me hablaban&#8221;, I decipher it like: &#8220;hablaban, ok, that is the third person plural for hablaba, which is hablar, which means to speak, so it’s they were speaking.&#8221;  That probably explains the glassy look in my eyes as I listen to native speakers.</p>
<p>Once home I searched for a database of conjugated verbs to make flash cards that, rather than working with infinitives, would read simple actions like &#8220;They walk&#8221;, &#8220;He used to sing&#8221; or &#8220;We would have spoken&#8221; and the reverse would have the proper Spanish conjugation.  Despite my uber Google skills, I was unable to find any non-commercial products.  However, I did come across one great resource that had the data I needed.  </p>
<p>Fred Jehle, formerly a professor at  Indiana University-Purdue University Fort Wayne, <a href="http://users.ipfw.edu/jehle/VERBLIST.HTM">published approximately 600 verbs</a>, fully conjugated in all moods and tenses, on his website in 1998.  The resource helped students improve their verb use in addition to a variety of notes on other aspects of the language.  I contacted Mr. Jehle to inquire if a database of his verbs were behind the scenes but unfortunately only the static web pages exist.</p>
<p>Out of curiosity, I opened up a couple of pages to see what the source HTML looked like and, luckily, it was pretty uniform.  I broke out my editor and wrote a script to read in each page, parse out the various conjugations and dump them in to a (PostgreSQL 9.x) database.   The roughly 600 verbs converted to 11,467 combinations of moods + tenses. </p>
<p>In coordination with copyright holder Professor Jehle, this data is available free of charge via a <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons license</a> for anyone to use for non-commercial purposes so long as you provide attribution.  If you alter, transform or build upon this work then you <em>may</em> distribute the resulting work only under the same license.  </p>
<div style="border: 1px dashed black; padding: 5px; background-color: #eee; text-align: center;"><a href="https://www.ghidinelli.com/free-spanish-conjugated-verb-database">Click here to download the database</a></div>
<p>My thanks go to Mr. Jehle for quickly answering my questions and allowing me to publish the data for other would-be Spanish students.  I recommend that you also check out his website for additional Spanish content at <a href="http://users.ipfw.edu/jehle/VERBLIST.HTM">http://users.ipfw.edu/jehle/VERBLIST.HTM</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/12/06/announcing-fred-jehle-spanish-verb-database/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>October Qmail Follow-up</title>
		<link>http://www.ghidinelli.com/2011/10/20/october-qmail-follow-up</link>
		<comments>http://www.ghidinelli.com/2011/10/20/october-qmail-follow-up#comments</comments>
		<pubDate>Thu, 20 Oct 2011 20:04:54 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[qmail]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1365</guid>
		<description><![CDATA[A couple of tweaks for QmailToaster install to update CHKUSER 2.0.9 and improve DSPAM integration]]></description>
			<content:encoded><![CDATA[<p>Some notes that I don&#8217;t want to forget to follow-up on my <a href="https://www.ghidinelli.com/2011/05/04/march-qmail-server-madness">March (Q)mail Server Madness</a> post earlier this year.  Things are running great with the exception of SpamAssassin being pretty useless.  An SA rules update in the last couple of weeks has been quarantining every email from Facebook plus another 25% of my legitimate email so we&#8217;ve disabled it and we&#8217;re just letting DSPAM do it&#8217;s thing instead.  Here&#8217;s a couple of tweaks we&#8217;ve made:</p>
<h2>Upgrade to CHKUSER 2.0.9</h2>
<p>CHKUSER 2.0.9 includes one update that is very important to us: CHKUSER_DISABLE_VARIABLE.  This enhancements allows us to disable CHKUSER checks for certain relays.  In our case, our web application servers relay mail and sometimes the TO address is invalid.  Without this change, CHKUSER would deny even sending the email so bad emails would queue up on the web servers.  What we want to happen is for the mail server to accept them, bounce them and let our bounce handling routines run notifying the sender of the bad address.  Here&#8217;s the necessary steps:</p>
<ol>
<li>Download development package <a href="http://qmailtoaster.com/testing/qmail-toaster-1.03-1.3.21.src.rpm">qmail-toaster-1.03-1.3.21.src.rpm</a> which includes the CHKUSER 2.0.9 code and a few other enhancements (see <a href="http://comments.gmane.org/gmane.mail.qmail.toaster.devel/693">this thread</a>)</li>
<li>rpm -Uvh qmail-toaster-1.03-1.3.21.src.rpm</li>
<li>bunzip2 /usr/src/redhat/SOURCES/qmailtoaster-1.3.2.patch.bz2</li>
<li>vi /usr/src/redhat/SOURCES/qmailtoaster-1.3.2.patch</li>
<li>Search for &#8220;/* #define CHKUSER_DISABLE_VARIABLE&#8221; and remove the comments, save</li>
<li>Search for &#8220;/* #define CHKUSER_ENABLE_USERS_EXTENSIONS&#8221; and remove the comments to <a href="http://www.mail-archive.com/vchkpw@inter7.com/msg27903.html">re-enable dash-aliasing</a></li>
<li>bzip2 /usr/src/redhat/SOURCES/qmailtoaster-1.3.2.patch</li>
<li>cd /usr/src/redhat/SPECS</li>
<li>rpmbuild -bb &#8211;with cnt50 &#8211;target i686 qmail-toaster.spec</li>
<li>rpm -Uvh /usr/src/redhat/RPMS/i686/qmail-toaster-1.3.2.rpm</li>
</ol>
<p>Note, I&#8217;m running on x64 CentOS 5.  For some reason I had to specify the target as i686 as without the target it wanted to generate an i386 binary while everything else is i686.  I didn&#8217;t know if that would cause problems so I specified the target explicitly.</p>
<p>For any IP address we want to bypass the CHKUSER checks, we simply add an entry to /etc/tcprules.d/tcp.smtp with a RELAYCLIENT variable.  An entry might look like:</p>
<p><code>192.168.0.1:allow,RELAYCLIENT=""</code></p>
<p>Finally, the RPM update for qmail-toaster overrides your SSL certificates for SMTP.  To restore my real certificates, I had to perform the following steps (lifted from <a href="http://coreygilmore.com/blog/2008/03/14/chained-ssl-certificates-and-qmail-error-140943f2/">coregilmore.com</a>):</p>
<pre><code># cp /etc/httpd/certs/mail.msr.com.pem /var/qmail/control/servercert.pem
# ln -s /var/qmail/control/servercert.pem /var/qmail/control/clientcert.pem
# chown -h qmaild:root /var/qmail/control/clientcert.pem
# chmod 400 /var/qmail/control/servercert.pem
# qmailctl restart</code></pre>
<p>mail.msr.com.pem is simply a single concatenated file containing your key, certificate and any intermediate certificates (required for registrars like Go Daddy for example):</p>
<p><code># cat /path/to/ssl_cert.key /path/to/ssl_cert.crt /path/to/gd_intermediate_bundle.crt &amp;gt; /var/qmail/control/servercert.pem</code></p>
<h2>Updated Mailfilter Script</h2>
<p>We also expanded our mailfilter script to be a little bit smarter and handle DSPAM better.  Here&#8217;s the latest:</p>
<pre><code>SHELL="/bin/bash"
import EXT
import HOST

VUSER=`echo ${EXT%-*}`
export VUSER
USERHOME=`/mail/bin/vuserinfo -d $VUSER@$HOST`
export USERHOME

MARKTIME=`date +%s.%N`
UNIQUE=`date +%N`

logfile "/var/log/maildrop/mailfilter.log"

# Test for the existance of the Junk directory.  Create it if it doesn't exist
VERBOSE=1
log "$VUSER@$HOST[$UNIQUE] : Start user filter"

# make sure the Junk folder exists and is subscribed too
`test -d $USERHOME/Maildir/.Junk`

if ( $RETURNCODE == 1 )
{
    `/usr/bin/maildirmake -f Junk $USERHOME/Maildir`
    `echo INBOX.Junk &gt;&gt; $USERHOME/Maildir/courierimapsubscribed`
}

# make sure the retrain folder exists
`test -d $USERHOME/Maildir/.JunkRetrain`

if ( $RETURNCODE == 1 )
{
    `/usr/bin/maildirmake -f JunkRetrain $USERHOME/Maildir`
    `echo INBOX.JunkRetrain &gt;&gt; $USERHOME/Maildir/courierimapsubscribed`
}

# now analyze the SA header
if (/^X-Spam-Status: Yes/)
{
        log "$VUSER@$HOST[$UNIQUE] : SpamAssassin found SPAM"
        to "$USERHOME/Maildir/.Junk"
}
else
{
        # spamassassin thinks its ham, which means nothing, because SA sucks
        # so now we check with dspam

        # warning: exception must have one space and then the curly bracket or else syntax errors are generatead
        exception {
                xfilter "/usr/local/bin/dspam --deliver=innocent,spam --stdout --user $USERHOME"
        }

        if (/^X-DSPAM-Result: Spam/)
        {
                # dspam says spam
                log "$VUSER@$HOST[$UNIQUE] : DSPAM found SPAM"
                to "$USERHOME/Maildir/.Junk"
        }
        else
        {
                # ham in both places, deliver
                log "$VUSER@$HOST[$UNIQUE] : DSPAM found HAM (returncode = $RETURNCODE)"
                if (/^X-DSPAM-Result: Innocent/)
                {
                        log "$VUSER@$HOST[$UNIQUE] : HAM includes X-DSPAM-Result: Innocent"
                }
                else
                {
                        if (/^X-DSPAM-Result: Whitelisted/)
                        {
                                log "$VUSER@$HOST[$UNIQUE] : HAM includes X-DSPAM-Result: Whitelisted"
                        }
                        else
                        {
                                log "$VUSER@$HOST[$UNIQUE] : HAM does NOT include X-DSPAM-Result: Innocent/Whitelisted"
                        }
                }
                to "$USERHOME/Maildir/"
        }
}</code></pre>
<p>Since we&#8217;re dropping SpamAssassin, this file could be streamlined to be DSPAM specific but it doesn&#8217;t hurt to leave it in the event we decide to re-enable it at a later date.  Simply save the script somewhere and enable it via a .qmail file in a user directory with the following:</p>
<p><code>|preline /usr/bin/maildrop /path/to/mailfilter-to-spam-plus-dspam</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/10/20/october-qmail-follow-up/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Itinerary tools for mileage runs and premier status</title>
		<link>http://www.ghidinelli.com/2011/10/03/itinerary-tools-mileage-runs-premier-status</link>
		<comments>http://www.ghidinelli.com/2011/10/03/itinerary-tools-mileage-runs-premier-status#comments</comments>
		<pubDate>Mon, 03 Oct 2011 20:49:50 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Research/HOWTO]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1346</guid>
		<description><![CDATA[Tips and tools for planning airline itineraries and mileage runs to achieve frequent flier status]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m close to achieving premier status on an airline for the first time.  I generally fly on the best price but I&#8217;ve been consolidating my flights to United and Continental this year.  I have one more flight to the East coast but the traditional routings would leave me about 1,500 miles short of reaching the necessary 25,000 miles.  Time for some creativity.</p>
<p>Here are some links to building &#8220;mileage runs&#8221; &#8211; intentionally bad airline itineraries designed to rack up additional frequent flyer miles.  Also in the list below are some unique or useful itinerary planning tools.  I was particularly blown away by ITA&#8217;s Matrix which lets you specify how many hops, on what airlines, in what class of travel and with what connections to build a trip.  These will come in handy when I get on the Amazing Race. <img src='http://www.ghidinelli.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://www.insideflyer.com/articles/printable/article.php?key=6585">InsideFlyer article on mileage runs</a> &#8211; with links to tools</li>
<li><a href="http://www.flyertalk.com/forum/mileage-run-discussion/312559-mileage-run-tools-part-2-a.html">FlyerTalk mileage run tools</a> &#8211; an epic list of tools</li>
<li><a href="http://www.flyertalk.com/forum/mileage-run-discussion/391187-how-construct-book-mileage-run.html">FlyerTalk mileage run strategy</a> &#8211; how one MR fanatic goes about booking his trips</li>
<li><a href="http://www.travelocity.com/dealsonamap">Travelocity DreamMap</a> &#8211; display cheap trips on a map using a starting location, show where you can go on the cheap</li>
<li><a href="http://blog.happyflier.com/?p=443">HappyFlier</a> &#8211; strategies on finding routes</li>
<li><a href="http://matrix.itasoftware.com/">ITA Software&#8217;s Matrix Planner</a> &#8211; lets you specify arcane airline codes to build exactly the route desired and price it</li>
<li><a href="http://gc.kls2.com/">Great Circle Mapper</a> &#8211; for sticking in a flight route like SFO-LAX-IAH-MCO and figuring out the total miles.  2,570 if you&#8217;re counting.</li>
<li><a href="http://cwsi.net/">Fare Codes, Award calculations, Mileage charts</a></li>
<li><a href="http://www.united.com/CMS/en-US/Marketing/CustComm/Promotions/Pages/united.aspx">United Origin-Destination mileage calculator</a> (also shows many valid routing options)</li>
</ul>
<p><strong>Updated 6/22/12</strong> &#8211; United has a mileage calculator between two airports that also shows lots of valid routes which can be used to help book award itineraries.</p>
<p>Also, need to plug <a href="http://www.milevalue.com">MileValue.com</a>.  Scott helped me rebook an award ticket to save me 40k miles and upgrade to 1st class one direction plus add a free one-way.  You can hire him to do the same!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/10/03/itinerary-tools-mileage-runs-premier-status/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8GB Ram + Crucial M4 SSD in Thinkpad X61</title>
		<link>http://www.ghidinelli.com/2011/08/18/8gb-ram-crucial-m4-ssd-thinkpad-x61</link>
		<comments>http://www.ghidinelli.com/2011/08/18/8gb-ram-crucial-m4-ssd-thinkpad-x61#comments</comments>
		<pubDate>Thu, 18 Aug 2011 15:57:14 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[Web/Internet]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1335</guid>
		<description><![CDATA[Breathing new life into my Thinkpad X61 with 8GB RAM, SSD and x64 Windows 7]]></description>
			<content:encoded><![CDATA[<p>I really like my Lenovo Thinkpad X61 laptop &#8211; it&#8217;s small, perfect for <a href="https://www.ghidinelli.com/go/">traveling around the world</a> and very lightweight.  It was starting to run slowly and since I use it for work, I contemplated my options.  Replacing it was certainly one, but it was going to be $1500+ to get the equivalent.  I could sell the X61 and make some of it back but I have a poor track record of actually doing that (still have my Thinkpad T41 and a &#8220;temporary&#8221; Toshiba NB205 netbook laying around&#8230;)  </p>
<p>After hearing my friend rave about how great an SSD made his laptop, I went down the upgrade path instead.  From what I could gather online, the X61 should support 64-bit Windows 7, SSDs (with a <a href="http://forums.thinkpads.com/viewtopic.php?f=27&#038;t=84953&#038;p=558702#p558702">1.5GB/s SATA cap</a>) and, unofficially, 8GB of RAM.  I had become accustomed to working under 3GB in Windows XP even for development work which was brutal so the RAM looked like it would be a huge boon.</p>
<p><a href="https://www.ghidinelli.com/wp-content/uploads/2011/08/8gbx61.png"><img src="https://www.ghidinelli.com/wp-content/uploads/2011/08/8gbx61-300x238.png" alt="8GB PC2-6400 800mhz CL6 SODIMM DDR2 RAM in Thinkpad X61" title="8GB PC2-6400 800mhz CL6 SODIMM DDR2 RAM in Thinkpad X61" width="300" height="238" class="aligncenter" /></a></p>
<p>There it is!  Basically the X61 has two SODIMM slots and while the manufacturer officially supports 4GB RAM total, the hardware actually supports 8GB.  I used 2 of these <a href="http://www.amazon.com/gp/product/B0027IVMBY">Patriot PSD24G8002S 4GB PC2 6400 800mhz CL6 DDR2 SODIMM</a> modules at $55/ea for a total of $110.  Corsair has an <a href="http://www.amazon.com/Corsair-Memory-VS8GSDSKIT800D2-PC2-6400-200-pin/dp/B001V738V4/ref=pd_cp_e_1">equivalent VS8GSDSKIT800D2</a> kit for $130 but memory is more or less a commodity so I went with the cheaper chips.   One of the two Patriot modules was defective and wouldn&#8217;t POST but Amazon&#8217;s awesome return customer service worked like a charm and this morning my replacement stick showed up.  Technically the Thinkpad uses PC2-5300 CL5 memory but it&#8217;s difficult/impossible to find in 4GB sticks and the newer, faster memory can &#8220;slow down&#8221; to work.  </p>
<p>The other department where I needed more zoom was the hard drive.  I replaced the internal drive with the 256GB Crucial M4, the latest and greatest generation of SSDs.   Even though the hardware doesn&#8217;t support the full 6GB/s SATA capability of the M4, I decided to get the fastest drive possible <em>now</em>, so that I could transfer it to a newer laptop down the road. </p>
<p>Finally, with the new hard drive I took the opportunity to move to Windows 7 64-bit.  I&#8217;ve actually had 4GB of memory since I bought the Thinkpad but Windows XP could only access 3GB of it.  Moving to 64-bit ensured that I could use the full 4GB immediately and 8GB later.  I disabled some of the Aero features to improve graphics performance (the low score in my Windows Experience score) and <a href="http://exodusdev.com/content/revert-xp-style-alt-tab-coolswitch-behavior-windows-7-and-windows-vista">reverted back to XP&#8217;s ALT+TAB behavior</a> and I&#8217;m happy with the results. </p>
<p>Having used it for a few weeks now, the speed improvements are stunning.  Boot time and hibernate are dramatically shorter and applications pop on the screen as soon as they launch.  Interestingly, my development work doesn&#8217;t process that much differently because it&#8217;s processor-bound but the improved disk access time and throughput clearly assists all kinds of applications from creating zip files to loading PSDs in photoshop to copying large files from the network.  Total spend was $115 (RAM) + $425 (256GB Crucial M4) + Windows 7 64-bit (Free from friend) and I have what feels like the latest and greatest computer in the same lightweight footprint.   Success!</p>
<p><em>Side note</em>: If you feel that 1.5GB/s SATA is really killing your day, there is an unsupported, unofficial, totally-may-screw-your-computer BIOS upgrade for 3.0GB/s SATA-II available <a href="http://forum.notebookreview.com/lenovo-ibm/459591-t61-x61-sata-ii-1-5-gb-s-cap-willing-pay-solution-8.html#post6501443">in this thread</a>.</p>
<p>PS &#8211; I use <a href="http://www.crashplan.com">CrashPlan</a> to backup my home computers and it made transitioning to Windows 7 easy.  I&#8217;ve already restored files twice from my XP install that I had failed to migrate.  At the moment I have two computers backed up in Crashplan, my X61-XP and now my X61-W7.  It&#8217;s great being able to go back and get files from the old machine &#8211; highly recommended!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/08/18/8gb-ram-crucial-m4-ssd-thinkpad-x61/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sleepy sleepy</title>
		<link>http://www.ghidinelli.com/2011/08/08/sleepy-sleepy</link>
		<comments>http://www.ghidinelli.com/2011/08/08/sleepy-sleepy#comments</comments>
		<pubDate>Mon, 08 Aug 2011 17:35:17 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Research/HOWTO]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1329</guid>
		<description><![CDATA[How much are you actually sleeping at night?  The WakeMate knows all!]]></description>
			<content:encoded><![CDATA[<p>We bought a fancy tempur-pedic mattress not long ago.  At first I was sleeping like a baby.  Now I&#8217;m tossing and turning again.  I don&#8217;t think it&#8217;s related to the mattress, which is great, but rather my own sleep cycles, stress, etc.</p>
<p>I decided to get nerdy and I ordered a <a href="http://www.wakemate.com">WakeMate</a>.  It&#8217;s a bluetooth enabled wristband you wear while you sleep that talks to your android or iphone.  It records when you&#8217;re awake vs. sleeping and attempts to wake you up when you will be the least groggy.  </p>
<p><a href="https://www.ghidinelli.com/wp-content/uploads/2011/08/wakemate.png"><img src="https://www.ghidinelli.com/wp-content/uploads/2011/08/wakemate-300x150.png" alt="wakemate personal sleeping tracker" title="wakemate personal sleeping tracker" width="300" height="150" class="aligncenter size-medium wp-image-1330" /></a></p>
<p>This is my movement data from last night.  I&#8217;m going to monitor for awhile before I draw any conclusions but it can&#8217;t hurt to try and improve the quality of my sleep if I can&#8217;t solve it through quantity.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/08/08/sleepy-sleepy/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>March (Q)Mail Server Madness</title>
		<link>http://www.ghidinelli.com/2011/05/04/march-qmail-server-madness</link>
		<comments>http://www.ghidinelli.com/2011/05/04/march-qmail-server-madness#comments</comments>
		<pubDate>Wed, 04 May 2011 20:14:02 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[Web/Internet]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1258</guid>
		<description><![CDATA[March was a busy month &#8211; we were upgrading and consolidating infrastructure around here which meant taking a 2U VA Linux 2230 server that had &#8211; quite literally &#8211; been serving mail for more than a decade, and upgrading it to a more contemporary machine for which spare parts exist.  Knock on wood the [...]]]></description>
			<content:encoded><![CDATA[<p>March was a busy month &#8211; we were upgrading and consolidating infrastructure around here which meant taking a 2U VA Linux 2230 server that had &#8211; quite literally &#8211; been serving mail for more than a decade, and upgrading it to a more contemporary machine for which spare parts exist.  Knock on wood the new machine can have the same reliable track record.</p>
<p>I had been considering outsourcing everything &#8211; move incoming email to Google Apps and use someone like SMTP.com or SendGrid for outbound but there&#8217;s a few wrinkles like mailing lists and customer-relayed email.  We ultimately decided to roll a new machine but given how quickly email deliverability evolves, we needed to get up to date with the various authentication and verification technologies that help get emails into the inbox.  That meant getting waist-deep in <a href="http://en.wikipedia.org/wiki/Sender_Policy_Framework">SPF</a>, <a href="http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx">Sender-ID</a>, <a href="http://en.wikipedia.org/wiki/DomainKeys">DomainKeys</a> and <a href="http://www.dkim.org/">DKIM</a>.  (See current <a href="https://fit.nokia.com/lars/meter/dkim.html">DKIM</a> and <a href="https://fit.nokia.com/lars/meter/spf.html">SPF</a> deployment rates &#8211; 23% and 51% globally as of this writing)</p>
<p>This isn&#8217;t a step-by-step guide; writing one would simply repeat what other people have already done a good job of documenting.  What this <em>is</em>, is an overview that ties together missing pieces and endless Google searches to move from concept to execution with one full set of examples.</p>
<h2>The Moving Pieces</h2>
<p>If you&#8217;re new to all this, here&#8217;s how these technologies work briefly: Sender ID is basically a Microsoft version of Sender Policy Framework (SPF).  If you get SPF to work, Sender ID is backwards compatible and will verify successfully.  DKIM is almost the same thing to DomainKeys but it adds <a href="http://en.wikipedia.org/wiki/Author_Domain_Signing_Practices">Author Domain Signing Practices (ADSP)</a> as an optional component that specifies how strict you are about signing messages.</p>
<p>SPF and Sender ID rely on specially crafted DNS records that identify which mail servers are allowed to send mail for your domain.  By contrast, DomainKeys/DKIM take pieces of your message, cryptographically hash them with a key (part of which only your server knows) and embed the signature as a header which is verified using the other half of your key (which is public) that is stored in a specially crafted DNS record for your domain or mail server.   You must have the ability to create DNS TXT records or none of these will work for you.  Here&#8217;s a good article with a <a href="http://www.digitalsanctuary.com/tech-blog/debian/setting-up-spf-senderid-domain-keys-and-dkim.html">more details on how it all works</a>.</p>
<p><img src="https://www.ghidinelli.com/wp-content/uploads/2011/03/dkim-verified.png" alt="DomainKeys verified mail on Yahoo gets a special lock icon showing it&#039;s verified" title="DomainKeys verified mail on Yahoo gets a special lock icon showing it&#039;s verified" width="357" height="61" class="aligncenter" /></p>
<p>The idea is to eliminate any joe spammer from using an arbitrary From address in spam, phishing and other email attacks.  None of these approaches are perfect but they are used by large ISPs like Hotmail, Gmail and Yahoo so if you want your email to reach those inboxes, you need to play along.</p>
<h2>QmailToaster</h2>
<p>Step one, set up a <a href="http://www.qmailtoaster.com">QmailToaster</a>.  Our current server is (older) Qmail + Vpopmail + Courier based and it has worked well so we stuck with what we know.  Not to mention, Jake Vickers and the QmailToaster team have removed all of the pain of setting it up so now you just speed along to the part where it works well.  Other than getting the needed dependencies on my CentOS/RHEL box, the installation was a piece of cake using the <a href="http://qtp.qmailtoaster.com/trac/wiki/qtp-newmodel">qtp-newmodel approach</a>.</p>
<ul>
<li><a href="http://wiki.qmailtoaster.com/index.php/CentOS_5_QmailToaster_Install#Add_a_domain">http://wiki.qmailtoaster.com/index.php/CentOS_5_QmailToaster_Install</a> &#8211; the CentOS/RHEL 5 Toaster install gives the quick and dirty of adding DomainKeys support</li>
<li><a href="http://wiki.qmailtoaster.com/index.php/Domainkeys">http://wiki.qmailtoaster.com/index.php/Domainkeys</a> &#8211; detailed directions for DomainKeys support</li>
<li><a href="http://wiki.qmailtoaster.com/index.php/How_to_Setup_DKIM_with_Qmail_Toaster">http://wiki.qmailtoaster.com/index.php/How_to_Setup_DKIM_with_Qmail_Toaster</a> &#8211; Add DKIM support with a new qmail-queue</li>
</ul>
<p>After you install the DKIM package from above on RHEL/CentOS 5, you <em>would</em> see this error in your qmail logs:</p>
<p><code>@400000004d7d3bc00da74aec delivery 21: success: ould_not_find_ParserDetails.ini_in_/usr/lib/perl5/vendor_perl/5.8.8/XML/SAX/rUser_and_password_not_set,_continuing_without_authentication./&lt;check-auth@verifier.port25.com&gt;_96.244.219.19_accepted_message./Remote_host_said:_250_2.6.0_message_received/</code></p>
<p>Basically, something is borked in the CPAN-installed SAX package.  You can fix it by pre-emptively running (thanks to <a href="http://centosfiles.blogspot.com/2009/09/could-not-find-parserdetailsini-in.html">centosfiles</a> for the fix):</p>
<pre><code>perl -MXML::SAX -e "XML::SAX-&gt;add_parser(q(XML::SAX::PurePerl))-&gt;save_parsers()"</code></pre>
<p>At this point you have a mail server <em>capable</em> of handling SPF, Sender ID, DomainKeys and DKIM.  Now you need to enable it in your configuration and your DNS.</p>
<h2>SPF/Sender ID</h2>
<p>Unlike DomainKeys and DKIM which require public/private keys and some computational effort when delivering email, SPF and Sender ID are exclusively a DNS configuration option.</p>
<ul>
<li><a href="http://wiki.qmailtoaster.com/index.php/SPF">http://wiki.qmailtoaster.com/index.php/SPF</a> &#8211; there technically isn&#8217;t anything to set up with the QmailToaster since your outbound configuration is all DNS.  However, you can configure how to handle incoming email that doesn&#8217;t pass using /var/qmail/control/spfbehavior.</li>
<li><a href="http://www.saout.de/misc/spf/">Qmail SPF</a> &#8211; The underlying implementation of SPF for qmail</li>
<li><a href="http://old.openspf.org/wizard.html?mydomain=example.com&#038;submit=Go!">OpenSPF.org&#8217;s Record Wizard</a> &#8211; generate an SPF record for your domain to be placed in a DNS TXT record</li>
</ul>
<p>Once generated, take the TXT record and put it into your DNS files.  If you&#8217;re using <a href="http://cr.yp.to/djbdns.html">djbdns</a>, a simple record with one mail server would look something like:</p>
<pre><code>'sample.com:v=spf1 ip4:your.ip.add.ress ~all:3600</code></pre>
<p>The ~all says to softfail messages that don&#8217;t verify.  If you are sure you have listed all of your possible outbound MTAs, then you can set it to -all which will tell remote servers to kill emails that don&#8217;t pass.</p>
<h2>DomainKeys/DKIM</h2>
<p>Once installed, you enable incoming verification and outgoing signing through the tcp.smtp file stored in /etc/tcprules.d:</p>
<ul>
<li><a href="http://wiki.qmailtoaster.com/index.php/Domainkeys#Outgoing">http://wiki.qmailtoaster.com/index.php/Domainkeys#Outgoing</a> &#8211; using DKSIGN for outgoing messages and DKQUEUE/DKVERIFY for incoming messages.  Has a flag-by-flag breakdown of how to configure DKVERIFY for how to respond to incoming mail that passes or fails verification.</li>
<li><a href="http://wiki.qmailtoaster.com/index.php/Tcp.smtp">http://wiki.qmailtoaster.com/index.php/Tcp.smtp</a> &#8211; a complete breakdown of the tcp.smtp file that includes DKSIGN, DKVERIFY and DKQUEUE breakdown</li>
<li><a href="http://www.zytrax.com/books/dns/ch9/dkim.html">HOWTO define DKIM/ADSP RRs</a> &#8211; from the &#8220;Pro DNS and BIND&#8221; book, this page does a phenomenal job of explaining the components of the DomainKeys/DKIM records with examples.  Also explains selectors clearly.</li>
</ul>
<p>For DKVERIFY, the default is &#8220;DEGIJKfh&#8221;.  If you want to permanently reject incoming mail that has a DomainKey signature but fails to verify, add a &#8220;B&#8221; to the list: &#8220;BDEGIJKfh&#8221;.  </p>
<h3>Outbound</h3>
<p>To sign an outbound message for DomainKeys/DKIM, you need to generate a public/private key pair.  Part of it you keep secret and sign your outgoing messages and the other half you publish in your DNS so other mail servers can verify it&#8217;s authentic.  Here&#8217;s what the docs say to do:</p>
<pre><code># cd /var/qmail/control/domainkeys
# mkdir yourdomain.com
# cd yourdomain.com
# dknewkey private &gt; public.txt
# chmod 440 private
# cd ..
# chown -R root:vchkpw yourdomain.com</code></pre>
<p>The word &#8220;private&#8221; above is going to be our <strong>selector</strong>.  It&#8217;s 100% arbitrary but must be used consistently.  QmailToaster defaults to the word &#8220;private&#8221;.  In your DNS, you need a TXT record that looks something like:</p>
<p><code>private._domainkey.yourdomain.com:k=rsa; p=MEwwDQYJKoZIhvcNAQEBBQ . . .</code></p>
<p>The rest of the record comes out of the file we just created with dknewkey in /var/qmail/control/domainkeys/yourdomain.com/public.txt.   In my last Qmail install, I used &#8220;default&#8221; for my selector, so my DNS entries look like:</p>
<p><code>default._domainkey.yourdomain.com:k=rsa; p=MEwwDQYJKoZIhvcNAQEBBQ . . .</code></p>
<p>This selector, be it &#8220;private&#8221;, &#8220;default&#8221; or something else, MUST match what you use to generate your public/private key using dknewkey and it must also match what you use in your /etc/tcprules.d/tcp.smtp rules where you specify when to sign outgoing messages:</p>
<pre><code># example record using QmailToaster defaults
127.:allow,RELAYCLIENT="",DKSIGN="/var/qmail/control/domainkeys/%/private"

# since I used 'default' as my selector, this is what my file looks like:
127.:allow,RELAYCLIENT="",DKSIGN="/var/qmail/control/domainkeys/%/default"</code></pre>
<h4>Crypto Warning</h4>
<p>dknewkey creates a (relatively) short 384-bit public/private keypair.  There are <a href="http://mipassoc.org/pipermail/dkim-ops/2010-June/thread.html#202">people who don&#8217;t think that&#8217;s good enough</a> and they&#8217;re probably right.  You can edit /usr/bin/dknewkey to change it to something more secure like 512 or (better yet) 1024 bits.</p>
<p>A quick recap with how this selector is used throughout your Qmail and DNS configuration:</p>
<ol>
<li>Generate the public/private key: dknewkey my-selector-name > public.txt; this leaves behind a file like /var/qmail/control/domainkeys/yourdomain.com/my-selector-name.</li>
<li>Create the DNS TXT record: my-selector-name._domainkey.yourdomain.com:k=rsa; p=MEwwDQYJKoZIhvcNAQEBBQ&#8230; (using the contents of the public.txt file dknewkey creates)</li>
<li>In tcp.smtp, use a DKSIGN environment variable: DKSIGN=&#8221;/var/qmail/control/domainkeys/%/my-selector-name&#8221;</li>
</ol>
<h2>Testing</h2>
<p>Once you have it set up <strong>and</strong> your DNS has propagated, there are a number of online services and email reflectors that will verify your configuration and report back to you:</p>
<h3>Web Tools</h3>
<ul>
<li><a href="http://domainkeys.sourceforge.net/policycheck.html">SourceForge DomainKeys Policy Checker</a></li>
<li><a href="http://www.kitterman.com/spf/validate.html">Scott Kitterman&#8217;s SPF record checker</a> &#8211; test your SPF record from the web</li>
<li><a href="http://www.dnswatch.info/dkim/create-dns-record">DKIM DNS Record Wizard</a> &#8211; based on  RFC 4871, helps construct the TXT record for your DNS for DKIM signing</li>
<li><a href="http://www.sendmail.org/dkim/tools">SendMail ADSP wizard and DKIM verifier</a> &#8211; helps build an (optional) ADSP TXT record and can check your DKIM DNS entries</li>
</ul>
<h3>Email Reflectors</h3>
<p>Unlike the above services which try to see if things look OK, these are email addresses you can send a test message to that will actually tell you how your email performed:</p>
<ul>
<li><a href="mailt:check-auth@verifier.port25.com">check-auth@verifier.port25.com</a> &#8211; the port25 reflector sends you an email report with a summary and breakdown by type.  This is the best one in my opinion.</li>
<li><a href="mailto:spf-test@openspf.org">spf-test@openspf.org</a> &#8211; this message will be rejected but the rejection will say what happened to the SPF test.  You must tail the logs (like /var/log/qmail/smtp/current) to see the results.</li>
<li><a href="mailto:autorespond+dkim@dk.elandsys.com">autorespond+dkim@dk.elandsys.com</a> &#8211; Eland Systems offers a DKIM reflector along with <a href="http://www.elandsys.com/resources/sendmail/dkim.html">some notes</a></li>
<li><a href="http://www.myiptest.com/staticpages/index.php/DomainKeys-DKIM-SPF-Validator-test">MyIpTest.com Tester</a> &#8211; tests DK, DKIM and SPF.  Web page gives you a random email address to send to and then you can load your results after sending a test message.</li>
<li><a href="http://www.brandonchecketts.com/emailtest.php">http://www.brandonchecketts.com/emailtest.php</a> &#8211; similar to above, send an email to a random address provided on the web page and then you can check results.</li>
</ul>
<p>Port25&#8217;s reflector report should look like this when everything is working:</p>
<pre><code>Summary of Results
==========================================================
SPF check: pass
DomainKeys check: pass
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham</code></pre>
<p>Microsoft will let you &#8220;register&#8221; your Sender ID settings with them.  Not sure how important this is, but it can&#8217;t hurt to let them know at <a href="https://support.msn.com/eform.aspx?productKey=senderid&#038;page=support_senderid_options_form_byemail">https://support.msn.com/eform.aspx?productKey=senderid&#038;page=support_senderid_options_form_byemail</a>.</p>
<h3>Email Services</h3>
<p>Better than a reflector is to see how a real mail service will treat your message.  Once you think you&#8217;re configured correctly, try sending an email to Gmail and Yahoo.  Then you can view the headers for each to see how your SPF and DK records were interpreted.</p>
<p><strong>Gmail</strong>:<br />
<img src="https://www.ghidinelli.com/wp-content/uploads/2011/03/gmail-test.png" alt="Verify SPF, DomainKeys and DKIM headers on Gmail" title="Verify SPF, DomainKeys and DKIM headers on Gmail" width="624" height="243" class="alignnone" /></p>
<p><strong>Yahoo</strong>:<br />
<img src="https://www.ghidinelli.com/wp-content/uploads/2011/03/yahoo-test.png" alt="View SPF, DomainKeys and DKIM headers on Yahoo mail" title="View SPF, DomainKeys and DKIM headers on Yahoo mail" width="486" height="168" class="alignnone" /></p>
<h2>Final Thoughts</h2>
<p>Putting it all together, here&#8217;s how my setup looks (using the selector &#8216;default&#8217;):</p>
<h3>Public/private key pairs on file system</h3>
<pre><code>[root@mail domainkeys]# ls -al /var/qmail/control/domainkeys/sample.com/
total 32
drwxr-xr-x 2 qmailq root  4096 Mar 13 13:46 .
drwxr-xr-x 7 root   qmail 4096 Mar 13 13:46 ..
-r--r----- 1 qmailq root   396 Mar 13 13:46 default
-rw-r--r-- 1 qmailq root   142 Mar 13 13:46 public.txt</code></pre>
<h3>DKIM signconf.xml</h3>
<p>On the file system in /var/qmail/control/dkim/signconf.xml:</p>
<pre><code>&lt;dkimsign&gt;
  &lt;global algorithm="rsa-sha1" domain="/var/qmail/control/me" keyfile="/var/qmail/control/dkim/global.key" method="simple" selector="dkim1"&gt;
    &lt;types id="dkim" /&gt;
  &lt;/global&gt;
&lt;/dkimsign&gt;</code></pre>
<p>You could override the use of /var/qmail/control/me or change the selector from &#8216;dkim1&#8242; if needed.</p>
<p><strong>Alternative note:</strong> It is also possible to sign your DomainKeys using the DKIM package.  You can change signconf.xml to have a per-domain record with DK and then abandon DKSIGN altogether (this is the route I&#8217;ve gone):</p>
<pre><code>&lt;sample.com domain="sample.com" selector="default"&gt;
  &lt;types id="dkim" /&gt;
  &lt;types id="domainkey" method="nofws" /&gt;
&lt;/sample.com&gt;</code></pre>
<h3>tcp.smtp</h3>
<pre><code># localhost relaying
127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/simscan",DKVERIFY="DEGIJKfh",DKQUEUE="/var/qmail/bin/qmail-queue.orig",DKSIGN="/var/qmail/control/domainkeys/%/default"
# external web box
69.36.226.12:allow,RELAYCLIENT="",DKSIGN="/var/qmail/control/domainkeys/%/default"
# everyone else that connects gets the full cavity check
:allow,BADMIMETYPE="",BADLOADERTYPE="M",CHKUSER_RCPTLIMIT="50",CHKUSER_WRONGRCPTLIMIT="3",QMAILQUEUE="/var/qmail/bin/simscan",DKVERIFY="DEGIJKfh",DKQUEUE="/var/qmail/bin/qmail-queue.orig",DKSIGN="/var/qmail/control/domainkeys/%/default"</code></pre>
<h3>DNS TXT Records</h3>
<p>Using djbdns: </p>
<pre><code>'sample.com:v=spf1 ip4\07269.36.226.12 include\072emailcenterpro.com ~all:3600
'_domainkey.sample.com.:o=-;:3600
'default._domainkey.sample.com.:k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPBdKl9mx3KIjLwGfq83LNzUN4aDWc4t3PVTnc0d+duI9HVD+UG+i1suifV6obDzo4ugHji6EH+zei39Cch9vTXcpVWkaFCEmVu0AXjY/98WIjYb5Hh5+SYQFyQkz0Mq0wIDAQAB;:3600
'dkim1._domainkey.mail.sample.com.:v=DKIM1; k=rsa; p=MEwwDQYJKoZIhvcNAQEBBQADOwAwOAIxAK+vhWHoPv+3DhM1u3MaHk7AayBa+CdNnjPHhg3/3Nv7hEIYUbOfKSUqNxDtjJkgcQIDAQAB;:3600
'_adsp._domainkey.mail.sample.com:dkim=all:3600
'_adsp._domainkey.sample.com:dkim=all:3600</code></pre>
<p>First line is my SPF/Sender ID record.  It also uses an <em>include</em> to allow a third party (in this case, <a href="http://www.emailcenterpro.com">EmailCenterPro</a>) to send mail on our behalf.</p>
<p>The second line says that we sign all outgoing messages with DomainKeys/DKIM (o=-).</p>
<p>Third line is for DomainKeys using our selector &#8216;default&#8217; (which correspondingly shows up in tcp.smtp in DKSIGN and on the filesystem as /var/qmail/control/domainkeys/sample.com/<em>default</em>).</p>
<p>The fourth line is the DKIM record which uses the global.key and public.txt stored in /var/qmail/control/dkim.  Why is it dkim1._domainkey?  Because that&#8217;s the arbitrary selector specified in the signconf.xml file as listed above.  Again, totally arbitrary, could be &#8216;private&#8217; or &#8216;default&#8217; or something else, but best to have it different from your DomainKeys.  You might also notice that it is mail.sample.com instead of sample.com?  By default it must match /var/qmail/control/me file because that&#8217;s how the message will be signed by the QmailToaster DKIM package.</p>
<p>The fifth and sixth line are ADSP records that say we sign all outbound messages with DKIM.  Some hosts appear to be checking for it without the mail subdomain so I&#8217;m currently running both.  I don&#8217;t think it should be strictly required but at this time seems to cover the bases.</p>
<p>The 3600 on every line is the TTL, meaning these records expire after 1 hour.</p>
<h2>Quarantining Spam in IMAP Folder</h2>
<p>Before upgrading, we used <a href="http://dspam.nuclearelephant.com">DSPAM</a> as our spam filter of choice.  In a word, it&#8217;s awesome.  It quarantined mail so effectively that I eventually stopped checking the quarantine until it became so large I could no longer view or delete it from the web interface.  The secret sauce in my setup, which involves <a href="http://www.mozillamessaging.com">Mozilla Thunderbird</a> was to use Thunderbird&#8217;s built-in &#8220;Junk&#8221; folder as a feedback loop for DSPAM.  For some reason, Thunderbird is really good at catching certain kinds of spam that DSPAM was not and, if a spam did get through, I can select it and press &#8220;J&#8221; which trains Thunderbird and moves the message to my Junk folder.  The server processed those Junk folders nightly, feeding them to DSPAM to further increase its accuracy.</p>
<p>I like not downloading all of the assumed junk mail to my phone or, worse yet, on a slow net connection while traveling somewhere around the world.  Unfortunately, QmailToaster&#8217;s SpamAssassin approach is to flag but leave it in your inbox.  No bueno.  Luckily we can use some of the software already installed and a very short script to replicate the previous behavior.</p>
<h3>Create generic mailfilter</h3>
<p>If you accept users will use a &#8220;Junk&#8221; folder (or &#8220;Spam&#8221; or whatever you want to call it), then you can create a single maildrop mailfilter script in ~vpopmail/etc/mailfilter-to-spam:</p>
<pre><code>SHELL="/bin/bash"
import EXT
import HOST

VUSER=`echo ${EXT%-*}`
export VUSER
USERHOME=`/mail/bin/vuserinfo -d $VUSER@$HOST`
export USERHOME

logfile "/var/log/maildrop/mailfilter.log"

# Test for the existance of the Junk directory.  Create it if it doesn't exist
#VERBOSE=9
#log "testing for $VUSER@$HOST in $USERHOME"

if ( /^X-Spam-Status: Yes/ )
{
        `test -d $USERHOME/Maildir/.Junk`

        if ( $RETURNCODE == 1 )
        {
            `/usr/bin/maildirmake -f Junk $USERHOME/Maildir`
            `echo INBOX.Junk &gt;&gt; $USERHOME/Maildir/courierimapsubscribed`
        }

        to "$USERHOME/Maildir/.Junk"
}
else
{
        to "$USERHOME/Maildir/"
}</code></pre>
<p>Now create a ~vpopmail/domains/sample.com/username/.qmail file for those users who want their spam quarantined in a &#8220;Junk&#8221; folder rather than just tagged:</p>
<p><code>|preline /usr/bin/maildrop ~vpopmail/etc/mailfilter-to-spam</code></p>
<p>Done!  All messages that meet your SpamAssassin minimum score (default of 5.0) will be quarantined in the &#8220;Junk&#8221; folder for review from SquirrelMail or your IMAP client.  You can process these folders using a script like the following (<em>warning, not tested in production yet!</em>):</p>
<pre><code>#!/bin/bash
cd ~vpopmail/domains

# find all Junk folders
for ii in `find . -type d -name '.Junk'`; do

  # find all mail 5 days or older
  for jj in `find $ii/cur/ -type f -mtime +4`; do

    # learn from it and delete it
    echo "processing $jj"
    /usr/bin/sa-learn --spam --no-sync $jj
    rm -f $jj

  done;

done;

# now synchronize the overall SA database
/usr/bin/sa-learn --sync</code></pre>
<p>The argument &#8220;-mtime +4&#8243; says look for files that are 5 days or older.  You could adjust that to +1 for 48 hours or &#8220;-mmin +60&#8243; for 60 minutes or older depending on your policies.  Schedule this to run as a cronjob nightly and you&#8217;ll be provided an ongoing set of spam to learn from.</p>
<p>Hope these links and notes help someone else in the future!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/05/04/march-qmail-server-madness/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Homemade Cool Suit System</title>
		<link>http://www.ghidinelli.com/2011/02/28/diy-cool-shirt-system</link>
		<comments>http://www.ghidinelli.com/2011/02/28/diy-cool-shirt-system#comments</comments>
		<pubDate>Mon, 28 Feb 2011 21:37:29 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Racing]]></category>
		<category><![CDATA[Research/HOWTO]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1254</guid>
		<description><![CDATA[Zack Steinkamp's HOWTO/DIY for building a cool suit system for driving a race car.  Staying cool improves performance and Zack shows how to do it for $100.]]></description>
			<content:encoded><![CDATA[<p>It looks like Zack Steinkamp&#8217;s specthismiata.com is no longer online.  A local racer contacted me about some of the parts numbers that I provided to the cooler component.  I&#8217;ve grabbed the original contents from a cache and am placing them here for posterity.  All credit goes to <a href="http://twitter.com/thenobot">@thenobot</a>.</p>
<h2>Homemade Cool Shirt System</h2>
<p>Usually after about 20 minutes in the car on a hot day, I start making mistakes.  Nothing horrible, but I know that it&#8217;s fatigue setting in that makes my brain work less well.  Driving a Miata is a physical experience, but less physical than doing something really physical like playing basketball.  So the fatigue isn&#8217;t the same kind of fatigue as what you&#8217;d feel after running 5 miles, instead it&#8217;s a mental fatigue that is mostly due to overheating.</p>
<p>With a race at Thunderhill in July approaching, Derek and I decided to do something about the heat.  A typical summer afternoon in Willows can be 105 degrees or more, so of any race this season, that one was likely to be the hottest.</p>
<p>We looked at the <a href="http://www.saferacer.com/fresh-air-systems-racer-series-cool-suit-system.html?productid=344">existing cool shirt systems</a> out there.  All look very well made and definitely have the kinks worked out.  However, there were two big issues with them from my perspective: they&#8217;re expensive, and they look like they&#8217;d be easy to make.  Time for some D.I.Y.!</p>
<p>The overarching concept with the shirt is that cold water is circulated in a lot of tubes attached to the shirt.  A small cooler serves to contain icewater.  The water is forced out the cooler using a bilge pump, through tubing into the shirt where it pulls heat out of your torso, flows out of the shirt, and is dumped back into the cooler where it mixes again with the icewater.  An important part of the system is a way to quickly connect and disconnect the shirt from the cooler &#8212; this is accomplished with dry-break fittings normally used in medical and industrial applications.</p>
<h2>Parts</h2>
<p><strong>8+ Quart Cooler</strong> &#8211; Make sure the one you pick will fit where you want to mount it.  Measure the available space, and get the biggest cooler that will fit.  We got ours from Target for $10 or so.  In hindsight, we TOTALLY should have gone with <a href="http://www.rivermarinesupply.com/xcart/customer/product.php?productid=11773&#038;cat=0&#038;page=1">this one</a>, since it looks to have a WAY better seal and the one we got leaks unless we cover the whole top in racer&#8217;s tape.</p>
<p><strong>Pump</strong> &#8211; I got a <a href="http://www.westmarine.com/webapp/wcs/stores/servlet/producte/10001/-1/10001/245752/377%20710%201521%201823%204294964406%204294966985%204294967143/69/Bilge%20Pumps/Primary%20Search/mode%20matchallpartial/0/Most%20Popular|1?N=377%20710%201521%201823%204294964406%204294966985%204294967143&#038;Ne=69&#038;Ntt=Bilge%20Pumps&#038;Ntk=Primary%20Search&#038;Ntx=mode%20matchallpartial&#038;Nao=0&#038;Ns=Most%20Popular|1&#038;keyword=bilge%20pump&#038;isLTokenURL=true&#038;storeNum=11&#038;subdeptNum=75&#038;classNum=304">600 GPH Bilge Pump from West Marine</a> for $25.  The ones at OSH take AC power so those were out.  The one I bought takes 12VDC power, so wiring it up to the car is easy.</p>
<p>To get the water in and out of the cooler, we used 1/2&#8243; diameter, 3&#8243; long nipples (pipe threaded on both ends).  We may have been able to use 2&#8243; long ones.</p>
<p><strong>Fittings And Such</strong> &#8211; We found all of this in the plumbing aisle at the local hardware store (NOT HOME DEPOT).<br /> <br />
- (1) 3/4&#8243; female to 1/2&#8243; female adapter<br /> <br />
- (2) 1/2&#8243; diameter, 3&#8243; long nipples (pipe threaded on both ends).  We may have gotten away with 2&#8243; long ones.<br /> <br />
- (4) Thin nuts, 1/2&#8243; coarse thread.  The nuts need to be able to thread onto the nipples.<br /> <br />
- (16) washers that can slip over the nipples.<br /> <br />
- (2) 1/2&#8243; female to 1/4&#8243; compression fittings with inserts to fit in 0.170&#8243; ID tubing<br /> <br />
- Roll of teflon tape</p>
<p><strong>Tubing</strong><br /> <br />
- 50 feet of 1/4&#8243; OD vinyl tubing.  This is what goes in the shirt.<br /> <br />
- 10 feet of 1/4&#8243; OD polyethylene tubing.  Typically used as the cold water supply for refrigerators.  This is what goes from the cooler to the shirt.  It needs to be different tubing because you use a compression fitting on the cooler end of the tubing.<br /> <br />
- 5 feet of foam pipe insulation.  1/2&#8243; inside diameter works fine.</p>
<p><strong>Quick Disconnects</strong><br /> <br />
- (2) Sockets &#8211; McMaster-Carr part number 5923K31 &#8211; $8 each or so<br /> <br />
- (2) Inserts &#8211; McMaster-Carr part number 5923K61 &#8211; $7 each or so<br /> <br />
Optionally, get an extra insert so that you can connect it to the ouput line from the cooler and run the pump to drain the water from cooler without throwing away ice if you&#8217;re going to be running closely spaced track sessions.</p>
<blockquote style="background:#FFC; padding:20px; border:1px solid #fc3;">
<p><strong>From Brian&#8230;</strong></p>
<p>Btw, I ordered the real <a href="http://www.saferacer.com/fresh-air-systems-carbon-x-cool-shirt.html?productid=345">FAST Carbon-X shirt</a> so if you ever want to build the cooler again, you need to use the PLC line of couplers (metal thumb clasp) rather than APC line (plastic thumb clasp).  The male end on the FAST shirts requires the thin metal connection. Luckily McMaster-Carr sells them also.  It&#8217;s McMaster-Carr #5012K662 for $9.93/ea.  The general parts number btw is Colder P/N #PLCD13004
</p>
</blockquote>
<p><strong>Mounting</strong> &#8211; keeping the cooler in position<br /> <br />
- (3) pieces of 90-degree aluminum, 1.5&#8243; on a side, 6&#8243; long<br /> <br />
- (6) 1/4&#8243; Bolts and nylock nuts<br /> <br />
- Nylon strap with ratcheting tightening mechanism</p>
<p><strong>Shirt</strong> &#8211; Get a TIGHT shirt.  If you wear a Large, get a medium.  It needs to be skin tight.</p>
<p><strong>Fabric</strong> &#8211; An old cotton pillowcase is great source of the fabric.  You sew the fabric onto the shirt to hold the tubing in place.  Details to follow.</p>
<p><strong>Silicone</strong> &#8211; A small tube of GE Silicone II works well.</p>
<h2>Putting it Together</h2>
<h3>Cooler</h3>
<p>Start by setting the pump in the cooler.  Put the outlet against one of the sides of the cooler and mark its location.  Find where the center of that circle is and drill a hole just big enough for the nipple to slip through.  Drill another hole the same size toward the top of the cooler for the return line.</p>
<p>Spin one of the thin nuts onto one end of one of the nipples.  Then, wrap that end with teflon tape and thread the 3/4&#8243; to 1/2&#8243; adapter onto it.  Tighten.  Slip one of the washers onto the assembly so it rests against the nut and goop up the washer on the side facing away from the adapter with silicone.  Slip it through the lower hole in the cooler from the inside to the outside.  Put the pump in the cooler, put teflon tape on the 3/4&#8243; threads on the pump, and thread the nipple and adapter assembly onto the pump.  Tighten.  Goop up the hole on the outside of the cooler, and stack up enough washers on the nipple so that you can tighten one of the nuts onto the nipple&#8217;s threads all the way to the bottom of the threads.  The goal is to maximize the threads exposed on the nipple after you tighten the nut.</p>
<p>Slip the other nipple through the top hole in the cooler and goop up around it inside and out with silicone.  Don&#8217;t be shy.  Use one or more washers on the inside and out.  Stack up the washers just enough so that you can tighten the nuts on the inside and out all the way down &#8212; so the nut is threaded as far down as the threads on the nipples go.  I used all 16 washers for this.</p>
<p>So at this point you should have both nipples mounted firmly in the cooler, with the pump attached to the lower nipple.  We used some short sheetmetal screws to attach the pump to the cooler floor.  We drilled holes first and squeezed silicone into the holes so that the water would not leak through.</p>
<p>Drill a small hole through the side of the cooler near the top for the pump&#8217;s wires to pass through.  Goop up around the hole with silicone so this is not a source for leaks.</p>
<p>Put teflon tape around the exposed threads on the nipples on the outside of the cooler and thread on the 1/2&#8243; to 1/4&#8243; compression fittings.  Tighten.  Cut the polyethylene hose into equal lengths, slip in the compression insert to the tubing, and attach to the compression fittings.  Wait to install the dry-break connectors until you get everything together and know exactly how long you want the polyethylene tubing to be.</p>
<p><img src="http://farm3.static.flickr.com/2175/2727335466_3e380ff65d.jpg?v=1217737180" />   <img src="http://farm4.static.flickr.com/3090/2726512207_6937785641.jpg?v=1217737237" /></p>
<h3>Shirt</h3>
<p>Hopefully you or someone you know has a sewing machine and is not afraid to use it!  The concept here is that you will need to sew two panels onto the shirt &#8212; one on the front and one on the back.  You will only use vertical stitching on the panel since the tubing is going to thread up and down between the panel and shirt.  The tubing enters the front of the shirt one one side, goes up and down through the &#8220;channels&#8221; in the panel, hooks around to the back, does the serpentine thing again, and ends up next to the inlet tubing.</p>
<p>Here are diagrams of the front and back.  The grey shaded area is the panel you cut out of pillowcase or sheet material.  The red lines are the stitching, and the blue lines are the clear vinyl tubes.</p>
<p><img src="http://farm4.static.flickr.com/3003/2729023855_b540eb6b95_o.jpg" width="337" height="300" alt="cool_shirt_front" /> <img src="http://farm4.static.flickr.com/3039/2729854752_99fffb5386_o.jpg" width="337" height="300" alt="cools_shirt_back" /></p>
<p>Start out by putting on the shirt (TIGHT!) and your HANS and sit in a chair.  Mark on the shirt (water soluble markers from my daughter&#8217;s art box worked great) where the HANS lays.  Also mark 3&#8243; or so above where lap belt falls &#8211; that&#8217;ll be the bottom of the panels.</p>
<p>Cut out the panels.  Center them on the shirt horizontally, and line them up with the line you drew that&#8217;s 3&#8243; above the lap belt.  Sew up the sides of the panels, then sew the channels that will guide the tubing.  The channels should be 1.5&#8243; wide or so &#8212; but make sure there is an even number of them so the tubing works out.  I used 12 channels on both the front and back.</p>
<p>Thread the vinyl tubing through the shirt, being careful to not twist it in the shirt &#8212; it&#8217;s not a huge deal, but it will not lay flat if there are twists.  Leave 5 feet or so of extra tubing at the beginning so you can have flexibility in where things go at the end.  The tubing should enter and leave the shirt on the same side, e.g. in the front on the left, and out the back on the left.</p>
<h3>Finish Up</h3>
<p>Cool!  So now put the shirt on and get in the car.  Play with different positions of the tubing to figure out what&#8217;s best for you.  Don&#8217;t forget that the shirt tubing needs to get outside your firesuit somehow &#8212; I put mine through the lower zipper opening.  Some people will cut slits in their pockets, which seems like an OK idea too.</p>
<p>Once you figure out where everything should go, trim the tubing and hook up the dry-break fittings.  Also figure out where you want the cooler to mount in the car.  Use the aluminum and nuts and bolts to locate it.  Figure out how to mount the nylon ratcheting strap to keep everything tight.  I used eyebolts that were already there for the passenger side lap belt.</p>
<p>The nice thing about this mounting setup is that to remove the cooler to dump it, all you have to do is loosen the nylon strap and pull the cooler out.  No tools required.</p>
<p>Wire up the pump, ideally with a fused and switched circuit.  You don&#8217;t want it on all the time, and if the pump burns up you don&#8217;t want to take down the car&#8217;s electronics.  I made a power distribution block and fuse block that sits in the center console and used a metal toggle switch for the pump circuit.</p>
<p><img src="http://farm4.static.flickr.com/3054/2727337150_2889ecc5fd.jpg?v=1217737310" />   <img src="http://farm4.static.flickr.com/3165/2727336922_a9954493c7.jpg?v=0" />   <img src="http://farm4.static.flickr.com/3196/2727336714_f0b9c3e679.jpg?v=1217737283" />   <img src="http://farm4.static.flickr.com/3109/2727336514_60254d4bb8.jpg?v=0" />   <img src="http://farm3.static.flickr.com/2179/2727336320_2ef6093d71.jpg?v=1217737259" /></p>
<h2>Aftermath</h2>
<p>I was excited to give the system a try at the Thunderhill race.  The forecast was for 95 degree temperatures.  In the first practice session, I hooked up the system and powered it on at the 3-minute board on grid.  To my dismay, I didn&#8217;t feel or see any flow in the system.  After all this work, I was really bummed out.  I resolved to work out the system after this practice session.  So I went out not expecting anything.  Well in Turn 6 on the first lap, the cold goodness started flowing!  OH IT WAS SO NICE!</p>
<p>I&#8217;d fill the cooler with ice, then pour in just enough water to run the system.  This gives maximum cooling for the longest time, since the warmer water returning from the shirt will start melting the ice right away.  If it&#8217;s too cold, run less ice and more water in the cooler, though I don&#8217;t see this as a possibility unless it&#8217;s really cold outside.  After the session, I&#8217;d either remove the cooler from the car and dump it, or attach an extra insert to the line coming from the pump and run it to pump out most of the water, add more ice, then go out again.</p>
<p>It worked great through the whole weekend.  Through the entire 30 minute races I felt sharp, and not once did I wish for the end of the race.  Where I&#8217;m usually totally beat at the end of a session or race, I was not fatigued a bit.</p>
<p>I&#8217;m sure the $400 systems would work better to some degree, but for 1/4 the cost and a day or so of work, I&#8217;m satisfied.
</p>
<blockquote style="background:#FFC; padding:20px; border:1px solid #fc3;"><p>
<em>Editor&#8217;s note:</em> I followed Zack&#8217;s advice and built the cooler but bought the real <a href="http://www.saferacer.com/fresh-air-systems-carbon-x-cool-shirt.html?productid=345">FAST Carbon-X shirt</a> from SafeRacer.  I wanted Carbon-X for the comfort and a second layer of fire protection but it also looked like it was sewn really well.  In retrospect this was definitely the right move.  The shirt fits well, the tubes are awesomely sewn on and there is no goofy bulging.  The shirt is pricey but it&#8217;s the last piece actually touching your body so I feel the price was worth it.  I used it just yesterday in 60F weather at Willow Springs and it was nice!  Don&#8217;t underestimate how much heat you generate trying to hustle your car around.</p>
<p>Here is a photo of my parts laid out.  I used a combination of PVC and brass fittings from Home Depot in conjunction with the cooler and pump I noted above.  System has traveled across the country for 3 seasons and is still working like a champ.</p>
<p><a href="https://www.ghidinelli.com/wp-content/uploads/2011/02/coolsuit_diy_icechest_parts.jpg"><img src="https://www.ghidinelli.com/wp-content/uploads/2011/02/coolsuit_diy_icechest_parts-300x204.jpg" alt="Parts for building a DIY Cool Suit System for Racing" title="Parts for building a DIY Cool Suit System for Racing" width="300" height="204" class="aligncenter size-medium wp-image-1553" /></a>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2011/02/28/diy-cool-shirt-system/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Faster email replies with selective quoting in Thunderbird</title>
		<link>http://www.ghidinelli.com/2010/11/08/faster-email-reply-partial-quote-thunderbird</link>
		<comments>http://www.ghidinelli.com/2010/11/08/faster-email-reply-partial-quote-thunderbird#comments</comments>
		<pubDate>Mon, 08 Nov 2010 19:45:30 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web/Internet]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1172</guid>
		<description><![CDATA[Reply to emails faster by only quoting the text relevant to your response using a new feature of Thunderbird 3]]></description>
			<content:encoded><![CDATA[<p>After waiting an eternity for the Lightning calendar project to release a 1.0, I gave up and upgraded to <a href="http://www.mozillamessaging.com/thunderbird/">Thunderbird 3</a> and Lightning 0.9.  I wish I would have earlier as both are big steps forward.  I just discovered a neat trick in Thunderbird when replying to a message.  By default, Thunderbird quotes the entire message and deposits your cursor either above or below the quoted text based upon your preference:</p>
<p><img src="https://www.ghidinelli.com/wp-content/uploads/2010/11/thunderbird_reply_full_quote1.png" alt="Standard reply quotes the entire email in Thunderbird" title="Standard reply quotes the entire email in Thunderbird" width="616" height="391" class="aligncenter" /></p>
<p>However, if you first select an arbitrary amount of text, your reply will <em>only quote that text</em>.  </p>
<p><img src="https://www.ghidinelli.com/wp-content/uploads/2010/11/thunderbird_reply_select_relevant_text1.png" alt="Selecting the text you want to quote before replying will limit the quoted text" title="Selecting the text you want to quote before replying will limit the quoted text" width="546" height="321" class="aligncenter" /></p>
<p>If you&#8217;re like me and you carefully whittle down your email responses to only include the relevant text, this is a neat shortcut that requires just a quick drag of the mouse and your response is immediately ready for you to start typing. </p>
<p><img src="https://www.ghidinelli.com/wp-content/uploads/2010/11/thunderbird_reply_partial_quote.png" alt="Selected text is quoted eliminating manual editing and faster responses" title="Selected text is quoted eliminating manual editing and faster responses" width="590" height="190" class="aligncenter" /></p>
<p>Nice job Mozilla!  Here is the <a href="http://kb.mozillazine.org/Quote_only_selected_text_when_replying_-_Thunderbird">documentation</a> on their site which I found after I stumbled upon the feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2010/11/08/faster-email-reply-partial-quote-thunderbird/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ballast plates for 1999-2005 Mazda Spec Miata</title>
		<link>http://www.ghidinelli.com/2010/08/09/ballast-plates-for-1999-2005-mazda-spec-miata</link>
		<comments>http://www.ghidinelli.com/2010/08/09/ballast-plates-for-1999-2005-mazda-spec-miata#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:19:44 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[Racing]]></category>
		<category><![CDATA[Research/HOWTO]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[specmiata]]></category>

		<guid isPermaLink="false">http://www.ghidinelli.com/?p=1085</guid>
		<description><![CDATA[Ballast plate design and mounting for Mazda Spec Miata (1999-2005) plus downloadable template]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.ghidinelli.com/wp-content/uploads/2010/08/ballastplates-99.pdf"><img src="https://www.ghidinelli.com/wp-content/uploads/2010/08/ballastplates-99.gif" alt="ballastplates-99" title="ballastplates-99" width="240" height="293" class="alignright" /></a>When building my car this winter, it was obvious we were going to need some ballast in the right hand side in order to meet the minimum weight.   Since the 1999-2005 Spec Miatas must weigh 2450lbs compared to the 2300lbs that a 1990-1993 car requires, the only question was &#8220;how much?&#8221;  It turns out the answer was &#8220;a lot&#8221;: about 175lbs! </p>
<p>There are several ways people add ballast.  Lead is the ideal solution but nothing was available in this quantity locally and I would have had to smelt and pour my own weights which was unappealing.  Many people use plate weights from a sporting goods store but stacking enough 45# plates was going to be unwieldy and I didn&#8217;t like the options for bolting them in place.  Some people on SpecMiata.com have built <a href="http://forum.specmiata.com/cgi-bin/ultimatebb.cgi?/topic/2/4857/2.html#000088">systems that attach to the seat mount points</a> which is safe and clean but technically not permitted by the rules.  Finally, there are some ready-made solutions like <a href="http://www.rennenmetal.com/products.asp?cat=14&#038;pg=3">this Rennen Metal</a> option but the shipping was going to cost more than the weight!  </p>
<p><a href="https://www.ghidinelli.com/wp-content/uploads/2010/08/topside.jpg"><img src="https://www.ghidinelli.com/wp-content/uploads/2010/08/topside-300x186.jpg" alt="View of installed plates from above in passenger well" title="View of installed plates from above in passenger well" width="300" height="186" class="alignleft" /></a>Ultimately I decided I wanted a GCR-compliant solution that I could obtain locally and would handle weight up to 175# safely in the event of an incident.  I designed a steel plate solution that requires the removal of the rear seat mounts on the passenger side and consumes the ~16&#8243;x17&#8243; space left rearward of the front seat rail.  At this size built from mild steel (40.84#/ft<sup>2</sup> @ 1&#8243; thick), the total weight can be tuned through combining plates of various thicknesses:</p>
<table>
<tr>
<th>Thickness</th>
<th>Weight</th>
</tr>
<tr>
<td>1/8&#8243;</td>
<td>9.5#</td>
</tr>
<tr>
<td>1/4&#8243;</td>
<td>19.1#</td>
</tr>
<tr>
<td>1/2&#8243;</td>
<td>38.25#</td>
</tr>
<tr>
<td>3/4&#8243;</td>
<td>57.4#</td>
</tr>
<tr>
<td>1&#8243;</td>
<td>76.5#</td>
</tr>
</table>
<p><a href="https://www.ghidinelli.com/wp-content/uploads/2010/08/underside.jpg"><img src="https://www.ghidinelli.com/wp-content/uploads/2010/08/underside-300x225.jpg" alt="View of outboard backing plate under car" title="View of outboard backing plate under car" width="300" height="225" class="alignright" /></a>I was already concerned about the safety of having that much weight attached to the floor pan so working with guidance from my roll cage fabricator <a href="http://www.tcdesignfab.com">TC Design</a> in Milpitas, CA, I designed extra large 1/4&#8243; thick backup plates that run 4&#8243;x20&#8243; along the frame rail using a total of 4 x 5/8&#8243; Grade 8 bolts to keep everything in place.   Each backup plate adds approximately 4.5# to the weight of the car.  The inboard side runs next to the brake and fuel lines from just in front of the rear subframe brace towards the front of the car.  Washers and nylock nuts complete the install.  The goal was to provide as much surface area as possible to resist pulling through the floor pan in case of a serious crash.</p>
<p>Installed in the photo above are 1 x 1&#8243; base plate, 9 x 1/8&#8243; plates and 2 backing plates for a total of 171.5#.  With one gallon of gas, my car runs just a few pounds above the 2450# required minimum weight.   I have since removed a couple of the 1/8&#8243; plates in order to add a <a href="http://www.saferacer.com/auto-racing-underwear/cool-suit/?cat=56&#038;tagarray=29">Cool Suit</a> system so I maintain the same total and corner weights.</p>
<div style="border: 1px #999; padding: 10px; background-color: #fd6; font-size: 130%; text-align: center;"><a href="https://www.ghidinelli.com/wp-content/uploads/2010/08/ballastplates-99.pdf">Download the template (PDF)</a></div>
<p>If you can&#8217;t find someone local to cut the steel for you, I had an excellent experience with <a href="http://www.bayshoremetals.com/">Bayshore Metals</a> in San Francisco.  Steve (<a href="mailto:baymetals@sbcglobal.net">baymetals@sbcglobal.net</a>) did a great job not only with the sales process but also in waiting for me to pick up the ballast when I was running late en route to our first race weekend. </p>
<p><em>Disclaimer: the above experience and downloadable template are a guide and come with no warranty of any kind.  Consult with an expert and make your own judgment before using this information.  You alone are responsible for your safety!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghidinelli.com/2010/08/09/ballast-plates-for-1999-2005-mazda-spec-miata/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
