<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.chrisstreeter.com/wp-atom.php">
	<title type="text">chrisstreeter.com</title>
	<subtitle type="text">Chris Streeter's location on the Internet.</subtitle>

	<updated>2012-04-02T03:45:39Z</updated>

	<link rel="alternate" type="text/html" href="http://www.chrisstreeter.com" />
	<id>http://www.chrisstreeter.com/feed/atom</id>
	

	<generator uri="http://wordpress.org/" version="3.3.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/chrisstreeter" /><feedburner:info uri="chrisstreeter" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Checking for Python Package Updates at PyPI]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/C7erCElh8ns/checking-for-python-package-updates-at-pypi" />
		<id>http://www.chrisstreeter.com/?p=832</id>
		<updated>2012-04-02T03:45:39Z</updated>
		<published>2012-04-02T03:44:34Z</published>
		<category scheme="http://www.chrisstreeter.com" term="technology" /><category scheme="http://www.chrisstreeter.com" term="coding" /><category scheme="http://www.chrisstreeter.com" term="pypi" /><category scheme="http://www.chrisstreeter.com" term="python" /><category scheme="http://www.chrisstreeter.com" term="script" />		<summary type="html"><![CDATA[I frequently find myself wondering if a bug in a Python package has been fixed and whether there is an upgrade for that package that might fix the bug. So I find that I end up running pip freeze and &#8230; <a href="http://www.chrisstreeter.com/archive/2012/04/832/checking-for-python-package-updates-at-pypi">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2012/04/832/checking-for-python-package-updates-at-pypi">&lt;p&gt;I frequently find myself wondering if a bug in a Python package has been fixed and whether there is an upgrade for that package that might fix the bug. So I find that I end up running &lt;code&gt;pip freeze&lt;/code&gt; and then having to compare the package versions to those on &lt;a title="The Cheese Shop" href="http://pypi.python.org/pypi/"&gt;PyPI&lt;/a&gt; manually. Well, anytime you say &amp;#8220;run X manually&amp;#8221;, you&amp;#8217;re being a chump.&lt;/p&gt;
&lt;p&gt;I just saw down and wrote a script to get the list of currently installed packages in the current environment (so it works with &lt;a title="virtualenv" href="http://pypi.python.org/pypi/virtualenv"&gt;virtualenv&lt;/a&gt;). Then it checks to see what the latest version of the package is on PyPI and prints out the status. If you work with Python and packages, this is awesomesauce.&lt;/p&gt;
&lt;p&gt;I added the &lt;a title="pyupgrade.py" href="https://github.com/streeter/dotfiles/blob/master/bin/pyupgrades.py" target="_blank"&gt;script to my dotfiles on github&lt;/a&gt;.&lt;span id="more-832"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;script type="text/javascript" src="//gist-it.appspot.com/github/streeter/dotfiles/raw/master/bin/pyupgrades.py"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Assuming the script is at &lt;code&gt;~/bin/pyupgrades.py&lt;/code&gt;, you can run it globally or after activating your favorite virtualenv.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/C7erCElh8ns" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2012/04/832/checking-for-python-package-updates-at-pypi#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2012/04/832/checking-for-python-package-updates-at-pypi/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2012/04/832/checking-for-python-package-updates-at-pypi</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Homebrew Package Update Notifications via Growl]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/GF4hJh_P1M0/homebrew-package-update-notifications-via-growl" />
		<id>http://www.chrisstreeter.com/?p=821</id>
		<updated>2011-09-20T15:53:39Z</updated>
		<published>2011-09-20T15:53:39Z</published>
		<category scheme="http://www.chrisstreeter.com" term="software" /><category scheme="http://www.chrisstreeter.com" term="bash" /><category scheme="http://www.chrisstreeter.com" term="cron" /><category scheme="http://www.chrisstreeter.com" term="github" /><category scheme="http://www.chrisstreeter.com" term="growl" /><category scheme="http://www.chrisstreeter.com" term="homebrew" /><category scheme="http://www.chrisstreeter.com" term="lion" /><category scheme="http://www.chrisstreeter.com" term="macos" /><category scheme="http://www.chrisstreeter.com" term="macosx" /><category scheme="http://www.chrisstreeter.com" term="macports" /><category scheme="http://www.chrisstreeter.com" term="script" /><category scheme="http://www.chrisstreeter.com" term="updater" />		<summary type="html"><![CDATA[Over the weekend, I finally upgraded my system to Mac OS Lion. I also took the opportunity to do a completely fresh install of my system, doing a final TimeMachine backup before erasing the hard drive and then installing Lion &#8230; <a href="http://www.chrisstreeter.com/archive/2011/09/821/homebrew-package-update-notifications-via-growl">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2011/09/821/homebrew-package-update-notifications-via-growl">&lt;p&gt;Over the weekend, I finally upgraded my system to Mac OS Lion. I also took the opportunity to do a completely fresh install of my system, doing a &lt;a title="World Backup Day: How I Backup" href="http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup"&gt;final TimeMachine backup&lt;/a&gt; before erasing the hard drive and then installing Lion off a USB thumb drive.&lt;/p&gt;
&lt;p&gt;I have long used &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; as my open source package manager, but I&amp;#8217;ve had issues recently with certain ports not being updated or being out of date. So I was really interested in &lt;a title="Homebrew" href="http://mxcl.github.com/homebrew/" target="_blank"&gt;Homebrew&lt;/a&gt;.  The fact that it is all on github, open and actively developed really appealed to me. After getting it up and running, I wanted to port my &lt;a title="MacPort Package Update Notifications via Growl" href="http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl" target="_blank"&gt;package update notifier&lt;/a&gt; to use Homebrew. Doing so was really quite easy. Here&amp;#8217;s what I came up with, which is also in &lt;a title="brew-update-notifier" href="https://github.com/streeter/dotfiles/blob/master/bin/brew-update-notifier" target="_blank"&gt;my dotfiles on github&lt;/a&gt;. &lt;span id="more-821"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="bash" style="font-family:monospace;"&gt;&lt;span style="color: #666666; font-style: italic;"&gt;#!/bin/bash&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Notify of Homebrew updates via Growl on Mac OS X&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Author: Chris Streeter http://www.chrisstreeter.com&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Requires: Growl Notify Extra to be installed. Install with&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#   brew install growlnotify&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #007800;"&gt;TERM_APP&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/Applications/Terminal.app'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;BREW_EXEC&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/usr/local/bin/brew'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_NOTIFY&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/usr/local/bin/growlnotify'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_TITLE&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;Homebrew Update(s) Available&amp;quot;&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_ARGS&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;-n 'Homebrew' -d &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; -a &lt;span style="color: #007800;"&gt;$BREW_EXEC&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #007800;"&gt;$BREW_EXEC&lt;/span&gt; update &lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;amp;&lt;span style="color: #000000;"&gt;1&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;dev&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;null
&lt;span style="color: #007800;"&gt;outdated&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #007800;"&gt;$BREW_EXEC&lt;/span&gt; outdated &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'\n'&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-z&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt; ; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-e&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
        &lt;span style="color: #666666; font-style: italic;"&gt;# No updates available&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_ARGS&lt;/span&gt; &lt;span style="color: #660033;"&gt;-m&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt; &lt;span style="color: #660033;"&gt;-t&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;No Homebrew Updates Available&amp;quot;&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt;
    &lt;span style="color: #666666; font-style: italic;"&gt;# We've got an outdated formula or two&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #666666; font-style: italic;"&gt;# Nofity via growl&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-e&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;lc&lt;/span&gt;=$&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;wc&lt;/span&gt; -l&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;outdated&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;tail&lt;/span&gt; -&lt;span style="color: #007800;"&gt;$lc&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;head&lt;/span&gt; -&lt;span style="color: #000000;"&gt;5&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;!&lt;/span&gt;= &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
            &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;Some of the outdated formulae are:
&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt;
            &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;The following formulae are outdated:
&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
        &lt;span style="color: #666666; font-style: italic;"&gt;# Send to growlnotify&lt;/span&gt;
        &lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_ARGS&lt;/span&gt; &lt;span style="color: #660033;"&gt;-s&lt;/span&gt; &lt;span style="color: #660033;"&gt;-t&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_TITLE&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Assuming the script is at &lt;code&gt;~/bin/brew-update-notifier&lt;/code&gt;, you can install the script to a crontab by running &lt;code&gt;sudo crontab -e&lt;/code&gt;, then adding the line &lt;code&gt;0 12 * * * /Users/&amp;lt;username&amp;gt;/bin/brew-update-notifier&lt;/code&gt; to the end of the file (substituting &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; for your username, or wherever you&amp;#8217;ve put the script). I&amp;#8217;ve chosen to run the script every day at noon because my computer is likely to be on and connected to a network.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/GF4hJh_P1M0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2011/09/821/homebrew-package-update-notifications-via-growl#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2011/09/821/homebrew-package-update-notifications-via-growl/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2011/09/821/homebrew-package-update-notifications-via-growl</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[World Backup Day: How I Backup]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/uuTI31Fvmjs/world-backup-day-how-i-backup" />
		<id>http://www.chrisstreeter.com/?p=807</id>
		<updated>2011-04-01T05:25:28Z</updated>
		<published>2011-04-01T05:20:42Z</published>
		<category scheme="http://www.chrisstreeter.com" term="software" /><category scheme="http://www.chrisstreeter.com" term="backup" /><category scheme="http://www.chrisstreeter.com" term="crashplan" /><category scheme="http://www.chrisstreeter.com" term="macosx" /><category scheme="http://www.chrisstreeter.com" term="time machine" /><category scheme="http://www.chrisstreeter.com" term="world backup day" />		<summary type="html"><![CDATA[Today was World Backup Day, and, in the footsteps of Ars, decided I&#8217;d detail my current backup strategy. I first started backing up regularly after an incident back in college. One day the hard drive in my laptop began making &#8230; <a href="http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup">&lt;p&gt;Today was World Backup Day, and, in &lt;a href="http://arstechnica.com/gadgets/news/2011/03/world-backup-day-what-are-you-doing-to-make-sure-youre-covered.ars"&gt;the footsteps of Ars&lt;/a&gt;, decided I&amp;#8217;d detail my current backup strategy. I first started backing up regularly after an incident back in college. One day the hard drive in my laptop began making &lt;a href="http://datacent.com.nyud.net:8090/hard_drive_sounds.php"&gt;the telltale sounds&lt;/a&gt; of imminent failure. Then the computer stopped booting. And I hadn&amp;#8217;t backed up the drive in several weeks, which would have caused me to lose a bunch of data. I ordered a new drive, and just before I was about to install it, I was luckily able to boot my laptop and then copy the data off of it, losing nothing. Since then, I&amp;#8217;ve been an big advocate of backups.&lt;/p&gt;
&lt;p&gt;My primary computer is a Macbook Pro. Since it is also the computer that all my &lt;a href="http://chrisstreeter.com/photos"&gt;photos&lt;/a&gt; and important data is on, I don&amp;#8217;t want to lose any of it. Every day I make sure to plug in my 1 TB external hard drive that Time Machine mirrors the contents of drive to. So at all times, I&amp;#8217;ve got a backup of my drive and a history of the files. I also have another external drive that I keep at my parent&amp;#8217;s house in their safe that is filled with Time Machine backups. So if my house blows up, I have something to fall back on. The problem with that disk though is that it is several months out of date. And that sucks because my data changes all the time.&lt;/p&gt;
&lt;p&gt;But thats not all for my laptop. I also make use of &lt;a href="http://www.crashplan.com/"&gt;CrashPlan&lt;/a&gt;. At home, I also have a Linux box with a 4 hard drives in a RAID 5 setup, so if one drive dies, I don&amp;#8217;t lose any data, I can just replace the drive. So I have CrashPlan backup my laptop to my Linux box onto it&amp;#8217;s RAID storage, and this can happen anywhere my laptop has Internet access. Currently, CrashPlan is configured to run every night.&lt;/p&gt;
&lt;p&gt;My email is hosted &lt;a href="http://gmail.com"&gt;in the cloud&lt;/a&gt;, but I still run hourly backups onto the RAID storage in my &lt;a href="http://www.chrisstreeter.com/archive/2009/04/305/gmail-imap-backup-with-mbsync-on-ubuntu/"&gt;linux box using mbsync&lt;/a&gt;. I also run backups of my Google Docs every day using &lt;a href="http://code.google.com/p/gdatacopier/"&gt;gdatacopier&lt;/a&gt; (again, saving to my Linux box).&lt;/p&gt;
&lt;p&gt;&lt;span id="more-807"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I used to also have Mozy, but decided to scale back costs for a while. Though I would really like to use it again. For some important things, I&amp;#8217;ll stick them on Dropbox, which maintains a backup copy in the cloud. However, storage on Dropbox is much more limited than something like Mozy.&lt;/p&gt;
&lt;p&gt;Right now, one single point of failure is my Linux box. The drives are getting old and should be replaced soon (the MTTF is way overdue) and I&amp;#8217;m relying too much on them these days. And I really should have a standby drive in the array in case of multiple disk failures. The plus side is that there really isn&amp;#8217;t anything on that computer that is not somewhere else, or I can&amp;#8217;t redownload. But it would be a huge hassle.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve really tried to create a good, easy solution for backups without any single point of failure. Though there are definitely several areas that I need to improve on. You never need the backup until you need it. And at that point, if you don&amp;#8217;t have the backup, you may find you&amp;#8217;ve lost years of irreplaceable memories. I know that to me, my photos are irreplaceable. I also have all the documents I created from sixth grade all the way through college. And if I lost those, there&amp;#8217;s no bringing them back (there&amp;#8217;s just no way to recreate the awesome resume I wrote in sixth grade &amp;#8211; &amp;#8220;Expected graduation from Middle School, 1998&amp;#8243;, &amp;#8220;experience with many tools and their uses&amp;#8221;, &amp;#8220;fast runner&amp;#8221; &amp;#8211; classic).&lt;/p&gt;
&lt;p&gt;If you own a Mac, there is no excuse, just buy a cheap external hard drive and plug it in and use Time Machine. Windows users should just buy a Mac. Linux users&amp;#8230; well, write some perl script that rsync&amp;#8217;s your files somewhere and put it in cron or write some other solution (I mean really, you&amp;#8217;re using Linux, you should be able to figure something out). Or look at CrashPlan. Hopefully, if you aren&amp;#8217;t backing up your files, you&amp;#8217;ll start.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/uuTI31Fvmjs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2011/03/807/world-backup-day-how-i-backup</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[MacPort Package Update Notifications via Growl]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/463zyxJCVHY/macport-package-update-notifications-via-growl" />
		<id>http://www.chrisstreeter.com/?p=800</id>
		<updated>2011-01-23T17:30:39Z</updated>
		<published>2011-01-23T17:30:39Z</published>
		<category scheme="http://www.chrisstreeter.com" term="software" /><category scheme="http://www.chrisstreeter.com" term="bash" /><category scheme="http://www.chrisstreeter.com" term="cron" /><category scheme="http://www.chrisstreeter.com" term="github" /><category scheme="http://www.chrisstreeter.com" term="growl" /><category scheme="http://www.chrisstreeter.com" term="macos" /><category scheme="http://www.chrisstreeter.com" term="macosx" /><category scheme="http://www.chrisstreeter.com" term="macports" /><category scheme="http://www.chrisstreeter.com" term="script" /><category scheme="http://www.chrisstreeter.com" term="updater" />		<summary type="html"><![CDATA[I wrote a quick little script this morning to notify myself of updates to MacPorts via the Mac OS X notification app Growl.  The script is a bash script that is designed to run as root from a cronjob (as &#8230; <a href="http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl">&lt;p&gt;I wrote a quick little script this morning to notify myself of updates to &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; via the Mac OS X notification app &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt;.  The script is a bash script that is designed to run as root from a cronjob (as the &lt;code&gt;port sync&lt;/code&gt; command requires root permissions). You can find the script committed in my &lt;a href="https://github.com/streeter/dotfiles/"&gt;dotfiles repository on github&lt;/a&gt;.  For convenience, I pasted the script below, though &lt;a href="https://github.com/streeter/dotfiles/blob/master/bin/port-update-notifier"&gt;the copy on github&lt;/a&gt; will always be the most up-to-date copy.&lt;br /&gt;
&lt;span id="more-800"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="bash" style="font-family:monospace;"&gt;&lt;span style="color: #666666; font-style: italic;"&gt;#!/bin/bash&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Notify of MacPort updates via Growl on Mac OS X&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Author: Chris Streeter http://www.chrisstreeter.com&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;# Requires: Growl Notify Extra to be installed (but fails gracefully). Info&lt;/span&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;#       about how to get the extra is at http://growl.info/extras.php&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #007800;"&gt;TERM_APP&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/Applications/Terminal.app'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;PORT_EXEC&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/opt/local/bin/port'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_NOTIFY&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;'/usr/local/bin/growlnotify'&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_TITLE&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;MacPort Update(s) Available&amp;quot;&lt;/span&gt;
&lt;span style="color: #007800;"&gt;GROWL_ARGS&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;-n 'MacPorts' -d &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; -a &lt;span style="color: #007800;"&gt;$PORT_EXEC&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #007800;"&gt;$PORT_EXEC&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sync&lt;/span&gt; &lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;amp;&lt;span style="color: #000000;"&gt;1&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;&amp;amp;&lt;/span&gt;gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;dev&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;null
&lt;span style="color: #007800;"&gt;outdated&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #007800;"&gt;$PORT_EXEC&lt;/span&gt; outdated&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;grep&lt;/span&gt; &lt;span style="color: #660033;"&gt;-q&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'No installed ports are outdated.'&lt;/span&gt; ; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-e&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
        &lt;span style="color: #666666; font-style: italic;"&gt;# No updates available&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_ARGS&lt;/span&gt; &lt;span style="color: #660033;"&gt;-m&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt; &lt;span style="color: #660033;"&gt;-t&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;No MacPort Updates Available&amp;quot;&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt;
    &lt;span style="color: #666666; font-style: italic;"&gt;# We've got an outdated port or two&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #666666; font-style: italic;"&gt;# Nofity via growl&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-e&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;lc&lt;/span&gt;=$&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;wc&lt;/span&gt; -l&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt; - &lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;outdated&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;tail&lt;/span&gt; -&lt;span style="color: #007800;"&gt;$lc&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;cut&lt;/span&gt; &lt;span style="color: #660033;"&gt;-d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span style="color: #660033;"&gt;-f&lt;/span&gt; &lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
        &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;head&lt;/span&gt; -&lt;span style="color: #000000;"&gt;5&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$outdated&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;!&lt;/span&gt;= &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;; &lt;span style="color: #000000; font-weight: bold;"&gt;then&lt;/span&gt;
            &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;Some of the outdated packages are:
&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt;
            &lt;span style="color: #007800;"&gt;message&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;The following packages are outdated:
&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
        &lt;span style="color: #666666; font-style: italic;"&gt;# Send to growlnotify&lt;/span&gt;
        &lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;&lt;span style="color: #007800;"&gt;$message&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_NOTIFY&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_ARGS&lt;/span&gt; &lt;span style="color: #660033;"&gt;-s&lt;/span&gt; &lt;span style="color: #660033;"&gt;-t&lt;/span&gt; &lt;span style="color: #007800;"&gt;$GROWL_TITLE&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;fi&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Assuming the script is at &lt;code&gt;~/bin/port-update-notifier&lt;/code&gt;, you can install the script to a crontab by running &lt;code&gt;sudo crontab -e&lt;/code&gt;, then adding the line &lt;code&gt;0 12 * * * /Users/&amp;lt;username&amp;gt;/bin/port-update-notifier&lt;/code&gt; to the end of the file (substituting &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; for your username, or wherever you&amp;#8217;ve put the script). I&amp;#8217;ve chosen to run the script every day at noon because my computer is likely to be on and connected to a network.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/463zyxJCVHY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl/feed/atom" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2011/01/800/macport-package-update-notifications-via-growl</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Python virtualenvwrapper and Logging]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/t-iKLcbqMcI/python-virtualenvwrapper-and-logging" />
		<id>http://www.chrisstreeter.com/?p=792</id>
		<updated>2011-01-21T03:51:03Z</updated>
		<published>2011-01-21T03:51:03Z</published>
		<category scheme="http://www.chrisstreeter.com" term="linux" /><category scheme="http://www.chrisstreeter.com" term="logging" /><category scheme="http://www.chrisstreeter.com" term="python" /><category scheme="http://www.chrisstreeter.com" term="ubuntu" /><category scheme="http://www.chrisstreeter.com" term="virtualenv" /><category scheme="http://www.chrisstreeter.com" term="virtualenvwrapper" />		<summary type="html"><![CDATA[I ran into this issue, and couldn&#8217;t find a resolution anywhere online. Well, I figured it out, and thought that I&#8217;d put it online for others to find. The issue was that I got exception tracebacks when sourcing the /usr/local/bin/virtualenvwrapper.sh &#8230; <a href="http://www.chrisstreeter.com/archive/2011/01/792/python-virtualenvwrapper-and-logging">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2011/01/792/python-virtualenvwrapper-and-logging">&lt;p&gt;I ran into this issue, and couldn&amp;#8217;t find a resolution anywhere online. Well, I figured it out, and thought that I&amp;#8217;d put it online for others to find.&lt;/p&gt;
&lt;p&gt;The issue was that I got exception tracebacks when sourcing the &lt;code&gt;/usr/local/bin/virtualenvwrapper.sh&lt;/code&gt; script upon bash initialization. However, the exception happens while Python is running it&amp;#8217;s &lt;a href="http://docs.python.org/library/atexit.html"&gt;atexit&lt;/a&gt; handlers. So the stack was only 3 levels deep. I&amp;#8217;m running &lt;code&gt;virtualenv&lt;/code&gt; and &lt;code&gt;virtualenvwrapper&lt;/code&gt; on my Ubuntu 9.04 server.&lt;br /&gt;
&lt;span id="more-792"&gt;&lt;/span&gt; Here&amp;#8217;s the output of the exception that I got:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="bash" style="font-family:monospace;"&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt;streeter&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;mail&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;:~$ &lt;span style="color: #7a0874; font-weight: bold;"&gt;source&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;virtualenvwrapper.sh
Traceback &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;most recent call &lt;span style="color: #c20cb9; font-weight: bold;"&gt;last&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;:
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/handlers.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;72&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; emit
self.doRollover&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/handlers.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;129&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; doRollover
os.rename&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;self.baseFilename, dfn&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
OSError: &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt;Errno &lt;span style="color: #000000;"&gt;13&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt; Permission denied
Traceback &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;most recent call &lt;span style="color: #c20cb9; font-weight: bold;"&gt;last&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;:
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/handlers.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;71&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; emit
&lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; self.shouldRollover&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;record&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;:
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/handlers.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;145&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; shouldRollover
self.stream.seek&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;, &lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;  &lt;span style="color: #666666; font-style: italic;"&gt;#due to non-posix-compliant Windows feature&lt;/span&gt;
ValueError: I&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;O operation on closed &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt;
Error &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; atexit._run_exitfuncs:
Traceback &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;most recent call &lt;span style="color: #c20cb9; font-weight: bold;"&gt;last&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;:
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/atexit.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;24&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; _run_exitfuncs
func&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;*&lt;/span&gt;targs, &lt;span style="color: #000000; font-weight: bold;"&gt;**&lt;/span&gt;kargs&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/__init__.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;1508&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; shutdown
h.flush&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/__init__.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;754&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; flush
self.stream.flush&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
ValueError: I&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;O operation on closed &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt;
Error &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; sys.exitfunc:
Traceback &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;most recent call &lt;span style="color: #c20cb9; font-weight: bold;"&gt;last&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;:
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/atexit.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;24&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; _run_exitfuncs
func&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;*&lt;/span&gt;targs, &lt;span style="color: #000000; font-weight: bold;"&gt;**&lt;/span&gt;kargs&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/__init__.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;1508&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; shutdown
h.flush&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
File &lt;span style="color: #ff0000;"&gt;&amp;quot;/usr/lib/python2.6/logging/__init__.py&amp;quot;&lt;/span&gt;, line &lt;span style="color: #000000;"&gt;754&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; flush
self.stream.flush&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;
ValueError: I&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;O operation on closed &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt;
&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#91;&lt;/span&gt;streeter&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;mail&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#93;&lt;/span&gt;:~$&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see, not a lot to go with. So it seems that virtualenvwrapper does some logging, and it looks like the logging module wants to rename that logfile. Digging even deeper, the logging module wants to rotate the logfile because it got too big. Well, where is the log file? Turns out that virtualenvwrapper sets up a logfile called &lt;code&gt;hook.log&lt;/code&gt; at the root of the &lt;code&gt;WORKON_HOME&lt;/code&gt; environment variable. My &lt;code&gt;WORKON_HOME&lt;/code&gt; is set to &lt;code&gt;/usr/local/pythonenv&lt;/code&gt; and lo and behold, that directory was not writeable by my logged in user.  Thats an easy fix. Just change the permissions.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/t-iKLcbqMcI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2011/01/792/python-virtualenvwrapper-and-logging#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2011/01/792/python-virtualenvwrapper-and-logging/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2011/01/792/python-virtualenvwrapper-and-logging</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Blackout Days]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/8OSm1-biK3U/blackout-days" />
		<id>http://www.chrisstreeter.com/?p=784</id>
		<updated>2011-01-03T06:42:38Z</updated>
		<published>2011-01-03T06:42:38Z</published>
		<category scheme="http://www.chrisstreeter.com" term="tahoe" /><category scheme="http://www.chrisstreeter.com" term="donner lake" /><category scheme="http://www.chrisstreeter.com" term="nordic skiing" /><category scheme="http://www.chrisstreeter.com" term="pacific crest trail" /><category scheme="http://www.chrisstreeter.com" term="sierras" /><category scheme="http://www.chrisstreeter.com" term="snowshoeing" /><category scheme="http://www.chrisstreeter.com" term="truckee" />		<summary type="html"><![CDATA[What does one do when one has a cabin in Truckee and a season pass to a ski resort that is blacked out?  Well, in my case, I still want to be active in the snow. Over the past week, &#8230; <a href="http://www.chrisstreeter.com/archive/2011/01/784/blackout-days">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2011/01/784/blackout-days">&lt;p&gt;What does one do when one has a cabin in Truckee and a season pass to a ski resort that is blacked out?  Well, in my case, I still want to be active in the snow. Over the past week, I decided to go snowshoeing up near Donner Lake. Family and friends parked near Donner Summit and then followed part of the Pacific Crest Trail south towards Sugar Bowl until we were able to overlook Donner Lake on a beautiful day.&lt;/p&gt;
&lt;div id="attachment_788" class="wp-caption aligncenter" style="width: 624px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2011/01/trail_forging.jpg"&gt;&lt;img class="size-full wp-image-788 " title="Forging a Trail" src="http://www.chrisstreeter.com/wp-content/uploads/2011/01/trail_forging.jpg" alt="" width="614" height="407" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Forging a Trail&lt;/p&gt;&lt;/div&gt;
&lt;div id="attachment_785" class="wp-caption aligncenter" style="width: 624px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2011/01/icicles.jpg"&gt;&lt;img class="size-full wp-image-785  " title="Icicles" src="http://www.chrisstreeter.com/wp-content/uploads/2011/01/icicles.jpg" alt="" width="614" height="407" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Icicles&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Then, a few days later, on New Years Eve day, I went nordic skiing for my first time ever.  We started at the State Park at the east end of Donner Lake and followed a trail several miles out, for about a four hour trip. By the end, I was definitely ready to be done with the skis, and probably won&amp;#8217;t go that long again until I&amp;#8217;m a bit more experienced on skis (downhill and nordic). It definitely didn&amp;#8217;t sour my first experience though and I plan on going at least several more times this winter.&lt;/p&gt;
&lt;div id="attachment_786" class="wp-caption aligncenter" style="width: 513px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2011/01/nordic_skiing.jpg"&gt;&lt;img class="size-full wp-image-786 " title="Nordi Skiing" src="http://www.chrisstreeter.com/wp-content/uploads/2011/01/nordic_skiing.jpg" alt="" width="503" height="614" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Nordic Skiing&lt;/p&gt;&lt;/div&gt;
&lt;div id="attachment_787" class="wp-caption aligncenter" style="width: 624px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2011/01/puffy_snow.jpg"&gt;&lt;img class="size-full wp-image-787 " title="Puffy Snow" src="http://www.chrisstreeter.com/wp-content/uploads/2011/01/puffy_snow.jpg" alt="" width="614" height="407" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Puffy Snow&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/8OSm1-biK3U" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2011/01/784/blackout-days#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2011/01/784/blackout-days/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2011/01/784/blackout-days</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Looking Back on 2010]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/wwSzl-rNghM/looking-back-on-2010" />
		<id>http://www.chrisstreeter.com/?p=778</id>
		<updated>2010-12-31T03:50:50Z</updated>
		<published>2010-12-31T03:48:05Z</published>
		<category scheme="http://www.chrisstreeter.com" term="updates" /><category scheme="http://www.chrisstreeter.com" term="2010" /><category scheme="http://www.chrisstreeter.com" term="letter" /><category scheme="http://www.chrisstreeter.com" term="year in review" />		<summary type="html"><![CDATA[As 2010 winds down in the next few days, I decided to write up a summary of my past year in what, some would term, a Christmas letter. Well, it&#8217;s after Christmas, so this is officially a Review of 2010 &#8230; <a href="http://www.chrisstreeter.com/archive/2010/12/778/looking-back-on-2010">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/12/778/looking-back-on-2010">&lt;p&gt;As 2010 winds down in the next few days, I decided to write up a summary of my past year in what, some would term, a Christmas letter. Well, it&amp;#8217;s after Christmas, so this is officially a Review of 2010 letter. I emailed out a link to quite a number of people that I&amp;#8217;ve got email addresses for. So if you aren&amp;#8217;t on that list, you can find the body of work and associated pictures at my &lt;a href="http://www.chrisstreeter.com/updates/2010-in-retrospect"&gt;2010 in Retrospect&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;You can keep up with me next year here on my site and through my photos at &lt;a href="http://www.flickr.com/photos/chrisstreeter/"&gt;Flickr&lt;/a&gt; or at my &lt;a href="http://gallery.chrisstreeter.com/"&gt;gallery&lt;/a&gt;. I’d love to hear how your 2010 went, so write back. Hope your 2010 was a good one and all the best next year.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/wwSzl-rNghM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/12/778/looking-back-on-2010#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/12/778/looking-back-on-2010/feed/atom" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/12/778/looking-back-on-2010</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[My First 30k]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/N83PN5ojAJQ/my-first-30k" />
		<id>http://www.chrisstreeter.com/?p=704</id>
		<updated>2010-12-21T02:41:44Z</updated>
		<published>2010-12-21T02:41:44Z</published>
		<category scheme="http://www.chrisstreeter.com" term="running" /><category scheme="http://www.chrisstreeter.com" term="30k" /><category scheme="http://www.chrisstreeter.com" term="marin headlands" /><category scheme="http://www.chrisstreeter.com" term="pctr" /><category scheme="http://www.chrisstreeter.com" term="race" /><category scheme="http://www.chrisstreeter.com" term="rodeo beach" /><category scheme="http://www.chrisstreeter.com" term="trail run" />		<summary type="html"><![CDATA[A few months back, around the beginning of September, my sister, a friend and I all decided that we wanted to do a longer trail run. We actually decided this while on a run through some redwoods together. Since we &#8230; <a href="http://www.chrisstreeter.com/archive/2010/12/704/my-first-30k">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/12/704/my-first-30k">&lt;p&gt;A few months back, around the beginning of September, my sister, a friend and I all decided that we wanted to do a longer trail run. We actually decided this while on a run through some redwoods together. Since we enjoyed trail runs, we decided that the best way to do a longer distance run would be to sign up together and commit to finishing instead of focusing on being competitive in the race.&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 560px"&gt;&lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=200557561299620897714.000497c7be9bebf47d72e&amp;amp;ll=37.852086,-122.528801&amp;amp;spn=0.08729,0.134068&amp;amp;z=13" target="_blank"&gt;&lt;img class="  " title="Rodeo Beach 30k" src="http://maps.google.com/maps/api/staticmap?size=550x400&amp;amp;maptype=terrain&amp;amp;markers=color:blue|37.83263,-122.53854&amp;amp;path=weight:5|color:blue|enc:id|eFbl|jV?tHcIpG~BfFuGbAgC~E?mIsJxCoDvJyE{@u@kDuDi@mBqCn@eMaDmE_B{GmCwMg@gFMeFmF_Bm@{DfDyC|@_Fo@sDqEaG{GoMuCnBgCaG_GHgG~BGnFeC|DqA?uCnJcBFJ`GyFvIiDuAoDQuGvMyBaHaGwB}ApGiAcAwDzD{CjDqBoBo@pGoD~EsMnFvDwF_Fc@_BmAqEdEm@{@aGpCwKvIjAjH?~IzChCnArDdE|ExBfFwAfF`DtAu@dLt@bEtCs@^rDxPpCjTfIRfFfC~F|@vQ`AfBm@tEtDjZjAhGdCzCf@lEjAqFu@wBbAwBnAmARaDqBuAf@wBZiC}A{DbEaCnDGxBuAbAeM_BoFDoBbDnB|AzD`@dIEiCrCa@FgJtDsHbD}D?gFi@}EnDsD`C{GxBcHg@wI{BcL_CwI|@oJJyJqBgFyEoFoH?mM~EsQkDoSmP?iGgCoBgCqGcL{KaD}HXqJjPeMzGkShH{CtCj@pE_CrBgJDiJlFiVfDaKkBiCwAeMdBgJfC_Iu@kAlCoM~FkO?cEpAcDS_FhHuArCaDh@mLbSoQ`K_Nt]fF|GhDvAjKpPfBfC|IpEj@wDvTrErAtDlEsIfM|@vBhDYrBvAMxGpBzG`KoMm@bWsFd_@wDlBkBj@}@hRaD~I}Dz@SfFzGpG{@zGlGjZhDtPhAza@m@rHa@~I&amp;amp;sensor=false" alt="" width="550" height="400" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;A terrain view of the course route&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;When we got home, we looked up to find a 30-35 kilometer &lt;a href="http://www.pctrailruns.com/"&gt;Pacific Coast Trail Run&lt;/a&gt; that was several months out, giving us plenty of time to train. We settled on the &lt;a href="http://www.pctrailruns.com/event.aspx?dtid=5459"&gt;Rodeo Beach 30k&lt;/a&gt;, on December 18th. It was on the shorter side (30km instead of 35km), it was plenty far out, giving us a lot more time to train, and it was in the Marin Headlands, a beautiful area that we could train at. I signed up almost immediately, as I knew the act of signing up would get me to commit mentally.  My sister signed up and so did my friend (at least I thought she did). I also got a couple people at my gym to sign up too. Things were shaping up nicely.&lt;/p&gt;
&lt;div id="attachment_718" class="wp-caption aligncenter" style="width: 586px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo_30KM_20101218_008.jpeg"&gt;&lt;img class="size-full wp-image-718 " title="Rodeo Beach 30k Start" src="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo_30KM_20101218_008.jpeg" alt="" width="576" height="432" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The start of the race led up a couple hills. It was also quite overcast.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I didn&amp;#8217;t train as much as I wanted to while on &lt;a href="http://www.chrisstreeter.com/archive/tag/bali"&gt;my Balinese vacation&lt;/a&gt;, and upon returning, I tried to stick to a more rigid training schedule where I ran more frequently. Well, I didn&amp;#8217;t stick to that schedule as well as I should have. As of the day of the race, the farthest distance I had run in the many months prior was about 7.5 miles, not even half of the final distance of 18.64.  I wasn&amp;#8217;t terribly nervous, I knew I could still finish the race, but I figured I&amp;#8217;d be doing a lot more walking that I&amp;#8217;m used to, especially up the hills. And there are a lot of hills on this race, giving the 30km race a &lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo-Beach-30-Km-Elevation.jpg"&gt;formidable 3740 feet of elevation&lt;/a&gt; gain along the course. However, it turns out my sister and friend also hadn&amp;#8217;t been training for the race either.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-704"&gt;&lt;/span&gt;Then, because of an &lt;a href="http://en.wikipedia.org/wiki/Omega_block"&gt;Omega block&lt;/a&gt; sitting in the middle of the Pacific, lots of rain was scheduled to be directed at Northern California. This threat of rainy weather was enough to scare off my sister. Then I found out my friend hadn&amp;#8217;t signed up for the race. So much for the idea of a trio of us doing our first 30k together, &lt;a href="http://www.runnersworld.com/article/0,7120,s6-238-511--13669-0,00.html"&gt;enjoying the outdoors on single-track&lt;/a&gt;. Thus, I was left to do the 30k alone and slightly unprepared.&lt;/p&gt;
&lt;p&gt;The weather ended up lucking out and a break in the rain occurred for most of Saturday. The clouds and fog remained, but almost no wind. An 8:30am start at Fort Cronkhite had me excited and ready to get moving. The course went 6.6km to Tennessee Valley, through WWII bunkers in the headlands. At that point, the 30k and 50k runners went on a 10.4km loop up the Miwok trail to Coyote Ridge to the Coastal Trail and back to the Tennessee Valley aid station. before we continued on the final 13.2km return segment and the formidable Marioncello hill (the last, and biggest hill in the profile below), arguably the worst of the 3 main hills.&lt;/p&gt;
&lt;div id="attachment_708" class="wp-caption aligncenter" style="width: 560px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo-Beach-30-Km-Elevation.jpg" target="_blank"&gt;&lt;img class="size-large wp-image-708  " title="Rodeo Beach 30 Km Elevation Gain" src="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo-Beach-30-Km-Elevation-1024x179.jpg" alt="" width="550" height="100" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The elevation profile for the 30km Rodeo Beach race - 3740 feet in gains&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;At this point, my splits looked like this: 0:46 for the first 6.6km, 2:00 total to get back to Tennessee Valley; a little over half way through the course. Another hour and I made it to the final aid station at Conzelman with 5.9km downhill to get to the finish. By now, my hips were sore, my calves were sore and I was starting to feel more negative. However, the negativity disappeared at the aid station where I was able to inject some more sugar into my system; though the soreness remained all the way to the finish.&lt;/p&gt;
&lt;div id="attachment_719" class="wp-caption aligncenter" style="width: 586px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo_30KM_20101218_012.jpeg"&gt;&lt;img class="size-full wp-image-719 " title="Rodeo Beach 30k Finish" src="http://www.chrisstreeter.com/wp-content/uploads/2010/12/Rodeo_30KM_20101218_012.jpeg" alt="" width="576" height="432" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Saul and I at the finish. Thanks for waiting and taking pictures Saul!&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;After running along the valley floor for what seemed like an eternity, I finally reached the finish line feeling decently strong with plenty of non-running energy. I definitely didn&amp;#8217;t have any more kilometers in me, but I also had plenty of strength in my legs to stand. My final time: &lt;strong&gt;3 hours, 41 minutes&lt;/strong&gt; and 3rd in my age group. Really, the race didn&amp;#8217;t feel that long and looking back I wonder where the time did go. I really think I was able to take in the course, get into the moment and forget that I was going for such a long distance. My body was pretty sore the day after, but not more so than past long distance runs or triathlons. Before the 30km run, my previous longest run was somewhere around 22km, just over a half marathon distance. This isn&amp;#8217;t my last 30k, and isn&amp;#8217;t the longest race I will be running. Maybe next time I&amp;#8217;ll get some friends to join me for the entire race though.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/N83PN5ojAJQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/12/704/my-first-30k#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/12/704/my-first-30k/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/12/704/my-first-30k</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Post-Thanksgiving Bishop Climbing Trip]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/FWkWYecO9L0/post-thanksgiving-bishop-climbing-trip" />
		<id>http://www.chrisstreeter.com/?p=699</id>
		<updated>2010-12-02T04:38:03Z</updated>
		<published>2010-12-02T04:38:03Z</published>
		<category scheme="http://www.chrisstreeter.com" term="travel" /><category scheme="http://www.chrisstreeter.com" term="bishop" /><category scheme="http://www.chrisstreeter.com" term="climbing" /><category scheme="http://www.chrisstreeter.com" term="photos" />		<summary type="html"><![CDATA[After Thanksgiving at my parent&#8217;s house, I took off with some friends to Bishop for 3 days of bouldering and some sport climbing. We arrived just after some storms had passed through the area, leaving a light dusting of snow &#8230; <a href="http://www.chrisstreeter.com/archive/2010/12/699/post-thanksgiving-bishop-climbing-trip">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/12/699/post-thanksgiving-bishop-climbing-trip">&lt;p&gt;After Thanksgiving at my parent&amp;#8217;s house, I took off with some friends to Bishop for 3 days of bouldering and some sport climbing. We arrived just after some storms had passed through the area, leaving a light dusting of snow in some places.&lt;/p&gt;
&lt;div class='wp-flickr-gallery-post-box'&gt;&lt;div class='wp-flickr-gallery-post-box' style=''&gt;&lt;div class='wp-caption aligncenter' style='width: 650px'&gt;&lt;a href='/photos/album/bishop/photo/5221244707'&gt;&lt;img class='size-full wp-image-340' title='Eastern Sierras Under Shadow' src='http://farm5.static.flickr.com/4140/5221244707_e0369360c9_z.jpg' alt='' width='640' /&gt;&lt;/a&gt;&lt;p class='wp-caption-text'&gt;Eastern Sierras Under Shadow&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then, right in the middle of the trip, we got a couple inches of snow in the evening, electing to remain at our site camping in it.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-699"&gt;&lt;/span&gt;&lt;div class='wp-flickr-gallery-post-box'&gt;&lt;div class='wp-flickr-gallery-post-box' style=''&gt;&lt;div class='wp-caption aligncenter' style='width: 650px'&gt;&lt;a href='/photos/album/bishop/photo/5221870952'&gt;&lt;img class='size-full wp-image-340' title='Fresh Snow' src='http://farm6.static.flickr.com/5244/5221870952_d6a1103539_z.jpg' alt='' width='640' /&gt;&lt;/a&gt;&lt;p class='wp-caption-text'&gt;Fresh Snow&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;In the end, Bishop was super cold (got down to the mid teens at night) but provided some great climbing in the Buttermilks, Gorge and Happys.  Makes me look forward to another climbing trip soon!&lt;/p&gt;
&lt;div class='wp-flickr-gallery-post-box'&gt;&lt;div class='wp-flickr-gallery-post-box' style=''&gt;&lt;div class='wp-caption aligncenter' style='width: 650px'&gt;&lt;a href='/photos/album/bishop/photo/5221887390'&gt;&lt;img class='size-full wp-image-340' title='Star Trails' src='http://farm5.static.flickr.com/4120/5221887390_29fdfc0701_z.jpg' alt='' width='640' /&gt;&lt;/a&gt;&lt;p class='wp-caption-text'&gt;5 hours of images, taken every 30 seconds at 30 second exposures. Camera settings were ISO 1600, f/6.3, +.33ev, 10mm&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/FWkWYecO9L0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/12/699/post-thanksgiving-bishop-climbing-trip#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/12/699/post-thanksgiving-bishop-climbing-trip/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/12/699/post-thanksgiving-bishop-climbing-trip</feedburner:origLink></entry>
		<entry>
		<author>
			<name>streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Facebook Exporter for Aperture]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/yVrvKFJdvKs/facebook-exporter-for-aperture" />
		<id>http://www.chrisstreeter.com/?p=688</id>
		<updated>2010-11-25T16:47:01Z</updated>
		<published>2010-11-25T16:47:01Z</published>
		<category scheme="http://www.chrisstreeter.com" term="aperture" /><category scheme="http://www.chrisstreeter.com" term="coding" /><category scheme="http://www.chrisstreeter.com" term="facebook" /><category scheme="http://www.chrisstreeter.com" term="photography" /><category scheme="http://www.chrisstreeter.com" term="photos" /><category scheme="http://www.chrisstreeter.com" term="plugin" /><category scheme="http://www.chrisstreeter.com" term="software" />		<summary type="html"><![CDATA[I&#8217;ve wanted to recently upload some of my pictures to Facebook. However, there are several things I really dislike about Aperture&#8217;s built-in Facebook syncing. First, order is not preserved. I want pictures ordered in a predicable way. Often, by date. &#8230; <a href="http://www.chrisstreeter.com/archive/2010/11/688/facebook-exporter-for-aperture">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/11/688/facebook-exporter-for-aperture">&lt;p&gt;I&amp;#8217;ve wanted to recently upload some of my pictures to Facebook. However, there are several things I really dislike about Aperture&amp;#8217;s built-in Facebook syncing.&lt;/p&gt;
&lt;p&gt;First, order is not preserved. I want pictures ordered in a predicable way. Often, by date. I have yet to figure out how Aperture chooses to export, it seems to be quite random and is infuriating.&lt;/p&gt;
&lt;p&gt;Second, tagging friends on Facebook from the built-in Aperture Faces is spotty, at best.  Sometimes it works, and other times I get lots of pictures with people&amp;#8217;s names tagged, but those names are not linked to the proper Facebook friends, despite being tagged with the exact same name. Again infuriating!&lt;/p&gt;
&lt;p&gt;Third, making any change in Aperture (adding a tag, etc), causes the photo to be re-uploaded to Facebook, creating an updated photo album feed story. I don&amp;#8217;t want this behavior. I want to export my photos to Facebook and then choose when it should be updated again.  I&amp;#8217;ll let you guess my emotion.&lt;/p&gt;
&lt;div id="attachment_694" class="wp-caption aligncenter" style="width: 592px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/11/screenshot1.png"&gt;&lt;img class="size-full wp-image-694 " title="Facebook Exporter for Aperture" src="http://www.chrisstreeter.com/wp-content/uploads/2010/11/screenshot1.png" alt="" width="582" height="551" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;After finding no other solutions, I wrote my own Facebook exporter&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;So, what other options are there out there? Well, this guy &lt;a href="http://seanfarley.org/aperture/"&gt;Sean Farley created a plugin&lt;/a&gt;. However, it is broken on my computer. Supposedly, it does work for some people on Aperture 3, but I cannot get it to even show up in the Export menu and I get no Console messages. I&amp;#8217;ve even emailed Sean twice trying to contact him and help figure out why it is broken. No response.&lt;/p&gt;
&lt;p&gt;Finally, I&amp;#8217;ve given up with these options. I&amp;#8217;m not a prolific Facebook photo uploader, but there are times when I want to put up pictures on &lt;a href="www.facebook.com/chrisstreeter"&gt;Facebook&lt;/a&gt; instead of &lt;a href="http://www.flickr.com/photos/chrisstreeter/"&gt;Flickr&lt;/a&gt;. And I couldn&amp;#8217;t do it without exporting the photos from Aperture to my disk, and then using Facebook&amp;#8217;s photo upload.&lt;/p&gt;
&lt;p&gt;So over the past couple weeks, I spent some time creating my own export plugin for Aperture. I don&amp;#8217;t want to completely support this project (beyond having it work for me), and so I decided to &lt;a href="https://github.com/streeter/facebook-aperture-exporter"&gt;release it on github&lt;/a&gt; for the benefit of the community. My goal is that someone else will find the code and project useful. There are currently &lt;a href="https://github.com/streeter/facebook-aperture-exporter/blob/master/README.markdown"&gt;several limitations&lt;/a&gt; (documented on github) and I&amp;#8217;m sure there are bugs, but I&amp;#8217;ve got the project to a stable enough point where I can upload photos to Facebook and am happy with where I&amp;#8217;ve gotten it. Check out the github page for more information on getting the plugin and using it.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/yVrvKFJdvKs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/11/688/facebook-exporter-for-aperture#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/11/688/facebook-exporter-for-aperture/feed/atom" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/11/688/facebook-exporter-for-aperture</feedburner:origLink></entry>
	</feed><!-- Dynamic page generated in 7.465 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-08 21:34:06 --><!-- Compression = gzip -->

