<?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/"
	xmlns:georss="http://www.georss.org/georss" >

<channel>
	<title>Ogre</title>
	<atom:link href="http://rumsey.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://rumsey.org/blog</link>
	<description>smash</description>
	<lastBuildDate>Tue, 24 Aug 2010 19:04:45 +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>Is there an app for that?</title>
		<link>http://rumsey.org/blog/2010/08/is-there-an-app-for-that/</link>
		<comments>http://rumsey.org/blog/2010/08/is-there-an-app-for-that/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 19:04:45 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=348</guid>
		<description><![CDATA[I want an app that whenever I get an incoming call that&#8217;s not on my contact list, looks up the number on 800notes.com, and displays the number of posts related to that number, or any other relevant data it can scrape quickly, in time for me to see it before it goes to voice mail.  [...]]]></description>
			<content:encoded><![CDATA[<p>I want an app that whenever I get an incoming call that&#8217;s not on my contact list, looks up the number on <a href="http://800notes.com">800notes.com</a>, and displays the number of posts related to that number, or any other relevant data it can scrape quickly, in time for me to see it before it goes to voice mail.  Better yet, if there are more than X posts (say 100 to start with), it would just block the call for me.</p>
<p>This would require a jailbroken phone, since Apple and AT&amp;T don&#8217;t like apps messing with phone calls, but I&#8217;d jailbreak mine this instant if there was an app like that.</p>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/08/is-there-an-app-for-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aliso Woods</title>
		<link>http://rumsey.org/blog/2010/08/aliso-woods/</link>
		<comments>http://rumsey.org/blog/2010/08/aliso-woods/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 18:16:06 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Hiking]]></category>
		<category><![CDATA[Fitness]]></category>
		<category><![CDATA[geotag]]></category>
		<category><![CDATA[orange county]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=343</guid>
		<description><![CDATA[Hiked 11 miles in Aliso and Wood Canyon park today. The GPS app on my phone says it was over 2000 feet of elevation too, but I don&#8217;t believe it. It also drained my battery down to 25%, clearly I need a dedicated GPS if I decide I actually care about mapping whole trips as [...]]]></description>
			<content:encoded><![CDATA[<p>Hiked 11 miles in Aliso and Wood Canyon park today.  The GPS app on my phone says it was over 2000 feet of elevation too, but I don&#8217;t believe it.  It also drained my battery down to 25%, clearly I need a dedicated GPS if I decide I actually care about mapping whole trips as opposed to select points.  </p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_46F7A186-C277-49D4-86C5-859336A8CDB9.jpeg"><img src="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_46F7A186-C277-49D4-86C5-859336A8CDB9.jpeg" alt="" class="alignnone size-full" /></a></p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_33748983-9D16-4E05-9F70-159868A7BDC3.jpeg"><img src="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_33748983-9D16-4E05-9F70-159868A7BDC3.jpeg" alt="" class="alignnone size-full" /></a></p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_D0544224-FC97-4C95-BEF4-46FCB12D2792.jpeg"><img src="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_D0544224-FC97-4C95-BEF4-46FCB12D2792.jpeg" alt="" class="alignnone size-full" /></a></p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_8F502780-8A82-43D0-85FB-C274262F44D1.jpeg"><img src="http://rumsey.org/blog/wp-content/uploads/2010/08/l_2048_1536_8F502780-8A82-43D0-85FB-C274262F44D1.jpeg" alt="" class="alignnone size-full" /></a></p>
<div class="gm-map"><iframe name="gm-map-1" src="http://rumsey.org/blog?geo_mashup_content=render-map&amp;map_content=single&amp;width=100%25&amp;height=400&amp;zoom=11&amp;background_color=c0c0c0&amp;object_id=343" height="400" width="100%" marginheight="0" marginwidth="0" scrolling="no" frameborder="0"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/08/aliso-woods/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<georss:point>33.5504951 -117.7211151</georss:point>	</item>
		<item>
		<title>Holy Jim Trail</title>
		<link>http://rumsey.org/blog/2010/07/holy-jim-trail/</link>
		<comments>http://rumsey.org/blog/2010/07/holy-jim-trail/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 15:46:27 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Hiking]]></category>
		<category><![CDATA[Fitness]]></category>
		<category><![CDATA[geotag]]></category>
		<category><![CDATA[orange county]]></category>
		<category><![CDATA[pictures]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=335</guid>
		<description><![CDATA[Today I hiked the Holy Jim trail.  Or part of it anyway.  This is the most popular way to reach the top of Saddleback mountain (or more correctly, Santiago Peak).  I wasn&#8217;t expecting to make it to the peak, and so of course I didn&#8217;t.  Next time!  I did hike somewhere around 9 or 10 [...]]]></description>
			<content:encoded><![CDATA[<p>Today I hiked the Holy Jim trail.  Or part of it anyway.  This is the most popular way to reach the top of Saddleback mountain (or more correctly, Santiago Peak).  I wasn&#8217;t expecting to make it to the peak, and so of course I didn&#8217;t.  Next time!  I did hike somewhere around 9 or 10 miles, round trip.</p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0112.jpg"><img class="alignnone size-medium wp-image-337" title="IMG_0112" src="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0112-300x225.jpg" alt="Santiago Peak" width="300" height="225" /></a></p>
<p>You can see one of the radio towers on top of the peak in this picture (click to embiggen), which is from right about where I turned around.  I&#8217;d done 2000 feet of elevation gain at this point, and the peak would&#8217;ve been another 1000 and several more miles.</p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0102.jpg"><img class="alignnone size-medium wp-image-338" title="IMG_0102" src="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0102-225x300.jpg" alt="Holy Jim Falls" width="225" height="300" /></a></p>
<p>The highlight of the hike was Holy Jim falls.  Who knew there was an actual waterfall in Orange County?  And it even flows in the middle of summer! At least this year when there was lots of rain.</p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0081.jpg"><img class="alignnone size-medium wp-image-336" title="IMG_0081" src="http://rumsey.org/blog/wp-content/uploads/2010/07/IMG_0081-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>This was my favorite sight of the whole trip though, from the drive out to the trail on a very, very bumpy road.  The mist rolling over the valley and the sun just starting to peak through was spectacular.  I had to stop and get out to take pictures.  I don&#8217;t think they turned out very well though.  This is the best of the bunch, it&#8217;s the only one where you can really see all the hills going back.</p>
<div class="gm-map"><iframe name="gm-map-2" src="http://rumsey.org/blog?geo_mashup_content=render-map&amp;map_content=single&amp;width=100%25&amp;height=400&amp;zoom=11&amp;background_color=c0c0c0&amp;object_id=335" height="400" width="100%" marginheight="0" marginwidth="0" scrolling="no" frameborder="0"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/07/holy-jim-trail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<georss:point>33.6770134 -117.5173569</georss:point>	</item>
		<item>
		<title>Bridge to Nowhere</title>
		<link>http://rumsey.org/blog/2010/07/bridge-to-nowhere/</link>
		<comments>http://rumsey.org/blog/2010/07/bridge-to-nowhere/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 02:29:07 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Hiking]]></category>
		<category><![CDATA[geotag]]></category>
		<category><![CDATA[geotagging]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[pictures]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=326</guid>
		<description><![CDATA[I hiked out to this place last weekend.  About 10 miles round trip, maybe 11, I had to backtrack a couple of times.  This bridge was built in the 30s as part of a road that was going to cut through Angeles National Forest.  A flood washed the road out before it was completed, and [...]]]></description>
			<content:encoded><![CDATA[<p>I hiked out to this place last weekend.  About 10 miles round trip, maybe 11, I had to backtrack a couple of times.  This bridge was built in the 30s as part of a road that was going to cut through Angeles National Forest.  A flood washed the road out before it was completed, and the project was abandoned, but the bridge still stands, reachable only on foot.  Today the bridge itself is owned by a bungie jumping company, who lead trips to it on weekends.  You can see someone dangling down there; watching people jump off this bridge was lots of fun.</p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/07/l_1024_768_9DAD6F6D-ABF1-4E53-9959-5DDC5FC17839.jpeg"><img class="alignnone size-full" src="http://rumsey.org/blog/wp-content/uploads/2010/07/l_1024_768_9DAD6F6D-ABF1-4E53-9959-5DDC5FC17839.jpeg" alt="" /></a></p>
<p>I&#8217;m also using this post to test geotagging features on the site.  There should be an embedded Google Map below with the bridge&#8217;s location, and the new <a href="http://rumsey.org/blog/map/">Map page</a> for the site should show markers for all geo-tagged posts, including this one and a few random others I went and tagged.</p>
<div class="gm-map"><iframe name="gm-map-3" src="http://rumsey.org/blog?geo_mashup_content=render-map&amp;map_content=single&amp;width=100%25&amp;height=400&amp;zoom=11&amp;background_color=c0c0c0&amp;object_id=326" height="400" width="100%" marginheight="0" marginwidth="0" scrolling="no" frameborder="0"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/07/bridge-to-nowhere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<georss:point>34.2832832 -117.7468719</georss:point>	</item>
		<item>
		<title>iTunes Expressions</title>
		<link>http://rumsey.org/blog/2010/05/itunes-expressions/</link>
		<comments>http://rumsey.org/blog/2010/05/itunes-expressions/#comments</comments>
		<pubDate>Mon, 17 May 2010 04:48:25 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[geotag]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=306</guid>
		<description><![CDATA[iTunes smart playlists are actually fairly complex boolean expressions (since iTunes 9, previous versions were not as robust). This page describing iTunes library management contains more text than the entire Lua 3.0 manual! (I&#8217;m cheating here, Lua is on v5.1, and the manual is more than twice as large these days, but the point still [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-314" style="border: 0pt none;" title="ITunes" src="http://rumsey.org/blog/wp-content/uploads/2010/05/ITunes_Logo.png" alt="" width="128" height="128" />iTunes smart playlists are actually fairly complex boolean expressions (since iTunes 9, previous versions were not as robust).  <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=8&amp;ved=0CDkQFjAH&amp;url=http%3A%2F%2Fwww.ilounge.com%2Findex.php%2Farticles%2Fcomments%2Fthe-complete-guide-to-managing-itunes-videos%2F&amp;ei=Ir7wS7rnKoWKlweBqMG1CA&amp;usg=AFQjCNEPk7oSmVlrDIYPSeySEG7bj_8u2Q&amp;sig2=Vk970UWA4n0eSmAToxIwaw">This page describing iTunes library management</a> contains more text than the entire <a href="http://www.lua.org/manual/3.0/manual.html">Lua 3.0 manual!</a> (I&#8217;m cheating here, Lua is on v5.1, and the manual is more than twice as large these days, but the point still stands).  Via dropdowns and text boxes you&#8217;re practically writing SQL WHERE clauses when creating a smart playlist.</p>
<p>Yet for all that complexity, there is STILL no way built into iTunes to make a Smart Playlist that can precisely select between High-def and standard-def TV Shows and movies.</p>
<p>My compromise is making a playlist that selects shows between 20 and 31 minutes that are greater than 500MB, and shows 39 minutes or longer that are greater than 900MB.  Those numbers aren&#8217;t very precisely chosen, but they seemed to work properly for all but one episode in my library, there was <a href="http://thetvdb.com/?tab=episode&amp;seriesid=92411&amp;seasonid=71361&amp;id=694421&amp;lid=7">one hour long episode</a> that says it&#8217;s &#8220;HD&#8221; but is only 600MB, I ignored that one, but it illustrates why this is such a bad solution.  There are standard def shows that are nearly 600MB in my library too.</p>
<p>The <a href="http://forums.macnn.com/82/applications/395805/question-about-itunes-hd-smart-playlists/">compromise some people come to</a> is manually adding an HD Tag to the composer, description, comments, or some other field, but the whole point here is that I&#8217;m trying to avoid manually doing anything to differentiate them.  I could just as easily add all the HD videos to a dumb playlist, and then select on that playlist in a smart playlist.</p>
<p>I&#8217;ve had this frustration for at least a year, since we first got an Apple TV.  When, when, when will Apple fix it?  Or if they have, then when, when, when someone on the internet figure out how to do it?</p>
<p>Since the thing I wanted this playlist for is already an Applescript that&#8217;s iterating TV Shows from a playlist, I suppose the &#8220;solution&#8221; in this case is to make the Applescript able to differentiate.  The filename actually has an &#8220;(HD)&#8221; in it for HD episodes, and Applescript does have access to filenames, but iTunes proper can&#8217;t select on filename contents.</p>
<p>On the other hand, the horror of having to actually write more than a few lines of Applescript caused me to write just enough to be able to call out to a python script instead.  So there&#8217;s a whole &#8216;nother rant about crappy Apple &#8220;programming languages&#8221; right there.  I do realize that <a href="http://wiki.python.org/moin/MacPython/AppleScript">Python can use Applescript interfaces directly</a>, but then it&#8217;s harder to just <a href="http://dougscripts.com/itunes/scripts/ss.php?sp=moveplaylisttofolder">Download a script that almost does what I want</a> and fix the parts that don&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/05/itunes-expressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<georss:point>37.3316574 -122.0301743</georss:point>	</item>
		<item>
		<title>I Got a New Dumb Terminal!</title>
		<link>http://rumsey.org/blog/2010/05/i-got-a-new-dumb-terminal/</link>
		<comments>http://rumsey.org/blog/2010/05/i-got-a-new-dumb-terminal/#comments</comments>
		<pubDate>Mon, 10 May 2010 01:29:02 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=291</guid>
		<description><![CDATA[Yesterday, I managed to install the new version of emacs on the server that hosts this blog. I know what you&#8217;re thinking, amazing, right?! Well yeah, but I did it sitting on my mom&#8217;s couch (happy Mother&#8217;s Day, mom, don&#8217;t mind me while I sysadmin) with nothing but an iPad and iSSH. Not only did [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I managed to install the <a href="http://permalink.gmane.org/gmane.emacs.announce/17">new version of emacs</a> on the server that hosts this blog.  I know what you&#8217;re thinking, amazing, right?!  Well yeah, but I did it sitting on my mom&#8217;s couch (happy Mother&#8217;s Day, mom, don&#8217;t mind me while I sysadmin) with nothing but an iPad and <a href="http://www.zinger-soft.com/iSSH_features.html">iSSH</a>.  Not only did I install it, I can actually use it.  And blog about it.<br/></p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/05/p_1024_768_048E9835-6B61-446F-ACE3-CB9BEBAD8C08.jpeg"><img src="http://rumsey.org/blog/wp-content/uploads/2010/05/p_1024_768_048E9835-6B61-446F-ACE3-CB9BEBAD8C08.jpeg" alt="" class="alignnone size-full" /></a></p>
<p>None of it as easy or as fast as it would be at a &#8220;real&#8221; computer, but I&#8217;m pretty happy I was able to do it.<br/></p>
<p>I guess that&#8217;s hundreds of dollars spent in order to emulate a <a href="http://en.wikipedia.org/wiki/VT100">32 year old dumb terminal.</a>  Sounds like a bargain to me!   </p>
<p>The hardest part of all of the above? Getting the links and pictures in this post.  The WordPress software for iPad really kind of sucks.  I did this via the web based HTML Editor.  I probably should&#8217;ve used emacs.</p>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/05/i-got-a-new-dumb-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stuff I deleted from Facebook</title>
		<link>http://rumsey.org/blog/2010/05/stuff-i-deleted-from-facebook/</link>
		<comments>http://rumsey.org/blog/2010/05/stuff-i-deleted-from-facebook/#comments</comments>
		<pubDate>Tue, 04 May 2010 03:23:15 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=290</guid>
		<description><![CDATA[I don&#8217;t really care if the world knows all this, I just resent Facebook making it ever harder for me to control. So my Facebook profile is now almost devoid of info besides a link to this site. Also It thinks I was born in 1992. You used to be able to edit your birthday, [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t really care if the world knows all this, I just resent Facebook making it ever harder for me to control.  So my Facebook profile is now almost devoid of info besides a link to this site.  Also It thinks I was born in 1992.  You used to be able to edit your birthday, so I did, often, just to see what ads I got for different ages (and because they never let you leave the year blank).  Now you can&#8217;t, so I&#8217;ll be 22 years younger forever since the last time I played with it I made myself 18.</p>
<p>Things Facebook used to know about me include:<br />
I work at Blizzard<br />
I live in San Clemente, CA<br />
I attended UC Riverside and Dana Hills High School<br />
I &#8220;like&#8221; Rock Sugar (the band), Bruce Campbell, Have&#8217;a Corn Chips, Swiss Army Knives, and half a dozen other random things<br />
You can find various ways to contact me over there on the About/Contact page.</p>
<p>Also, this is my first post from an iPad.  Typing on it really doesn&#8217;t suck!  </p>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/05/stuff-i-deleted-from-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Today’s hike</title>
		<link>http://rumsey.org/blog/2010/03/todays-hike-fb/</link>
		<comments>http://rumsey.org/blog/2010/03/todays-hike-fb/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 00:28:38 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Hiking]]></category>
		<category><![CDATA[Fitness]]></category>
		<category><![CDATA[geotag]]></category>
		<category><![CDATA[orange county]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=283</guid>
		<description><![CDATA[Did this today: 03/13/2010 Route The hardest (though not tallest) hill, had already walked down it, this picture was on the way back. The trail on the left and all along the ridge in the background to the hill at the right.]]></description>
			<content:encoded><![CDATA[<p>Did this today:<br />
<a href="http://www.mapmyhike.com/hike/united-states/ca/san-clemente/396126852483721623">03/13/2010 Route</a></p>
<p>The hardest (though not tallest) hill, had already walked down it, this picture was on the way back.  The trail on the left and all along the ridge in the background to the hill at the right.</p>
<p><a href="http://rumsey.org/blog/wp-content/uploads/2010/03/IMG_3210.jpg"><img class="alignnone size-medium wp-image-284" title="IMG_3210" src="http://rumsey.org/blog/wp-content/uploads/2010/03/IMG_3210-300x226.jpg" alt="" width="300" height="226" /></a></p>
<div class="gm-map"><iframe name="gm-map-4" src="http://rumsey.org/blog?geo_mashup_content=render-map&amp;map_content=single&amp;width=100%25&amp;height=400&amp;zoom=11&amp;background_color=c0c0c0&amp;object_id=283" height="400" width="100%" marginheight="0" marginwidth="0" scrolling="no" frameborder="0"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/03/todays-hike-fb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<georss:point>33.4579506 -117.5736694</georss:point>	</item>
		<item>
		<title>Movie encoder &#8220;daemon&#8221;</title>
		<link>http://rumsey.org/blog/2010/02/movie-encoder-daemon/</link>
		<comments>http://rumsey.org/blog/2010/02/movie-encoder-daemon/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 00:21:01 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[iFlicks]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=272</guid>
		<description><![CDATA[I sometimes have incoming high-def video in formats that are not directly compatible with AppleTV.  I had been using iFlicks and an El Gato Turbo.264 HD encoder (a USB dongle with H.264 hardware innit), but lately that started producing bad output &#8211; I think the hardware was going bad as even the official software had [...]]]></description>
			<content:encoded><![CDATA[<p>I sometimes have incoming high-def video in formats that are not directly compatible with AppleTV.  I had been using <a href="http://www.iflicksapp.com/">iFlicks</a> and an El Gato Turbo.264 HD encoder (a USB dongle with H.264 hardware innit), but lately that started producing bad output &#8211; I think the hardware was going bad as even the official software had the same results.  It was great while it lasted, it allowed the poor overworked Mac Mini that was doing the encoding to do 720p transcodes faster than real-time.  I should note that iFlicks&#8217; author has actually recommended not using the El Gato thing, he mentions audio sync problems, but I never saw that, just frequent badly encoded video after mine started to go bad.</p>
<p>I&#8217;ve now switched back to software encoding using Handbrake.  To that end, I wrote a tiny little daemon that watches for files in one directory, encodes them, then moves them to the folder that iFlicks is watching and trashes the original.  iFlicks will then add meta-data (it searches <a href="http://thetvdb.com">thetvdb.com</a> based on the file name), and finally send the file off to iTunes (which will then sync it to AppleTV.  WHEW that&#8217;s a lot of steps, you see why I need to write myself things to help?)</p>
<p>iFlicks can do software encoding itself, but it just uses Quicktime, which is a whole hell of a lot slower than Handbrake.  Handbrake still doesn&#8217;t do 720p at real-time on a Mac Mini, but it&#8217;s only about half real-time, as opposed to Quicktime, which was taking 4-8 hours to encode an hour of video.</p>
<p>The script also gives me <a href="http://growl.info/">Growl</a> notifications, and I have the <a href="http://prowl.weks.net/">Prowl</a> app on my phone, so I get push notifications when encodings start and finish too.</p>
<p>Code after the jump.<br />
<span id="more-272"></span></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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Normal usage: movieconverter /Users/ogre/HDDownloads</span>
&nbsp;
HANDBRAKE=<span style="color: #483d8b;">'/Users/ogre/bin/HandBrakeCLI'</span>
DESTDIR=<span style="color: #483d8b;">'/Users/ogre/SBDownloads'</span>
TRASH=<span style="color: #483d8b;">'/Users/ogre/.Trash'</span>
ERRORS=<span style="color: #483d8b;">'/Users/ogre/Movies/Errors'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shutil</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">glob</span>
&nbsp;
ENCODING_DONE = <span style="color: #483d8b;">'Encoding Done'</span>
ENCODING_STARTED = <span style="color: #483d8b;">'Encoding Started'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">import</span> Growl
    useGrowl = <span style="color: #008000;">True</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Using growl for notifications'</span>
<span style="color: #ff7700;font-weight:bold;">except</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'NOT using growl for notifications, could not import Growl'</span>
    useGrowl = <span style="color: #008000;">False</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> useGrowl:
    growl = Growl.<span style="color: black;">GrowlNotifier</span><span style="color: black;">&#40;</span>applicationName=<span style="color: #483d8b;">&quot;Movie Encoder&quot;</span>,
                                notifications=<span style="color: black;">&#91;</span>ENCODING_DONE, ENCODING_STARTED<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    growl.<span style="color: black;">register</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Watching %s for movies'</span> <span style="color: #66cc66;">%</span><span style="color: black;">&#40;</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:
    files = <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%s/*.mkv'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> f <span style="color: #ff7700;font-weight:bold;">in</span> files:
        <span style="color: black;">&#40;</span>name,ext<span style="color: black;">&#41;</span> = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">splitext</span><span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
        output = name + <span style="color: #483d8b;">'.m4v'</span>
        <span style="color: #dc143c;">cmd</span> = <span style="color: #483d8b;">'%s -i &quot;%s&quot; -o &quot;%s&quot; --preset=AppleTV'</span> <span style="color: #66cc66;">%</span><span style="color: black;">&#40;</span>HANDBRAKE, f, output<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Found %s, running %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>f, <span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> useGrowl:
            growl.<span style="color: black;">notify</span><span style="color: black;">&#40;</span>ENCODING_STARTED, ENCODING_STARTED,
                         <span style="color: #483d8b;">'Starting encode: %s =&gt; %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>f, output<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        result = <span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> result == <span style="color: #ff4500;">0</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Handbrake complete, moving %s to %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>output, DESTDIR<span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># iFlicks gets stuck when moving the file this way??</span>
            <span style="color: #808080; font-style: italic;">#shutil.move(output, DESTDIR)</span>
            <span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'mv &quot;%s&quot; &quot;%s/&quot;'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>output, DESTDIR<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Moving %s to trash'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: #dc143c;">shutil</span>.<span style="color: black;">move</span><span style="color: black;">&#40;</span>f, TRASH<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> useGrowl:
                growl.<span style="color: black;">notify</span><span style="color: black;">&#40;</span>ENCODING_DONE, ENCODING_DONE,
                             <span style="color: #483d8b;">'Finished encoding %s =&gt; %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>f, output<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Handbrake returned error code %d, moving file %s to %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>result<span style="color: black;">&#41;</span>
            <span style="color: #dc143c;">shutil</span>.<span style="color: black;">move</span><span style="color: black;">&#40;</span>f, ERRORS<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/02/movie-encoder-daemon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle DRM Removal Using SCons</title>
		<link>http://rumsey.org/blog/2010/02/kindle-drm-removal-using-scons/</link>
		<comments>http://rumsey.org/blog/2010/02/kindle-drm-removal-using-scons/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 22:14:26 +0000</pubDate>
		<dc:creator>Ogre</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[drm]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scons]]></category>

		<guid isPermaLink="false">http://rumsey.org/blog/?p=264</guid>
		<description><![CDATA[I have a Kindle. I like it a lot, but it has some issues. The recent Macmillan vs. Amazon fight is one. Another is the DRM on every file purchased from Amazon. If I buy a book, I want to know that I can read it forever. Luckily, smart people figured out how to break [...]]]></description>
			<content:encoded><![CDATA[<p>I have a Kindle.  I like it a lot, but it has some issues.  The recent <a href="http://www.antipope.org/charlie/blog-static/2010/02/amazonfail-round-up.html">Macmillan</a> vs. <a href="http://whatever.scalzi.com/2010/01/30/a-quick-note-on-ebook-pricing/">Amazon</a> fight is one.  Another is the DRM on every file purchased from Amazon.  If I buy a book, I want to know that I can read it forever.  Luckily, smart people figured out how to break the DRM on most Kindle books a long time ago.  A few books are in another format called Topaz that until recently hadn&#8217;t been broken.  I just found a book I wanted that was in that format, so I went and looked again, and it turns out someone finally cracked it about a month ago.</p>
<p>I&#8217;m not going to link to any of the actual tools here, but they shouldn&#8217;t be too hard to find.  My contribution is an SConstruct file for the <a href="http://scons.org/">SCons</a> build system that automatically copies all my books to my computer and removes the DRM all in one step.  It&#8217;s not your typical use of a build system, but when I thought about what I was trying to do, I realized it was really just a simple dependency graph, something SCons is perfect for.</p>
<p>The complete process is:</p>
<ol>
<li>Plug Kindle into computer via USB</li>
<li>In a shell, cd &lt;path/where/this/file/lives&gt;</li>
<li>scons</li>
</ol>
<p>This will automatically get any new books, and remove the DRM (and in Topaz&#8217;s case, convert them into svg files viewable in a browser)</p>
<p>Installation is not difficult either:</p>
<ol>
<li>Install SCons</li>
<li>Put this SConstruct file in the directory where you want to save your books</li>
<li>Get your Kindle&#8217;s PID and put it in the SConstruct file (the DRM tools will tell you how to do that)</li>
<li>Edit the location your Kindle gets mounted to.  The one I have in there is for a Mac, but except for that path I don&#8217;t see any reason this won&#8217;t all work on any OS</li>
<li>Put the DRM tools in a tools subdirectory</li>
</ol>
<p>SConstruct file after the jump<br />
<span id="more-264"></span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
&nbsp;
env = Environment<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Put your Kindle's PID here</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'KINDLECODE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'1234567890'</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Put the path to your Kindle when attached via USB</span>
<span style="color: #808080; font-style: italic;"># (This is where it shows up on a Mac)</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'DEVICEDIR'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'/Volumes/Kindle/documents'</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Topaz dedrm only wants the first 8 chars of the kindle PID</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'SHORTKINDLECODE'</span><span style="color: black;">&#93;</span> = env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'KINDLECODE'</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>:<span style="color: #ff4500;">8</span><span style="color: black;">&#93;</span>
&nbsp;
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'MOBIDEDRM'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'tools/MOBI/MobiDeDrm09.py'</span>
topazprogs=<span style="color: #483d8b;">'tools/TOPAZ/'</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'TOPAZDEDRM'</span><span style="color: black;">&#93;</span> = topazprogs + <span style="color: #483d8b;">'cmbtc_dump_nonK4PC.py'</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'TOPAZ2SVG'</span><span style="color: black;">&#93;</span> = topazprogs + <span style="color: #483d8b;">'gensvg.py'</span>
env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'TOPAZ2HTML'</span><span style="color: black;">&#93;</span> = topazprogs + <span style="color: #483d8b;">'genhtml.py'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'DEVICEDIR'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
    kindle = Glob<span style="color: black;">&#40;</span>env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'DEVICEDIR'</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">'/*.azw'</span><span style="color: black;">&#41;</span> + Glob<span style="color: black;">&#40;</span>env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'DEVICEDIR'</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">'/*.azw1'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> k <span style="color: #ff7700;font-weight:bold;">in</span> kindle:
        Command<span style="color: black;">&#40;</span><span style="color: #483d8b;">'DRM/'</span>+k.<span style="color: black;">name</span>, k, Copy<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;$TARGET&quot;</span>, <span style="color: #483d8b;">&quot;$SOURCE&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
azw = Glob<span style="color: black;">&#40;</span><span style="color: #483d8b;">'DRM/*.azw'</span><span style="color: black;">&#41;</span>
mobi = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> a <span style="color: #ff7700;font-weight:bold;">in</span> azw:
    base,ext = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">splitext</span><span style="color: black;">&#40;</span>a.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
    mobi += env.<span style="color: black;">Command</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'#Mobi/'</span>+base+<span style="color: #483d8b;">'.mobi'</span>, a,
                        <span style="color: #483d8b;">'$MOBIDEDRM $SOURCE $TARGET &quot;$KINDLECODE&quot;'</span><span style="color: black;">&#41;</span>
Ignore<span style="color: black;">&#40;</span>mobi, env<span style="color: black;">&#91;</span><span style="color: #483d8b;">'MOBIDEDRM'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
azw1 = Glob<span style="color: black;">&#40;</span><span style="color: #483d8b;">'DRM/*.azw1'</span><span style="color: black;">&#41;</span>
topaz = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> a <span style="color: #ff7700;font-weight:bold;">in</span> azw1:
    base,ext = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">splitext</span><span style="color: black;">&#40;</span>a.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
    topazdir = env.<span style="color: black;">Dir</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'#Topaz/'</span>+base+<span style="color: #483d8b;">'/'</span><span style="color: black;">&#41;</span>
    dat = env.<span style="color: black;">Command</span><span style="color: black;">&#40;</span>topazdir.<span style="color: black;">File</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'dict0000.dat'</span><span style="color: black;">&#41;</span>, a,
                      <span style="color: #483d8b;">'$TOPAZDEDRM -v -v -d -o &quot;'</span>+topazdir.<span style="color: black;">path</span>+<span style="color: #483d8b;">'&quot; -p &quot;$SHORTKINDLECODE&quot; $SOURCE'</span><span style="color: black;">&#41;</span>
    svg = env.<span style="color: black;">Command</span><span style="color: black;">&#40;</span>topazdir.<span style="color: black;">Dir</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'svg'</span><span style="color: black;">&#41;</span>, dat,
                      <span style="color: #483d8b;">'$TOPAZ2SVG &quot;'</span>+topazdir.<span style="color: black;">path</span>+<span style="color: #483d8b;">'&quot;'</span><span style="color: black;">&#41;</span>
    topaz += svg
    <span style="color: #808080; font-style: italic;">#html = env.Command('#Topaz/'+base+'/book.html', topazdir,</span>
    <span style="color: #808080; font-style: italic;">#                   '$TOPAZ2HTML $SOURCE')</span>
    <span style="color: #808080; font-style: italic;">#topaz += html</span>
    <span style="color: #808080; font-style: italic;">#env.Depends(html, svg)</span>
&nbsp;
env.<span style="color: black;">Alias</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'all'</span>, mobi<span style="color: black;">&#41;</span>
env.<span style="color: black;">Alias</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'all'</span>, topaz<span style="color: black;">&#41;</span>
&nbsp;
env.<span style="color: black;">Alias</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'mobi'</span>, mobi<span style="color: black;">&#41;</span>
env.<span style="color: black;">Alias</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'topaz'</span>, topaz<span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://rumsey.org/blog/2010/02/kindle-drm-removal-using-scons/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
