<?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>Domo Domo</title>
	<atom:link href="http://www.domodomo.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.domodomo.com</link>
	<description>Ian Fitzpatrick's Project Log</description>
	<lastBuildDate>Mon, 06 Sep 2010 01:34:54 +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>Rudders &#8211; Kind of a Big Deal</title>
		<link>http://www.domodomo.com/?p=212</link>
		<comments>http://www.domodomo.com/?p=212#comments</comments>
		<pubDate>Mon, 06 Sep 2010 01:30:09 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Sailing]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=212</guid>
		<description><![CDATA[I had a fright this afternoon on Lake Harriet.  I am chronicling it hear so that I will never make this mistake again. Xiaowen and I took out a Catalina Capri 16.5&#8242; on Lake Harriet.  It was a very brisk day for small boats, winds gusting up over 15, steady at 10-13.  Our club boats [...]]]></description>
			<content:encoded><![CDATA[<p>I had a fright this afternoon on Lake Harriet.  I am chronicling it hear so that I will never make this mistake again.</p>
<p>Xiaowen and I took out a <a href="http://www.lynnsailboats.com/newsailboats/item.nhtml?profile=newsailboats&amp;UID=106">Catalina Capri 16.5&#8242;</a> on Lake Harriet.  It was a very brisk day for small boats, winds gusting up over 15, steady at 10-13.  Our club boats are moored to buoys in a <a href="http://www.flickr.com/photos/michele123mstudios/1443978371/">buoy field</a>, and typically you row them with a tender (rowboat) to the dock to rig them up and take&#8217;em out.  Towing her through the field was mighty tricky as the waves were extremely choppy.</p>
<p>But we got the boat to the dock, rigged her up, and shoved off the dock on a port tack.  Or so we thought.  Then we started going backwards, drifting towards the boats in the buoy field and the shore.  I had no idea why the boat wasn&#8217;t responding.  At first I thought maybe I just was stuck in irons, the bow  pointing into the wind.  But it was obvious that this was not the case as no matter how I adjusted the sail trim, I couldn&#8217;t get any forward momentum.  Steering seemed really unresponsive.</p>
<p><span id="more-212"></span>We were just about to crash into a boat in the buoy field, and monetarily entangled a spar, but Xiaowen was able to grab an oar from our hold and push us a way.  We didn&#8217;t hurt the moored boat, thank god.  We did however assemble a crowd, as folks from the shore (non sailors, thankfully) watched our pathetic drift through a crowded buoy field towards the shore.</p>
<p>I was just about out of ideas when I <em>finally</em> realized that the issue must be the steering.  I looked at the rudder, and what do you know, it&#8217;s retractable!  Wow, don&#8217;t think I&#8217;d seen one of those before.  And of course the rudder was in the retracted position, not in the water.  That&#8217;s like trying to drive a car with a steering wheel hooked up to nothing.</p>
<p>I pressed the rudder down into the water, caught the wind, and instantly we were under way, a mere ten feet from getting stuck in the weeds by shore.</p>
<p>I managed to sail us through the buoy field and onto the open lake without any damage, except some shredded nerves and a maybe a wounded pride.  Still, it was definetly touch and go, and not a situation I&#8217;d like to find myself in again.</p>
<p>So next time during my pre-dock departure mental checklist, I am certainly checking out the rudder, and making sure it is IN the water before shoving off.</p>
<p>I&#8217;ll try and make my next sailing post a happy one!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=212</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instapaper an Entire WordPress Blog</title>
		<link>http://www.domodomo.com/?p=174</link>
		<comments>http://www.domodomo.com/?p=174#comments</comments>
		<pubDate>Mon, 23 Aug 2010 00:55:30 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=174</guid>
		<description><![CDATA[I love Instapaper, the web service that converts long form articles into beautifully typeset documents for offline reading on your iPhone or iPad.  There are many blogs that have a very chronological progession, or tell a story in a linear way that isn&#8217;t dated over time (IE not a tech blog).  I was thinking it [...]]]></description>
			<content:encoded><![CDATA[<p>I love <a href="http://www.instapaper.com">Instapaper</a>, the web service that converts long form articles into beautifully typeset documents for offline reading on your iPhone or iPad.  There are many blogs that have a very chronological progession, or tell a story in a linear way that isn&#8217;t dated over time (IE not a tech blog).  I was thinking it would be cool to have an ebook  of these blogs, but why bother figuring the epub format out when Instapaper is right there?</p>
<p>The problem is Instapaper assumes you only have one file your are instapapering, not blog posts split into many many pages.  So I needed a way to make this one monolithic file.  I couldn&#8217;t find any programs for free that do this, so I wrote a little Python script I call Cheeser.  Cheeser downloads WordPress blog posts in chronological order.  Why is it called Cheeser?  From Urban Dictionary, Cheeser definition:</p>
<blockquote><p>In the gaming world, a person who repeatedly  performs the same moves in  fighting games (such as in Soul Caliber,  Street Fighter, etc) in order  to win.</p></blockquote>
<p><span id="more-174"></span>Cheeser goes through a WordPress site post by post, using the trick of WordPress&#8217;s &#8216;p=100&#8242; where 100 is the post number.   So it&#8217;s repetitive and using a lame trick, it&#8217;s a cheeser.  The code for cheeser is at the end of this post.  I tested it on Python 2.6.  You will need the <a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a> library for Python as well.</p>
<p>To get Cheeser working, edit the constants at the top of the script to meet your needs.  In WordPress templates, usually there is one DIV container that holds the content of each post.  The default search settings in Cheeser should find this DIV for most WordPress blogs.</p>
<p>Once you have your huge html file, you will need to upload it somewhere on the web Instapaper can see it.  Once it&#8217;s there, browse to it, click your Instapaper &#8216;Read Later&#8217; button, and your golden.</p>
<p>Oh one caveat, Cheeser currently isn&#8217;t smart about encoding, and assumes the blog is in UTF-8.</p>
<p>One other note, I know this scraping stuff is considered gauche by some.  Of course, you shouldn&#8217;t scrape sites to redistribute them, sell them, or make spam sites from them.  I would take down the html file as soon as I Instapaper/sync it to my device it if I were you.  You don&#8217;t want the Google bot finding it.  At the very least, use robots.txt to make it unsearchable.</p>
<p>Here&#8217;s the code.</p>
<pre class="brush: python;">
import time, urllib2
from BeautifulSoup import BeautifulSoup
from urllib2 import HTTPError

# Base URL of the wordpress blog you will be downloading
BLOG_URL = 'http://www.domodomo.com?p='

# Save end result to this HTML file
SAVE_FILE = '/Users/ianfitzpatrick/code/cheeser/domodomo.html'

# Break between downloading each page, in seconds.
SLEEP_LENGTH = 30

#  Range of posts to download
START_POST = 3
END_POST = 100

#  These three constants are how Cheeser finds the element that contains the blog post
ELEMENT = 'div'
SELECTOR_TYPE = 'class'
SELECTOR_VALUE = 'post'

TITLE = &quot;Domo Domo - Ian Fitzpatrick's Project Log&quot;

HEAD = &quot;&quot;&quot;
&lt;!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'&gt;
&lt;html xmlns='http://www.w3.org/1999/xhtml' dir='ltr' lang='en-US'&gt;
&lt;head profile='http://gmpg.org/xfn/11'&gt;
&lt;meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /&gt;
&quot;&quot;&quot;

HEAD += '&lt;title&gt;' + TITLE + '&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;' + TITLE + '&lt;/h1&gt;'

TAIL = '&lt;/body&gt;&lt;/html&gt;'

def write_output(output):
    outfile = open(SAVE_FILE, 'a')
    outfile.write(output.encode('utf-8'))
    outfile.close()

# Write document header
write_output(HEAD)

for i in range(START_POST, END_POST):
    try:
        page = urllib2.urlopen(BLOG_URL + unicode(i))
        soup = BeautifulSoup(page, fromEncoding='utf-8')
        output = soup.find(ELEMENT, { SELECTOR_TYPE : SELECTOR_VALUE })
        write_output(unicode(output))
        print 'Reading blog post ' + str(i)

    except HTTPError:
        print 'Skipping blog post ' +str(i)
        continue

    time.sleep(SLEEP_LENGTH)

# Write document tail
write_output(TAIL)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=174</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>All glory to Firebug.  Just so&#8230;</title>
		<link>http://www.domodomo.com/?p=172</link>
		<comments>http://www.domodomo.com/?p=172#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:10:45 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=172</guid>
		<description><![CDATA[All glory to Firebug. Just solved a corker of a css margin bug for me.]]></description>
			<content:encoded><![CDATA[<p>All glory to Firebug.  Just solved a corker of a css margin bug for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=172</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So I guess the slang name for &#8230;</title>
		<link>http://www.domodomo.com/?p=171</link>
		<comments>http://www.domodomo.com/?p=171#comments</comments>
		<pubDate>Wed, 18 Aug 2010 03:23:32 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=171</guid>
		<description><![CDATA[So I guess the slang name for the all knowing community encyclopedia is &#8216;Wikip&#8217;.]]></description>
			<content:encoded><![CDATA[<p>So I guess the slang name for the all knowing community encyclopedia is &#8216;Wikip&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=171</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wow, it&#8217;s going to be an absol&#8230;</title>
		<link>http://www.domodomo.com/?p=170</link>
		<comments>http://www.domodomo.com/?p=170#comments</comments>
		<pubDate>Tue, 17 Aug 2010 21:20:10 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=170</guid>
		<description><![CDATA[Wow, it&#8217;s going to be an absolutely perfect night for sailing. Wish I could make it to club sailing.]]></description>
			<content:encoded><![CDATA[<p>Wow, it&#8217;s going to be an absolutely perfect night for sailing.  Wish I could make it to club sailing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=170</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do read this:  Yakuza review t&#8230;</title>
		<link>http://www.domodomo.com/?p=167</link>
		<comments>http://www.domodomo.com/?p=167#comments</comments>
		<pubDate>Wed, 11 Aug 2010 03:08:44 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=167</guid>
		<description><![CDATA[Do read this: Yakuza review the game Yakuza 3. http://www.boingboing.net/2010/08/10/yakuza-3-review.html]]></description>
			<content:encoded><![CDATA[<p>Do read this:  Yakuza review the game Yakuza 3. <a href="http://www.boingboing.net/2010/08/10/yakuza-3-review.html" rel="nofollow">http://www.boingboing.net/2010/08/10/yakuza-3-review.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=167</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Herb Garden Week 5:  http://ww&#8230;</title>
		<link>http://www.domodomo.com/?p=166</link>
		<comments>http://www.domodomo.com/?p=166#comments</comments>
		<pubDate>Wed, 11 Aug 2010 03:03:29 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=166</guid>
		<description><![CDATA[Herb Garden Week 5: http://www.domodomo.com/?p=161 or http://www.flickr.com/photos/14682315@N07/sets/72157624699635026/]]></description>
			<content:encoded><![CDATA[<p>Herb Garden Week 5:  <a href="http://www.domodomo.com/?p=161" rel="nofollow">http://www.domodomo.com/?p=161</a>  or  <a href="http://www.flickr.com/photos/14682315@N07/sets/72157624699635026/" rel="nofollow">http://www.flickr.com/photos/14682315@N07/sets/72157624699635026/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=166</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herb Garden Week 5</title>
		<link>http://www.domodomo.com/?p=161</link>
		<comments>http://www.domodomo.com/?p=161#comments</comments>
		<pubDate>Wed, 11 Aug 2010 02:59:03 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Gardening]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=161</guid>
		<description><![CDATA[Update in the Herb Garden saga.  It&#8217;s going well, particularly in basil land, which is the most important to me anyway.  Have picked a few batches of basil as well as salad greens, but they keep right on&#8217;a growing.]]></description>
			<content:encoded><![CDATA[<p>Update in the Herb Garden saga.  It&#8217;s going well, particularly in basil land, which is the most important to me anyway.  Have picked a few batches of basil as well as salad greens, but they keep right on&#8217;a growing.</p>
<div class="flickr_slideshow" style="height:384px;width:400px;margin:0 auto;padding:10px;border:1px solid #cccccc;background:#eeeeee;">
	<object type="application/x-shockwave-flash" data="http://www.flickr.com/apps/slideshow/show.swf?v=69832" width="400" height="384">
	<param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=69832" />
	<param name="FlashVars" value="&amp;offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2F14682315@N07%2Fsets%2F72157624699635026%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2F14682315@N07%2Fsets%2F72157624699635026%2F&amp;set_id=72157624699635026&amp;jump_to=" />
	<param name="width" value="400" />
	<param name="height" value="384" />
	</object>
	</div>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=161</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oh wait, it&#8217;s not until the 21&#8230;</title>
		<link>http://www.domodomo.com/?p=160</link>
		<comments>http://www.domodomo.com/?p=160#comments</comments>
		<pubDate>Tue, 10 Aug 2010 03:15:37 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=160</guid>
		<description><![CDATA[Oh wait, it&#8217;s not until the 21st. I&#8217;m going. Looks fun for a cover band, ukes conquer all: http://www.neutralukehotel.com/tour.html]]></description>
			<content:encoded><![CDATA[<p>Oh wait, it&#8217;s not until the 21st.  I&#8217;m going.  Looks fun for a cover band, ukes conquer all:  <a href="http://www.neutralukehotel.com/tour.html" rel="nofollow">http://www.neutralukehotel.com/tour.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=160</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Okay&#8230;&#8221;Neutral Uke Hotel&#8221; pla&#8230;</title>
		<link>http://www.domodomo.com/?p=159</link>
		<comments>http://www.domodomo.com/?p=159#comments</comments>
		<pubDate>Tue, 10 Aug 2010 03:11:38 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Tweets]]></category>

		<guid isPermaLink="false">http://www.domodomo.com/?p=159</guid>
		<description><![CDATA[Okay&#8230;&#8221;Neutral Uke Hotel&#8221; playing this Saturday w/ Communist Daughter. Extremely intriguing.]]></description>
			<content:encoded><![CDATA[<p>Okay&#8230;&#8221;Neutral Uke Hotel&#8221; playing this Saturday w/ Communist Daughter.  Extremely intriguing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.domodomo.com/?feed=rss2&amp;p=159</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
