<?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"
	>

<channel>
	<title>unsaturated.com</title>
	<atom:link href="http://www.unsaturated.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unsaturated.com</link>
	<description>The personal and professional website of Matthew Crumley</description>
	<pubDate>Sun, 02 Nov 2008 00:22:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>SpamAssassin Changes for Dreamhost</title>
		<link>http://www.unsaturated.com/projects/spamassassin-changes-for-dreamhost/</link>
		<comments>http://www.unsaturated.com/projects/spamassassin-changes-for-dreamhost/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 16:19:47 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=303</guid>
		<description><![CDATA[When hosting companies make changes to their network architecture, something is going to break. Dreamhost is no exception.  If your SpamAssassin installation broke as a result of their recent mail and web server split, then this tutorial is for you.]]></description>
			<content:encoded><![CDATA[<p>When hosting companies accommodate increased traffic they&#8217;re likely to make changes to the network architecture and <a href="http://www.dreamhost.com/rewards.cgi">Dreamhost</a> is no exception.  Most recently, they separated the mail and hosting servers for better performance.  On the upside my e-mail is much faster.  On the downside my SpamAssassin (SA) installation is not working.</p>
<p>One solution for this problem is to use Dreamhost&#8217;s installation of SA.  However, there&#8217;s no support for Bayesian rules.  Those rules require a per-user database.  Save whitelists, blacklists, and rule sensitivity, there&#8217;s no customization allowed.  Another annoyance is logging into webmail to do anything meaningful with false positives; it&#8217;s <a href="http://wiki.dreamhost.com/KB_/_Email_/_Spam_/_NEW!_Junk_Mail_Filter">explained further on the DH wiki</a>.</p>
<p>Another option, and the best in my opinion, is using an IMAP client of my choice.  This requires some modifications to my <a href="http://www.unsaturated.com/projects/spamassassin-for-dreamhost/">previous tutorial</a> which takes you through the entire process of installing SA.  Assuming that first tutorial is complete, you can now begin this tutorial.  Yes, you will <i>undo</i> some of the work in the original tutorial.  That&#8217;s the way it goes.</p>
<p>Because mail is being forwarded, moved, and synchronized <i>all over the place</i>, I thought a basic flowchart could simplify the end objective of this tutorial.  As you can see, everything is setup to move e-mail to and from the mail server and hosting server.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-steps-overview.png" alt="Tutorial Overview" title="Tutorial Overview" width="454" height="363" id="centered"/></p>
<p>A few assumptions before we get started&#8230;</p>
<ul>
<li>You have a basic understanding of Linux.</li>
<li>You have an active DH account.</li>
<li>You have access to the DH Panel.</li>
<li>The <code>%&gt;</code> notation indicates what you should type at the command prompt.</li>
<li>The <code>&lt;Valid URL for: FileXYZ&gt;</code> notation indicates you need to insert a URL that points to the file in question.</li>
</ul>
<ol>
<li><b>Create a new fully hosted e-mail account.</b>  <u>All</u> of your e-mail aliases should be re-routed to this account&#8217;s address; this is now the gateway account through which everything must pass.  You&#8217;ll have to create a similar account for each user with a SpamAssassin installation.  The address doesn&#8217;t have to be user friendly, but choose something you can remember.  In this example, I&#8217;ve created a new fully hosted address called spam_checker@unsaturated.com.<br />
<br/>If you have an alias called my.cool.address@unsaturated.com which forwards to your main user account, it will have to forward to spam_checker@unsaturated.com.  <b>Do not update all your aliases now because we want the transition to be seamless.</b> Let&#8217;s keep e-mail flowing until all steps are complete.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step1-fullyhosted.png" alt="Fully hosted e-mail" title="Fully hosted e-mail" width="326" height="120" id="centered"/>
</li>
<li><b>Create a new forward-only e-mail address.</b>  After your mail is checked by SpamAssassin it will be forwarded to this new address, which then passes the e-mail along to your main user account, usually <i>your_user_name@yourdomain.com</i>.  This step allows your e-mail to find its way back to the mail servers from the hosting servers. In this example, I&#8217;ve created a new forward-only address called spam_checker_passed@unsaturated.com.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step2-forwardonly.png" alt="Forward-only" title="Forward only e-mail" width="367" height="95"  id="centered"/>
</li>
<li><b>Move the spam.rc file to your home folder.</b>  The spam.rc file was originally in a folder called procmail but it was the only file in there.  This is a matter of preference but it&#8217;s important to keep this in mind for the rest of the tutorial. If nothing else is stored in your procmail folder, then delete it. Type the following at the command prompt:
<pre>
<code>%&gt; cd ~
%&gt; mv ~/procmail/spam.rc ~
%&gt; rm -Rf procmail/</code>
</pre>
</li>
<li><b>Update the .procmailrc file in your home directory.</b>  You&#8217;ll notice several changes to this file, most notably all e-mail is forwarded to the address made in step 2 or then deleted.  Remember, the spam has already been filtered to the .Spam folder according to the spam.rc file.  <b>Don&#8217;t forget to update the forwarding address!</b>  Type the following at the command prompt and insert the text shown:
<pre>
<code>%&gt; pico .procmailrc

#=======================================
# ~/.procmailrc
#
# Uses Maildir format mail directory.

# Uncomment the following three lines to debug
#LOGFILE=$HOME/procmail.log
#VERBOSE=yes
#LOGABSTRACT=all

## Directory for storing procmail-related files 
PMDIR=$HOME 

# Message directory (Courier IMAP and mutt)
MAILDIR=$HOME/MaildirSync 

# Spam filtering rules should run last
INCLUDERC=$HOME/spam.rc 

# Forward non-spam mail to validated address
# REMEMBER TO UPDATE THIS ADDRESS!!!
:0c
! spam_checker_passed@unsaturated.com

# Everything should be filtered to the local .Spam folder 
# or forwarded to the new mail server, so go ahead and 
# delete whatever remains 
:0
/dev/null
#=======================================</code>
</pre>
</li>
<li><b>Rename the Maildir directory.</b>  Again, you might be wondering why this is necessary.  In my opinion, the typical name for Maildir is okay if you&#8217;re actually using it for reading mail.  However, this directory is now used exclusively for synchronizing mail accounts.  Type the following at the command prompt:
<pre>
<code>%&gt; mv Maildir MaildirSync
%&gt; chmod -R 700 MaildirSync</code>
</pre>
</li>
<li><b>Download and extract offlineimap.</b>  The features and speed of <a href="http://software.complete.org/software/projects/show/offlineimap">offlineimap</a> looked compelling, so I tried it and decided to keep it. You can configure the script for many different scenarios but we&#8217;re keeping the steps basic.  This step deletes the default configuration files but don&#8217;t worry because I&#8217;ll provided one later.  Type the following at the command prompt:
<pre>
<code>%&gt; cd ~
%&gt; wget &lt;Valid URL for: offlineimap_6.0.3.tar.gz&gt;
%&gt; tar xvfz offlineimap_6.0.3.tar.gz
%&gt; cd offlineimap
%&gt; rm offlineimap.conf
%&gt; rm offlineimap.conf.minimal</code>
</pre>
</li>
<li><b>Create an .offlineimaprc configuration file.</b>  Offlineimap needs to know some basic information like where to find your remote and local mail, folders to ignore, and more.  To complete this you&#8217;ll need to know your mail server&#8217;s name, which can be accessed in the panel.  You might wonder why this program is necessary.  Consider a false positive e-mail, which is incorrectly marked spam.  You could move that message to the correct folder but that change needs to be reflected on the <i>hosting</i> server where SpamAssassin can learn from the change.  <b>Remember to update all the values marked <code>YOUR_</code>.</b> Type the following at the command prompt and insert the text shown:
<pre>
<code>%&gt; cd ~
%&gt; pico .offlineimaprc

#=======================================
# ~/.offlineimaprc

[general]
accounts = MainAccount
metadata = ~/.offlineimap
ignore-readonly = no
ui = Noninteractive.Quiet

[Account MainAccount]
localrepository = Local
remoterepository = Remote

[Repository Local]
type = Maildir
localfolders = ~/MaildirSync

[Repository Remote]
type = IMAP
remotehost = YOUR_MAIL_SERVER_NAME.mail.dreamhost.com
ssl = true
remoteuser = main_account@YOUR_DOMAIN.com
remotepass = YOUR_PASSWORD
nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername)
folderfilter = lambda foldername: foldername in ['INBOX.Spam']
maxconnections = 1
holdconnectionopen = no
#=======================================</code>
</pre>
</li>
<p></p>
<li><b>Update the salearn.bat script.</b>  The old Bayes update script is obsolete because we have to ensure spam is synchronized between your hosting account and your mail account.  This script synchronizes your .Spam folders, copies all messages (read and unread) to a single directory, tells SpamAssassin to update the Bayesian database, purges all the spam, then does a final synchronization.  Type the following at the command prompt and insert the text shown:
<pre>
<code>echo '========================================================'
TESTED=false
if [ "$1" ]
then
  if [ $1 = "spam" ]
  then
    TESTED=true
    echo '--------------------------------------------------------'
    echo Synchronizing Spam folder...

    ~/offlineimap/offlineimap.py
    mv ~/MaildirSync/.Spam/new/* ~/MaildirSync/.Spam/cur/

    echo Messages synchronized and ready for processing.
    ~/sausr/bin/sa-learn -V
    echo Learning what is spam...
    ~/sausr/bin/sa-learn --spam ~/MaildirSync/.Spam/cur
    rm -f ~/MaildirSync/.Spam/cur/*
    echo Learning complete.  All spam messages were deleted.
    echo '--------------------------------------------------------'
    echo Resynchronizing your spam folder...
    ~/offlineimap/offlineimap.py
    echo All folders are synchronized. 
  elif [ $1 = "ham" ]
  then
    TESTED=true
    ~/sausr/bin/sa-learn -V
    echo '--------------------------------------------------------'
    echo Learning what is ham...
    ~/sausr/bin/sa-learn --ham ~/MaildirSync/cur  
  fi
  
  if [ $TESTED = true ]
  then
    echo '--------------------------------------------------------'
    echo Summary statistics of Bayes database...
    ~/sausr/bin/sa-learn --dump magic
    echo '--------------------------------------------------------'
  fi
else
  echo Enter one argument:  [ham | spam]
fi
echo '========================================================'</code>
</pre>
</li>
<p></p>
<li><b>Update your cron jobs.</b>  Because some e-mail are marked as spam incorrectly (false positives), we need to ensure all mail is synchronized.  This gives you a chance to correct those false positives and move valid e-mail back into your inbox.  The first cron task runs frequently to ensure your folders are up-to-date.  Some spam systems would do this once daily but I prefer to know sooner if an important e-mail got trashed.  The second task runs the Bayes update script.  Type the following at the command prompt, acknowledge prompts for e-mail according to your preferences, and enter the text shown:
<pre>
<code>%&gt; crontab -e

30 * * * * ~/offlineimap/offlineimap.py
10 0 * * 7 ~/salearn.bat spam</code>
</pre>
</li>
<li><b>Create an e-mail filter through the panel.</b>  Remember that e-mail account you created back in step 1 (spam_checker@unsaturated.com)?  It&#8217;s time to give it a trivial filter using the panel.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step10a-filter.png" alt="E-mail Filter" title="E-mail Filter" width="163" height="241"  id="centered"/></a><br />
This will create a <code>.procmailrc</code> on the mail server, which you can&#8217;t see or edit via the shell.  By trivial, I mean an obvious pass.  Your rule would go something like this.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step10b-trivial.png" alt="Trivial filter" title="Trivial filter" width="520" height="29"  id="centered"/></p>
<p>Now once the trivial filter is establish you want to select the &#8220;<b>Forward to shell account</b>&#8221; option.  Be sure to select the matching user account from the drop-down menu.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step10c-forward.png" alt="Forward to shell" title="Forward to shell" width="213" height="24"  id="centered"/>
</li>
<li><b>Update all e-mail aliases.</b>  Remember that e-mail account you created back in step 1 (spam_checker@unsaturated.com)?  It&#8217;s time to update all your <i>other</i> aliases to point to that address.  With each updated alias, the system goes &#8220;live&#8221; so you might try it on an infrequently used address, then send a test message.<br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/sa-step11-aliases.png" alt="Update aliases" title="Update aliases" width="520" height="31"  id="centered"/>
</li>
<li><b>Send a test message.</b>  If everything is working properly, you can run the salearn.bat script and you should be error-free.  Send a test message and look for SA headers (X-Spam-Level, etc).  Lastly, if you find an error in my tutorial please post a comment.
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/projects/spamassassin-changes-for-dreamhost/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lamenting Elitism</title>
		<link>http://www.unsaturated.com/essays/lamenting-elitism/</link>
		<comments>http://www.unsaturated.com/essays/lamenting-elitism/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 19:55:51 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Essays]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=294</guid>
		<description><![CDATA[This is my response to William Deresiewicz's essay "The Disadvantages of an Elite Education".  I form substance around the concept of elitism and try to figure out if elite education exists.  Elitism, from my own experience, is broadly applicable, and possibly genetic.]]></description>
			<content:encoded><![CDATA[<p>While reading William Deresiewicz’s “<a href="http://www.theamericanscholar.org/su08/elite-deresiewicz.html">The Disadvantages of an Elite Education</a>” I was distracted by the all the imagined adversities and quaint anecdotes. I wanted substance. I wanted someone from within the Ivy League to really break down what it means to be elite. The turning point for the author was at age 35, when he failed to make chitchat with a plumber. This introduction to his tormented life is an illustration of why elite colleges and universities have failed. Note: his op-ed is about why institutions and “mechanisms that get you there” have failed. It is not, evidently, about a literary critic’s personal failure to overcome these conditions. If anything can compel a response to his retrospective, it’s my own desire to avoid a similar life of institutionalized thinking.</p>
<p>His observations define the disadvantages but none offer a higher understanding of elitism. We’re told the faux diversity of elite schools, the pursuit of grades over wisdom, the exclusivity, the labored meritocracy, inexorably leads to one outcome: more alumni.  It’s not clear how a Romantic intellectual would be employed in the 21st century and that’s also precisely the point.  Were Romantics not elitist as we define the word today? If an elite education makes William Deresiewicz who he is, then why do others excel while he has fallen to the “Ivy retardation”?  Can this &#8220;retardation&#8221; spread or is it inherited?</p>
<p>His essay isn’t specifically about elitism. Instead he discusses the downfall of identity, both personal and social, in an institution designed to foster ideas and, ironically, an enlightened sense of identity. If elitism is bad then you can’t remove it until it’s understood. Let’s try to understand.</p>
<p>Elitism, as I define the word, is an amalgamation of glamour, wealth, exclusivity, power, and pedigree. These concepts form a wireframe but it’s neither education nor an epistemic desire to learn. Therefore, without the core of higher education, elitism is simply an empty wrapper—branding, marketing, or a way to sell an object—but not the object itself. Elitism and education are conflated but the so-called disadvantages are attributed unfairly to the combination. If worldly and informed students graduate without elitist qualities or the “retardation”, then they have extracted something of great value without being burdened by the disadvantages which I believe do not exist.</p>
<p>Students know that by admission, graduation, and association, the benefits of an elite education usually result in lucrative jobs. I attended public grade schools, high school, and then graduated from a public university. The concept of elite and public coinciding is a contradiction. Some political offices hold an elite status but generally the commons is not a site of glamour, exclusivity, wealth, power, or pedigree. </p>
<p>Calling an institution or person elitist is to suggest some form of entitlement. Entitlement is commonly associated with birthright, inheritance, or social status. Perhaps society is reluctant to admit it or accept it, but I believe the underlying cause of elitism is genetic. Mr. Deresiewicz makes conclusions based upon environmental factors but completely overlooks heritability. Genetics cannot explain all the variables in my theory on elitism (exclusivity, for example) but DNA can influence many of the personality traits which develop those variables. Help us identify these elitist characteristics, Mr. Deresiewicz, instead of slogging forward with one lamentation after another.  </p>
<p>I attended graduate school with a small group of 30 students. This was the first fulltime MBA program for my university. Students were selected based upon their performance in undergraduate school and their academic diversity. You can already see how the admitted students think they’re “special” and, perhaps, entitled to more. I was the only engineer while most others had business degrees.  It also turns out 30 was sufficient for something else: a microcosm of elite education.</p>
<p>During the last semester our appointed finance professor was a studying PhD student. Grading was easy but his title and qualifications angered the class. A mini-protest began which led to a petition to replace him. Everyone thought the MBA class deserved better. Maybe so, but I disagreed with the means to accomplish this and refused to sign (I was the only one). The drama was compounded by our legal professor, a woman well versed in tort law and who was eager to remind <i>everyone</i> that she has a carry permit. The idea of a petition seemed juvenile and few civil debates were held over the issue. This drama played out until his replacement arrived. The following events, unlike any other in my college experience, exposed elitist tendencies in quick order.</p>
<p>When the new finance professor was revealed the former business undergrads let out a collective groan. He fought grade inflation, was tough, thorough, and fair. Elitist kryptonite apparently comes from India. Each pop quiz was met with bitching; test results, if not an A, were met with protests. Such behavior is the mark of elitists and individuals who feel above the need to learn.  Soon their discontent was directed to the MBA program itself. Certainly it wasn’t <i>the students</i> who were mistaken, it was the system. I can therefore conclude that elitism is not unique to haughty institutions with rich alumni. So it was in your school, Mr. Deresiewicz, and so it was in mine.</p>
<p>Elitism is not monopolized by upper crust society. I’ve seen elitist attitudes in public universities and their aftereffects in the private sector. The most intolerable belief is that the system is flawed, not the individual. Indeed, systems can and do fail. No system is perfect. Yet, when faced with an obstacle or failure an elitist will not look in the mirror. The reason or excuse is most assuredly external. Some institutions focus these behaviors and amplify their effects. In elite colleges the potential for groupthink seems likely, therefore, blame is not sought among peers. When forces outside the walled garden are such easy targets, why bother? Indeed, just sign a petition.</p>
<p>Maybe the larger question is: Should elitism be stopped? Is there any proof its existence is harming society? Perhaps elitism is a Western phenomenon that’s become more apparent as our overall wealth has increased. Capitalism is still a relatively new concept and our perception of elitism is evolving with it. There’s been a dot-com bubble and a housing bubble. An elitism bubble wouldn’t surprise me. It’s also possible we’re debating a non-issue. I’ve observed elitist traits within academia and without, from rich people and poor people, and fail to see the end of it. Unfortunately, people are notoriously bad at predicting bubbles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/essays/lamenting-elitism/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Features and Anti-Features</title>
		<link>http://www.unsaturated.com/proxyvote/features/</link>
		<comments>http://www.unsaturated.com/proxyvote/features/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 03:03:40 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Proxy Vote]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=244</guid>
		<description><![CDATA[This is an extensive list of the features and anti-features.]]></description>
			<content:encoded><![CDATA[<p>You usually buy a product based upon its feature list.  Naturally, I&#8217;ve listed those but I&#8217;ve also listed anti-features.  An anti-feature is a capability a product should probably have <i>but doesn&#8217;t</i>.  You might think that works against the &#8220;sell more&#8221; ethos of business but I disagree.  When I buy something I want to know what I&#8217;m getting but also what I&#8217;m <i>not</i> getting.  An anti-feature might deter some potential buyers but I feel it removes ambiguity and instills confidence in the committed buyers.</p>
<h2>Features</h2>
<ul>
<li>Proxy Vote can manage multiple, simultaneous events.</li>
<li>Proxy Vote 1.1 is verified to work with Wordpress versions 2.5/2.6. Version 1.0 is verified to work with Wordpress version 2.3.  The administrative interface is unique to each version but features and capabilities are the same.</li>
<li>Each proxy event description can contain HTML, images, URL links, and more.</li>
<li>Event descriptions are formatted to print on individual pages.</li>
<li>Results of the event are optimized for printing.</li>
<li>Cleanly remove the plug-in once you&#8217;re done. You have the option to completely remove all traces of Proxy Vote, including its tables.</li>
<li>Customize the form text then insert it with an entry like <code>[proxy123]</code>.</li>
<li>It works on posts and pages.</li>
<li>Information and error messages can be localized to another language very easily.</li>
<li>All submitted proxies record the IP address of the sender.</li>
<li>Events can be exported to an XML file. Use Microsoft Excel or any XML-friendly application for viewing the raw data.  Format it however you please.  It&#8217;s <i>your</i> data.</li>
</ul>
<h2>Anti-Features</h2>
<ul>
<li>Events cannot be re-imported to the database from the XML file. Arguably, what&#8217;s the point when the event has expired?</li>
<li>The number of voters cannot be changed once an event is created.  However, expiration, title, and description <i>can</i> be changed at any time.</li>
<li>There is no event start time, only an expiration time.  In other words, do not post your event until you are ready to use it. If this anti-feature is added, it would make the second anti-feature much easier to implement.</li>
<li>Formatting and compatibility is unknown on earlier 6.x versions of Internet Explorer.  If this applies to you, I highly recommend you upgrade IE.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/proxyvote/features/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Screenshots</title>
		<link>http://www.unsaturated.com/proxyvote/screenshots/</link>
		<comments>http://www.unsaturated.com/proxyvote/screenshots/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 03:02:41 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Proxy Vote]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=242</guid>
		<description><![CDATA[Screenshots from Proxy Vote version 1.1.]]></description>
			<content:encoded><![CDATA[<h2>Adding an Event</h2>
<p>Adding an event is very easy.  Provide the title, description, expiration time, and the number of voters.  Proxy Vote manages multiple, simultaneous events. <br/><br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/manage-add-event.png" alt="" title="Add Event" class="aligncenter size-full wp-image-252" /></p>
<h2>Managing Your Event</h2>
<p>Once you&#8217;ve created your event, you can monitor its progress, print data, modify its properties, or export the data to XML. Submitted proxies are displayed as they are received.  Back on the main management page, you&#8217;ll have a real-time look at how many proxies are submitted for each event.<br/><br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/manage-first-proxy.png" alt="" title="First Proxy" class="aligncenter size-full wp-image-253" /></p>
<h2>Spreading the Word</h2>
<p>Your proxy is only useful if people are given a brief, informative paper with instructions to submit the proxy.  In my opinion, keeping the message brief and informative is the best means to getting proxies and achieving a quorum. In this example, I included multiple HTML elements to illustrate the flexibility of the proxy messages.  This event had 250 voters, therefore, 250 unique keys and pages were generated - just print and distribute!<br/><br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/proxy-message-page.png" alt="" title="Message Page" class="aligncenter size-full wp-image-254" /></p>
<h2>Go &#8216;Live&#8217; with Your Event</h2>
<p>Ready to post your proxy event form?  It&#8217;s easy.  You can add any text before or after the form itself.  Give your voters a simple reminder of what&#8217;s required.  Publish your post or page and you&#8217;re one step closer to a quorum.<br/><br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/proxy-post.png" alt="" title="Proxy Post" class="aligncenter size-full wp-image-255" /></p>
<h2>It&#8217;s Your Data</h2>
<p>Once your proxy event is complete, you might want to organize the data differently. Proxy Vote wasn&#8217;t designed to analyze, process, or format data in fancy ways.  Export your event to an XML file and open the results in Microsoft Excel or some other program.  You can format, sort, and arrange the data however you prefer. <br/><br />
<img src="http://www.unsaturated.com/wordpress/wp-content/data/proxy-xml.png" alt="" title="Proxy XML" class="aligncenter size-full wp-image-256" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/proxyvote/screenshots/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Activation and Usage</title>
		<link>http://www.unsaturated.com/proxyvote/activation-and-usage/</link>
		<comments>http://www.unsaturated.com/proxyvote/activation-and-usage/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 03:01:42 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Proxy Vote]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=240</guid>
		<description><![CDATA[Proxy Vote activation, usage, and tips.]]></description>
			<content:encoded><![CDATA[<h2>Activate</h2>
<ol>
<li>Open the downloaded zip file</li>
<li>If you&#8217;re using Wordpress 2.3, extract the contents of the <tt>Version1.0</tt> folder to your Wordpress <tt>plugins</tt> folder; if you&#8217;re using Wordpress 2.5 or 2.6, extract the contents of the <tt>Version1.1</tt> folder</li>
<li>Activate the Proxy Vote plugin</li>
<li>Go to the <b>Settings</b> page (<b>Options</b> in WP 2.3); select the <b>Create Tables</b> button.</li>
<li>Activation is complete, so create a proxy event.</li>
</ol>
<h2>The Events Management View</h2>
<p>The Events Management View shows a list of all proxy events and the form for <a href="#createevent">creating a new event</a>.  Events with the nearest expiration time are shown on the top.  The number of proxies generated and submitted are displayed.</p>
<p>Each event has two selections: <b>Edit</b> and <b>Delete</b>.  Selecting <b>Delete</b> will open a dialog box which allows you to proceed or cancel the action.  Selecting <b>Edit</b> brings you to the next screen which displays proxy details.</p>
<h2><a name="proxydetailsview"></a>The Proxy Details View</h2>
<p>This view shows actions relevant to the current event.  All actions are display in the top section called &#8220;Activities&#8221;.  Let&#8217;s briefly review each one.</p>
<ul>
<li>The first bullet shows the activation string necessary to insert the proxy form into a post or page.  You can type or copy the text displayed.  It will always follow the pattern <tt>[proxy<i>ID</i>]</tt> where <i>ID</i> is the id number of the proxy event.  If you insert this text with an invalid id number, the plugin will ignore the text.</li>
<li>The second bullet provides a link to the <a href="#proxymessageview">Proxy Message View</a>.</li>
<li>The third bullet links to the <a href="#proxyresultsview">Proxy Results View</a>.</li>
<li>The fourth bullet links to the bottom of the page where you can update properties of the event, such as title, description, and expiration time.</li>
<li>Finally, the last bullet links to the <a href="#proxyxmlview">Proxy XML View</a>.</li>
</ul>
<h2><a name="proxymessageview"></a>The Proxy Message View</h2>
<p>The proxy message is the keystone of the Proxy Vote plugin.  You can use the proxy message for a variety of purposes, but its main intent is to provide a custom message to each voter with a unique proxy key.  In the Proxy Message View, you can preview what these messages will look like.  At the top of the screen you will see a message box which provides some tips on printing the proxy message.  If you have 300 voters, you should have 300 proxy messages. For almost all web browsers, you will proceed to <b>File</b> -> <b>Print Preview</b> menu item.  Verify your <a href="#createeventdescription">description</a> has been formatted the way you intended.</p>
<h2><a name="proxyresultsview"></a>The Proxy Results View</h2>
<p>Proxy results include all the submitted proxies for the event.  Much like the Proxy Message, the print preview feature of your web browser will format the page.  In most circumstances, the landscape page format is superior for tabular data.  This view is display only.</p>
<p>In the table you will find these columns:</p>
<ul>
<li><b>Key</b> is the 10-character random code distributed to this voter.</li>
<li><b>Voter</b> is the person submitting the proxy.</li>
<li><b>Proxy</b> is the person who will vote on behalf of the voter.</li>
<li><b>IP</b> is the internet protocol address of the computer which submitted the proxy.</li>
<li><b>Submit Time</b> is when the proxy information was submitted to your site.</li>
</ul>
<h2><a name="proxyxmlview"></a>The Proxy XML View</h2>
<p>This view displays all event data in XML format. The proxy event can be exported to a file using the <b>Export to XML File</b> button.  The auto-generated name will be <tt>export<i>ID</i>.xml</tt> where <i>ID</i> is the id number of the proxy event. Although the data is displayed in a text editable field, you <i>cannot</i> change the data here.</p>
<h2><a name="createevent"></a>Create an Event</h2>
<ol>
<li>Go to the <b>Manage</b> tab, then select <b>Proxy Votes</b>.</li>
<li>Enter your event information under the section &#8220;Add Proxy Event&#8221;</li>
<ul>
<li><b>Title</b> can be anything meaningful to identify this event.  You can update the Title at any time.</li>
<li><a name="createeventdescription"></a><b>Description</b> can contain actual HTML code; line breaks, headings, images, tables, or anything you need to summarize the event.  However, it should always contain the <tt>[key]</tt> and <tt>[expires]</tt> tag.  The Description section forms the text of your proxy message, which is a custom set of instructions to your voter.  It should also provide the URL of the proxy form.  It&#8217;s a good idea to create a draft of the post so you can finalize your proxy message. You can update the Description at any time. </li>
<li><b>Expiration</b> is the local end time for the proxy event.  The plugin will not accept proxies submitted after the expiration.  The expiration time uses the properties setup in your blog, such as the UTC offset.  You can update the Expiration at any time.</li>
<li><b>Number of Voters</b> is the maximum number of people who can submit a voter proxy.  This value <i>cannot</i> be changed once the event is created.</li>
</ul>
<li>Select <b>Add Event</b> and you will see a message which confirms the event was created and the random keys generated.</li>
</ol>
<h2>Sample Proxy Message</h2>
<p>The following snippet of HTML code is a good starting point for your proxy message.  It doesn&#8217;t contain any image links.  However, it makes use of embedded styles, unordered lists, and those two important tags: <tt>[key]</tt> and <tt>[expires]</tt>.</p>
<blockquote><p>
<code>&lt;h1&gt;The Proxy Event&lt;/h1&gt;
&lt;p&gt;This is the proxy event you've waited for all year.  To achieve a quorum at our annual meeting, we only ask for a few moments of your time.  This year we've made the process of submitting a proxy easier than ever.  Please follow these directions carefully.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to our website: www.unsaturated.com/proxyvote&lt;/li&gt;
&lt;li&gt;Look for entry titled "Proxy Event of the Year"&lt;/li&gt;
&lt;li&gt;In the first space you will notice the expiration date, which is currently [expires].  You must submit your proxy before that time.&lt;/li&gt;
&lt;li&gt;In the next space enter your unique code: &lt;b&gt;[key]&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Enter your name (last name, first name)&lt;/li&gt;
&lt;li&gt;Enter your proxy's name (last name, first name)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Again, we thank you for your support.  This will help our meeting proceed smoothly and ensure business continues without any further delays.&lt;/p&gt;
&lt;p&gt;Sincerely,&lt;br/&gt;
Matthew Crumley&lt;br/&gt;
Board President&lt;/p&gt;</code>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/proxyvote/activation-and-usage/feed/</wfw:commentRss>
		</item>
		<item>
		<title>History</title>
		<link>http://www.unsaturated.com/proxyvote/history/</link>
		<comments>http://www.unsaturated.com/proxyvote/history/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 03:00:34 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Proxy Vote]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=238</guid>
		<description><![CDATA[A brief history of why Proxy Vote was developed.]]></description>
			<content:encoded><![CDATA[<p>I developed this plug-in out of necessity while managing my neighborhood homeowner association (HOA). In past meetings of our HOA, achieving quorums were a wait-and-see ordeal.  Will enough people show to the meeting?  Will they bother to mail us their proxy vote?  I had enough so I started to code a solution.</p>
<p>The result is a system that provides immediate feedback, a decent measure of security, and simple integration with Wordpress blogs.  The first version I fielded worked great with our HOA website.  Everyone in the community was given a customized paper explaining the process.  That paper also provided a customized key, much like a business provides to its shareholders.  The process is very simple: the voter goes to the website, enters his key, his name, the proxy&#8217;s name, then submits the information.  That&#8217;s all there is to it!</p>
<p>The first version I tried had limited capabilities.  I think the concept was solid but the feature list needed improving.  After a few months of development I made the feature list grow, worked out the bugs, and polished the user interface.  The result is a compelling product worthy of commercial distribution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/proxyvote/history/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Proxy Vote End-User License Agreement</title>
		<link>http://www.unsaturated.com/proxyvote/license/</link>
		<comments>http://www.unsaturated.com/proxyvote/license/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 02:59:21 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Proxy Vote]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=236</guid>
		<description><![CDATA[The full text of the Proxy Vote End-User License Agreement.]]></description>
			<content:encoded><![CDATA[<p><b>PLEASE READ THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT CAREFULLY BEFORE CONTINUING WITH PLUGIN ACTIVATION.</b></p>
<p>Unsaturated Innovations LLC End-User License Agreement (&#8221;EULA&#8221;) is a legal agreement between you (either an individual or a single entity) and Unsaturated Innvoations LLC for the Unsaturated Innovations LLC software product(s) identified above which may include associated software components, media, printed materials, and &#8220;online&#8221; or electronic documentation (&#8221;Software Product&#8221;). By installing, copying, or otherwise using the Software Product, you agree to be bound by the terms of this EULA. This license agreement represents the entire agreement concerning the program between you and Unsaturated Innovations LLC, (referred to as &#8220;licenser&#8221;), and it supersedes any prior proposal, representation, or understanding between the parties. If you do not agree to the terms of this EULA, do not activate or use the Software Product.</p>
<p>The Software Product is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The Software Product is licensed, not sold.</p>
<ol>
<li><b>GRANT OF LICENSE</b><br/>The Software Product is licensed as follows:
<ol style="list-style-type: lower-alpha;">
<li><b>Installation and Use</b><br/>Unsaturated Innovations LLC grants you the right to activate and use copies of the Software Product on your host computer or server.</li>
<li><b>Backup Copies</b><br/>You may also make copies of the Software Product as may be necessary for backup and archival purposes.</li>
</ol>
</li>
<li><b>DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS</b><br/>
<ol style="list-style-type: lower-alpha;">
<li><b>Maintenance of Copyright Notices</b><br/>You must not remove or alter any copyright notices on any and all copies of the Software Product.</li>
<li><b>Distribution</b><br/>You may not distribute copies of the Software Product to third parties.</li>
<li><b>Prohibition on modifications</b><br/>Unless otherwise specified in the Software Product, modifications are prohibited.</li>
<li><b>Rental</b><br/>You may not rent, lease, or lend the Software Product.</li>
<li><b>Support Services</b><br/>Unsaturated Innovations LLC may provide you with support services related to the Software Product (&#8221;Support Services&#8221;). Any supplemental software code provided to you as part of the Support Services shall be considered part of the Software Product and subject to the terms and conditions of this EULA.</li>
<li><b>Compliance with Applicable Laws</b><br/>You must comply with all applicable laws regarding use of the Software Product.</li>
</ol>
</li>
<li><b>TERMINATION</b><br/>Without prejudice to any other rights, Unsaturated Innovations LLC may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the Software Product in your possession.</li>
<li><b>COPYRIGHT</b><br/>All title, including but not limited to copyrights, in and to the Software Product and any copies thereof are owned by Unsaturated Innovations LLC or its suppliers. All title and intellectual property rights in and to the content which may be accessed through use of the Software Product is the property of the respective content owner and may be protected by applicable copyright or other intellectual property laws and treaties. This EULA grants you no rights to use such content. All rights not expressly granted are reserved by Unsaturated Innovations LLC.</li>
<li><b>NO WARRANTIES</b><br/>Unsaturated Innovations LLC expressly disclaims any warranty for the Software Product. The Software Product is provided &#8220;As Is&#8221; without any express or implied warranty of any kind, including but not limited to any warranties of merchantability, noninfringement, or fitness of a particular purpose. Unsaturated Innovations LLC does not warrant or assume responsibility for the accuracy or completeness of any information, text, graphics, links or other items contained within the Software Product. Unsaturated Innovations LLC makes no warranties respecting any harm that may be caused by the transmission of a computer virus, worm, time bomb, logic bomb, or other such computer program. Unsaturated Innovations LLC further expressly disclaims any warranty or representation to Authorized Users or to any third party.</li>
<li><b>LIMITATION OF LIABILITY</b><br/>In no event shall Unsaturated Innovations LLC be liable for any damages (including, without limitation, lost profits, business interruption, or lost information) rising out of &#8220;Authorized Users&#8221; use of or inability to use the Software Product, even if Unsaturated Innovations LLC has been advised of the possibility of such damages. In no event will Unsaturated Innovations LLC be liable for loss of data or for indirect, special, incidental, consequential (including lost profit), or other damages based in contract, tort or otherwise. Unsaturated Innovations LLC shall have no liability with respect to the content of the Software Product or any part thereof, including but not limited to errors or omissions contained therein, libel, infringements of rights of publicity, privacy, trademark rights, business interruption, personal injury, loss of privacy, moral rights or the disclosure of confidential information.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/proxyvote/license/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Response Letter</title>
		<link>http://www.unsaturated.com/essays/response-letter/</link>
		<comments>http://www.unsaturated.com/essays/response-letter/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 03:21:23 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Essays]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=223</guid>
		<description><![CDATA[Complaint letters to my homeowner's association are infrequent, but when they're received some vitriolic language is almost guaranteed.  How do you write a response when someone clearly has another perspective? You state the facts. I'm no attorney but it always pays to think like one.]]></description>
			<content:encoded><![CDATA[<p>Below is a response letter I wrote on behalf of our neighborhood homeowner association.  The original letter addressed to the Board of Directors and posted publicly on the Association website was a hard pill to swallow.  How do you respond when someone clearly has another perspective and writes with such vitriol?  You state the facts.  I&#8217;m no attorney but it always pays to <em>think</em> like one.</p>
<hr />Mr. X,</p>
<p>Thank you for writing to voice your concerns.  That you replied to the “New Board” posting makes it evident that we, the five volunteer Board members and property manager are failing in some ways.  I would estimate the five volunteers, Bill, Andrea, Roger, Gerald, and me, have given in excess of 120 hours of their time back to the community at no charge and the year is not over.  The majority of us also work in excess of 40 hours per week at our normal, full-time jobs.  We try to lead by example and save the community money, which brings me to your first point.</p>
<p><i>“Don&#8217;t even think about raising the dues this year”</i><br />
Wildewood just received notice that our landscape maintenance costs would be increasing by 2.5% effective immediately.  I expect many of our costs to increase as a result of the economy.  Our Covenants stipulate that we can raise dues by no more than 5% per annum over the previous year.  We’ll have to raise dues without question, if simply to maintain our level of maintenance and keep pace with monetary inflation.  If you find a similar HOA in the Tampa/St. Pete/Clearwater area, with the same number of homes, for such a low price (currently less than $200 a year), please let us know.  I’m told our community is an exceptional case.</p>
<p><i>“It seems the board now is in the mood to be NICE&#8230;POLITICALLY CORRECT”</i><br />
I agree that we are in the mood to be nice.  Is the only alternative being cruel and politically incorrect, ruling this small community like a fiefdom?  Wildewood isn’t a homeowner association you hear about on the news – fining for small brown patches on lawns, an extra satellite dish, or other petty reasons.  It’s my belief (to paraphrase Thomas Jefferson) that the HOA that governs least, governs best.  The lawyers who drafted our original documents seemed to agree.  The documents do not stipulate how we can enforce covenant issues.  This issue can be lumped into one about “pigpen” homes you mentioned.  Members of the Board do not enjoy this sight any more than you.  Other, more ruthless, legally-entitled HOAs are setup to explicitly empower their association to levy fees, or take other action against these issues.  Ours was established without such empowerments.  You suggest <i>“[the Association] lawyer sends them a letter with the intent to foreclose”</i> yet you do not want our dues raised.  These are simply incompatible actions.  It also exposes our Association to costly legal retaliation.</p>
<p><i>“&#8230;now we have homes that are again having unregistered vehicles&#8230;”</i><br />
Please report these to Hillsborough County Code Enforcement.  It’s free, anonymous, online, and it works.  We even provide a link on our website (right side, towards the bottom).  Help us be the eyes and ears of the community.  Members of the Board do this independently and encourage residents to do the same.</p>
<p><i>“I will start a petition drive to kill this association&#8230;”</i><br />
Why?  Your frustration is apparent but this is counter productive.  Without an Association, who would pay for the repair of vandalized walls?  Who would maintain a lighted entrance or promote a website to enable a better connected neighborhood?</p>
<p>Mr. X, I spent almost one hour of my time considering this letter and what it means for Wildewood.  In short, it means someone cares.  And yet, seven months into a new Board of Directors, what has been accomplished?  I consider the gains amazing (lots of paint, sod, new plants) and a sign of future improvements to come.  I’ll be staying an hour late at work today or tomorrow to compensate.  Change takes time and free labor is hard to find.</p>
<p>Sincerely,</p>
<p>Matthew Crumley<br />
Wildewood President, 2008</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/essays/response-letter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Florida9 Villas</title>
		<link>http://www.unsaturated.com/webdesign/florida9-villas/</link>
		<comments>http://www.unsaturated.com/webdesign/florida9-villas/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 16:07:19 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=218</guid>
		<description><![CDATA[Real estate is always big business in Florida.  Many of those businesses are established based upon seasonal travelers looking for places to stay near Disney.]]></description>
			<content:encoded><![CDATA[<p>The website <a href="http://www.florida9.com/">Florida9 Villas</a> was designed to keep clicks to a minimum.  You can browse through the villas and read a short description, see a thumbnail photo, and check the number of bedrooms.  The new design places a very high priority on the index page, so that information is at most two clicks away.  After the graphics were cleaned up, pages reformatted, and an eye-catching header created, the site went live on July 10, 2008 at 10:00PM. </p>
<p><a href='http://www.unsaturated.com/wordpress/wp-content/data/site-florida9.png'><img src="http://www.unsaturated.com/wordpress/wp-content/data/site-florida9.png" alt="Florida9 Villas Website" title="Florida9 Villas" width="550" height="515" class="aligncenter size-full wp-image-219" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/webdesign/florida9-villas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CD-Plus</title>
		<link>http://www.unsaturated.com/webdesign/cd-plus/</link>
		<comments>http://www.unsaturated.com/webdesign/cd-plus/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 04:19:47 +0000</pubDate>
		<dc:creator>matthew</dc:creator>
		
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.unsaturated.com/?p=216</guid>
		<description><![CDATA[When you're constantly running a business, even if it's PC-related, it doesn't mean you have time to build a website.  CD-Plus got the benefit of quality work, quick turnaround time, and a good price.]]></description>
			<content:encoded><![CDATA[<p>The Clermont business, <a href="http://www.cd-plus.us">CD-Plus</a>, offers computer services like desktop and laptop repair and builds custom PC systems.  When you&#8217;re constantly running a business, even if it&#8217;s PC-related, it doesn&#8217;t mean you have time to build a website.  They needed something contemporary but simple.  In short, they needed a web presence to get the keywords out there for Google, Microsoft, and the others to index.  In this case, the main page lists the services, since it will carry more weight with the indexers.  The site went live July 9, 2008 at 10:30PM. </p>
<p><img src="http://www.unsaturated.com/wordpress/wp-content/data/site-cdplus.png" alt="New design for CD-Plus.us" title="CD-Plus" width="550" height="397" class="aligncenter size-full wp-image-217" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unsaturated.com/webdesign/cd-plus/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.342 seconds -->
