<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>scot hacker&#039;s foobar blog</title>
	<atom:link href="http://birdhouse.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://birdhouse.org/blog</link>
	<description>Like a chicken with a jewel in its beak.</description>
	<lastBuildDate>Tue, 31 Aug 2010 17:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Lake Margaret</title>
		<link>http://birdhouse.org/blog/2010/08/31/lake-margaret/</link>
		<comments>http://birdhouse.org/blog/2010/08/31/lake-margaret/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 07:22:35 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Geo]]></category>
		<category><![CDATA[Hiking]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4090</guid>
		<description><![CDATA[Amazing weekend in the Sierras with Miles and my parents, highlighted by a 5.4 RT hike to Lake Margaret, off Highway 88. Weather report had called for rain, but we lucked out with sunshine that morning. By the time we made it to 7,700 feet elevation, just past Kirkwood Ski Resort, the temp had dropped [...]]]></description>
			<content:encoded><![CDATA[<p>Amazing weekend in the Sierras with Miles and my parents, highlighted by a 5.4 RT hike to <a href="http://www.localhikes.com/Hikes/LakeMargaret_0000.asp">Lake Margaret</a>, off Highway 88. Weather report had called for rain, but we lucked out with sunshine that morning. By the time we made it to 7,700 feet elevation, just past  Kirkwood Ski Resort, the temp had dropped to 40 deg farenheit (in August!)&#8230; and I was in shorts and shirtsleeves (fortunately had a sweatshirt and pants on hand for Miles). </p>
<p>The hike is a non-stop visual barrage of geological awesomeness &#8211; trekking across great slabs of granite pushed clean by a passing glacier some tens of thousands of years ago. Ancient cypress and bristlecone pines windswept into impossible shapes, tarns left behind by glaciers melting in place, trees cut short by beavers, just like in cartoons. The round trip  was about the same length and technical difficulty as the <a href="http://birdhouse.org/blog/2010/07/10/kauai-2010/">Kalalau</a> trail  we did in Kauai, but the mile-high-plus elevation did a number on us &#8211; you get tired a whole lot faster with the reduced oxygen. </p>
<p><object width="640" height="480"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624721800627%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624721800627%2F&#038;set_id=72157624721800627&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624721800627%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624721800627%2F&#038;set_id=72157624721800627&#038;jump_to=" width="640" height="480"></embed></object></p>
<p>For larger versions, see the <a href="http://www.flickr.com/photos/shacker/sets/72157624721800627/with/4943856871/">Flickr set</a>.</p>
<p>Tracked down a couple of geocaches on the trip. As we approached the first, hail started to trickle down on us, and on my bare legs. Had to keep moving to stay warm. The second geocache was hanging in a tree on top of a great granite slap pushed up by forces you shudder to imagine. It was a level 4 terrain cache, and we spent a good bit of time talking about how serious it would be to get injured miles from anywhere, and what it would mean to get helicoptered out. We agreed not to do anything stupid, to move slowly,  not make any hasty decisions. Miles got it. Still, halfway up to <a href="http://www.geocaching.com/seek/cache_details.aspx?guid=c7e2aeeb-3eb1-4668-be3c-a5439f23e91a">Dawg Years</a> we decided to back out and not go any further&#8230; until we spotted the secret back way up to the lonely windswept pine that we were certain held the cache. From there on it was easy going, and I let Miles do the honors. </p>
<p>It only got colder on the way back, as we listened to thunder rippling across the valleys, signaling the start of rain. Incredibly lucky &#8211; we only got sprinkled on, but it started to pour buckets just after we got in the car.</p>
<p>Decided to see what the camera in the iPhone G4 was capable of, and took all of these images with it. Impressed overall, but they&#8217;re still not at the quality of <a href="http://birdhouse.org/blog/2010/06/19/camtest/">images from the PowerShot</a>. From now on, will continue to hike with the PowerShot, but will be stoked to have the iPhone on-hand for spontaneous quickies.  </p>
<p>Route to Lake Margaret (click Replay to view):</p>
<p><iframe src="http://www.trailguru.com/ui/embed/embedTrack.php?thid=652894&#038;width=640&#038;height=480" scrolling="no" height="480" width="640" frameborder="0"><br />
    <a href="http://www.trailguru.com/wiki/index.php/Track:DZRY">Lake Margaret (Hiking) | CA, USA</a><br />
</iframe></p>
<p>Elevation profile:</p>
<p><a href="http://birdhouse.org/blog/wp-content/uploads/2010/08/elevation1.png" rel="lightbox"><img src="http://birdhouse.org/blog/wp-content/uploads/2010/08/elevation1-550x218.png" alt="" title="elevation" width="550" height="218" class="alignnone size-medium wp-image-4106" /></a></p>
<p>Unfortunately, the weekend ended badly, when Mom slipped on gravel heading down to Cat Creek, where we were planning to do some swimming in the melt water. I was 10&#8242; in front of her when I heard the &#8220;oomph,&#8221; and turned around to see her ankle bent at a very wrong angle. Dad and I hoisted her back to the car, and she ended up in the E.R. She&#8217;ll have to have a plate installed, and will be laid up for quite a while. Best luck and love to both of them getting through this &#8211; a horrible thing to witness and it won&#8217;t be pleasant for the next month. Much love.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/08/31/lake-margaret/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cable Rail System</title>
		<link>http://birdhouse.org/blog/2010/08/22/cable-rail-system/</link>
		<comments>http://birdhouse.org/blog/2010/08/22/cable-rail-system/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 23:44:43 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4084</guid>
		<description><![CDATA[The rails on our front porch were original from 1942. Wood had rotted out, and they were flimsy and unsafe. Not to mention ugly. A few weekends ago, finally decided to rip them out and rebuild. Miles and I went after them with crowbar and saws and they were gone in 15 minutes flat. Took [...]]]></description>
			<content:encoded><![CDATA[<p>The rails on our front porch were original from 1942. Wood had rotted out, and they were flimsy and unsafe. Not to mention ugly. A few weekends ago, finally decided to rip them out and rebuild. Miles and I went after them with crowbar and saws and they were gone in 15 minutes flat. Took three weekends to rebuild completely. </p>
<p><object width="700" height="525"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624660127595%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624660127595%2F&#038;set_id=72157624660127595&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624660127595%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624660127595%2F&#038;set_id=72157624660127595&#038;jump_to=" width="700" height="525"></embed></object></p>
<p>Good amount of time wire brushing, sanding, puttying, sanding again, and painting. New 2x4s and vertical 4&#215;4, this time with supporting L-brackets, and the new wood was solid as a rock. More puttying and painting (we were lucky to find paint that matched the old paint exactly). </p>
<p>We had seen porch rails made of stainless steel cable on a house in the neighborhood, and were going to buy <a href="http://www.cablerail.com/">their system</a>, when we realized how expensive their connectors were. Would have cost nearly $900 in parts to do the whole project! Recalibrated and decided to DIY it with stainless cable and annules from Ace Hardware, combined with a pile of turnbuckles I had inherited from the J-School years ago &#8211; they had been used to hang one of <a href="http://www.kenlight.com/">Ken Light</a>&#8216;s  photo installations.</p>
<p>Installation went pretty smoothly once I got into the rhythm of it. Install eyehook, attach one end of turnbuckle, create cable loop with annule on other end of turnbuckle, measure cable length by eyeball and attach eyehook to other end with another annule. Three hours later I was done (except for one eyehook, which hit a rotted portion of the vertical we <em>hadn&#8217;t</em> replaced (because it&#8217;s part of the porch structure).</p>
<p>Not perfect, but close enough for jazz, and spent less than $150 in parts for the whole job.</p>
<p>See <a href="http://www.flickr.com/photos/shacker/sets/72157624660127595/show/">slideshow</a> or <a href="http://www.flickr.com/photos/shacker/sets/72157624660127595/">gallery with captions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/08/22/cable-rail-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batman and Robin</title>
		<link>http://birdhouse.org/blog/2010/08/07/batman-and-robin/</link>
		<comments>http://birdhouse.org/blog/2010/08/07/batman-and-robin/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 06:40:56 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Out there]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4080</guid>
		<description><![CDATA[Dad used to develop film for the TV industry in Hollywood. Around the age I started watching Batman and Robin on TV, he was telling us he was having lunch with them on set. And… damn him… he told us how they climbed up buildings. Just a matter of turning the camera sideways, he said. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://birdhouse.org/blog/wp-content/uploads/2010/08/batmanrobin.jpg" rel="lightbox"><img src="http://birdhouse.org/blog/wp-content/uploads/2010/08/batmanrobin-550x317.jpg" alt="" title="File created with CoreGraphics" width="550" height="317" class="alignnone size-medium wp-image-4081" /></a></p>
<p>Dad used to develop film for the TV industry in Hollywood. Around the age I started watching Batman and Robin on TV, he was telling us he was having lunch with them on set. And… damn him… he told us how they climbed up buildings. Just a matter of turning the camera sideways, he said. Which totally ruined the magic of it for me and my brother. Except that it didn’t.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/08/07/batman-and-robin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batch-deleting Twitter favorites</title>
		<link>http://birdhouse.org/blog/2010/07/26/batch-deleting-twitter-favorites/</link>
		<comments>http://birdhouse.org/blog/2010/07/26/batch-deleting-twitter-favorites/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 08:39:33 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4059</guid>
		<description><![CDATA[I read Twitter primarily on the iPhone, and find tons of great links I want to read in a proper browser later on (I personally find reading most web sites on an iPhone to be more hassle than it&#8217;s worth). Perfect solution: Side-swipe an item in Tweetie and tap the star icon to mark it [...]]]></description>
			<content:encoded><![CDATA[<p>I read Twitter primarily on the iPhone, and find tons of great links I want to read in a proper browser later on (I personally find reading most web sites on an iPhone to be more hassle than it&#8217;s worth). Perfect solution: Side-swipe an item in Tweetie and tap the star icon to mark it as a favorite. Later, visit the Favorites section at twitter.com to follow up.</p>
<p>Unfortunately, over the past couple of years I&#8217;ve favorited <em>way</em> more things than I&#8217;ll ever have time to read. As of now, I&#8217;ve got 1600 favorites waiting to be read. Ain&#8217;t never gonna happen. I declare  Twitter Favorite <a href="http://valleywag.gawker.com/254608/declaring-e+mail-bankruptcy"> bankruptcy!</a> Needed a way to  batch-unfavorite the whole collection, and twitter.com doesn&#8217;t provide a tool for that. </p>
<p>Ended up writing a script on top of the Tweepy library to get the job done:</p>
<p><a href="http://birdhouse.org/software/2010/07/twitter-favorites-bankruptcy/">Twitter Favorites Bankruptcy</a></p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/07/26/batch-deleting-twitter-favorites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bristlebot</title>
		<link>http://birdhouse.org/blog/2010/07/25/bristlebot/</link>
		<comments>http://birdhouse.org/blog/2010/07/25/bristlebot/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 05:22:51 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4066</guid>
		<description><![CDATA[Saw instructions for a giant bristlebot in this morning&#8217;s Instructables newsletter and immediately knew I wanted to build one with Miles. Then realized the smaller versions &#8211; based on a simple toothbrush head &#8211; were even more do-able. Decided on this improved version with antennae to help it resist falls and to bounce off walls [...]]]></description>
			<content:encoded><![CDATA[<p>Saw instructions for a <a href="http://www.instructables.com/id/Giant-BristleBot/">giant bristlebot</a> in this morning&#8217;s Instructables newsletter and immediately knew I wanted to build one with Miles. Then realized the smaller versions &#8211; based on a simple toothbrush head &#8211; were even more do-able. Decided on this <a href="http://www.instructables.com/id/Make-a-better-Bristlebot-1/">improved version</a> with antennae to help it resist falls and to bounce off walls and objects.</p>
<p><a href="http://www.flickr.com/photos/shacker/4829193538/" title="IMG_6068 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4099/4829193538_9bb5a53449_z.jpg" width="640" height="480" alt="IMG_6068" /></a></p>
<p>Parts needed: </p>
<ul>
<li>Toothbrush head &#8211; with flat, not curved bristles</li>
<li>Button cell battery</li>
<li>Small vibrating motor from a pager or cellphone</li>
<li>Double-sided adhesive foam tape</li>
<li>Nails</li>
<li>Possibly a soldering iron</li>
</ul>
<p>Radio Shack, unfortunately, doesn&#8217;t stock vibrating motors. Nor will they give you old/returned cell phones to pull apart to pull the vibrators out of &#8211; they&#8217;re all in a database, destined no doubt for China where they&#8217;ll be pulled apart by underpaid workers in toxic waste dumps. They did, however, give us a couple of flat batteries with a bit of charge left in them. Headed for MetroPCS to see if they&#8217;d give us an old phone to tear apart. Nope, same story. But a guy in line heard us, and offered to sell us his old one for $5. Bingo! </p>
<p><object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=af61f6943f&#038;photo_id=4828584571"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=af61f6943f&#038;photo_id=4828584571" height="480" width="640"></embed></object></p>
<p>We were able to pull the vibrating motor out just in a few minutes. But it had no leads &#8211; I was going to have to solder some onto the two bare contacts. Hacksaw and sandpaper worked perfectly on the toothbrush head. Everything came together pretty easily per the Instructables instructions. We were amazed &#8211; our bristlebot worked WAY better than expected! Totally scoots along. Turns out the key to getting it to go straight and not in circles is to really bend those bristles back, so that they store and release energy in a forward direction.</p>
<p><a href="http://www.flickr.com/photos/shacker/4828584803/" title="Bristlebot by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4135/4828584803_b5e355f122_z.jpg" width="640" height="480" alt="Bristlebot" /></a></p>
<p>Unfortunately, not everything went exactly to plan. I plugged in the soldering iron to warm up on a high-ish shelf while Miles was in another room playing with the cell phone leftovers. I went to the garage for a couple of minutes, then heard him crying loudly &#8212; he had wandered in, seen the electrical cord, gotten curious, and picked it up just to see what it was. Got burned pretty badly on his thumb and forefinger. Long period of tears, ice, ibuprofen, burn cream, and of course, ice cream. And of me feeling like a total bad dad for not warning him about it. I <em>assumed</em> he wouldn&#8217;t be in that room, and <em>assumed</em> he wouldn&#8217;t see if it he did come in.  And got bitten by my assumptions. Felt horrible for the little guy. He&#8217;s doing OK, and we had a gas playing with the bristlebot at the dinner table.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/07/25/bristlebot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Donut Seeds</title>
		<link>http://birdhouse.org/blog/2010/07/18/donut-seeds/</link>
		<comments>http://birdhouse.org/blog/2010/07/18/donut-seeds/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 20:50:11 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Family]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4047</guid>
		<description><![CDATA[After recently coming across a small package of Cheerios labeled &#8220;Donut Seeds,&#8221; decided to see whether Miles would go for it. He was skeptical, but yep &#8211; he planted a few in the back yard! I forgot about it until a few days later when he asked &#8220;Daddy were you joking about the donut seeds?&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>After recently coming across a small package of Cheerios labeled &#8220;Donut Seeds,&#8221; decided to see whether Miles would go for it. He was skeptical, but yep &#8211; he planted a few in the back yard! I forgot about it until a few days later when he asked &#8220;Daddy were you joking about the donut seeds?&#8221; I was dodgy, and told him to keep watering them. Then, today, called him to the back yard, where I had stuck a bamboo shoot in the ground and slid a donut down over a branch. </p>
<p>When he came out, his eyes went wide. Took a full minute for him to reconcile what his senses told him with what he knew was possible and what was not. He figured it out of course, and enjoyed the heck out of his donut. Should have tried this when he was five instead of seven.</p>

<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6051/' title='IMG_6051'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6051-175x175.jpg" class="attachment-thumbnail" alt="IMG_6051" title="IMG_6051" /></a>
<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6053/' title='IMG_6053'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6053-175x175.jpg" class="attachment-thumbnail" alt="IMG_6053" title="IMG_6053" /></a>
<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6054/' title='IMG_6054'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6054-175x175.jpg" class="attachment-thumbnail" alt="IMG_6054" title="IMG_6054" /></a>
<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6057/' title='IMG_6057'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6057-175x175.jpg" class="attachment-thumbnail" alt="IMG_6057" title="IMG_6057" /></a>
<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6064/' title='IMG_6064'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6064-175x175.jpg" class="attachment-thumbnail" alt="IMG_6064" title="IMG_6064" /></a>
<a href='http://birdhouse.org/blog/2010/07/18/donut-seeds/img_6066/' title='IMG_6066'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/07/IMG_6066-175x175.jpg" class="attachment-thumbnail" alt="IMG_6066" title="IMG_6066" /></a>

]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/07/18/donut-seeds/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kauai 2010</title>
		<link>http://birdhouse.org/blog/2010/07/10/kauai-2010/</link>
		<comments>http://birdhouse.org/blog/2010/07/10/kauai-2010/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 20:19:38 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Geo]]></category>
		<category><![CDATA[Hawaii]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Ukulele]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4035</guid>
		<description><![CDATA[It&#8217;s sometimes said that Kauai is the last remaining vestige of &#8220;the old Hawaii&#8221; or &#8220;the real Hawaii&#8221; &#8211; the last bastion of island life as it was before much of it was taken over by hotel chains and tourism. Kauai isn&#8217;t without its share of commercialism, but it&#8217;s true that it&#8217;s almost entirely free [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s  sometimes said that Kauai is  the last remaining vestige of &#8220;the old Hawaii&#8221; or &#8220;the real Hawaii&#8221; &#8211; the last bastion of island life as it was before much of it was taken over by hotel chains and tourism. Kauai isn&#8217;t without its share of commercialism, but it&#8217;s true that it&#8217;s almost entirely free of high-rise hotels, and that natural wonders abound. </p>
<p>At the same time, some of your old-school stereotypes about Hawaii just aren&#8217;t going to come true. Visitors are no longer greeted on the tarmac with a flower lei around the neck, you aren&#8217;t going to hear ukulele concerts or witness spontaneous hula dances on every corner,  and luaus are no longer organic affairs where people sit around on the beach sipping Mai Tais and picking meat off a pit-grilled pig, scooping three-finger poi with bare hands.  </p>
<p>To be fair,  your visions of stereotypical Hawaiian <em>nature</em> are still real, while the stereotypes you may hold of Hawaiian <em>culture</em> are probably not.</p>
<p><iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?source=s_q&amp;hl=en&amp;geocode=&amp;ie=UTF8&amp;hq=&amp;hnear=Kauai,+Kalaheo,+Kauai,+Hawaii+96741&amp;t=h&amp;msa=0&amp;msid=109622260058035456128.00048b03d0ed4c782cc67&amp;ll=22.05255,-159.536591&amp;spn=0.610952,0.878906&amp;z=10&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?source=embed&amp;hl=en&amp;geocode=&amp;ie=UTF8&amp;hq=&amp;hnear=Kauai,+Kalaheo,+Kauai,+Hawaii+96741&amp;t=h&amp;msa=0&amp;msid=109622260058035456128.00048b03d0ed4c782cc67&amp;ll=22.05255,-159.536591&amp;spn=0.610952,0.878906&amp;z=10" style="color:#0000FF;text-align:left">Kauai</a> in a larger map</small><br />
<em>The two blue marker points show where we stayed on our two-week Kauai adventure.</em></p>
<p>Kauai is encircled &#8211; for the most part &#8211; by a single road running through a dozen or so major towns. You can drive around the entire island in a couple of hours (note that &#8220;driving through&#8221; does not equal &#8220;exploring,&#8221; and that driving the outer rim will only get you to the beach towns, not to the juicy jungles that comprise Kauai&#8217;s interior). I say &#8220;for the most part&#8221; because the insane terrain of the Napali coast has proven impenetrable to road builders &#8211; it&#8217;s simply not possible to build a drivable road through the mountains of the northwest coast.</p>
<p><a href="http://www.flickr.com/photos/shacker/4778190957/" title="Coconuts in Water by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4114/4778190957_904db32f78_z.jpg" width="640" height="480" alt="Coconuts in Water"></a></p>
<p>You won&#8217;t find the &#8220;real&#8221; Kauai by hanging around in the downtown areas. But if you make an effort to get even a little off the beaten path, you <em>will</em> find yourself surrounded by  nature at its most powerful. Kauai is  a volcanic wonderland of dense jungle, incredible ocean life, succulent wild fruit, and loose chickens. </p>
<p>Throw yourself into the environment, and you won&#8217;t be able to avoid swimming in impossibly blue/green waters, inhaling the  cleanest air your nostrils have ever encountered (remember you&#8217;re surrounded on all sides by thousands of miles of wild Pacific). You <em>will</em> find that the  Aloha spirit is omnipresent and real. You <em>will</em> find yourself slowing down, being reminded why you&#8217;re walking this earth, and what  nature at its most raw can do for your soul. </p>
<p>In June/July 2010, we spent two weeks in Kauai, staying in two different houses with two different families, in two very different environments.  In the end, I shot more than a thousand photos. Thought I&#8217;d turn all my vacation notes and photos into a quick blog entry on return; the process ended up taking a couple of days  &#8212; which was OK since I needed that time just to transition back to &#8220;real&#8221; life and get the hang of cold weather and the absence of snorkeling grounds outside my back door. Editing the photos down to a &#8220;mere&#8221; 470 and filling in the details from my notes turned out to be the perfect obsessive/compulsive transitional gig.</p>
<div style="background-color:#DDD;border: 1px solid #999; font-size:1.2em; font-weight:bold;padding:7px;margin:10px;line-height:150%;">
Photos: <a href="http://www.flickr.com/photos/shacker/sets/72157624335245255/">Here&#8217;s</a> the Flickr standard photo set view, but much better is the <a href="http://www.flickr.com/photos/shacker/4778105159/in/set-72157624335245255/lightbox/">Flickr lightbox view</a>. I&#8217;ve also embedded a slideshow version below, but for best results  dim the lights, put some Hawaiian music on the hi-fi, and put your browser in full-screen mode.
</div>
<p><object width="640" height="480"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624335245255%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624335245255%2F&#038;set_id=72157624335245255&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624335245255%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624335245255%2F&#038;set_id=72157624335245255&#038;jump_to=" width="640" height="480"></embed></object></p>
<p><strong>Note:</strong> I lost my camera on the very last day  &#8212; turned out I left it under the seat in the rental car &#8212;  so the set isn&#8217;t quite complete. Fortunately I had been backing up the camera&#8217;s contents to iPhoto throughout the trip, so had an almost complete set. Super-lucky news is that Budget Rent-a-Car in Lihue found the camera and is returning it to me; I&#8217;ll add the final images when it arrives. Thanks Budget!<br />
<span id="more-4035"></span></p>
<h3>June 21: Hanalei</h3>
<p><em>Puff the Magic Dragon / lived by the sea<br />
and frolicked in the autumn mist<br />
in a land called Hanalei</em></p>
<p><a href="http://www.flickr.com/photos/shacker/4778105671/" title="IMG_4870 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4078/4778105671_a01e69f5e1_z.jpg" width="640" height="480" alt="IMG_4870"></a><br />
<em>Squint a bit and you&#8217;ll see the head of Puff the Magic Dragon in the photo above &#8211; the patch of red dirt is his right eyeball.</em></p>
<p>Hard to believe we&#8217;re actually here &#8211; nothing seems real, and yet it&#8217;s all so&#8230; real. The air is so clean, so deep. Vegetation absolutely exploding from every square inch of this volcanically twisted land.  Spent the first week of our trip on the north shore of Kauai, on the brink of  Hanalei Bay,  home to the Puff the Magic Dragon.  Beach just 200 yards  from the house, down a narrow gecko-lined alley.  Hanalei Bay is a well-protected, wide-mouthed sandy bay. The beach is never crowded, and there are few boats. An occasional stand-up paddle surfer, a team of outriggers drifting by. The water is clear and warm &#8211; exactly the Hawaii experience we imagined.</p>
<p>The lot of us dove into the bay almost  immediately, warm and enveloping, the soup of life, where it all came from, kids ecstatic to be buffeted by small waves, sand ideal. Town of Hanalei just a few blocks away, perfectly convenient access to snorkel rentals, <a href="http://www.bestplaceshawaii.com/tips/big_kahuna/shave_ice.html">shave ice</a>, coffee and cheeseburgers. Stocked up on fresh fruit for morning smoothies, which quickly became a staple. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778126105/" title="IMG_5108 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4134/4778126105_6e9bb3b613_z.jpg" width="640" height="480" alt="IMG_5108"></a></p>
<p>Committed myself to swimming or diving daily&#8230; a promise that turned out to be effortless to keep. More often than not, I  got wet at least once a day, and  often two or three times. Some days found myself snorkeling before coffee &#8211; nothing clears the mind like a cool ocean dip, sharing the dawn with the critters of the reef. If night fell and I wanted more, sometimes headed out in the moonlight, skinny dipping just because I could, bobbing with the lights on the masts of sailboats moored in the harbor, feeling for the reef with bare toes, breathing in the salt air like I&#8217;d never get enough.</p>
<h3>June 22: Uke Fest at Larry&#8217;s</h3>
<p>Had been looking forward for weeks to sitting up late on muggy Hawaiian porches strumming a happy uke, but intentionally left my <a href="http://www.fleamarketmusic.com/store/scripts/prodView.asp?idproduct=48">Fluke</a> at home. Not that I don&#8217;t love my plastic-body ukulele, but had decided it was time to finally get serious and add a real Hawaiian ukulele to the collection.</p>
<p>Plan was to visit  the legendary <a href="http://www.kamoaukes.com/">Larry&#8217;s Music</a> in Kapa&#8217;a and pick up a koa wood <a href="http://www.kamakahawaii.com/">Kamaka</a> uke. Got more than we bargained for when proprietor Sam (who was hand-picked for the gig when Larry passed on)  started dropping the science of frequency, intonation and resonance on us the minute we arrived. When I mentioned that the cigar box tenor I had recently built <a href="http://www.papasboxes.com/">from a kit</a> didn&#8217;t actually sound all that good, Sam was quick with &#8220;Sound is round. Round is sound. What did you expect from a cardboard box?&#8221; (I still love the cigar box for it home-made funkiness though). </p>
<p>Sam&#8217;s a great player, and knows more about extracting &#8220;the perfect sound&#8221; from the ukulele than anyone I&#8217;ve met. Super friendly guy too.  Here he is playing the exact same Kamaka pineapple soprano I left the store with (just wish I could play like him):</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/ysnE7yWyhCI&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ysnE7yWyhCI&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>Want to learn to play like that? Buy a uke from Larry&#8217;s and Sam invites you back for practically unlimited free lessons&#8230; an offer I took him up on the last day of our  stay. He was able to tell immediately that I play the uke like someone who&#8217;s crossed over from guitar. I wanted pointers on breaking out of that pattern, and he had a bunch of great advice (for starters, keep your strumming hand <em>open</em>, and <em>paint</em> the strings, don&#8217;t attack them like you might on guitar).</p>
<p>I&#8217;m in love with the Kamaka, and fulfilled that part of the dream &#8211; played daily wherever I happened to land, on the back porch with the roosters, sunrise with a mango smoothie at my side, or after dinner with a cold one. Now just need to keep up the habit back home.</p>
<p>By the way, the word &#8220;ukulele&#8221; is pronounced &#8220;ooh-ke-leh-leh&#8221; in Hawaiian. Not sure how that pronunciation will play on the mainland, but love the sound of it.</p>
<h3>June 23: Kalalau Trail</h3>
<p>The Napali Coast is the mother of all mind-blowing geological features &#8212; 11 miles of impossibly craggy mountains dropping 1,000 feet into the sea, so huge and beautiful it can never be captured by photographs that do it anything like justice, must be experienced to be believed. Kicked off our Kauai experience with a two-family hike along the first 2.5 miles of the coast along the <a href="http://www.kauaiexplorer.com/hiking_kauai/kalalau_hike.php">Kalalau Trail</a>.</p>
<p>Parked at Ke&#8217;e beach and set off on a hike we&#8217;ll never forget, getting vertical straight away. 2.5 miles may be nothing on your favorite mainland mountain trail, but it&#8217;s <em>different</em> here. The terrain is a jumble of slippery mud, lava rock shelves and stepping stones, streams to cross, roots to grasp onto with bare knuckles. With every step, you&#8217;re suspended mid-way between an unforgiving sea below and equally unforgiving  mountains above, rising a thousand feet, rippling with plant life and the surreality of millions years of creative erosion. Plants you&#8217;ve never dreamed of sprout from every crevice, strangely angled roots jutting out and under at oddly symmetrical 45-degree angles, bearing fruit and flowers right out of <em>Avatar</em>. The trail is unforgiving of mistakes, forcing you to wake up and <em>pay attention</em> every step of the way. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778112409/" title="IMG_4982 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4119/4778112409_d32d818953_z.jpg" width="640" height="480" alt="IMG_4982"></a></p>
<p>Maybe that&#8217;s why the kids did so well (the youngest in our group was only four) &#8211; there&#8217;s no opportunity for boredom or whining on the Kalalau &#8211; your feet are busy, your hands are busy, your eyes and brain are busy. And yet, it&#8217;s completely relaxing. You feel like you&#8217;re being washed clean of your workaday life, thrown back into the <em>Pleistocene</em>, being reminded with every step of your most basic organic, beautiful, funky self. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778751116/" title="Warning by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4143/4778751116_068aa46de8.jpg" width="375" height="500" alt="Warning" class="alignleft" ></a> 2.5 miles in, we found ourselves at a secluded beach with a small inlet safe to swim in. Good thing too &#8211; multiple signs warned us about how many swimmers had been dragged out to sea here, lost their lives to arrogance. My suspicion is that most people who die in Hawaiian waters come from places far from the ocean &#8211; people not raised understanding its power even in coastal areas less powerful than this. Also, I&#8217;m quite sure that most deaths occur during the big swell months, not in the summer when waves are far less formidable (we never saw the kind of surf that reaches up and grabs irreverent souls from the rocks). Enjoyed a modest picnic lunch and headed back on the return trip. </p>
<p>The most hard-core hikers won&#8217;t stop at this first beach though &#8211; they continue along the entire 11 miles of impossibly beautiful and challenging coastline to the end, then camp for a day or two before attempting the return trip. Someday I hope to return (perhaps when my boy is all grown up and stronger than me) and do the whole trail. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778122879/" title="IMG_5071 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4136/4778122879_166c4d7456_z.jpg" width="640" height="480" alt="IMG_5071"></a><br />
<em>Each of us was fried but joyous at the end. So proud of the kids for making the  journey.</em></p>
<h3>June 24: Soy Ginger Ono</h3>
<p>Mellow morning snorkeling nearby Anini Beach. Water not particularly clear, sea life not particularly abundant, but the kids got their first tastes of underwater life &#8211; seeds of inspiration to start a lifetime love of the ocean, the source of all life.</p>
<p>Later, off  to see the lighthouse at Kilauea &#8211; an inspiring chunk of coastal history that stood for decades as the United States&#8217; western-most beacon, visible 20 miles out to sea burning only a small amount oil, magnified and refracted infinitely through a maze of French-built Fresnel lenses. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778760644/" title="Lighthouse at Kiluea by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4119/4778760644_84c0a2483c_z.jpg" width="640" height="480" alt="Lighthouse at Kiluea"></a></p>
<p>Especially fascinated with the bearing mechanism that allowed  8 tons of glass to spin freely all those years. Imagine a bowl half full of water, with another bowl floating in it. Now spin the top bowl. OK, replace the water with 10 gallons of pure mercury, which has a far lower drag coefficient than water, and you get the picture &#8211; a nearly frictionless bearing that allowed the lens to rotate with the lightest touch. One pull of a  cuckoo-clock pendulum weight allowed the lens to spin for hours. Downside: Mercury vapors are highly toxic, so care was taken not to allow the mechanism to become heated &#8211; a challenge when flame in an enclosed space is the whole point.</p>
<p>Great views of  red-footed boobie habitat from the light house peninsula, and the thousands of reeling sea birds that live nearby. </p>
<p>Found first Hawaiian <a href="http://www.geocaching.com/">geocache</a> in the vicinity, and picked up a travel bug that wants to visit lighthouses around the world, which I&#8217;ll bring back to California and set off toward Piedras Blancas.</p>
<p>For dinner grilled tropical Ono with soy ginger, shrimp with lemon and dill, pineapple rice, grilled zucchini and green onions. I love to grill, but am pretty much a propane feller &#8212; amazingly, at age 45, this was my first experience working with a charcoal grill.</p>
<h3>June 25:  Slack Key, Pushups</h3>
<p>Up at 5:30, 75 pushups on the beach before 6:00 a.m. Skinny dipping in Hanalei Bay. Up with the roosters and misty morning fog swirling around lava peaks, ribbon waterfalls cascading hundreds of feet  down straight cliffs. Sunrise golden orange  against bottomless blue. Temperature a constant 75-80 degrees night and day. It rains pretty much every day here, but you&#8217;re never rained out. Want the weather to change in Kauai? Wait five minutes and it will. When you do get dumped on, it&#8217;s that warm tropical rain that dries in minutes, not the cold soaking kind that ruins your day. </p>
<p>To Tunnels Beach by 9:30 with families to turn kids onto &#8220;real&#8221; snorkeling. Millions of years ago, lava poured down the towering spires and cliffs above, straight into the sea, creating a complex of bubbles and tunnels and twisty passages (&#8220;all alike&#8221;) beneath the sea. The beach drops off quickly here &#8211; you&#8217;re bathing deep in moments. One sea turtle, a smattering of tropical fish &#8212; but the reef is solidified lava flow, not coral outcroppings. </p>
<p>Combined with the large number of tourista snorkelers, fish don&#8217;t seem overly attracted to Tunnels. Still, it was amazing to just dive deep, lingering as long as I could at the bottom of 30&#8242; chasms, snaking slowly toward the surface through stone bubbles frozen in time. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778763782/" title="Warning by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4119/4778763782_f706def684_z.jpg" width="640" height="480" alt="Warning"></a> </p>
<p>Four days after quitting smoking (last one was at Phoneix airport), lung capacity already returning &#8211; amazed to find myself quickly ramping up through 15 seconds, then 30, 45 (didn&#8217;t get quite up to a minute but could see it happening with a couple weeks&#8217; practice). Diving was something I did almost daily in my tweens and early twenties, ecstatic to be in the water again, like being reconnected with a long-lost version of myself. </p>
<p>Afternoon performance by slack-key guitar master <a href="http://www.mcmasterslackkey.com/">Doug McMasters</a>, who was playing an afternoon concert at a local community center. The slack-key style is quickly dying, as the younger generation of guitarists are more interested in rock or dance-hall mashups with Hawaiian style than they are in learning the old styles, which are fare more complex and take a lifetime to master. </p>
<p>Slack-key tunings were specific to various Hawaiian families, and kept secret for decades. Not in the family? You&#8217;d never learn the tuning. Today there are more then 75 of them documented, which makes it extraordinarily difficult to switch between them at a moment&#8217;s notice (slack-key masters are also masters of music theory almost by definition). McMasters blew us away not just with his clarity and precision, but also with has Aloha spirit &#8211; he just bubbled with love. Honored to have gotten to hear and see him.</p>
<h3>June 26: Wailua Falls, Geocaching</h3>
<p>Up at the crack of dawn for 30 minute trip south to Kapa&#8217;a, where we hooked up with a raft of kayaks and began a 45-minute paddle down the Wailua River and into the interior. Stopped at a landing pad and hiked another 30 minutes into the forest, through towering kudzu, swinging vines, meandering streams, purple and orange flowers to the &#8220;Secret Falls,&#8221; so-called because they&#8217;re only reachable by kayak and hike. Played with kids beneath water pounding 140 feet from the top,  eating  a well-earned snack of dried guava and mango, chips and cookies, fresh pineapple. </p>
<p>Back by noon in the midst of a huge rainstorm (the usual Kauai kind &#8211; warm and transient, always welcome). Highly recommend this 5-hour trip for anyone exploring Kauai for the first time  &#8212; word is that people who rent kayaks rather than take the tour rarely find the Secret Falls on their own. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778771178/" title="Caution by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4119/4778771178_4534c3442c_z.jpg" width="640" height="480" alt="Caution"></a></p>
<p>Hawaiian law says no individual or property owner can hog a beach for themselves &#8212; all beaches are public by definition. But the question of <em>access</em> to those beaches is a bit more murky. For example, start driving around in the artificial (&#8220;planned&#8221;) community of Princeville and you&#8217;ll find  signs all over the place reading &#8220;Parking for  residents only.&#8221; But get close enough to the coastline and you&#8217;ll eventually find a much smaller, more subtle sign reading &#8220;Public beach access &#8211;>&#8221; &#8230; in other words, you&#8217;re welcome to use our beaches, but you can&#8217;t park within a mile of them. Then, once you start down the trail, you&#8217;ll find signs saying things like &#8220;Warning: Treacherous trail ahead. Slippery, steep, falling rocks, unstable soil. You&#8217;ll probably die a gruesome death if you choose to continue. Proceed at your own risk. This trail not maintained by the Westin St. Francis condominium consortium.&#8221; Ignore the CYA signs written for trail wussies and continue. If you&#8217;ve already done the Kalalau Trail, these trails will seem like  sidewalks in comparison. </p>
<p>The beaches and views you&#8217;ll gain access to are unbelievable &#8211; some of the most gorgeous on the island (of course the big money and &#8220;planned communities&#8221; naturally find themselves where the best beaches and views are&#8230; that&#8217;s how things work everywhere, right?). Spent three hours geocaching these trails and beaches and found each cove more glorious than the last. The triangular roots of the Hana tree make a perfect protected hiding place for an ammo can. </p>
<p>Peak of the day came toward sunset, when I found myself on the slippery descent to &#8220;Queen&#8217;s Bath&#8221; &#8211; a deep natural tidepool in a very wide lava shelf beneath a Princeville community. Unlike the similar configuration at Pools of Mokolea, Queen&#8217;s Bath is much larger and deeper &#8211; very swimmable. </p>
<p>It also doesn&#8217;t surge with the same ferocity, since it&#8217;s fed by water occasionally overlapping the  sides of the pool, rather than being forced in through lava tubes. There were only a few people here when I arrived, and four of us spent time treading water in the sunset, talking didgeridoo construction and the power of music to clear psychic obstructions. Definitely one of the most spiritually satisfying moments of the trip (and  there were many to choose from). </p>
<p><a href="http://www.flickr.com/photos/shacker/4778137549/" title="Queen's Bath by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4078/4778137549_8a4aaf5b96_z.jpg" width="640" height="480" alt="Queen's Bath"></a></p>
<p>Takeaway: Even though all the places I visited tonight are on the map, and while most of them are listed in all the guidebooks, it was geocaching that got me to them. Over the four years I&#8217;ve been caching, I&#8217;ve found this true again and again &#8211; there is no better way to discover an area&#8217;s highlights more quickly, or to get up and close and personal with the wildest terrain a place has to offer. I&#8217;ve come to think of geocaching as a sort of hands-on guidebook for adventure tourists &#8211; a great way to discover the places the locals love the most. Between this and one other geocaching adventure day on the trip, easily half of my most amazing experiences were had thanks to geocaching. </p>
<h3>June 27: Tunnels Beach, Sea Turtle</h3>
<p>Returned to Tunnels Beach this morning for another snorkeling dip, not expecting anything more than we got the other day (lots of lava, limited coral, limited fish, limited colors). But one big difference today &#8211; finally spotted that elusive sea turtle in about 10&#8242; of water. Dived gently down to it, reached out slowly, and was able to pet its back, then stroke its fins. The turtle&#8217;s big eye gazed directly into mine, then he dived down to around 40&#8242;. I came up for a breath, then followed him down again. We continued on like this for about 20 minutes, slowly circling the snorkeling area. Me diving and returning to join him repeatedly, him holding his breath for what seemed like forever.</p>
<p>The amazing thing about the breath-holding abilities of the Hawksbill is that he doesn&#8217;t hover around huffing and puffing when he returns to the surface. One quick exhale, one quick inhale, and he&#8217;s back down for another 10 minutes. </p>
<p><a href="http://www.flickr.com/photos/edfladung/2264475322/" title="hawk's bill turtle, akumal by Ed Fladung, on Flickr"><img src="http://farm3.static.flickr.com/2122/2264475322_c0b9d5cf28_z.jpg" width="640" height="480" alt="hawk's bill turtle, akumal"></a><br />
<em>Photo by Ed Fladung (not me!)</em></p>
<p>One of the turtle&#8217;s rear flippers had been damaged, and was truncated just at the edge of his shell. This didn&#8217;t seem to slow him down a bit. Impressed by the lazy ways of the turtle &#8211; he just mosies around (at a turtle&#8217;s swim pace), nibbling tidbits off the reef edges, meandering and discovering. He never seemed bothered by my presence &#8212; possibly accustomed to all the snorkelers in the area, or maybe just an un-botherable kind of guy. Anyway, communing with the Honu was one of the peak experiences of our time in Kauai, and easily counts as a <a href="http://bucketlist.org/542/">bucketlist item</a>.</p>
<h3>June 28: Broken Glass, Moloa&#8217;a Bay</h3>
<p>Over the past few days, a steadily worsening sore throat has been settling in. Today awoke in the middle of the night to the most clenching pain in the back of the throat every time I swallowed &#8211; as though I were trying to chomp down on  broken glass. Probably some combination of inner ear equalization problems I had on the plane flight in, followed by lots  of snorkeling (which always involves a small amount of salt water gurgling around in the back of the throat), quitting smoking, changing sleep and excercise patterns, etc. All I knew was that I had to get to the hospital. Found our way to the emergency room in Kapa&#8217;a and had the most fantastic health care experience in memory &#8211; virtually no waiting, everyone super-friendly, my health plan accepted without question. Walked out with a prescription for antibiotics that cleared everything up over the course of the next few days. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778827410/" title="IMG_5723 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4097/4778827410_3bb92754e6_z.jpg" width="640" height="480" alt="IMG_5723"></a></p>
<p>Meanwhile, our first week had ended already, and we prepared to say goodbye to close friends who had stayed with us in Hanalei. Made our way down the coast to Moloa&#8217;a Bay, between Kiluea and Kapa&#8217;a. Our house for the second week was very different from the first. Far from shops and people, we traveled down several roads winding down through the jungle until we found a hidden dirt road leading through goat pastures. At the bottom of a flood plain, found our new house high up on stilts. In the back yard, a thatched massage pagoda and a pair of kayaks sitting in a freshwater canal &#8211; our trip to the beach from here on out would consist of a 1/4 mile paddle through arching palms and jumping frogs to the shores of Moloa&#8217;a Bay.  We moved completely out of cell phone range for the second week (but finally had wi-fi access, which made a lot of the planning much easier).</p>
<p>One morning, strapped an HD camera to the bow of the canoe and recorded my daily &#8220;commute&#8221; to the nearby snorkeling grounds of Moloa&#8217;a Bay along the canal. Unfortunately, the auto-focus on the camera hugged the bow of the kayak, so the canal&#8217;s foliage is a bit out of focus, but you get the idea &#8211; bliss.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/REpnOxOQKcQ&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/REpnOxOQKcQ&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>In fact, we were so remotely tucked away that there was simply no question of bad guys ever finding us.  For the next week, we never closed a window or door, even when out for the entire day. We woke daily to humid breezes and the crowing of ever-present roosters. Kind of funny &#8211; thought I&#8217;d do lots of sleeping in on vacation, but did the opposite &#8212; I was  in bed by 11 and up between 5:30 and 6:30 every day of vacation. And never felt more rested.</p>
<h3>June 29: Gilligan&#8217;s Island, Ho&#8217;opi Falls</h3>
<p><img src="http://www.smh.com.au/ffximage/2005/09/07/gilligan_wideweb__430x313.jpg" width="250" class="alignleft"> As if Moloa&#8217;a Bay weren&#8217;t incredible enough all on its own, it also happens to be the place where the pilot and first episode of  <a href="http://www.gilligansisle.com/tour.html">Gilligan&#8217;s Island</a> was filmed. Spent a LOT of time in its waters this week, and thought frequently of the professor and Mary Anne building a coconut radio on its shores, Gilligan doing prat falls into the canal. </p>
<p>The reefs of Kauai are all volcanic &#8211; you can almost see the lava cascading down from the top of nearby mountains and into the water, or bubbling up from below and freezing nearly instantly into abstract shapes that would be retained for the next 5-10 million years. The lava foundation gives rise to an infinite variety of shapes &#8211; tunnels  and shelves and caves and blobs and  squiggly areas to dive through &#8211; an underwater playground very different from the rock and coral reefs I&#8217;ve dived on in other parts of the world. </p>
<p>Don&#8217;t mean to say that free-diving Kauai is  the most beautiful &#8211; I never found the water clarity all that stunning, and I  didn&#8217;t find the variety of sea life as incredible as on the Great Barrier Reef or in Jamaica. But the terrain was unparalleled fun, and  I had to prety much force myself out of the water each day &#8211; just couldn&#8217;t get enough. </p>
<p>Later in the day, made our way to <a href="http://www.waterfallswest.com/waterfall.php?id=174">Ho&#8217;opi Falls</a>, a moderately sized fall in the midst of dense jungle. Nice hike, nice place to savor the richness of Kauai&#8217;s rain forests. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778142443/" title="IMG_5311 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4116/4778142443_78ca1cc7ae_z.jpg" width="640" height="480" alt="IMG_5311"></a></p>
<p>Once upon a time, young warriors would demonstrate their bravery by jumping from the top of the falls into the waters below. Fortunately this practice has stopped &#8211; it&#8217;s hard to imagine it happening without frequent serious injuries (I always shudder thinking about serious injuries before modern medicine &#8211; what it would be like to crack a skull and simply have no hospital to go to). </p>
<h3>June 30: Waimea Canyon</h3>
<p>Cutting an immense vertical swath up and down the east side of Kauai is Waimea Canyon, which Mark Twain called &#8220;The Grand Canyon of Kauai.&#8221; Like many of the world&#8217;s most expansive sights, the experience of being overwhelmed by an astonishing view much larger than any single person&#8217;s field of vision is what it&#8217;s all about, and  no photograph can do it justice (but see Wikipedia for <a href="http://en.wikipedia.org/wiki/Waimea_Canyon_State_Park">high-res horizontal panorama</a>). You just have to be there. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778789312/" title="IMG_5387 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4074/4778789312_a15d76b407_z.jpg" width="640" height="480" alt="IMG_5387"></a></p>
<p>In a way, this was the third side of the Napali Coast coin &#8211; we had seen it close up on our second day (on the Kalalau Trail), then from the water on our Zodiac tour day, then from above at Waimea Canyon. The only perspective missing was the helicopter view, which is allegedly incredible (and is the only way to see certain portions of the island), but way too expensive, but no matter &#8211; between these three views, we felt like we were able to take in the Napali Coast in almost every way possible. </p>
<p>As much as Waimea is a must-visit, getting there involves a lot of time in the car &#8211; first driving 3/4 of the way around the island (if you&#8217;re staying on the north shore), then driving its winding length. That&#8217;s not a horrible thing, but we really didn&#8217;t want to waste our island time couped up in a car. And after you hit the museum 3/4 of the way up the hill, the road goes to hell &#8211; I can pretty much guarantee that this road has more (and deeper) potholes than anything you&#8217;ve seen on the mainland in a long time. </p>
<p>Stopped for a nice hike halfway up, but were surprised at how un-Kauai-like the terrain and flora was &#8211; it really felt like a trail in the California Bay Area hills, or even Minnesota. Nice, but not the Hawaiian experience we were looking for. </p>
<p>Still, the ultimate pay-off is the view from the top, looking down onto Napali. It&#8217;s one of those views you just want to drink in with every molecule of eyeball you&#8217;ve got. </p>
<h3>July 1: A Date With Fate</h3>
<p>Woke before dawn and kayaked the quarter mile to Moloa&#8217;a beach to snorkel the reef. Spent 15 minutes trying to coax a reluctant rock lobster out of its hidey hole under a lava shelf, but it wouldn&#8217;t budge. Wasn&#8217;t sure about the legal &#8211; when is it lobster season in Hawaii? What&#8217;s the minimum length? Dad says you can &#8220;encourage&#8221; them out of their holes with a spear pretty easily, but it&#8217;s against the law of course. He also noted that if you pull straight out on their antennae they won&#8217;t snap off, but if you pull UP or to the side, they break off. Take care!</p>
<p>Struck out &#8211;  paradise found <em>and</em> lost before breakfast. Kind of tough to feel blue in Hawaii though &#8211; islanders say they get depressed when really bad things happen&#8230; like if their  mango gets a bruise when it falls from the tree in the backyard, or if they only see one rainbow in a whole day. </p>
<p>Off to see the  water breathing dragon spout at Pools of Mokolea near Kiluaea Bay  &#8212; walk gingerly across lava shelf where an old sugar cane processing plant used to be, stepping over  rusty old parts from  factory equipment. The hole in the shelf is 50 feet from the  sea, connected by a long lava tube. Water and air pressure build up in the tube as the breakers roll in, and the upturned hole surges, breathes, spits, and coughs water at whoever is lucky enough to be nearby. Sat with legs dangling into the hole, letting the mist of the dragon&#8217;s breath flow over our legs. </p>
<p><object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=feecc53a4f&#038;photo_id=4777943521"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=feecc53a4f&#038;photo_id=4777943521" height="480" width="640"></embed></object><br />
<em>I&#8217;m sure the Pools of Mokolea are a lot more intense when the surf is up &#8211; this is what it looks like in the summer, when the sea is almost glassy smooth (no swells over 2-3&#8242;).</em></p>
<p>Later, found the ultimate smoothie at  Moloa&#8217;a Fruit Stand, called  &#8220;Date with Fate,&#8221; consisting of mango, papaya, banana, coconut, dates, macadamia nuts, and Rice Dream. Will strive to reproduce this wonder of nutrition and flavor back on the mainland &#8212; will almost certainly not succeed.</p>
<p>To Kelia Beach for bodysurfing with Miles. Up to now, we&#8217;ve done almost all of our swimming in protected coves, which are great but lack waves. Since this is summer, even the unprotected beaches are pretty glassy, but two/three-footers were a nice improvement over the ripples we&#8217;ve been playing in. Miles took to bodysurfing like a monk seal to water. </p>
<h3>July 2: Napali by Zodiac, Evening Luaua</h3>
<p>Set off with <a href="http://www.kauainorthshorecharters.com/">Napali Shore Charters</a> for the coast at 7 am with 13 others in a Willard 27 ft rigid fiberglass hull inflatable &#8211; the same boat used by the U.S. Navy (basically a big Zodiac). Had heard that this trip would become one of the highlights of our vacation &#8211; maybe of our lives &#8211;  but was unprepared for just how incredible it would be. </p>
<p>We had hiked the first 2.5 miles of the Kalalau trail when we first arrived last week, so had a sense of how astonishing these mountains were from &#8220;within,&#8221; but seeing them from the sea was something completely different. There&#8217;s so much you just can&#8217;t see from land &#8212;  sea caves, immense blown-out craters, small coves and beaches, and geological formations visible only from the vantage point of the water. And what had taken us half a day to hike on foot we accomplished in minutes from the Zodiac.</p>
<p><a href="http://www.flickr.com/photos/shacker/4778178073/" title="IMG_5623 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4081/4778178073_2a0b73bc4d_z.jpg" width="640" height="480" alt="IMG_5623"></a></p>
<p>Like most great vistas, many of the formations we encountered can&#8217;t be done justice by any photograph, or by any number of words &#8211; they&#8217;re too big, too expansive for any lens or paragraph to describe. One formation that literally took our breath away was an 800-foot-high crater blown out of the side of the cliff by  a former volcano. Half of the volcano had long-since fallen away, leaving only the concave contours of its interior. The remaining semi-conical wall provided a cross-sectional view of lava and rock striations, millennia of bird-shit, and punctuated by waterfalls spilling from various points in the cliff face. You know that tiny feeling you get sometimes when looking up at the stars? This cliff face gave us the same sensation of being an insignificant speck in the face of time and space. Captain Gary calls it the &#8220;Oh wow&#8221; cliff.</p>
<p>The snorkeling grounds were located pretty much at the end of the Napali coast as we headed west. The underwater terrain was somewhat familiar by now &#8211; lava that had spilled into the sea millions of years ago and cooled instantly, freezing into its bizarre shapes and twists and shelves and caves&#8230; but this area was deeper than similar reefs found at Anini or Tunnels Beach, not to mention less populated. Had less than 45 minutes to dive, but in that time encountered not one but three different sea turtles &#8211; one of them more than 3 feet long. </p>
<p>Wanted to see her belly and discovered something interesting &#8211; a sea turtle won&#8217;t let you! With six feet of water beneath her, tried swimming below and she began to arch and flip, keeping her hard shell back toward me at all times. We did a little dance in the water together, circling and flipping over one another as I tried to get a glance beneath. Turns out this is a defensive move &#8211; sharks will attack turtles from below, where they have less protection. So when a turtle spots a large moving mass like a shark or a human, she&#8217;ll twist to keep her soft belly facing the opposite direction. Kind of fun.</p>
<p>In 30&#8242; feet of water, under a large lava overhang, found a massive school of 12&#8243; parrot fish, brilliant green with yellow stripes and flourescent blue piping on their fins &#8211; so gorgeous to watch, and maddening when you can&#8217;t stay with them for more than 30-45 seconds (you still need 15 seconds for the trip to the surface, remember).</p>
<p>Just before returning to the boat, found myself face to face with a white-tipped shark, around four feet long. Unfortunately, it&#8217;s much harder to keep up with a shark than a turtle. Started swimming overhand to make tracks, but it was no use &#8211; could only stay with him for a minute before he slithered off into the deep. Still, it was a glorious opportunity &#8211; first dive with live sharks in my life. Hope it won&#8217;t be my last.</p>
<p><a href="http://www.flickr.com/photos/petterlindgren/1804561781/" title="White-tip Reef Shark by Petter Lindgren, on Flickr"><img src="http://farm3.static.flickr.com/2048/1804561781_a4871990c9_z.jpg?zz=1" width="640" height="480" alt="White-tip Reef Shark"></a><br />
<em>Photo of white-tipped reef shark by Petter Lindgren, not me.</em></p>
<p>The return trip was completely different from the trip out &#8211; the wind and sea had risen up to become a soup of waves  in random vectors, making it pretty much impossible for our pilot to do anything to minimize the impact of their body blows. So we bounced and flew and just got completely, utterly, joyously soaked for the 90 minute return trip. Miles absolutely loved this, and was grinning from ear to ear the whole way back, while the rest of us gripped the stay-ropes for dear life. Exhausting, but one of those &#8220;so alive!&#8221; experiences you never forget.</p>
<p>On the way back, in the middle of Hanalei Bay where we had spent a lot of time swimming the previous week, Captain Gary stopped the boat to point out the real &#8220;Puff the Magic Dragon.&#8221;  You sort of have to use your imagination, but if you squint real hard you can see one point of land as the dragon&#8217;s tail, a patch of Hawaiian red clay as his eye, a grove of Koa trees as his whiskers, and the mountains surrounding the bay as the humps of his back. Allegedly his tail is ends at the pilsner tap spout in a bar in a resort on the cliffs of Princeville. I choose to reject this reality and substitute my own.</p>
<p><strong>Kilohana Luau</strong></p>
<p>Hoping for an &#8220;authentic&#8221; Luau experience, made the wrong call and chose the one put on by <a href="http://www.kilohanakauai.com/">Kilohana</a>. Not that it was horrible, but it felt more like a Vegas show put on for tourists than an authentic Hawaiian experience. Dinner for ~400 people was served cafeteria style, under a great tent (OK, we were grateful for the tent since it did rain that night). </p>
<p>Once plates were cleared, the show began &#8211; not a few uke players and some hula dancers, but an extravagant production telling the story of ancient Hawaii through some hybrid of ancient and modern dance, with a full backing band and amplification. Don&#8217;t get me wrong &#8211; the show was great &#8211; but we were hoping for something more like sitting on a beach, enjoying casual relaxing music and eating from baskets with our hands. Ah well. </p>
<p>Highlight of the evening was watching the Kalua pig being unearthed from its lava rock and banana leaf steam pit.</p>
<p><a href="http://www.flickr.com/photos/shacker/4778821918/" title="Kalua Pig at Luau by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4100/4778821918_7ef97f3453_z.jpg" width="640" height="480" alt="Kalua Pig at Luau"></a><br />
<em>Pig had been lowered into the earth early that morning, to steam all day in banana leaves and hot lava rocks. We arrived in time to see it unearthed.</em></p>
<h3>July 3: Geocaching Kauai Coves</h3>
<p>Already feeling the benefits of having quit smoking just under two weeks ago. One of the reasons my progress in the <a href="http://bucketlist.org/2/">100 Pushups program</a> had stalled was because my recovery time had gotten so bad. There are supposed to be 60-90 seconds for rest in between each set, but I was finding that I needed much more than that. Amazingly, just two weeks after quitting smoking, I&#8217;ve already pushed out of the Week 3 Day 2 range and into Week 4 Day 2 (did 20, 25, 20, 20, 28 this morning).</p>
<p>Amy, Miles and Grandma wanted some downtime today, so I opted for a  geocaching adventure. Headed for some coves to the north of Kelia Beach and spent hours wandering the red dirt trails and lava rock coves and bays. Stunning scenery and nice flat hiking (but HOT today!). </p>
<p>Kept overlapping with other geocaching families &#8211; something that doesn&#8217;t happen often on the mainland. At one point, ended up collaborating on a find with another couple, which was nice until it turned out they wanted to put &#8220;Drill Baby Drill&#8221; bumper stickers in it. Does not compute. How can a person who loves nature enough to want to geocache have this kind of attitude? And don&#8217;t they realize that children are geocachers too? Is this the kind of message they want to send? Threw up in my mouth a little and bit my tongue, said nothing.</p>
<p><a href="http://www.flickr.com/photos/shacker/4778836016/" title="IMG_5759 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4140/4778836016_f2ff64246c_z.jpg" width="640" height="480" alt="IMG_5759"></a></p>
<p>After finishing the Kelia Beach circuit, headed for mountains west of Kapa&#8217;a, looking for some jungle action. Unfortunately, went without geocaching printouts or proper maps, so was kind of winging it &#8211; trying to follow GPS as close as I could  to locate trail heads near mountain caches &#8211; a strategy that seemed to work at first but turned out &#8230; not so good. At top of a mountain road, came to some water towers, catching run-off from the many falls in the craggy mountains above. A local told me that, yes, I could take the trail around the backside of the towers all the way up to the falls, but that I should be careful since it was raining, and that meant flash floods could come down the mountain at any time. Told him I wouldn&#8217;t do anything stupid and that I would head for higher ground if rain started. </p>
<p>After experiencing the terrain, I realize that was probably easier said than done. Not that there were any flash floods that afternoon, but every trail I tried quickly petered out into impenetrable jungle. Kept getting stuck in dead ends with no way through the vegetation. Thought I could bushwhack my way to higher ground, but  the only way up, it seemed, was to follow the creek bed itself. But that too proved impossible. </p>
<p>The afternoon turned into a comedy of errors as I tried again and again, without success, to make my way up the mountain. Had plenty of opportunities to exercise my Spidey Sense, but none to actually accomplish any elevation. To be honest, it was scary at times &#8211; finding myself in jungle so dense I couldn&#8217;t tell which way was up, and the sound of the water (my only homing beacon) became too faint to follow. </p>
<p>I&#8217;ve gotten myself into some pretty wooly situations in the Berkeley hills, but nothing like this. Finally gave up and decided to enjoy just <em>being</em> in the midst of insane terrain.  Did encounter some wild taro patches though, got to ford some awesome creeks, and climb down a few (small but slippery) waterfalls.</p>
<p><a href="http://www.flickr.com/photos/shacker/4778199457/" title="Impenetrable by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4122/4778199457_07098c3c6a_z.jpg" width="640" height="480" alt="Impenetrable"></a><br />
<em>This is what they mean by &#8220;impenetrable jungle&#8221; (imagine this thicket extending in a 360 degree sphere around you).</em></p>
<p>Finally gave up and headed in. Had promised to do some grilling for the family, but it was late, so brought home a basket of TnT Steak Burgers from a roadside stand (excellent). </p>
<p>After the family was asleep, headed back to the bay for a late night nudie dip in the brilliant moonlight.</p>
<p>As I was writing this that night, heard a loud <em>chirp</em>, then felt a <em>plop</em> on my arm &#8212; a gecko had dropped from the ceiling and landed on my arm, sat there with its tiny eyes staring me down, wondering what would happen next. House geckos are good things &#8211; they catch bugs &#8211; so set it loose on a wall and tumbled into bed, exhausted.</p>
<h3>July 4: Miles the Kayak Pilot</h3>
<p>Committed to having live, fresh-caught lobster for breakfast one morning. Kayak&#8217;d down to Moloa&#8217;a Bay to do some free diving. Last time  here,  had come face to face with a 12&#8243; lobster, but was unsure what the rules in Hawaii were. Captain Gary on the Zodiac tour had  straightened me out on that &#8211; any month with a &#8220;Y&#8221; in it is fair game. Since it&#8217;s now July, realized I could go for it. </p>
<p>In 45 minutes of diving, managed to locate two bugs. Unfortunately, both times I spotted them just as I ran out of breath, and when I returned they were nowhere to be seen. Elusive little beggars! Still, I love being in the water so much, could do this every day of my life. Few things make me feel so alive, so in touch with the earth and her bounty. </p>
<p>While finally heading in, spotted a large dark mass about 6&#8242; away. Turned out to be another giant sea turtle &#8211; the biggest one I&#8217;d seen during our stay. Trailed him (her?) for about 10 minutes, descending and ascending in and amongst the reefs for as long as I could before heading back. It amazes me how trusting of humans the turtles seem to be &#8211; not a care in the world (unless you try to spy on their belly buttons).</p>
<p>Taught Miles (7) how to kayak &#8211; he&#8217;s been riding with us all week, but for the first time he got to be his own pilot. Did an absolutely  smashing job. No capsizes, no major frustrations &#8211; took to it like a pontoon to water. Really impressed by our little guy. </p>
<p><object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=5604edebea&#038;photo_id=4777968121"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=5604edebea&#038;photo_id=4777968121" height="480" width="640"></embed></object></p>
<p>Evening: Got to try a stand-up paddleboard. As the owner of the board paddled in to shore, I asked &#8220;Is that as fun as it looks?&#8221; &#8220;Probably dude,&#8221; he answered, &#8220;Try it as long as you want &#8211; just leave it on the beach when you&#8217;re done.&#8221; I&#8217;m usually really good at this type of thing, but stand-up paddling  turned out harder than expected. Fell off five times in 10 minutes, then gave up. Still, had a great conversation with him later that evening. Ended up talking lobster with him:</p>
<p>&#8220;Sometimes  the fishermen come in the evening and drape nets over the reefs, then return to snatch the tangled lobsters in the morning. When I see them doing that, I snorkel out and  free all the bugs&#8221; (&#8220;bugs&#8221; being a colloquial term for lobsters). I decided not to pull any lobsters even if I do have the opportunity. Continued to  seek out  lobster hidey holes through the rest of the  trip, but contented myself to watch them doing their thing in caves and under lava shelves, but didn&#8217;t touch them again &#8211; they&#8217;re  more valuable just as they are, thriving in their perfect environment.</p>
<h3>July 5: Zipline Through the Jungle</h3>
<p>A &#8220;zipline&#8221; is a cable strung between two distant trees, along which you hang from a harness and pulley. Almost since my boy was born, I&#8217;ve had this <a href="http://bucketlist.org/146/">bucketlist fantasy</a> that I&#8217;d someday visit an &#8220;eco-tourism&#8221; location and together we&#8217;d careen through forest canopies. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778211901/" title="IMG_5867 by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4101/4778211901_2b280f064a_z.jpg" width="640" height="480" alt="IMG_5867"></a></p>
<p>Left our place at Moloa&#8217;a at 6:30 to meet with <a href="http://www.outfitterskauai.com/">Outfitters Kauai</a> on the south side of the island (Poipu) for a van ride to the interior, where we were strapped into mountain climbing harnesses and instructed in the basics of riding the lines. There&#8217;s much more to the scene than simple cables &#8211; they had constructed a  well-planned Swiss Family Robinson array of steps and stairs, platforms and ladders in the heart of the jungle, overhanging creeks and waterfalls and forested wonderlands. </p>
<p>Truth be told, you don&#8217;t get a whole lot of zipline time for your money &#8212; rides last all of 30 seconds, and we got only five zips on a three-hour tour (&#8220;a three hour tour&#8230;&#8221;). But no matter &#8211; those 30 seconds are absolutely ecstatic. Position yourself on the edge of a platform, and when ready, hurl yourself off the edge into a waiting abyss, trusting the equipment with your life. </p>
<p>There are no accidents, there just aren&#8217;t. But your lizard brain doesn&#8217;t know that &#8211; your senses tell you you&#8217;re doing something wrong, stepping off a cliff into nothingness &#8212; hence the adrenaline. The thrill is in the battle between your rational mind, which knows you&#8217;re safe, and your instincts, which tell you you aren&#8217;t. The experience is indescribable. </p>
<p><object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=04880d0af6&#038;photo_id=4777989025"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=04880d0af6&#038;photo_id=4777989025" height="480" width="640"></embed></object></p>
<p>Instructors encourage you to go crazy and hang upside down for max thrill quotient. And if  you&#8217;re nice and small, as Miles was, they offer to <em>throw</em> you off the cliff (the &#8220;pirate toss,&#8221; they call it). Milked it for all it was worth. </p>
<p>Decided to shoot first-person video on my last jump  (below), but kind of wish I hadn&#8217;t. The experience is so short that your attention shouldn&#8217;t be on trying to keep the camera upright &#8211; it needs to be on the ride. Note to self: If I had it to do over, I wouldn&#8217;t attempt to video the experience &#8211; I&#8217;d just <em>have</em> it.  And I would have chosen the five-hour tour, not the three-hour version. The longer one includes an 1800-foot ride, the longest in the state. </p>
<p><object type="application/x-shockwave-flash" width="640" height="480" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=e7017968ec&#038;photo_id=4778677814"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=e7017968ec&#038;photo_id=4778677814" height="480" width="640"></embed></object></p>
<p><em>Decided to just roll video for my last zipline trip of the day. Maybe a mistake since I was too focused on the video and not enough on the ride, but it is what it is.<br />
</em></p>
<p>Later, found ourselves at  Puka Dog, home of what is easily the best hot dog I&#8217;ve ever tried. Instead of a typical bun, they push French rolls down over a hot spike to toast the interior, into which they squirt your choice of mango or coconut mustards and special sauces before poking  all-beef dogs down into the &#8220;puka&#8221; (hole). Exquisite. Brought back a jar of their <a href="http://en.wikipedia.org/wiki/Passiflora_edulis">Lililkoi</a> mustard.</p>
<p>Bellies full of awesome dogs, headed for <a href="http://www.ehow.com/how_2281710_collect-sea-glass-kauai-hawaii.html">Glass Beach</a>, so-called because glass from a nearby junkyard washes up, ground smooth by years in the sea. What looks like sand from a distance turns out to be millions of pieces of brown and green and clear glass shards, worn down almost to sand by the ravages of water and time. A long way out of the way to see &#8220;almost-sand,&#8221; but  quite beautiful in its own way. </p>
<p>Free-diving Moloa&#8217;a Bay later that day, another first &#8211; in peripheral vision, caught a black/white spotted fish with very large eyes &#8211; followed it into a hidey hole and realized it was a  puffer fish (uninflated of course). Hung out with it for a while, wondering whether I could get it to puff up in self defense, but couldn&#8217;t. Still, amazing to see a living puffer in the wild. Will never look at  the shellack&#8217;d variety in shell shops the same way again. </p>
<p>Very same day, spied yet another Honu (sea turtle), this one quite a bit larger than others I&#8217;d dived with &#8212; its shell more than three feet long. Drifted along with it for 10-15 minutes, trying to experience the sea like it did, bobbing from 30 feet to the surface.  She&#8217;d stay down for 10 minutes or more, returning to the surface for a quick oxygen exchange without huffing and puffing, while I had to return every minute or so. </p>
<p>Later, heard Walter Egan&#8217;s &#8220;You are the magnet and I am steel&#8221; on the radio and caught Miles singing in the back seat:  &#8220;You are the magnet and I am Steve.&#8221; Hearty laughs.</p>
<h3>July 7:  Final Smoothie, Kamokila</h3>
<p>Time to use up the remainder of the fresh fruits we&#8217;d accumulated. This morning&#8217;s final (and pretty amazing) smoothie consisted of:</p>
<p>Mango<br />
Pineapple<br />
Mini bananas (&#8220;apple&#8221; bananas)<br />
Macadamia nuts<br />
Fresh lychee<br />
Strawberry / guava juice</p>
<p>On our farewell  trip to the sand and water of Moloa&#8217;a Bay, found myself in the midst of a massive school of some kind of  silver fish, around 6&#8243; long &#8211; must have been thousands of them in rush-hour traffic. I faced into the herd and they bifurcated paths around me, splitting off to left and right. Could actually hear the water rippling as they split their way through. </p>
<p>Tough to say good bye to the bay, knowing it would probably be many years before I was  able to play in these waters again. </p>
<p>On the way to the airport, stopped for a few hours at <a href="http://villagekauai.com/">Kamokila Hawaiian Village</a>, an  authentically preserved ancient Hawaiian village snuggled between Fern Grotto and the Opaeka&#8217;a waterfall on the Wailua River. The village itself consisted mainly of various Hale (houses) made of bamboo and thatch &#8211; warrior&#8217;s house, birthing house, sleeping house, menstrual house, etc. </p>
<p><a href="http://www.flickr.com/photos/shacker/4778206703/" title="Kamokila Hawaiian Village by shacker, on Flickr"><img src="http://farm5.static.flickr.com/4098/4778206703_6d883eb314_z.jpg" width="640" height="480" alt="Kamokila Hawaiian Village"></a></p>
<p>But the most fascinating portion of this trip was actually the video shown at the end: <a href="http://www.piccom.org/program/then-there-were-none">Then There Were None</a> &#8211; a documentary film on how the kingdom of Hawaii was overthrown in a bloodless coup by foreign businessmen over the course of a few decades. Astonishing to learn there are only around 8,000 full-blood native Hawaiians left in the world &#8211; a number that&#8217;s been diminishing steadily for decades under the influences of colonialism, tourism and interbreeding. </p>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/07/therewerenone.png" alt="" title="therewerenone" width="477" height="284" class="alignnone size-full wp-image-4037" /></p>
<p>Not available on NetFlix but I wish it were &#8211; would encourage everyone to watch (the video is available for <a href="http://www.piccom.org/shop/then-there-were-none">purchase</a> however). In fact, was thinking how great it would be if this film were shown on airplanes as optional viewing to all travelers to Hawaii. So many of us visit thinking only of Aloha, great waves and diving, big hotels and expensive groceries, with little to no appreciation of the story of conquest of the islands, which mirrors the wipe-out process of so many native peoples coming into contact with western civ. for the first time. </p>
<div style="background-color:#DDD;border: 1px solid #999; font-size:1.2em; font-weight:bold;padding:7px;margin:10px;line-height:150%;">
Photos: <a href="http://www.flickr.com/photos/shacker/sets/72157624335245255/">Here&#8217;s</a> the Flickr standard photo set view, but much better is the <a href="http://www.flickr.com/photos/shacker/4778105159/in/set-72157624335245255/lightbox/">Flickr lightbox view</a>. For best results, dim the lights, put some Hawaiian music on the hi-fi, and put your browser in full-screen mode.
</div>
<h3>Extra credit: Vocabulary</h3>
<p>Not that I speak Klingon, but  was sometimes struck by similarities between the Klingon language and Hawaiian:</p>
<p>Kapplah (Klingon): Today is a good day to die.<br />
Kapa&#8217;a (Hawaiian): A town to the north of Lihue airport.</p>
<p>Uncanny. Miles and I made a game of trying to memorize a handful of useful Hawaiian words:</p>
<p>Hale &#8211; House<br />
Hanu &#8211; Sea turtle<br />
Kane &#8211; Man<br />
Luau &#8211; Feast<br />
Piko &#8211; Belly button<br />
Puka &#8211; Hole<br />
Ukulele (pronounced ooh-ke-leh-leh)<br />
Wahine &#8211; Woman</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/07/10/kauai-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rebel vs. PowerShot</title>
		<link>http://birdhouse.org/blog/2010/06/19/camtest/</link>
		<comments>http://birdhouse.org/blog/2010/06/19/camtest/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 21:55:44 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=4006</guid>
		<description><![CDATA[Wondering lately where I want to land on the spectrum between convenience and quality when comparing an ultra-portable Canon PowerShot SD1100 IS (Digital Elph) and a Canon Rebel EOS. The PowerShot is the size of a deck of cards and weighs ounces. The Rebel (a DSLr camera) easily weighs five times more and has much [...]]]></description>
			<content:encoded><![CDATA[<p>Wondering lately where I want to land on the spectrum between convenience and quality when comparing an ultra-portable Canon PowerShot SD1100 IS (Digital Elph) and a Canon Rebel EOS. The PowerShot is the size of a deck of cards and weighs ounces. The Rebel (a DSLr camera) easily weighs five times more and has much more bulk &#8211; it&#8217;s not going to fit neatly into a belt holster that doesn&#8217;t get in your way while hiking or biking. I&#8217;m not eager to have several pounds dangling from my neck, but at the same time, wouldn&#8217;t mind stepping up my game quality-wise in the photo department. Neither camera at my disposal is the latest model in its respective line, but I assumed the Rebel would take <em>far</em> better pictures by default.</p>
<p>Decided to do an informal test to find out. Running both cameras in fully automatic mode (since that&#8217;s what I use most often, and since it&#8217;s the only way to compare fairly), I took a handful of shots in the back yard, attempting to make the images as close to identical as possible. Tried to get a range of shots in full sun, mixed shadow, and shadow. Included one flash shot and one macro shot as well. </p>
<p>One significant difference not accounted for here is the fact that the Rebel has a full range of manual options that the PowerShot doesn&#8217;t have. On the other hand, the PowerShot has a quite good movie mode, which the Rebel lacks completely.</p>
<p>The results weren&#8217;t nearly as clear cut as I expected. Comparing the images below, I have a fairly clear preference for one of the columns, but prefer a few images from the opposite column. Can you tell which column is which camera? Which column do you prefer overall? </p>
<style type="text/css" media="screen">
    table tr td {
        padding:10px;
        border: 1px solid #999;
    }
</style>
<table>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a1.jpg' title='a1'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a1-175x175.jpg" class="attachment-thumbnail" alt="a1" title="a1"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b1.jpg' title='b1'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b1-175x175.jpg" class="attachment-thumbnail" alt="b1" title="b1"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a2.jpg' title='a2'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a2-175x175.jpg" class="attachment-thumbnail" alt="a2" title="a2"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b2.jpg' title='b2'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b2-175x175.jpg" class="attachment-thumbnail" alt="b2" title="b2"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a3.jpg' title='a3'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a3-175x175.jpg" class="attachment-thumbnail" alt="a3" title="a3"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b3.jpg' title='b3'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b3-175x175.jpg" class="attachment-thumbnail" alt="b3" title="b3"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a4.jpg' title='a4'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a4-175x175.jpg" class="attachment-thumbnail" alt="a4" title="a4"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b4.jpg' title='b4'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b4-175x175.jpg" class="attachment-thumbnail" alt="b4" title="b4"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a5.jpg' title='a5'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a5-175x175.jpg" class="attachment-thumbnail" alt="a5" title="a5"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b5.jpg' title='b5'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b5-175x175.jpg" class="attachment-thumbnail" alt="b5" title="b5"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a6.jpg' title='a6'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a6-175x175.jpg" class="attachment-thumbnail" alt="a6" title="a6"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b6.jpg' title='b6'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b6-175x175.jpg" class="attachment-thumbnail" alt="b6" title="b6"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a7.jpg' title='a7'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a7-175x175.jpg" class="attachment-thumbnail" alt="a7" title="a7"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b7.jpg' title='b7'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b7-175x175.jpg" class="attachment-thumbnail" alt="b7" title="b7"></a>
        </td>
</tr>
<tr>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/a9.jpg' title='a9'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/a9-175x175.jpg" class="attachment-thumbnail" alt="a9" title="a9"></a>
        </td>
<td>
            <a rel="lightbox" href='http://birdhouse.org/blog/wp-content/uploads/2010/06/b9.jpg' title='b9'><img width="175" height="175" src="http://birdhouse.org/blog/wp-content/uploads/2010/06/b9-175x175.jpg" class="attachment-thumbnail" alt="b9" title="b9"></a><br style="clear: both">
        </td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/06/19/camtest/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Building a Bucketlist Site with Django</title>
		<link>http://birdhouse.org/blog/2010/06/06/bucketlist-django/</link>
		<comments>http://birdhouse.org/blog/2010/06/06/bucketlist-django/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 19:13:55 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3944</guid>
		<description><![CDATA[Half a year ago, I got this crazy idea to build a site where people could log and record all the things they wanted to accomplish before they died. But more than just simple list-making, I wanted to make it easy for people to tell stories about their goals, and to add images and video. [...]]]></description>
			<content:encoded><![CDATA[<p>Half a year ago, I got this crazy idea to build a site where people could log and record all the things they wanted to accomplish before they died. But more than just simple list-making, I wanted to make it easy for people to tell stories about their goals, and to add images and video. I wanted to let people &#8220;follow&#8221; other people&#8217;s lists, to receive email when their friends accomplished their goals, to start discussions about getting the most out of life. I wanted it to be a place where people could get inspired by the goals of others, and to easily make copies of those goals in their own bucketlists. </p>
<p>The result is <a href="http://bucketlist.org/">bucketlist.org</a>.</p>
<p><a href="http://bucketlist.org"><img src="http://birdhouse.org/blog/wp-content/uploads/2010/06/bucketlogo.png" alt="" title="bucketlogo" width="496" height="122" class="alignnone size-full wp-image-3946" /></a></p>
<p>I had a pre-existing love affair with the Python-based <a href="http://www.djangoproject.com/">Django</a> framework &#8211; there was never a question of what platform to build on. But no matter how good the platform, the devil&#8217;s in the details.<br />
<span id="more-3944"></span></p>
<h3>Data Modeling</h3>
<p>While the basic concept was pretty simple, some of the implementation details became challenges. First, there was abstract stuff, like how to do the data modeling and logic for items copied from one list into another. If we wanted to have views like &#8220;most copied items,&#8221; it was important that people not be able to edit the copied items (if they did, the copy would no longer be a copy). But if copied items weren&#8217;t editable, no one would want to use the feature. Should a copied item have a foreign-key relationship to the original, or be a free-standing record? And what about copies of copies? Would we track them in the aggregate by traversing a relationship chain, or by counting references to a single original? Wrangling data can be a brain buzz. After trying several approaches, I decided it would be most performant to make copies into free-standing records, but with a &#8220;copied_from&#8221; relationship field. Users would be allowed to edit the details of the item, but not the title. That protected the integrity of the relationship but still allowed enough freedom to keep the feature useful.</p>
<h3>User Registration</h3>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/06/Man_w_mobilephone-284x400.jpg" alt="" title="Man_w_mobilephone" width="225"  class="alignleft size-medium wp-image-3973" /> Handling user registration and profiles is something nearly every site needs, and the magic pairing of <a href="http://bitbucket.org/ubernostrum/django-registration/wiki/Home">django-registration</a> and <a href="http://bitbucket.org/ubernostrum/django-profiles/wiki/Home">django-profiles</a> covers all the bases, keying off Django&#8217;s built-in base User object with a lot of implementation flexibility. But the documentation for them is written for rocket scientists, and customization can be a chore if you don&#8217;t have a CS background.  In fact, the <a href="http://birdhouse.org/blog/2009/06/27/django-profiles/">&#8220;Missing Manual&#8221;</a> I wrote for django-registration a year ago has been one of the most popular items on Birdhouse since it went up. </p>
<p>During the Bucketlist soft-launch period, I began to realize how different user expectations can be from the assumptions you make during build. For example, a lot of people now expect to be able to use email addresses as usernames when signing up for a site. But I&#8217;m using the username as part of the user&#8217;s bucketlist URL, and personal email addresses change. No go on that. Ironically, Django 1.2 started supporting email addresses as usernames, so I had to figure out a way to <a href="http://stackoverflow.com/questions/2961623/disabling-email-style-usernames-in-django-1-2-with-django-registration/2962023">disable</a> the new feature.</p>
<p>I&#8217;m no fan of anonymity on the internet. One of the few things Facebook (which I generally dislike) really gets right is that it strongly encourages users to use their real names. So my signup form initially required First and Last names, and bucketlist pages were clearly labeled as such. But within days of the soft launch, I had several users trying to find ways to work around the last name requirement. Who am I to judge? Backed off and made last name optional, and found conditional ways to represent the user&#8217;s name depending on how much info they were willing to give.</p>
<p>Also had to <a href="http://stackoverflow.com/questions/1075314/allow-changing-of-user-fields-like-email-with-django-profiles">figure out</a> things like how to modify the base User object when fields in the linked Profile object is changed.</p>
<h3>Rich Text Editor</h3>
<p>Because they&#8217;re difficult to do securely, rich text editors in form fields are most commonly found on the back-end of content management systems, not on public facing pages. Since a user can bypass the options provided by the rich text editor simply by turning off JavaScript, input has to be carefully inspected and post-processed on the back end as well. </p>
<p>To get around this problem, my first versions of the site used <a href="http://daringfireball.net/projects/markdown/">Markdown</a> to allow fancy formatting, but I was never happy with that approach. Developers may think Markdown is &#8220;user friendly,&#8221; but trust me &#8212; it isn&#8217;t. And because it requires a unique syntax, you always need a helper guide to go with it, which is just not user friendly. I really wanted a proper rich text editor, but needed it to be secure. </p>
<p>Took a lot of trial and error, but I documented the solution I finally came up with: <a href="http://birdhouse.org/blog/2010/05/12/secure-user-input-with-django/">Allowing Secure User Input With Django</a>. I&#8217;m happy with the results.</p>
<h3>Handling Media</h3>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/06/video-still-2.jpg" alt="" title="video-still-2" width="250" class="alignleft size-full wp-image-3975" />From the start, I wanted  to make it easy to for users to add <a href="http://bucketlist.org/16/">images and video</a> to their  stories. But I didn&#8217;t want to get into the business of storing huge amounts of media &#8211; people already have accounts at Flickr and YouTube and Vimeo, and there&#8217;s a wealth of freely embeddable content at those sites ready to be re-used (Bucketlist users are encouraged to add media created by other people if they don&#8217;t have their own). At the same time, I wasn&#8217;t willing to allow users to paste embed code from those sites &#8211; that&#8217;s a security nightmare waiting to happen (even WordPress only lets site administrators paste embed code &#8211; not normal authors or end users). </p>
<p>My first stab at a solution was to build some kind of shortcode solution, where users could type something like:</p>
<p><code>[youtube 83kx78y]</code></p>
<p>and have that string auto-replaced with proper embed code. There&#8217;s already a <a href="http://code.google.com/p/django-shortcodes/">django-shortcodes</a> project out there, and I figured I&#8217;d build on that. But after spending a few evenings working with APIs of various providers and realizing how many more I had to create, decided that was a fool&#8217;s errand (I even submitted patches to the python-flickr API interface tool along the way). </p>
<p>Then I learned about the awesome <a href="http://www.oembed.com/">oembed</a> system. Oembed is a standard that lets you hand a media ID to a supporting provider, and they pass back all of the metadata for that piece of media. So a site can implement a tool that parses user-submitted text for URLs of supporting sites (like Flickr or Vimeo), extracts the media ID, and uses the returned metadata in json format to reconstruct a known-safe embed code block. Thus, users need only paste media URLs into the rich text field and the rest happens automagically.</p>
<p>Started off with the various forks of <a href="http://code.google.com/p/django-oembed/">django-oembed</a>, with mixed results. The codebase was really large (for what it did), and the results were buggy. URL fragments would be left in the text, and some providers simply failed to resolve (that part turned out to be a problem with the ooembed endpoint, which I was able to fix by switching to embed.ly. After trying and failing to fix django-oembed, switched to <a href="http://code.google.com/p/jquery-oembed/">jquery-oembed</a>, which did a cleaner job with half the lines of code. I&#8217;d rather not rely on Javascript for this functionality, but will wait until someone writes a leaner, cleaner oembed implementation for Django.</p>
<h3>Twitter API</h3>
<p>From the start, I had planned to let users Tweet their new goals directly from the site. Found a nice <a href="http://joshthecoder.github.com/tweepy/docs/index.html">Python library</a> for working with the Twitter API, but posting content without sending passwords around meant   learning all about the <a href="http://joshthecoder.github.com/tweepy/docs/auth_tutorial.html#oauth-authentication">OAuth dance</a> &#8211; a little tarantella that involves  passing request tokens and auth keys back and forth. In retrospect, it doesn&#8217;t look too nasty, but it took several evenings to get it just right. It&#8217;ll be easier next time :)</p>
<p>I didn&#8217;t implement Facebook&#8217;s posting tools into this version of the site &#8211; in part because of all the politics and privacy concerns swirling around them right now, and in  part because I understand they&#8217;re moving everything to OAuth2. Will wait for the dust to settle on that a bit.</p>
<p>Of course posting to Twitter meant I needed shortened versions of Bucketlist URLs, so I got to play with the <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">bit.ly API</a> too. That part was a cakewalk &#8211; no tarantella required.</p>
<p>And of course I needed a character counter in the Tweet field. Found a nice <a href="http://plugins.jquery.com/project/NobleCount">JQuery plugin</a> for that.</p>
<h3>Design</h3>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/06/swirl_design-175x175.jpg" alt="" title="swirl_design" width="175" height="175" class="alignleft size-thumbnail wp-image-3977" /> I&#8217;m more of a developer than a designer. I know good design when I see it, and even teach a lecture to visiting journalists on Web Design Principles. But when it comes to conceptualizing original designs, I kind of freeze up. Also,  I wanted to keep on trucking with the <a href="http://960.gs/">960 Grid</a> system I use elsewhere &#8212; 960gs makes it trivial to manipulate columns in complex layouts. Unfortunately, there are few freely available designs based on 960gs &#8211; you&#8217;re still on your own to come up with look and feel. What I ended up with isn&#8217;t ideal, but it&#8217;s not bad either. Rather than designing the whole thing in advance, I just started filling out the grid as I went along &#8211; it evolved through chipping and plucking away over time. If the site does well, I may hire a real designer at some point. </p>
<h3>Comments</h3>
<p>Getting the Comments system working the way I wanted them to was fun too. Django&#8217;s native <a href="http://docs.djangoproject.com/en/dev/ref/contrib/comments/">commenting framework</a> works well out of the box, but when implemented per the docs, always presents a name and email field to the user. But I only want to take comments from authenticated users, making those fields redundant and annoying. Ultimately did find a way to get this working, and decided to <a href="http://code.djangoproject.com/ticket/12871">contribute documentation</a> to save future users the same hassles. The ticket was accepted, but the patch was never committed (got lost in the ramp-up to Django 1.2, I think). A common problem with open source projects &#8212; to make it worth the while for the public to submit patches, those patches need to be handled in a timely way. </p>
<h3>Deployment, DVCS</h3>
<p>Along the way, also learned pip and the <a href="http://www.doughellmann.com/projects/virtualenvwrapper/">virtualenvwrapper</a>, using requirements.txt for tracking dependencies rather than doing it all manually. And switched from svn to git for version control. Lots of learning steps through all that, including a fun version incompatibility between dev and production that yielded awesomely dadaistic error messages like:</p>
<p><code>fatal: fetch-pack: unable to fork off sideband demultiplexer</code></p>
<p> But nothing I couldn&#8217;t work through. Overall, <em>really</em> happy to have made the changes. Deployment onto new development machines, and onto the server, is almost trivial now.</p>
<p>Birdhouse runs on cPanel and cPanel doesn&#8217;t yet support Django natively &#8211; admins have to jump through quite a few hoops to get Django sites running. I&#8217;ve filed an official <a href="http://forums.cpanel.net/f145/django-support-146541.html">feature request</a> for cPanel to support Django like it does Ruby on Rails, and it&#8217;s getting a fair number of votes, but it needs more. If you&#8217;re a cPanel admin, please add your voice! For now, my Django-on-cPanel process looks something like <a href="http://m.andric.us/post/43754517/django-python-mod-wsgi-with-cpanel-whm">this</a>.</p>
<h3>Avatars</h3>
<p>Thumbnails for profile avatars are provided through two mechanisms: User&#8217;s choice of Gravatar or an uploaded image. If the user does not upload an avatar, and if their registered email address matches an account at gravatar.com, their Gravatar is automatically presented via the <a href="http://code.google.com/p/django-gravatar/">django-gravatar</a> template tag. If they do upload an avatar, we verify and resize it with the <a href="http://code.google.com/p/sorl-thumbnail/">sorl-thumbnails</a> library&#8230; which  unfortunately appears to have been recently abandoned. Still, sorl isn&#8217;t going to break anytime soon, and I&#8217;m not seeing anything out there that looks like a great replacement, so went with it. sorl-thumbnail depends on the ubiquitous <a href="http://www.pythonware.com/products/pil/">Python Imaging Library</a>. Which is fine, except that I got dragged through the trenches trying to get PiL working on Snow Leopard. Little obstacles every step of the way add up.</p>
<h3>Bits and Pieces</h3>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/06/LW-1991-walker.jpg" alt="" title="LW-1991-walker" width="300"  class="alignleft size-full wp-image-3979" />The dynamic list reordering (see the bottom of your own list) came from some Ajaxy bits I assembled from various sources when building <a href="http://code.google.com/p/django-todo/">django-todo</a> last year &#8211; that code ported over pretty clean.</p>
<p>The slippy slidey two-pane views that let you toggle/slide between incomplete and completed items came from a JQuery plugin by Gaya Design (original concept <a href="http://www.gayadesign.com/diy/animated-tabbed-content-with-jquery/">here</a>).</p>
<p>All of the various RSS views were assembled pretty much according to the docs on Django&#8217;s <a href="http://docs.djangoproject.com/en/dev/ref/contrib/syndication/">syndication framework</a>.</p>
<p>The &#8220;Featured Items&#8221; (best items rotating randomly in the banner) are selected (by me) with a custom <a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/">admin action</a> which was trivial to write. The resulting queryset is randomized with the little-known &#8220;?&#8221; syntax on order_by in a global context_processor:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> featured_items<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'featured'</span>: Item.<span style="color: black;">objects</span>.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>featured=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>.<span style="color: black;">order_by</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'?'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>:<span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span><span style="color: black;">&#125;</span></pre></div></div>

<p>I&#8217;ve heard that using &#8220;?&#8221; isn&#8217;t very performant with large querysets, but this query will never return a large recordset, so it should be fine.</p>
<p>Tagging of course comes via the awesome <a href="http://code.google.com/p/django-tagging/">django-tagging</a> package.</p>
<p>Overall, the project took six months of intermittent nights and weekends. And despite the many hassles, it was a fantastic learning experience, and a gas to build. Now that summer is pretty much here, it&#8217;s harder to stay indoors and hack. Time to get out and actually do some of the things on my bucketlist :)</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/06/06/bucketlist-django/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dear Libertarians</title>
		<link>http://birdhouse.org/blog/2010/06/05/dear-libertarians/</link>
		<comments>http://birdhouse.org/blog/2010/06/05/dear-libertarians/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 15:52:14 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3959</guid>
		<description><![CDATA[For as long as I can remember, every discussion I&#8217;ve had with Libertarians ultimately goes to the same syllogism: All government is a form of force. All force is bad. Therefore all government is bad. I question line #2 of the syllogism, and therefore don&#8217;t agree with the conclusion. Why is all force bad? Don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>For as long as I can remember, every discussion I&#8217;ve had with Libertarians ultimately goes to the same syllogism: </p>
<p>All government is a form of force.<br />
All force is bad.<br />
Therefore all government is bad.</p>
<p>I question line #2 of the syllogism, and therefore don&#8217;t agree with the conclusion. Why is all force bad? Don&#8217;t we need force to protect us? Most Libertarians agree that we need a police <strong>force</strong> to protect us from bad guys. But we need protection from  more bad elements than just bank robbers. </p>
<p>Corporations, driven by the desire to maximize profit (i.e. greed) place financial goals above all others. Left unchecked, they deforest continents, exploit workers, spew pollution, sell unsafe goods, and exploit loopholes in financial markets. Lax regulation led to the recent banking crisis and the BP oil spill. Child labor in unregulated 3rd world countries continues to be a problem supported by our free market, which is far more concerned with cheap jeans and TVs than it is with the welfare of humans. A world where corporations are unregulated is not a world we would want to live in. </p>
<p>It would be awesome if there were an alternative to regulation (force). It would be wonderful if the free market could control the power of greed, but history shows us that it does not&#8230; mostly because consumers either don&#8217;t know or don&#8217;t care what they&#8217;re supporting with their purchases. Corporations will work tirelessly to cut corners and find loopholes in order to maximize profit at the expense of the interests of the general population. Not even Adam Smith believed that an unregulated free market could work to the good of the general population.</p>
<p>We need to know that our citizenry are educated; therefore we need force to make sure all of our children go to a satifactory school. I would prefer if force weren&#8217;t needed for that, but it is. To keep our population healthy (and from going broke), we need protection from the exploitative practices of health insurers, so we must apply force in two vectors &#8211; we must limit what insurers can charge, and we must force our population to have insurance of some kind.   Insurance companies have shown us what they&#8217;re made of &#8212; their interests are personal greed, not public health. </p>
<p>Without government &#8220;force&#8221; we would have no National Parks  &#8212; all of that land would have been razed and populated long ago. Without  government &#8220;force,&#8221; we end up with broken systems spiralling out of control at the expense of the people.  What alternative to government &#8220;force&#8221; do we have? </p>
<p>Of course government force can be a dangerous thing too &#8211; it needs checks and balances to keep it fair and safe.  But our representative form of government, and our system of checks and balances, ensures that ultimately WE ARE the government. We can remove entities that don&#8217;t serve us well. We get to look inside of government and control its workings. We don&#8217;t have that option with the free market, since we can&#8217;t look inside of corporations, can&#8217;t take control of them. Healthy governance is open and transparent in ways that the &#8220;free&#8221; market will never be. </p>
<p>Libertarians, help me out here. When you trot out the old &#8220;But government is a form of force&#8221; argument, what exactly do you mean to convey? That it&#8217;s OK to let greed drive our world rather than common sense?  Do you really believe that free market forces can protect us and our land/water from the power amassed by corporations? Do you really want to live in a world with no government?</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/06/05/dear-libertarians/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Maker Faire 2010</title>
		<link>http://birdhouse.org/blog/2010/05/25/maker-faire-2010/</link>
		<comments>http://birdhouse.org/blog/2010/05/25/maker-faire-2010/#comments</comments>
		<pubDate>Wed, 26 May 2010 06:41:59 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Out there]]></category>
		<category><![CDATA[MakerFaire]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3936</guid>
		<description><![CDATA[Miles and I have a perfect track record so far at Maker Faire, attending every year since its inception in 2006. This year was our fifth time out, though things took a slightly different turn this year. Rather than it being father/son bonding time, my extended family trekked out to the Bay Area for the [...]]]></description>
			<content:encoded><![CDATA[<p>Miles and I have a <a href="http://birdhouse.org/blog/tag/makerfaire/">perfect track record</a> so far at Maker Faire, attending every year since its inception in 2006. This year was our fifth time out, though things took a slightly different turn this year. Rather than it being father/son bonding time, my extended family trekked out to the Bay Area for the experience. Corralling nine people meant a bit less explore time, so we saw less of the cornucopia, but what we did see was amazing, as always. </p>
<p>Highlights: RC-controlled neon land sharks chasing kids around in the dark. <a href="http://www.google.com/images?q=tall+bike&#038;um=1&#038;ie=UTF-8&#038;source=univ&#038;ei=Yb38S_qDBofMNIvr2d4H&#038;sa=X&#038;oi=image_result_group&#038;ct=title&#038;resnum=1&#038;ved=0CCcQsAQwAA">Tall bikes</a> everywhere, including one with &#8220;roots&#8221; that could be deployed at the flip of  a lever so the rider could stop at lights without toppling over. A grand steampunk calliope with half-sawn tubas, whoopee whistles, cuckoos, and tubes galore honking out a rendition of <em>Yellow Submarine</em>.  The giant <a href="http://en.wikipedia.org/wiki/Tesla_coil">Tesla coils</a> throwing lightning, but this time generating music at the same time (remember Hot Buttered&#8217;s &#8220;Popcorn?&#8221; Imagine that set to explosive blue electricity). A guy playing drums, didgeridoo and bass at the same time. 6-ft.-wide plates of paella. The life-size mousetrap, as always.</p>
<p>Unfortunately, the Wooden Bikes crowd was nowhere to be seen, and the <a href="http://www.cyclecide.com/">Cyclecide</a> crew&#8217;s human-powered carnival rides were shut down for a break when we arrived. Still, Maker Faire remains &#8220;Burning Man for families&#8221; &#8211; an explosion of creativity and weld joints like no other. Won&#8217;t be the last.</p>
<p>Took fewer photos than usual, but managed to put together an OK <a href="http://www.flickr.com/photos/shacker/sets/72157624007596299/">Flickr set</a>.</p>
<p><object width="640" height="480"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624007596299%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624007596299%2F&#038;set_id=72157624007596299&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157624007596299%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157624007596299%2F&#038;set_id=72157624007596299&#038;jump_to=" width="640" height="480"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/05/25/maker-faire-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pollywogs Redux</title>
		<link>http://birdhouse.org/blog/2010/05/19/pollywogs-redux/</link>
		<comments>http://birdhouse.org/blog/2010/05/19/pollywogs-redux/#comments</comments>
		<pubDate>Wed, 19 May 2010 19:12:08 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[Journalism]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3933</guid>
		<description><![CDATA[Back in 2006, I posted a digitized copy of a 1950s Coast Guard hazing ritual on YouTube. In July 2008, the video suddenly became unavailable, with no reason given as to why, other than &#8220;Violation of terms of service.&#8221; I suspected that the video may have angered veterans who felt that the video depicted the [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2006, I posted a <a href="http://birdhouse.org/blog/2006/08/11/pollywogs/">digitized copy</a> of a 1950s Coast Guard hazing ritual on YouTube. In July 2008, the video suddenly became unavailable, with no reason given as to why, other than &#8220;Violation of terms of service.&#8221; I suspected that the video may have angered veterans who felt that the video depicted the military in an unflattering light, and that they had flagged it enough times that it was removed. I blogged about the takedown <a href="http://birdhouse.org/blog/2008/07/10/pollywogs-ii-youtube-takedown/">here</a>.</p>
<p>A few nights ago, the Knight Digital Media Center (where I work) had as a guest speaker YouTube&#8217;s news manager Olivia Ma, who delivered a <a href="http://multimedia.journalism.berkeley.edu/presentations/506/">fantastic presentation</a>. I took the opportunity to talk to her and try to find out what was behind the takedown, and whether anything could be done. In my view, the video was far more tame than tons of stuff on YouTube, and had historical/documentary relevance as well. </p>
<p>Ma took up the issue with her team and today let me know that the video had been reinstated, noting that it &#8220;qualified as EDSA (educational, documentary, scientific or artistic).&#8221;</p>
<p>While the version I put up <a href="http://vimeo.com/1307570">on Vimeo</a> in the interim is of higher quality, I&#8217;m happy to again be able to embed the YouTube version:</p>
<p><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/2TSBOb_6N2E&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/2TSBOb_6N2E&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></p>
<p>I&#8217;m now trying to learn what I can about any official appeals process for this kind of situation. </p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/05/19/pollywogs-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Allowing Secure User Input with Django</title>
		<link>http://birdhouse.org/blog/2010/05/12/secure-user-input-with-django/</link>
		<comments>http://birdhouse.org/blog/2010/05/12/secure-user-input-with-django/#comments</comments>
		<pubDate>Wed, 12 May 2010 19:27:47 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3920</guid>
		<description><![CDATA[Building a site that needs to accept formatted user input? There&#8217;s no way you&#8217;re going to let random users input any old HTML &#8211; you&#8217;d open the door to all kinds of cross-site-scripting attacks and other nastiness. Nor can you just filter out the tags you consider dangerous &#8211; that road is fraught with peril. [...]]]></description>
			<content:encoded><![CDATA[<p>Building a site that needs to accept formatted user input? There&#8217;s no way you&#8217;re going to let random users input any old HTML &#8211; you&#8217;d open the door to all kinds of <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">cross-site-scripting</a> attacks and other nastiness. Nor can you just filter out the tags you consider dangerous &#8211; that road is fraught with peril. The only solution is to white-list a small subset of tags and unceremoniously drop the rest. </p>
<p>There are two layers to the problem &#8211; how to support formatted text on the front-end, and how to process submitted text on the back-end. </p>
<p>For the front-end, some developers are drawn to the <a href="http://daringfireball.net/projects/markdown/">Markdown</a> syntax &#8211; a supposedly user-friendly wiki-like syntax that can be re-rendered as safe HTML. But while Markdown may look friendly to developers, it doesn&#8217;t to normal users &#8211; trust me on this. Even for tech-savvy users, Markdown requires that you place syntax instructions on your site (inelegant). A better solution is to use a rich text editor for the web, like <a href="http://tinymce.moxiecode.com/">TinyMCE</a> or <a href="http://www.wymeditor.org/">WYMEditor</a>. </p>
<p><img src="http://birdhouse.org/blog/wp-content/uploads/2010/05/tinymce.png" alt="" title="tinymce" width="427" height="319" class="size-full wp-image-3923" /> </p>
<p>Ever notice that you often see rich text editors in content  management systems run by trusted users, but seldom on public-facing web pages? That&#8217;s because it&#8217;s tricky to do securely, and without giving users enough rope to hang themselves formatting-wise.</p>
<p>With a bit of configuration though, you <em>can</em> deploy public-facing rich textareas securely, allowing only the input of tags you specify. But you can&#8217;t stop there &#8211; all the user has to do is disable Javascript in the browser to bypass your rich text editor. You <em>must</em> process submitted text on the back-end with the same set of rules in your view logic.</p>
<p><span id="more-3920"></span></p>
<h3>Configuring TinyMCE</h3>
<p>Let&#8217;s say you&#8217;ve already got <a href="http://code.google.com/p/django-tinymce/">TinyMCE</a> installed in your Django project, and you want users to be able to use the following tags &#8211; nothing more:</p>
<p><code>p i strong b u a h1 h2 h3 blockquote br ul ol li</code></p>
<p>django-tinymce defaults to the &#8220;simple&#8221; theme, which allows a few of these, but not all of them. The &#8220;simple&#8221; theme cannot be modified &#8211; it is what it is &#8211; so you&#8217;ll need to start by switching to the &#8220;advanced&#8221; theme. django-tinymce accepts arguments passed in from your project&#8217;s settings file, so add something like:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">TINYMCE_DEFAULT_CONFIG=<span style="color: black;">&#123;</span>
  <span style="color: #483d8b;">'theme'</span>: <span style="color: #483d8b;">&quot;advanced&quot;</span>, 
  <span style="color: #483d8b;">'remove_linebreaks'</span>: <span style="color: #008000;">False</span>, 
  <span style="color: #483d8b;">'convert_urls'</span>: <span style="color: #008000;">False</span>, 
  <span style="color: #483d8b;">'width'</span>:<span style="color: #483d8b;">'100%'</span>,
  <span style="color: #483d8b;">'height'</span>:<span style="color: #483d8b;">'300px'</span>,
  <span style="color: #483d8b;">'paste_auto_cleanup_on_paste'</span> : <span style="color: #008000;">True</span>,
  <span style="color: #483d8b;">'theme_advanced_buttons1'</span> : <span style="color: #483d8b;">&quot;formatselect,separator,
                              bold,italic,hr,separator,
                              link,unlink,separator,bullist,
                              numlist,separator,undo,redo,&quot;</span>,
  <span style="color: #483d8b;">'theme_advanced_buttons2'</span> : <span style="color: #483d8b;">&quot;&quot;</span>,
  <span style="color: #483d8b;">'theme_advanced_buttons3'</span> : <span style="color: #483d8b;">&quot;&quot;</span>  ,
  <span style="color: #483d8b;">'theme_advanced_blockformats'</span> : <span style="color: #483d8b;">&quot;p,h1,h2,h3,blockquote&quot;</span>,
  <span style="color: #483d8b;">'theme_advanced_toolbar_location'</span> : <span style="color: #483d8b;">&quot;top&quot;</span>,
  <span style="color: #483d8b;">'content_css'</span> : <span style="color: #483d8b;">&quot;/media/css/tiny_editor.css&quot;</span> 
<span style="color: black;">&#125;</span></pre></td></tr></table></div>

<p>Most of this is self-explanatory, but a few notes:</p>
<p><code>theme_advanced_buttons1</code>: By default, the the advanced theme will have three rows of buttons. We only want one. We put all the buttons and options we want to appear on this one line. Notice that the buttons2 and buttons3 lines are empty &#8211; required if you just want a one-row toolbar.</p>
<p><code>theme_advanced_blockformats</code>: This is the list of block-level containers that will appear on the formatting picklist. I removed several of the containers that were there by default.</p>
<p><code>convert_urls</code>: By default, when a user pastes in a URL, it will be converted into a link. This won&#8217;t work for our purposes (see oembed, below). Fortunately, this behavior can be disabled.</p>
<p><code>paste_auto_cleanup_on_paste</code>: If users paste out of Word or from a rich web page, all of the formatting crap will be stripped out automatically, so only your site&#8217;s styles are in play.</p>
<p>That takes care of the front-end nicely. Using just the wysiwyg, users can&#8217;t inject anything dangerous into your site. But it&#8217;s far from secure &#8211; anyone who turns off Javascript in the browser will still find a plain old textarea, happy to accept any random crap code they drop in.</p>
<h3>Whitelisting tags on submit</h3>
<p>Yes, there are Django template <a href="http://docs.djangoproject.com/en/dev/ref/templates/builtins/">filters</a> that can strip out HTML or allow only certain tags to be displayed. But that&#8217;s not good enough. We want to prevent bad stuff from ever getting into the database to begin with, so tags and filters (which only work with output, not input) aren&#8217;t the answer. There are a few functions suitable for the job on djangosnippets.org, but the best solution I found was <a href="http://stackoverflow.com/questions/16861/sanitising-user-input-using-python/25136#25136">this function</a> on StackOverflow. The nice thing about this version is that it lets you also specify valid <em>attributes</em> (so you can still use onclick, e.g.), and it prevents things like &#8220;javascript&#8221; from appearing in an href (so naughty code can&#8217;t be inlined).</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">urlparse</span> <span style="color: #ff7700;font-weight:bold;">import</span> urljoin
<span style="color: #ff7700;font-weight:bold;">from</span> BeautifulSoup <span style="color: #ff7700;font-weight:bold;">import</span> BeautifulSoup, Comment
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> sanitizeHtml<span style="color: black;">&#40;</span>value, base_url=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
    rjs = r<span style="color: #483d8b;">'[<span style="color: #000099; font-weight: bold;">\s</span>]*(&amp;#x.{1,7})?'</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'javascript:'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    rvb = r<span style="color: #483d8b;">'[<span style="color: #000099; font-weight: bold;">\s</span>]*(&amp;#x.{1,7})?'</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'vbscript:'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    re_scripts = <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'(%s)|(%s)'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>rjs, rvb<span style="color: black;">&#41;</span>, <span style="color: #dc143c;">re</span>.<span style="color: black;">IGNORECASE</span><span style="color: black;">&#41;</span>
    validTags = <span style="color: #483d8b;">'p i strong b u a h1 h2 h3 blockquote br ul ol li'</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    validAttrs = <span style="color: #483d8b;">'href src width height'</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    urlAttrs = <span style="color: #483d8b;">'href src'</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Attributes which should have a URL</span>
    soup = BeautifulSoup<span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> comment <span style="color: #ff7700;font-weight:bold;">in</span> soup.<span style="color: black;">findAll</span><span style="color: black;">&#40;</span>text=<span style="color: #ff7700;font-weight:bold;">lambda</span> text: <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>text, Comment<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Get rid of comments</span>
        comment.<span style="color: black;">extract</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> tag <span style="color: #ff7700;font-weight:bold;">in</span> soup.<span style="color: black;">findAll</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> tag.<span style="color: black;">name</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> validTags:
            tag.<span style="color: black;">hidden</span> = <span style="color: #008000;">True</span>
        attrs = tag.<span style="color: black;">attrs</span>
        tag.<span style="color: black;">attrs</span> = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> attr, val <span style="color: #ff7700;font-weight:bold;">in</span> attrs:
            <span style="color: #ff7700;font-weight:bold;">if</span> attr <span style="color: #ff7700;font-weight:bold;">in</span> validAttrs:
                val = re_scripts.<span style="color: black;">sub</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>, val<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Remove scripts (vbs &amp; js)</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> attr <span style="color: #ff7700;font-weight:bold;">in</span> urlAttrs:
                    val = urljoin<span style="color: black;">&#40;</span>base_url, val<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Calculate the absolute url</span>
                tag.<span style="color: black;">attrs</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>attr, val<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> soup.<span style="color: black;">renderContents</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf8'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Obviously, your whitelist of allowable tags is stored in <code>validTags</code>.</p>
<p>Save the code above to an importable function somewhere in your project &#8212; I placed it in a <code>utils.py</code>.  You&#8217;ll need to make sure you&#8217;ve got the amazing BeautifulSoup parser installed in your path as well: <code>pip install BeautifulSoup</code>.  Then, in the view function that handles the form submission:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> appname.<span style="color: black;">utils</span> <span style="color: #ff7700;font-weight:bold;">import</span> sanitizeHtml
<span style="color: #808080; font-style: italic;"># ....</span>
item.<span style="color: black;">notes</span> = sanitizeHtml<span style="color: black;">&#40;</span>request.<span style="color: black;">POST</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'notes'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>That&#8217;s it! Now test your form with Javascript disabled in the browser &#8211; no matter how hard you try, no tags beyond the ones you specified will make it into the database.</p>
<h3>What about the embed tag?</h3>
<p>So much great cross-pollination of content between sites is enabled by the embed and object tags &#8211; remote video on YouTube and Vimeo, Google Maps and mashups, widgets and feeds from dozens of providers&#8230; but if you allow &#8220;embed&#8221; or &#8220;object&#8221; on a public-facing form, you&#8217;re opening yourself up for a world of hurt. </p>
<p>An excellent alternative is to take advantage of the <a href="http://www.oembed.com/">oembed</a> standard. Oembed is a straightforward API agreed upon by dozens of content distributors. The idea is simple &#8211; rather than allowing &#8220;embed&#8221; code, allow the user to simply paste in the URL of the page on which the content appears. Your site can parse submitted text for these URLs, then reach out and grab the correct embeddables from the remote host. This prevents users from messing with embed sizes, fat-fingering blocks of intimidating code, or from embedding content from unapproved sites. If you&#8217;re working with Django,  <a href="http://code.google.com/p/django-oembed/">django-oembed</a> provides a complete toolkit.</p>
<p>But django-oembed is a bit finicky &#8211; it wants to see plain old URLs, not URLs wrapped in other tags. And <em>that&#8217;s</em>  why we disabled <code>convert_urls</code> in the TinyMCE config above.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/05/12/secure-user-input-with-django/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pinecone Catapult</title>
		<link>http://birdhouse.org/blog/2010/05/02/pinecone-catapult/</link>
		<comments>http://birdhouse.org/blog/2010/05/02/pinecone-catapult/#comments</comments>
		<pubDate>Sun, 02 May 2010 08:27:23 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3916</guid>
		<description><![CDATA[Miles and I spent Saturday building a PVC catapult for hucking pinecones. Started with inspiration from some YouTube videos, but scaled up and modified designs we found there. Capable of throwing a pine cone around 45 feet with a single bungie! Spent around $25 on parts. Build time ~3 hours. Considering adding a second bungie [...]]]></description>
			<content:encoded><![CDATA[<p>Miles and I spent Saturday building a PVC catapult for hucking pinecones. Started with inspiration from some YouTube videos, but scaled up and modified designs we found there. Capable of throwing a pine cone around 45 feet with a single bungie! Spent around $25 on parts. Build time ~3 hours.  Considering adding a second bungie for extra distance, but don&#8217;t want to make it too strenuous for the kiddos. </p>
<p><object width="640" height="480"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157623973280686%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157623973280686%2F&#038;set_id=72157623973280686&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fshacker%2Fsets%2F72157623973280686%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fshacker%2Fsets%2F72157623973280686%2F&#038;set_id=72157623973280686&#038;jump_to=" width="640" height="480"></embed></object></p>
<p>Working with PVC is great &#8211; cuts like butter with a chopsaw, pieces slip together like Legos. In fact, the fit is snug enough that we&#8217;re not gluing it for now -nice to be able to disassemble for storage.</p>
<p>Finding the perfect throwing cup was the biggest challenge. Considered sewer pipe caps, chopped down paint mixing buckets, and tupperware, before deciding on this perfectly sized electrical junction box. Unfortunately it had a metal plate riveted to the back, which I had to hacksaw off &#8211; easily the hardest part of the build.</p>
<p>See full-size images and captions at the <a href="http://www.flickr.com/photos/shacker/sets/72157623973280686/">Flickr set</a> (captions not available in embedded slideshow).</p>
<p>Shot some video too, but did that dumb thing where you record when you think you&#8217;re paused and pause when you think you&#8217;re recording. D&#8217;oh! Will try the video again later.</p>
<p>Catapult is available for rental for birthday parties and bar mitzvahs.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/05/02/pinecone-catapult/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Goodbye Chronicle</title>
		<link>http://birdhouse.org/blog/2010/04/23/goodbye-chronicle/</link>
		<comments>http://birdhouse.org/blog/2010/04/23/goodbye-chronicle/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 21:23:04 +0000</pubDate>
		<dc:creator>shacker</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Media]]></category>

		<guid isPermaLink="false">http://birdhouse.org/blog/?p=3909</guid>
		<description><![CDATA[I just did something really hard &#8211; called up the San Francisco Chronicle and canceled the home subscription we&#8217;ve kept up for more than a decade. Working at a journalism school, I know exactly how difficult things are for newspapers these days, and how there is no online revenue model available that comes anywhere close [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://birdhouse.org/blog/wp-content/uploads/2010/04/synchronic_chronicle.jpg" rel="lightbox"><img class="alignleft size-thumbnail wp-image-3910" title="synchronic_chronicle" src="http://birdhouse.org/blog/wp-content/uploads/2010/04/synchronic_chronicle-175x175.jpg" alt="" width="200" height="200" /></a> I just did something really hard &#8211; called up the San Francisco Chronicle and canceled the home subscription we&#8217;ve kept up for more than a decade. Working at a journalism school, I know exactly how difficult things are for newspapers these days, and how there is no online revenue model available that comes anywhere close to replacing revenue from print subscriptions. I really don&#8217;t want to pull my financial support, but the print edition just doesn&#8217;t make sense for our lifestyles anymore.</p>
<p>I&#8217;ve got nothing against the Chronicle. I&#8217;ve enjoyed it for years. Granted, we generally  only read it in 5 or 10-minute skim-bursts in the mornings, but I always enjoyed those sessions. Unfortunately, over the past few months, we&#8217;ve stopped the skimming too. The sad truth is that right now I&#8217;m looking across the room at a week-old stack of unopened newspapers on the kitchen table. We haven&#8217;t even taken the rubber bands off a week&#8217;s worth of great journalism.</p>
<p>So where has that time gone? Mornings are a whirlwind of pushups and smoothie making, combing the boy&#8217;s hair and packing his lunch, going over the day&#8217;s plans. And then there&#8217;s the morning email &#8211; it usually takes close to 45 minutes just to parse all the stuff that comes in overnight, every night. And part of that email time includes skimming the daily email digests I get from NY Times, Washington Post, and the LA  Times. It&#8217;s not like I&#8217;m not getting any news. Just that my lifestyle lends itself so much better to reading news on the computer than in print.</p>
<p>On top of that, my Twitter addiction has made a huge impact. Stories that really matter to me (rather than to the editors at the  Chron) find their way to the top through the organic bubbling process of the hive mind. As much as I hate to admit it, I find that spending 15 minutes on Twitter is way more efficient at surfacing great daily reading than any single newspaper (and yes, some of the articles I end up reading will be at the web sites of mainstream media houses). In effect, I&#8217;m subscribed to the whole internet &#8211; why do I need a dead tree version of just one city&#8217;s paper?</p>
<p>Finally, there&#8217;s the iPad. We don&#8217;t own one &#8211; just borrowed one from work a few times. But from those tests, it became quickly apparent that the iPad could give us the best of both worlds. If we could replace all of our print subscriptions (oh yeah &#8211; there are five magazine subscriptions in this house that are also going mostly unread) with iPad versions, we&#8217;d feel less guilty about the wasted paper, have less clutter, and (ideally) pay much less. We&#8217;ll see how that plan pans out.</p>
<p>Chronicle &#8211; I love you and support you in principle. But it no longer makes sense to support you with our wallets. So long and thanks for the good times.</p>
]]></content:encoded>
			<wfw:commentRss>http://birdhouse.org/blog/2010/04/23/goodbye-chronicle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
