<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>cowboyrushforth.com</title>
    <link>http://cowboyrushforth.com/entries/feed</link>
    <description>spotman's adventures</description>
    <language>en-us</language>
    <item>
      <title>dspam experiement</title>
      <description>So finally, SpamAssasin just could not hack it any more on my server.  This year there has been a steady influx of spam, and some users of my mail services are literally getting 1 good message out of 100 messages.  I feel like I have truly exhausted all SA resources out there. &lt;img class='floatTR' src='http://dspam.nuclearelephant.com/screenshots/dspam3.png' alt='dspam in action' width=260 /&gt; From custom rule sets after more rule sets, after more configuration, SA just can't seem to learn fast enough.  I also employ RBL/SBL checks and the works.  So, what to do?  Enter &lt;a href="http://dspam.nuclearelephant.com/"&gt;DSPAM&lt;/a&gt;. 
&lt;Br&gt;&lt;Br&gt;Previously, I was a bit weary when I heard about the DSpam project and at the time, SpamAssassin was working for me, so why fix something that is not broken or so I thought.   Well that mindset finally passed, and I dove into configuring DSpam for my setup.  I run a Postfix/Cyrus type of a virtual email setup that is pretty complicated to say the least.  I knew in advance that embarking down this road would mean learning some things and some elbow grease, but that is ok.    I finally settled on a configuration that is similar to both &lt;A href="http://dspamwiki.expass.de/Installation/Postfix/NealesSetup"&gt;Neale's Setup&lt;/a&gt; and &lt;A href="http://devnull.com/kyler/dspam.20040512.html"&gt;Cepcep's Setup&lt;/a&gt; in different ways.   In my setup, I have 2 independent chains, one for inbound email and one for outbound email.  I decided to leave my outbound chain alone, and continue to send it thru amavisd.  For the inbound chain, all mail is subject to getting sent to dspam, then dspam re-routes it back into postfix with a result attached. &lt;Br/&gt;&lt;br&gt;

Lastly, I wrote the following script, so that I may simply forward my mails to ham@ or spam@, and have postfix deliver it directly to my script, for retraining purposes.&lt;Br&gt;&lt;br&gt;
It is piped to dspam, from postfix, like so:
&lt;pre&gt;
dspam-retrain   unix    -       n       n       -       10      pipe
  flags=Ru user=dspam argv=ruby /usr/local/bin/dspam-retrain.rb $nexthop $sender $recipient
&lt;/pre&gt;
&lt;Br&gt;
&lt;span style="line-height: 5px;"&gt;
&lt;font face="monospace"&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;#!/usr/bin/ruby&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Ruby version of dspam-retrain perl script.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Perl version: &lt;a href="http://dspamwiki.expass.de/DspamRetrainScript"&gt;http://dspamwiki.expass.de/DspamRetrainScript&lt;/a&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Author: wsr@rushforthnetworks.com&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# License: BSD&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Abstract: setup postfix to pipe mail into this script&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; so that we may then pass it off to dspam in &lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; an appropriate way.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dspam-retrain.rb handles spam-user@domain.tld, and&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spam@domain.tld formats&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If dspam-retrain.rb does not find a signature,&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it will train dspam using corpus or innoculation&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Requirements: open4 gem is installed&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# -----------------------------------------------------------&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#### Configuration BEGIN ####################################&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#enable logging?&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;@enable_logging&lt;/b&gt;&lt;/font&gt;&amp;nbsp;= &lt;font color="#ff40ff"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;@log_file&lt;/b&gt;&lt;/font&gt;&amp;nbsp;= &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/tmp/dspam_retrain.log&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#what mode to train dspam in if we do not find signature?&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#corpus or innoculation&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;@alternative_mode&lt;/b&gt;&lt;/font&gt;&amp;nbsp;= &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;corpus&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#### Configuration END #####################################&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;Br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;rubygems&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;open4&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;@enable_logging&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#8080ff"&gt;&lt;b&gt;require&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;logger&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;@logfile&lt;/b&gt;&lt;/font&gt;&amp;nbsp;= &lt;font color="#00ff00"&gt;&lt;b&gt;File&lt;/b&gt;&lt;/font&gt;.new(&lt;font color="#225522"&gt;&lt;b&gt;@log_file&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;a+&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;@log&lt;/b&gt;&lt;/font&gt;&amp;nbsp;= &lt;font color="#00ff00"&gt;&lt;b&gt;Logger&lt;/b&gt;&lt;/font&gt;.new(&lt;font color="#225522"&gt;&lt;b&gt;@logfile&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;logthis&lt;/b&gt;&lt;/font&gt;(message)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;@enable_logging&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;@log&lt;/b&gt;&lt;/font&gt;.info(message)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#8080ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;# Get arguments&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
spam_class&amp;nbsp;&amp;nbsp;= &lt;font color="#225522"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;] &lt;br&gt;
sender = &lt;font color="#225522"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;] &lt;br&gt;
recip&amp;nbsp;&amp;nbsp;= &lt;font color="#225522"&gt;&lt;b&gt;ARGV&lt;/b&gt;&lt;/font&gt;[&lt;font color="#ff40ff"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/font&gt;] &lt;br&gt;
&lt;br&gt;
logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;dspam-retrain Started. Arguments: &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;spam_class&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;, &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;sender&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;, &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;recip&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#see if we were passed spam-user@ or just user@&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;match = recip.to_s.match(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;^(spam|ham)-(\w+)@&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user = recip.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;match[&lt;font color="#ff40ff"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;]&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;\-&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;elsif&lt;/b&gt;&lt;/font&gt;&amp;nbsp;match = recip.to_s.match(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;^(\w+)@&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;) &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user = sender&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Cant't determine user&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff40ff"&gt;&lt;b&gt;75&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
signature = &lt;font color="#00ff00"&gt;&lt;b&gt;String&lt;/b&gt;&lt;/font&gt;.new&lt;br&gt;
message&amp;nbsp;&amp;nbsp; = &lt;font color="#00ff00"&gt;&lt;b&gt;String&lt;/b&gt;&lt;/font&gt;.new&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#loop through email (passed via stdinput)&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#search for signature&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;$stdin&lt;/b&gt;&lt;/font&gt;.each &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|&lt;font color="#225522"&gt;&lt;b&gt;line&lt;/b&gt;&lt;/font&gt;|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;line.match(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;X-DSPAM-Signature&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;signature = line.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;X-DSPAM-Signature:&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#remove any potential whitespace&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;signature.strip!&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#since we found signature, break loop&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message &amp;lt;&amp;lt; line &lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;signature.length.to_i == &lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#we did not find a signature, do normal training&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;train&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Email did not have signature passed in. Attempting &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;&lt;font color="#225522"&gt;&lt;b&gt;@alternative_mode&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;train.&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#open up dspam with appropriate options&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pid, dspam_in, dspam_out, dspam_err = &lt;font color="#00ff00"&gt;&lt;b&gt;Open4&lt;/b&gt;&lt;/font&gt;::popen4 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/usr/bin/dspam --source=&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;&lt;font color="#225522"&gt;&lt;b&gt;@alternative_mode&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;--class=&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;spam_class&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;--user &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;user&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#attempt to feed message in&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_in &amp;lt;&amp;lt; message&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;rescue&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#means dspam closed stdinput because our&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#options failed&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_err.each_line &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|&lt;font color="#225522"&gt;&lt;b&gt;o&lt;/b&gt;&lt;/font&gt;|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;+ o.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\n&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#close dspams stdinput&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_in.close_write&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#see if dspam left any messages for us&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_out.each_line &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|&lt;font color="#225522"&gt;&lt;b&gt;o&lt;/b&gt;&lt;/font&gt;|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;o.strip.length == &lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;next&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;+ o.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\n&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#we found signature, so we will only pass that.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode = &lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;retrain&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Retraining Signature: &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;signature&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;for User: &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;user&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;as: &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;spam_class&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#open up dspam with appropriate options&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pid, dspam_in, dspam_out, dspam_err = &lt;font color="#00ff00"&gt;&lt;b&gt;Open4&lt;/b&gt;&lt;/font&gt;::popen4 &lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;/usr/bin/dspam --source=error --signature=&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;signature&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;--class=&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;spam_class&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;&amp;nbsp;--user &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;user&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#225522"&gt;&lt;b&gt;#see if dspam left any messages for us&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_out.each_line &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|&lt;font color="#225522"&gt;&lt;b&gt;o&lt;/b&gt;&lt;/font&gt;|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;o.strip.length == &lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;next&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;+ o.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\n&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;,&lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dspam_err.each_line &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|&lt;font color="#225522"&gt;&lt;b&gt;o&lt;/b&gt;&lt;/font&gt;|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;o.strip.length == &lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;next&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;+ o.gsub(&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\n&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;,&lt;font color="#ff6060"&gt;&lt;b&gt;''&lt;/b&gt;&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
ignored, status = &lt;font color="#00ff00"&gt;&lt;b&gt;Process&lt;/b&gt;&lt;/font&gt;::waitpid2 pid&lt;br&gt;
&lt;br&gt;
&lt;font color="#225522"&gt;&lt;b&gt;#see if we exited cleanly and log it&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;status.exitstatus == &lt;font color="#ff40ff"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Message successfully &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;mode&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;ed as &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;spam_class&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;&amp;nbsp; &lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logthis(&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;\t&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;Message NOT &lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;#{&lt;/b&gt;&lt;/font&gt;mode&lt;font color="#ff6060"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&lt;b&gt;ed&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff6060"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;)&lt;br&gt;
&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;
</description>
      <category>code</category>
      <pubDate>Fri, 31 Oct 2008 13:56:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/48</link>
      <guid>http://cowboyrushforth.com/entries/show/48</guid>
    </item>
    <item>
      <title>back from the dunes</title>
      <description>&lt;img src="http://cowboyrushforth.com/images/blog/oregon_1_small.jpg" class="floatTR" alt="spotman catching air" /&gt;I have arrived back from the dunes, mostly in one piece.  It was an amazing trip, and one that will surely be repeated hopefully soon!&lt;Br/&gt;&lt;br/&gt;


We rode for 3 days solid, riding for almost the whole day each day, and resting at night.  The terrain was very diverse, and we were able to ride right out of our campground and go for miles and miles.  About half of the time it was raining, which made for very cold nights, and very hard packed sand.&lt;br/&gt;&lt;br/&gt;

 I managed to cartwheel my yz250, tearing off some fenders, and my better half, managed to blow up her freshly rebuilt engine on her cr125.  Somehow in the mess of it all it was one of the best vacations we have taken in a bit.  Lucky for me I was able to score some makeshift parts for free from a local bike shop in Coos Bay, Oregon.  The wife's bike is still out of commission, but I have already started to tear it down, so it will be roaring back to life soon. &lt;br/&gt;&lt;br/&gt;

&lt;a href="http://cowboyrushforth.com/photos/gallery/Dune_Trip_2008"&gt;Click here for more photos.&lt;/a&gt;

&lt;img src="http://cowboyrushforth.com/images/blog/oregon_2_small.jpg" class="floatTL" alt="slinkerbell slicing some dunes" /&gt;</description>
      <category>life</category>
      <pubDate>Wed, 15 Oct 2008 20:27:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/47</link>
      <guid>http://cowboyrushforth.com/entries/show/47</guid>
    </item>
    <item>
      <title>dunes and decompression</title>
      <description> It is that time of the the year, that the dunes are open and calling my name.  Well actually they call my  name every year all the time, but this it the first year&lt;img src='http://cowboyrushforth.com/images/blog/bikes_oct08.jpg' alt='prepping bikes for dunes' class='floatTR' /&gt; in a while I will be able to make my families annual camping trip to the Oregon coast to ride the dunes. &lt;Br/&gt; &lt;Br/&gt;We are going to a spot that is a few minutes away from Coos Bay.  I am not sure I have been to this exact spot before, but I am pretty stoked.  The bikes are clean, lubed, and armed with paddle tires, the fleet is ready.  Hopefully I will have time to snap a few pictures, cross your fingers. &lt;br/&gt;&lt;br/&gt;After wrangling the sand for a few days, we will be heading out just in time to hit &lt;a href="http://www.burningman.com/blackrockcity_yearround/special_events/decompression/decom2008.html"&gt;San Francisco Decompression&lt;/a&gt;, where we will see a whole slew of bats, and other neighbors from home.  Not too long after this, I will also be attending &lt;a href="http://www.socalde.com/"&gt;San Diego Decompression&lt;/a&gt;, too, making my decompression circuit for this year probably complete.&lt;br/&gt;&lt;br/&gt;Happy Trails&lt;Br/&gt;-spotman</description>
      <category>life</category>
      <pubDate>Tue, 07 Oct 2008 00:07:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/46</link>
      <guid>http://cowboyrushforth.com/entries/show/46</guid>
    </item>
    <item>
      <title>energy and momentum</title>
      <description>I have been thinking a lot about energy lately.  In my quest to stay on top of the constant barrage of work, I have exhausted, and employ, all normal resources for maintaining a good energy and efficiency level, including all sorts of drinks, kombucha, tea, sleep, exercise, etc. As I dig deeper into my routine, I am finding that while caffeine and sleep are vital, it's really just the tip of the iceberg.
&lt;img src="/images/blog/Caffeine.jpg" alt="Caffeine" class="floatTR" /&gt;
&lt;br&gt;&lt;br&gt;By routine, I guess this is the most robotic I have ever been.  Wakeup, Coffee, Code, Coffee, Code, Lunch, Code, Dinne, Code, Sleep. Wash, Rinse, Repeat. For the past couple years that has been just about it, except I do get out in the evenings and afternoons, and the occasional vacation or camping trip, but definitely not an enormous amount. 

&lt;br/&gt;&lt;br/&gt;Don't get me wrong, I love my job, its awesome - but it is hard to be "on" everyday.  Somedays are very long, and as much as you want to try and really tackle the 38 tasks in front of you, something keeps you from doing it.  It might be an email, or a phone call, or nothing at all.  Just knowing that in one day you can't make a dent, it keeps you from moving very quickly at all.

&lt;br/&gt;&lt;br/&gt;Other days are a little bit better, but even more tiring when they are done.  You have got your task list down to about 20 things, so you give it all you got, hoping to at least cut it in half.  However, somehow, you hit a huge patch of mud.  You are stuck in it all day.  A bug that should take 15 minutes to fix turns into a 4 hour issue and ends up being 1 line that you stared at for 2 of those hours.  Client decides that they want a magic lever, attached to a ceiling, with custom elevator shoes to reach it.  At the end of the day you have worked very hard, but only finished 3 things.

&lt;br/&gt;&lt;br/&gt;Then there are days where you somehow find it.  It, being the drive inside, energy even, to  keep you going all day long, just knocking off things from your list.  Today was one of those days for me.  It is definitely an ebb and flow, but what is more interesting than having a flow day, is that it seems like everything just flies by, effortlessly.  A 15 minute bugfix, takes 15 minutes.  Clients requests are sane.  All the sudden, I am right where I need to be.  It is such a huge contrast from the other scenarios, but it certainly seems like it really is all about momentum at times.   Possibly because I just spent the weekend seeing a close friend get married.  There was definitely a lot of good energy there.

&lt;br/&gt;&lt;br/&gt;
Cheers to energy and momentum.  Have a nice week.</description>
      <category>life</category>
      <pubDate>Wed, 01 Oct 2008 01:08:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/45</link>
      <guid>http://cowboyrushforth.com/entries/show/45</guid>
    </item>
    <item>
      <title>Tech Toy Review</title>
      <description>&lt;a href="http://www.techtoyreview.com"&gt;Tech Toy Review&lt;/a&gt; has just been launched!  Tech toy review is mostly ran by a friend of mine, but I will also be contributing the occasional review.   So stay tuned, and make sure to check it out :) &lt;Br/&gt;&lt;a href="http://www.techtoyreview.com"&gt;&lt;img src="/images/ttr.png" alt="Tech Toy Review" class="floatTR" border="0" /&gt;</description>
      <category>life</category>
      <pubDate>Thu, 18 Sep 2008 20:26:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/44</link>
      <guid>http://cowboyrushforth.com/entries/show/44</guid>
    </item>
    <item>
      <title>The G-Spot</title>
      <description>Enter the G-Spot.  A drink I invented just now.  If there is already a drink with this name (i have not checked), it should be replaced with this recipie:&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;35% &lt;a href="http://www.pamaliqueur.com/index.html"&gt;Pama Liqueur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;20% Dark Rum&lt;/li&gt;
&lt;li&gt;30% Guava Juice/Nectar&lt;/li&gt;
&lt;li&gt;15% Tonic Water&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;The bigger the glass the better.  On the rocks. Stirred, or shaken, seems about right either way; enjoy.&lt;br/&gt;&lt;br/&gt;-spotman</description>
      <category>food</category>
      <pubDate>Thu, 18 Sep 2008 18:29:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/43</link>
      <guid>http://cowboyrushforth.com/entries/show/43</guid>
    </item>
    <item>
      <title>Living the Dream</title>
      <description>&lt;img src="http://cowboyrushforth.com/images/golf.jpg" alt='carousel bar golf cart' border=0 class='floatTL' /&gt;It has been the most amazing Burning Man ever.  I am finally starting to gain feeling back in my limbs and pick up speed in the real world.  Often with a lot of experiences one goes through in life, the first time you experience something, you get a feeling that is very hard to achieve again.  Whether its white water rafting, or the first time you win a race, you had never known what it was going to be like previously, so you went into it full bore, and came out victorious.  How does one achieve this feeling again?  Until Burning Man 2008, I did not believe it was possible.&lt;br/&gt;&lt;br/&gt;&lt;img src="http://cowboyrushforth.com/images/ehands.jpg" alt="cdbp, slink, and spot" class="floatTR" /&gt;This year was incredible, and to be perfectly honest, there are no words which can express the depth of energy that this year contained.  Bat Country was explosive, and infectious.  Every single member of our camp went the extra mile this year.  We asked for people to step up and bring extra supplies, supplies were there.  We asked people to step up and take extra trash home, it was taken.  We had the most stress free, successful week of our  lives known to date, and for just a few nights at the end of the week, after we had worked very hard to build our camp and meet our original goals, Bat Country, was the place to be on the playa, at least for almost every single bat.  We rocked the playa and fully satisfied our camp's goals.  We are now even more motivated and want to bring the same theme back in 2009, and be ready for &lt;A href="http://www.burningman.com/art_of_burningman/bm09_theme.html"&gt;Evolution&lt;/a&gt;. &lt;img src="http://cowboyrushforth.com/images/temple08.jpeg" alt="temple 2008" class="floatTL" /&gt;  &lt;br/&gt;&lt;br/&gt;There was so much energy pumped into our camp this year due to all the awesome people that are in it, it was completely awesome and unbelievable.  Thank you to everyone out there in Bat Country that helped make this year a success.  The man burns in 362 days.  Bat Country will be ready.&lt;Br/&gt;&lt;Br/&gt;&lt;a href="http://cowboyrushforth.com/photos/gallery/BurningMan_2008"&gt;Few pictures here.&lt;/a&gt; more coming soon. </description>
      <category>burningman</category>
      <pubDate>Mon, 08 Sep 2008 20:53:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/42</link>
      <guid>http://cowboyrushforth.com/entries/show/42</guid>
    </item>
    <item>
      <title>freedom glory burn</title>
      <description>We went, we conquered, we destroyed, we laughed, and we cried.  Burning Man 2008, is now officially over.  
&lt;br/&gt;&lt;br/&gt;
We spent a huge portion of the time working on our 18 foot in diameter spinning carousel bar, but with absolutely no stress, and huge insane success.  Before the weekend arrived we had it completed, and we were spinning, in all senses of the word.  
&lt;br/&gt;&lt;br/&gt;
Everybody in Bat Country stepped up this year, and to me, this was my favorite year so far, and my head is overloaded and still spinning from all the intense energy.
&lt;br/&gt;&lt;br/&gt;
What goes up must come down, and so far re-entry has been harder than ever for me this year.  I think I am now well past the half way mark emotionally, but the first few hours, from the exit gates, to wadsworth, were filled with tears and emotion.  I realized before this I had not cried for 2 entire years.
&lt;br/&gt;&lt;br/&gt;
If it is even possible, this year was more powerful and awesome than my virgin year, which was also a completely overwhelming and perfect experience.
&lt;br/&gt;&lt;br/&gt;
Our days were filled with wonderful people, awesome events, and beautiful neighbors.  We are really hoping to keep our Esplanade placement, and only increase our game next year.
&lt;br/&gt;&lt;br/&gt;
So for now, spotman out.  Media coming very soon I hope.</description>
      <category>burningman</category>
      <pubDate>Wed, 03 Sep 2008 10:26:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/41</link>
      <guid>http://cowboyrushforth.com/entries/show/41</guid>
    </item>
    <item>
      <title>36 hours remaining</title>
      <description>Well, it doesn't get much closer than this.  I leave for the playa in 36 quick hours.  Things have come a long way in the past couple weeks.  My camp's numbers have swelled quite a bit, which brings new energy and new people.  Everyone in the camp is super positive and super energized, the buzz is completely overwhelming, and awesome.  We have nearly finished every project that we as a camp set out to do, complete from a spinning bar (18' in diameter!), to first class dj's and a sound system, and several major pieces of art!
&lt;Br/&gt;&lt;img src="/images/07man.jpg" class="floatTR" alt="the man in 07" /&gt;&lt;br/&gt; I believe I have just about everything packed, from the lizard tail, to the solar lights, and we are foaming at the mouth.  So this will probably be my last post here on this side, but I will definitely see you on the other side!  Sometime after the 3rd of september.  &lt;br/&gt;&lt;b&gt;Cacaaaaaw!&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;If you make it to the playa this year, make sure and swing by 9:30 and Esplanade to say hello!</description>
      <category>burningman</category>
      <pubDate>Wed, 20 Aug 2008 08:17:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/40</link>
      <guid>http://cowboyrushforth.com/entries/show/40</guid>
    </item>
    <item>
      <title>esplanade countdown</title>
      <description>Well, Burning Man just released camp placements this week, and believe it or not, my camp has landed on the &lt;b&gt;&lt;u&gt;ESPLANADE!&lt;/u&gt;&lt;/b&gt;.&lt;br/&gt;&lt;Br/&gt;So, this ultimately means that &lt;a href="http://visitbatcountry.com"&gt;Bat Country&lt;/a&gt; will be on what is essentially Main St. Burning Man.  On the esplanade we will have the opportunity to expose our art and our camp to many many more people, and in exchange we will have a healthy dose of non-stop action for the entire time of the event.&lt;br/&gt;&lt;Br/&gt;Needless to say, I am pretty excited.  This will be my third year straight attending the burn, and it is unreal to me how it just gets more exciting each year.  Each year so far has presented new challenges, adventures, and memories, but this year by far has surpassed the previous two in terms of challenges.  Adventures and Memories pending.&lt;Br/&gt;&lt;br/&gt;I believe Bat Country consists of some of the finest people in the world, and in turn will make this one for the books.  From a spinning carousel bar, to Hunter S Tuesday, coming to a playa, near you!&lt;Br/&gt;&lt;div align="center"&gt;&lt;img src="/images/batcountry_08_flag_sm.jpg" alt="dont tread on me!" /&gt;&lt;br/&gt;&lt;small&gt;&lt;a href="http://visitbatcountry.com/entries/show/8"&gt;Click For Flag Details&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;</description>
      <category>burningman</category>
      <pubDate>Wed, 30 Jul 2008 23:22:00 -0700</pubDate>
      <link>http://cowboyrushforth.com/entries/show/39</link>
      <guid>http://cowboyrushforth.com/entries/show/39</guid>
    </item>
  </channel>
</rss>
