<?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>John Hobbs on coding, Omaha, and life in general &#187; Geek</title>
	<atom:link href="http://www.velvetcache.org/category/geek/feed" rel="self" type="application/rss+xml" />
	<link>http://www.velvetcache.org</link>
	<description>I Love Darcy. I Love Code. I love Omaha.</description>
	<lastBuildDate>Thu, 29 Jul 2010 15:00:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Thursday Quote: Ed Nather</title>
		<link>http://www.velvetcache.org/2010/07/22/thursday-quote-ed-nather</link>
		<comments>http://www.velvetcache.org/2010/07/22/thursday-quote-ed-nather#comments</comments>
		<pubDate>Thu, 22 Jul 2010 15:00:16 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1021</guid>
		<description><![CDATA[&#8220;I have often felt that programming is an art form, whose real value can only be appreciated by another versed in the same arcane art;&#8221; - Ed NatherThe Story of Mel, a Real Programmer Related posts:Thursday Quote: Rob Pike Thursday Quote: Harold Ableson Thursday Quote: Jeff Foster


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/03/11/thursday-quote-rob-pike' rel='bookmark' title='Permanent Link: Thursday Quote: Rob Pike'>Thursday Quote: Rob Pike</a></li>
<li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/05/27/thursday-quote-jeff-foster' rel='bookmark' title='Permanent Link: Thursday Quote: Jeff Foster'>Thursday Quote: Jeff Foster</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>
<blockquote>&#8220;I have often felt that programming is an art form, whose real value can only be appreciated by another versed in the same arcane art;&#8221;</p></blockquote>
<p style="text-align: right; font-weight: bold;">- Ed Nather<br/><a href="http://www.jargon.net/jargonfile/t/TheStoryofMel.html" target="_blank">The Story of Mel, a Real Programmer</a></p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/03/11/thursday-quote-rob-pike' rel='bookmark' title='Permanent Link: Thursday Quote: Rob Pike'>Thursday Quote: Rob Pike</a></li>
<li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/05/27/thursday-quote-jeff-foster' rel='bookmark' title='Permanent Link: Thursday Quote: Jeff Foster'>Thursday Quote: Jeff Foster</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/22/thursday-quote-ed-nather/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thursday Quote: Harold Ableson</title>
		<link>http://www.velvetcache.org/2010/07/15/thursday-quote-harold-ableson-2</link>
		<comments>http://www.velvetcache.org/2010/07/15/thursday-quote-harold-ableson-2#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:00:27 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1014</guid>
		<description><![CDATA[&#8220;&#8230;it&#8217;s very easy to confuse the essence of what you are doing with the tools that you use.&#8221; - Harold AblesonEE &#38; CS Professor at MITOverview and Introduction to Lisp Related posts:Thursday Quote: Harold Ableson Thursday Quote: David Heinemeier Hansson Thursday Quote: Justin


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/05/06/941' rel='bookmark' title='Permanent Link: Thursday Quote: David Heinemeier Hansson'>Thursday Quote: David Heinemeier Hansson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/03/thursday-quote' rel='bookmark' title='Permanent Link: Thursday Quote: Justin'>Thursday Quote: Justin</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>
<blockquote>&#8220;&#8230;it&#8217;s very easy to confuse the essence of what you are doing with the tools that you use.&#8221;</p></blockquote>
<p style="text-align: right; font-weight: bold;">- Harold Ableson<br/>EE &amp; CS Professor at MIT<br/><a href="http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/" target="_blank">Overview and Introduction to Lisp</a></p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/05/06/941' rel='bookmark' title='Permanent Link: Thursday Quote: David Heinemeier Hansson'>Thursday Quote: David Heinemeier Hansson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/03/thursday-quote' rel='bookmark' title='Permanent Link: Thursday Quote: Justin'>Thursday Quote: Justin</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/15/thursday-quote-harold-ableson-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Lomo Photos</title>
		<link>http://www.velvetcache.org/2010/07/14/more-lomo-photos</link>
		<comments>http://www.velvetcache.org/2010/07/14/more-lomo-photos#comments</comments>
		<pubDate>Wed, 14 Jul 2010 23:00:30 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Darcy]]></category>
		<category><![CDATA[Fisheye]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Holga]]></category>
		<category><![CDATA[Lomography]]></category>
		<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1296</guid>
		<description><![CDATA[We found and developed four rolls of film the other day. Here are some of my favorites from the batch. Fisheye shots are Darcy&#8217;s, the others should all be mine (some of these are few years old though, so no promises on that). Related posts:Holga Camera


Related posts:<ol><li><a href='http://www.velvetcache.org/2008/04/26/holga-camera' rel='bookmark' title='Permanent Link: Holga Camera'>Holga Camera</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>We found and developed four rolls of film the other day.  Here are some of my favorites from the batch. Fisheye shots are Darcy&#8217;s, the others should all be mine (some of these are few years old though, so no promises on that).</p>
<p style="text-align: center;"><a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/002.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/002.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/004.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/004.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/006.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/006.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/007.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/007.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/011.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/011.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/014.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/014.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/018.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/018.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_000_1.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_000_1.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_000.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_000.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_003.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_003.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_004.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_004.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_005.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_005.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_011.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24496_011.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_003.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_003.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_008.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_008.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_009.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_009.sm.jpg" alt="" /></a><br/><br />
<a href="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_011.jpg" target="_blank" rel="lightbox[1296]"><img src="http://static.velvetcache.org/pages/2010/07/14/more-lomo-photos/A24497_011.sm.jpg" alt="" /></a></p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2008/04/26/holga-camera' rel='bookmark' title='Permanent Link: Holga Camera'>Holga Camera</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/14/more-lomo-photos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Canon Pixma MX320</title>
		<link>http://www.velvetcache.org/2010/07/14/review-canon-pixma-mx320</link>
		<comments>http://www.velvetcache.org/2010/07/14/review-canon-pixma-mx320#comments</comments>
		<pubDate>Wed, 14 Jul 2010 20:52:46 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Consume]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Printer]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1292</guid>
		<description><![CDATA[A week or two ago I bought this mutli-function to replace the loathsome Lexmark I&#8217;d had for several years. I didn&#8217;t have a chance to try it out until today. Since I&#8217;m home sick I drug it into the bedroom (yes, it is big and heavy) and tinkered from the comfort of bed. All around [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/07/08/review-skullcandy-lowrider-headphones' rel='bookmark' title='Permanent Link: Review: Skullcandy Lowrider Headphones'>Review: Skullcandy Lowrider Headphones</a></li>
<li><a href='http://www.velvetcache.org/2006/11/29/gimp-combat' rel='bookmark' title='Permanent Link: GIMP Combat'>GIMP Combat</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://static.velvetcache.org/pages/2010/07/14/review-canon-pixma-mx320/mx320.jpg" align="left" style="margin-right: 5px; margin-bottom: 5px;" alt="A Pixma MX320" />A week or two ago I bought this mutli-function to replace the loathsome Lexmark I&#8217;d had for several years.  I didn&#8217;t have a chance to try it out until today. Since I&#8217;m home sick I drug it into the bedroom (yes, it is big and heavy) and tinkered from the comfort of bed.</p>
<p>All around it&#8217;s a nice machine. It copies fine without a computer attached, and it works like a dream with Kubuntu; scans and prints.  It even shows up as an image source in Gimp. Nice.</p>
<p>For those you wanting to get it going on Linux, don&#8217;t bother looking for the drivers on the US support site, you have to hit the Europe one. Don&#8217;t ask me why, just go here: <a href="http://software.canon-europe.com/products/0010697.asp" target="_blank">http://software.canon-europe.com/products/0010697.asp</a>. They offer deb&#8217;s, rpm&#8217;s and source, so it should work pretty universally on a modern system. The debs went in flawlessly for me, and poof, the thing worked.</p>
<p>Print quality is good, crisp and clean.  Scanning is another matter.  I ran through some prints I got back the other day, and there is grain everywhere.  It&#8217;s not unbearable, but check the next post to see what I mean.</p>
<p>All in all and good Linux compatible printer/scanner, for only $49 at Wal-Mart (oh the shame)</p>
<p>Also it has this weird thing called a &#8220;fax&#8221;. I&#8217;ve yet to figure out what that is or why you would want one.</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/07/08/review-skullcandy-lowrider-headphones' rel='bookmark' title='Permanent Link: Review: Skullcandy Lowrider Headphones'>Review: Skullcandy Lowrider Headphones</a></li>
<li><a href='http://www.velvetcache.org/2006/11/29/gimp-combat' rel='bookmark' title='Permanent Link: GIMP Combat'>GIMP Combat</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/14/review-canon-pixma-mx320/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Review: Skullcandy Lowrider Headphones</title>
		<link>http://www.velvetcache.org/2010/07/08/review-skullcandy-lowrider-headphones</link>
		<comments>http://www.velvetcache.org/2010/07/08/review-skullcandy-lowrider-headphones#comments</comments>
		<pubDate>Thu, 08 Jul 2010 23:17:41 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Consume]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Gear]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1259</guid>
		<description><![CDATA[Last week I had two sets of headphones go bad on me in the space of three days. The first pair was my set of Sony Pysc over-the-ear headphones. Pretty nice, I&#8217;ve had them for years and I really love them. Planning on giving it a shot to bring them back to life with the [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/07/14/review-canon-pixma-mx320' rel='bookmark' title='Permanent Link: Review: Canon Pixma MX320'>Review: Canon Pixma MX320</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Last week I had two sets of headphones go bad on me in the space of three days.  The first pair was my set of <a href="http://www.amazon.com/gp/product/B0015KZJXW?ie=UTF8&#038;tag=o053-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B0015KZJXW" target="_blank">Sony Pysc over-the-ear headphones</a>.</p>
<p>Pretty nice, I&#8217;ve had them for years and I really love them.  Planning on giving it a shot to bring them back to life with the soldering iron.</p>
<p>The second pair was some cheap Wal-Mart replacements for the Pysc&#8217;s.</p>
<p>After those died I decided to suck it up and grab a new pair of good headphones.  I headed over to <a href="http://ww.nfm.com/" target="_blank">The Mart</a> over lunch and picked out a pair of Skullcandy Lowrider headphones for sub-$30 before tax.</p>
<p><a href="http://static.velvetcache.org/pages/2010/07/08/review-skullcandy-lowrider-headphones/skullcandy.headphones.jpg" target="_blank" rel="lightbox[1259]"><img src="http://static.velvetcache.org/pages/2010/07/08/review-skullcandy-lowrider-headphones/skullcandy.headphones.sm.jpg" alt="Good Looking Headphones" /></a></p>
<p>They aren&#8217;t bad, especially for a quick buy.  Snazzy looks, 40mm driver, comfy padding, good isolation and they fold up nice. They are a bit floppy in the joints until you get them on your head, which feels (and probably looks) pretty silly.  Cord is a bit shorter than I would expect too.</p>
<p>The unfortunate surprise came when I hooked them up.  They sounded great in the store, but back at the office they were flat.  Too much bass and mids.  My guess is that they are optimized for hip-hop or something else.  Either way, it wasn&#8217;t what I liked.</p>
<p>No problem though, after some experimentation I found an EQ curve to make up for the difference.  This is what I worked out in Amarok.  It feels right to me, I ran it through some Say Anything,  Pedro The Lion, and Showbread.  Reasonably diverse and fits my music taste.</p>
<table style="border: 1px solid #CCC; font-size: 10px; width: 100%;">
<tr>
<td style="border-right: 1px solid #CCC;">1.2 dB</td>
<td style="border-right: 1px solid #CCC;">1.9 dB</td>
<td style="border-right: 1px solid #CCC;">0.0 dB</td>
<td style="border-right: 1px solid #CCC;">0.5 dB</td>
<td style="border-right: 1px solid #CCC;">1.9 dB</td>
<td style="border-right: 1px solid #CCC;">1.2 dB</td>
<td style="border-right: 1px solid #CCC;">0.0 dB</td>
<td style="border-right: 1px solid #CCC;">2.3 dB</td>
<td style="border-right: 1px solid #CCC;">4.2 dB</td>
<td>4.2 dB</td>
</tr>
<tr>
<td style="border-right: 1px solid #CCC;">60 Hz</td>
<td style="border-right: 1px solid #CCC;">170 Hz</td>
<td style="border-right: 1px solid #CCC;">310 Hz</td>
<td style="border-right: 1px solid #CCC;">600 Hz</td>
<td style="border-right: 1px solid #CCC;">1 kHz</td>
<td style="border-right: 1px solid #CCC;">3 kHz</td>
<td style="border-right: 1px solid #CCC;">6 kHz</td>
<td style="border-right: 1px solid #CCC;">12 kHz</td>
<td style="border-right: 1px solid #CCC;">14 kHz</td>
<td>16 kHz</td>
</tr>
</table>
<p>End result? I like them, probably won&#8217;t take them to the coffee shop for fear of looking goofy, but they are pretty good for home or work listening.</p>
<p><b>Bonus Review &#8211; Skullcandy Warranty Registration</b></p>
<p>The Skullcandy website says it takes &#8220;only 10 minutes&#8221; to register your headphones for warranty. Plus you have to register on their site.  Really Skullcandy? That&#8217;s the best you can do? No thanks, I&#8217;ll take my chances without a warranty.</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/07/14/review-canon-pixma-mx320' rel='bookmark' title='Permanent Link: Review: Canon Pixma MX320'>Review: Canon Pixma MX320</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/08/review-skullcandy-lowrider-headphones/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thursday Quote: David Thornburg</title>
		<link>http://www.velvetcache.org/2010/07/08/thursday-quote-david-thornburg</link>
		<comments>http://www.velvetcache.org/2010/07/08/thursday-quote-david-thornburg#comments</comments>
		<pubDate>Thu, 08 Jul 2010 15:00:25 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1019</guid>
		<description><![CDATA[&#8220;Any teacher that can be replaced by a computer, deserves to be.&#8221; - David ThornburgEducational Technologies Researcher Related posts:Thursday Quote: David Heinemeier Hansson Thursday Quote: Harold Ableson Thursday Quote: Justin


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/05/06/941' rel='bookmark' title='Permanent Link: Thursday Quote: David Heinemeier Hansson'>Thursday Quote: David Heinemeier Hansson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/03/thursday-quote' rel='bookmark' title='Permanent Link: Thursday Quote: Justin'>Thursday Quote: Justin</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>
<blockquote>&#8220;Any teacher that can be replaced by a computer, deserves to be.&#8221;</p></blockquote>
<p style="text-align: right; font-weight: bold;">- David Thornburg<br/>Educational Technologies Researcher</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/05/06/941' rel='bookmark' title='Permanent Link: Thursday Quote: David Heinemeier Hansson'>Thursday Quote: David Heinemeier Hansson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/24/thursday-quote-harold-ableson' rel='bookmark' title='Permanent Link: Thursday Quote: Harold Ableson'>Thursday Quote: Harold Ableson</a></li>
<li><a href='http://www.velvetcache.org/2010/06/03/thursday-quote' rel='bookmark' title='Permanent Link: Thursday Quote: Justin'>Thursday Quote: Justin</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/08/thursday-quote-david-thornburg/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charting Weight Change With Google Visualizations</title>
		<link>http://www.velvetcache.org/2010/07/05/charting-weight-change-with-google-visualizations</link>
		<comments>http://www.velvetcache.org/2010/07/05/charting-weight-change-with-google-visualizations#comments</comments>
		<pubDate>Mon, 05 Jul 2010 22:56:09 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Consume]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Weight]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1248</guid>
		<description><![CDATA[I started trying to lose weight a while back, since we both know I&#8217;m a bit heavy and sitting in front of a computer isn&#8217;t going to lose the weight for me. Naturally, it&#8217;s important that I incorporate technology into my weight loss somehow, right? So I decided to give the Google Visualizations API a [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2008/05/20/javascript-countdown-timer' rel='bookmark' title='Permanent Link: Javascript Countdown Timer'>Javascript Countdown Timer</a></li>
<li><a href='http://www.velvetcache.org/2006/10/23/javascript-password-generator' rel='bookmark' title='Permanent Link: Javascript Password Generator'>Javascript Password Generator</a></li>
<li><a href='http://www.velvetcache.org/2010/04/28/google-were-sorry' rel='bookmark' title='Permanent Link: Google: We&#8217;re Sorry'>Google: We&#8217;re Sorry</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I started trying to lose weight a while back, since we both know I&#8217;m a bit heavy and sitting in front of a computer isn&#8217;t going to lose the weight for me.</p>
<p>Naturally, it&#8217;s important that I incorporate technology into my weight loss somehow, right?  So I decided to give the <a href="http://code.google.com/apis/charttools/index.html" target="_blank">Google Visualizations API</a> a spin.</p>
<p>I worked up a quick data format and a method to pop the data out. Nothing fancy, just a fixed width flat file. This doesn&#8217;t deserve a database.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">2010-06-30 235.4
2010-06-29 236.8</pre></td></tr></table></div>

</p>
<p>Easy to read, easy to edit, and easy to consume.  Every morning I just hop on the server, add the day&#8217;s weight and log off.</p>
<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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #666666; font-style: italic;">// Get the max days back we want to look.</span>
  <span style="color: #000088;">$max_days</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'days'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> and <span style="color: #339933;">!</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'days'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #000088;">$max_days</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'days'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$lines</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'data.txt'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <span style="color: #990000;">feof</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span> <span style="color: #009900;">&#41;</span> and <span style="color: #339933;">++</span><span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$max_days</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$line</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fgets</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$line</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #990000;">array_unshift</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$lines</span><span style="color: #339933;">,</span> <span style="color: #000088;">$line</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p>Now I just needed to represent it.  The API is very object oriented and easy to work with.  I wish there was a less verbose way of presenting the data, but you can&#8217;t have everything.</p>
<p>Actually, there may be a better way, I just didn&#8217;t come across it while speed reading the docs.</p>
<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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> drawChart<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">var</span> data <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> google.<span style="color: #660066;">visualization</span>.<span style="color: #660066;">DataTable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  data.<span style="color: #660066;">addColumn</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'string'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Date'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  data.<span style="color: #660066;">addColumn</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'number'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Weight'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  data.<span style="color: #660066;">addRows</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">&lt;?</span>php echo count<span style="color: #009900;">&#40;</span> $lines <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">?&gt;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #339933;">&lt;?</span>php
    $i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    foreach<span style="color: #009900;">&#40;</span> $lines <span style="color: #000066; font-weight: bold;">as</span> $line <span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
  <span style="color: #339933;">?&gt;</span>
  data.<span style="color: #660066;">setValue</span><span style="color: #009900;">&#40;</span> 
    <span style="color: #339933;">&lt;?</span>php echo $i<span style="color: #339933;">;</span> <span style="color: #339933;">?&gt;,</span> 
    <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">'&lt;?php echo substr( $line, 0, 10 ); ?&gt;'</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  data.<span style="color: #660066;">setValue</span><span style="color: #009900;">&#40;</span>
    <span style="color: #339933;">&lt;?</span>php echo $i<span style="color: #339933;">;</span> <span style="color: #339933;">?&gt;,</span>
    <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span>
    <span style="color: #339933;">&lt;?</span>php echo floatval<span style="color: #009900;">&#40;</span> substr<span style="color: #009900;">&#40;</span> $line<span style="color: #339933;">,</span> <span style="color: #CC0000;">11</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">?&gt;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #339933;">&lt;?</span>php
    <span style="color: #339933;">++</span>$i<span style="color: #339933;">;</span>
    endforeach<span style="color: #339933;">;</span>
  <span style="color: #339933;">?&gt;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> chart_div <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'chart_div'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #003366; font-weight: bold;">var</span> chart <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> google.<span style="color: #660066;">visualization</span>.<span style="color: #660066;">LineChart</span><span style="color: #009900;">&#40;</span> chart_div <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  chart.<span style="color: #660066;">draw</span><span style="color: #009900;">&#40;</span>
    data<span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span>
      width<span style="color: #339933;">:</span> <span style="color: #CC0000;">800</span><span style="color: #339933;">,</span>
      height<span style="color: #339933;">:</span> <span style="color: #CC0000;">600</span><span style="color: #339933;">,</span>
      title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Weight Over Time'</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>And there you have it, fancy charting in no time.</p>
<p style="text-align: center;"><a href="http://static.velvetcache.org/pages/2010/07/05/charting-weight-change-with-google-visualizations/weight.png" target="_blank" rel="lightbox[1248]"><img src="http://static.velvetcache.org/pages/2010/07/05/charting-weight-change-with-google-visualizations/weight.sm.png" alt="Example Chart" /></a></p>
<p>See it in action at <a href="http://static.velvetcache.org/weight.php" target="_blank">http://static.velvetcache.org/weight.php</a></p>
<p>Get the full source at <a href="http://gist.github.com/459148" target="_blank">http://gist.github.com/459148</a>.</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2008/05/20/javascript-countdown-timer' rel='bookmark' title='Permanent Link: Javascript Countdown Timer'>Javascript Countdown Timer</a></li>
<li><a href='http://www.velvetcache.org/2006/10/23/javascript-password-generator' rel='bookmark' title='Permanent Link: Javascript Password Generator'>Javascript Password Generator</a></li>
<li><a href='http://www.velvetcache.org/2010/04/28/google-were-sorry' rel='bookmark' title='Permanent Link: Google: We&#8217;re Sorry'>Google: We&#8217;re Sorry</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/05/charting-weight-change-with-google-visualizations/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Streaming Tweets With Tweepy</title>
		<link>http://www.velvetcache.org/2010/07/05/streaming-tweets-with-tweepy</link>
		<comments>http://www.velvetcache.org/2010/07/05/streaming-tweets-with-tweepy#comments</comments>
		<pubDate>Mon, 05 Jul 2010 22:27:11 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Consume]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Streaming]]></category>
		<category><![CDATA[Tweepy]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1282</guid>
		<description><![CDATA[I&#8217;ve been meaning to check out the Tweepy for a while and got around to it today. It&#8217;s a Python library for interacting with Twitter. The feature I&#8217;m most interested in is the streaming API support, which isn&#8217;t advertised much by Tweepy but seems pretty solid. Tweepy has pretty good documentation, and the code is [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/06/14/python-unix-sockets' rel='bookmark' title='Permanent Link: Python UNIX Sockets'>Python UNIX Sockets</a></li>
<li><a href='http://www.velvetcache.org/2006/10/02/handling-forms-with-php' rel='bookmark' title='Permanent Link: Handling Forms With PHP'>Handling Forms With PHP</a></li>
<li><a href='http://www.velvetcache.org/2010/06/29/auto-generated-github-user-page-with-py-github' rel='bookmark' title='Permanent Link: Auto-Generated Github User Page With py-github'>Auto-Generated Github User Page With py-github</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to check out the <a href="http://github.com/joshthecoder/tweepy" target="_blank">Tweepy</a> for a while and got around to it today.  It&#8217;s a Python library for interacting with Twitter.  The feature I&#8217;m most interested in is the streaming API support, which isn&#8217;t advertised much by Tweepy but seems pretty solid.</p>
<p>Tweepy has pretty good <a href="http://joshthecoder.github.com/tweepy/docs/index.html" target="_blank">documentation</a>, and the code is terse and readable, but what I found most useful was the examples repository, which had the only <a href="http://github.com/joshthecoder/tweepy-examples/blob/master/streamwatcher.py" target="_blank">example of streaming with Tweepy</a> that I could find in the official documentation.</p>
<p>It&#8217;s really straightforward.  Implement a <tt>tweepy.streaming.StreamListener</tt> to consume data, set up a <tt>tweepy.streaming.Stream</tt> with that listener, then pull the trigger on the streaming function you want to use.</p>
<p>Here&#8217;s a quick example I set up to track the filter keyword &#8220;omaha&#8221;.</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> tweepy.<span style="color: black;">streaming</span> <span style="color: #ff7700;font-weight:bold;">import</span> StreamListener, Stream
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Listener <span style="color: black;">&#40;</span> StreamListener <span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">def</span> on_status<span style="color: black;">&#40;</span> <span style="color: #008000;">self</span>, status <span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'-'</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">20</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> status.<span style="color: black;">text</span>
    <span style="color: #ff7700;font-weight:bold;">return</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
&nbsp;
  USERNAME = <span style="color: #483d8b;">&quot;YourUsernameHere&quot;</span>
  PASSWORD = <span style="color: #483d8b;">&quot;YourPasswordHere&quot;</span>
&nbsp;
  listener = Listener<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  stream = Stream<span style="color: black;">&#40;</span>
    USERNAME,
    PASSWORD,
    listener
  <span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
  stream.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span> track=<span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;omaha&quot;</span>, <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span></pre></div></div>
</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/06/14/python-unix-sockets' rel='bookmark' title='Permanent Link: Python UNIX Sockets'>Python UNIX Sockets</a></li>
<li><a href='http://www.velvetcache.org/2006/10/02/handling-forms-with-php' rel='bookmark' title='Permanent Link: Handling Forms With PHP'>Handling Forms With PHP</a></li>
<li><a href='http://www.velvetcache.org/2010/06/29/auto-generated-github-user-page-with-py-github' rel='bookmark' title='Permanent Link: Auto-Generated Github User Page With py-github'>Auto-Generated Github User Page With py-github</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/05/streaming-tweets-with-tweepy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sugru To The Rescue!</title>
		<link>http://www.velvetcache.org/2010/07/03/sugru-to-the-rescue</link>
		<comments>http://www.velvetcache.org/2010/07/03/sugru-to-the-rescue#comments</comments>
		<pubDate>Sat, 03 Jul 2010 19:51:28 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Consume]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Product]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Repair]]></category>
		<category><![CDATA[Shoes]]></category>
		<category><![CDATA[Sugru]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1221</guid>
		<description><![CDATA[I finally got a hold of some Sugru a few days ago. I had pre-ordered a sample pack (12 small sachets) and it arrived at last. First off, when they say that a sachet is small, they mean it. However, this stuff goes a long way. Sachet Size My first fix was my beloved flip [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2007/03/26/debugging-base-opera-and-xhr' rel='bookmark' title='Permanent Link: Debugging, BASE, Opera and XHR'>Debugging, BASE, Opera and XHR</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I finally got a hold of some <a href="http://sugru.com/" target="_blank">Sugru</a> a few days ago.  I had pre-ordered a sample pack (12 small sachets) and it arrived at last.</p>
<p>First off, when they say that a sachet is small, they mean it.  However, this stuff goes a long way.</p>
<p style="text-align: center; font-weight: bold;"><a href="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/004_Sachet.jpg" target="_blank" rel="lightbox[1221]"><img src="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/004_Sachet.sm.jpg" alt="Sachet Size" /></a><br/>Sachet Size</p>
<p>My first fix was my beloved flip flops.  I&#8217;ve had these for 5+ years and they are the most comfortable things ever. Darcy would tell you that I only hang on to them because she hates them BUT THATS A LIE! <span style="font-size: 8px;">(mostly)</span></p>
<p style="text-align: center; font-weight: bold;"><a href="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/001_Sandals.jpg" target="_blank" rel="lightbox[1221]"><img src="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/001_Sandals.sm.jpg" alt="The Sandals" /></a><br/>The Sandals (Post-Op)</p>
<p>These sandals had major issues.  Before I repaired them there was a rip all the way through (depth wise) and almost all the way across (width wise).  Previously I had closed that gap with long nails, which worked for most of a summer, but they were not a long term solution.</p>
<p style="text-align: center; font-weight: bold;"><a href="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/002_Bottom.jpg" target="_blank" rel="lightbox[1221]"><img src="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/002_Bottom.sm.jpg" alt="Underside Repair" /></a><br/>Underside Repair</p>
<p>But Sugru was just the ticket, it worked great.  I followed the instructions and washed up then opened a packet and got to work.  I found that it stuck to me more than the shoe in my case, but with some push and quick pull-back I managed to get it where I wanted it.</p>
<p>I used two sachets on this, but looking back I could have done the job with one.  The first packet I put up top and I rushed a bit and got sloppy.  Later I put the bottom packet on and I think that&#8217;s what actually did the job.</p>
<p style="text-align: center; font-weight: bold;"><a href="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/003_Top.jpg" target="_blank" rel="lightbox[1221]"><img src="http://static.velvetcache.org/pages/2010/07/03/sugru-to-the-rescue/003_Top.sm.jpg" alt="Foot Area Repair" /></a><br/>Foot Area Repair</p>
<p>All in all a nice experience.  My only issue with Sugru is that is stained my hands for a while, but that&#8217;s a pretty minor complaint.  My sandal is comfy, solid and ready for years more action.</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2007/03/26/debugging-base-opera-and-xhr' rel='bookmark' title='Permanent Link: Debugging, BASE, Opera and XHR'>Debugging, BASE, Opera and XHR</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/07/03/sugru-to-the-rescue/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Auto-Generated Github User Page With py-github</title>
		<link>http://www.velvetcache.org/2010/06/29/auto-generated-github-user-page-with-py-github</link>
		<comments>http://www.velvetcache.org/2010/06/29/auto-generated-github-user-page-with-py-github#comments</comments>
		<pubDate>Tue, 29 Jun 2010 22:37:51 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.velvetcache.org/?p=1211</guid>
		<description><![CDATA[Update (2010-06-30) So I got antsy about this and I upgraded to using pystache instead of my homebrew templating system. This was my first run in with mustache, and I have to say I like it, even though I used the bare minimum feature set. New code is at http://github.com/jmhobbs/jmhobbs.github.com Github has a cool feature [...]


Related posts:<ol><li><a href='http://www.velvetcache.org/2010/02/12/i-was-featured-on-github-sort-of' rel='bookmark' title='Permanent Link: I was featured on Github! Sort of.'>I was featured on Github! Sort of.</a></li>
<li><a href='http://www.velvetcache.org/2010/02/16/territorial-seeds-user-script' rel='bookmark' title='Permanent Link: Territorial Seeds User Script'>Territorial Seeds User Script</a></li>
<li><a href='http://www.velvetcache.org/2010/06/14/python-unix-sockets' rel='bookmark' title='Permanent Link: Python UNIX Sockets'>Python UNIX Sockets</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div class="update">
<p><b>Update (2010-06-30)</b></p>
<p>So I got antsy about this and I upgraded to using <a href="http://github.com/defunkt/pystache" target="_blank">pystache</a> instead of my homebrew templating system.  This was my first run in with mustache, and I have to say I like it, even though I used the bare minimum feature set.</p>
<p>New code is at <a href="http://github.com/jmhobbs/jmhobbs.github.com" target="_blank">http://github.com/jmhobbs/jmhobbs.github.com</a></p>
</div>
<p>Github has a cool feature called &#8220;<a href="http://pages.github.com/" target="_blank">Github Pages</a>&#8221; that let you host static content on a subdomain of github, e.g. <a href="http://jmhobbs.github.com/" target="_blank">http://jmhobbs.github.com/</a>.</p>
<p>They also provide an auto-generator for project pages that has a nice clean format which I really like.  So I decided to make my user page match the look and feel of the project pages.  And to boot I wanted to be able have it auto-generate since I want it to be &#8220;hands free&#8221;, otherwise I&#8217;ll forget to update it.</p>
<p>To make this happen I whipped up my template and then grabbed the excellent <a href="http://github.com/dustin/py-github" target="_blank">py-github</a> from Dustin Sallings, which I have <a href="http://jmhobbs.github.com/github-watcher/" target="_blank">used before</a>.</p>
<p>Without furthur ado I&#8217;ll just show you the source. It&#8217;s not complicated, just some API calls then search replace on a template file.  If you want to use it, be sure to get the most recent version from <a href="http://github.com/jmhobbs/jmhobbs.github.com" target="_blank">http://github.com/jmhobbs/jmhobbs.github.com</a>.</p>
<p>Throw in a cron job and you are set. Beware of lot&#8217;s of &#8220;page build&#8221; notices from Github though.</p>
<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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> github.<span style="color: black;">github</span> <span style="color: #ff7700;font-weight:bold;">as</span> github
<span style="color: #ff7700;font-weight:bold;">import</span> yaml
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> repo_date_to_epoch <span style="color: black;">&#40;</span> date <span style="color: black;">&#41;</span>:
  epoch = <span style="color: #dc143c;">time</span>.<span style="color: black;">mktime</span><span style="color: black;">&#40;</span>
    <span style="color: #dc143c;">time</span>.<span style="color: black;">strptime</span><span style="color: black;">&#40;</span>
      date<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>:-<span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span>,
      <span style="color: #483d8b;">&quot;%Y-%m-%dT%H:%M:%S&quot;</span>
    <span style="color: black;">&#41;</span>
  <span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> epoch <span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main <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;">&quot;Loading settings....&quot;</span>
  f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'settings.yaml'</span> <span style="color: black;">&#41;</span>
  settings = yaml.<span style="color: black;">load</span><span style="color: black;">&#40;</span> f <span style="color: black;">&#41;</span>
  f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  gh = github.<span style="color: black;">GitHub</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;">&quot;Fetching user information...&quot;</span>
  <span style="color: #dc143c;">user</span> = gh.<span style="color: black;">users</span>.<span style="color: black;">show</span><span style="color: black;">&#40;</span> settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Fetching repository information...&quot;</span>
  repos = gh.<span style="color: black;">repos</span>.<span style="color: black;">forUser</span><span style="color: black;">&#40;</span> settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Sorting repositories...&quot;</span>
  repos = <span style="color: #008000;">sorted</span><span style="color: black;">&#40;</span> repos, <span style="color: #008000;">cmp</span>=<span style="color: #ff7700;font-weight:bold;">lambda</span> a, b: repo_date_to_epoch<span style="color: black;">&#40;</span> b.<span style="color: black;">pushed_at</span> <span style="color: black;">&#41;</span> - repo_date_to_epoch<span style="color: black;">&#40;</span> a.<span style="color: black;">pushed_at</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Loading template...&quot;</span>
  f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'index.html.tpl'</span> <span style="color: black;">&#41;</span>
  template = f.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  f.<span style="color: black;">close</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;">&quot;Mangling template...&quot;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% username %&gt;'</span>, settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% fullname %&gt;'</span>, <span style="color: #dc143c;">user</span>.<span style="color: black;">name</span> <span style="color: black;">&#41;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% email %&gt;'</span>, <span style="color: #dc143c;">user</span>.<span style="color: #dc143c;">email</span> <span style="color: black;">&#41;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% following %&gt;'</span>, <span style="color: #008000;">str</span><span style="color: black;">&#40;</span> <span style="color: #dc143c;">user</span>.<span style="color: black;">following_count</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% followers %&gt;'</span>, <span style="color: #008000;">str</span><span style="color: black;">&#40;</span> <span style="color: #dc143c;">user</span>.<span style="color: black;">followers_count</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% publicrepos %&gt;'</span>, <span style="color: #008000;">str</span><span style="color: black;">&#40;</span> <span style="color: #dc143c;">user</span>.<span style="color: black;">public_repo_count</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
&nbsp;
  repo_string = <span style="color: #483d8b;">''</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">for</span> repo <span style="color: #ff7700;font-weight:bold;">in</span> repos:
    <span style="color: #ff7700;font-weight:bold;">if</span> repo.<span style="color: black;">private</span>:
      <span style="color: #ff7700;font-weight:bold;">continue</span>
&nbsp;
    repo_string = repo_string + <span style="color: #483d8b;">'&lt;div class=&quot;repo&quot;&gt;&lt;h3&gt;&lt;a href=&quot;'</span> + repo.<span style="color: black;">url</span> + <span style="color: #483d8b;">'&quot;&gt;'</span> + repo.<span style="color: black;">name</span> + <span style="color: #483d8b;">'&lt;/a&gt;'</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">try</span>:
      repo_string = repo_string + <span style="color: #483d8b;">' - &lt;span class=&quot;small&quot;&gt;&lt;a href=&quot;'</span> + repo.<span style="color: black;">homepage</span> + <span style="color: #483d8b;">'&quot;&gt;'</span> + repo.<span style="color: black;">homepage</span> + <span style="color: #483d8b;">'&lt;/a&gt;&lt;/span&gt;'</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">AttributeError</span>:
      <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
    repo_string = repo_string + <span style="color: #483d8b;">'&lt;/h3&gt;'</span>
&nbsp;
    repo_string = repo_string + <span style="color: #483d8b;">&quot;Forks: &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span> repo.<span style="color: black;">forks</span> <span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; - Watchers: &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span> repo.<span style="color: black;">watchers</span> <span style="color: black;">&#41;</span> + <span style="color: #483d8b;">' | '</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> repo.<span style="color: black;">has_issues</span>:
      repo_string = repo_string + <span style="color: #483d8b;">' &lt;a href=&quot;'</span> + repo.<span style="color: black;">url</span> + <span style="color: #483d8b;">'/issues&quot;&gt;Issues&lt;/a&gt; |'</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> repo.<span style="color: black;">has_wiki</span>:
      repo_string = repo_string + <span style="color: #483d8b;">' &lt;a href=&quot;http://wiki.github.com/'</span> + settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">'/'</span> + repo.<span style="color: black;">name</span> + <span style="color: #483d8b;">'&quot;&gt;Wiki&lt;/a&gt; |'</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> repo.<span style="color: black;">has_downloads</span>:
      repo_string = repo_string + <span style="color: #483d8b;">' &lt;a href=&quot;'</span> + repo.<span style="color: black;">url</span> + <span style="color: #483d8b;">'/downloads&quot;&gt;Downloads&lt;/a&gt; |'</span>
&nbsp;
    repo_string = repo_string + <span style="color: #483d8b;">'&lt;br/&gt;Last Push: '</span> + <span style="color: #dc143c;">datetime</span>.<span style="color: black;">fromtimestamp</span><span style="color: black;">&#40;</span> repo_date_to_epoch<span style="color: black;">&#40;</span> repo.<span style="color: black;">pushed_at</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>.<span style="color: black;">ctime</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">try</span>:
      repo_string = repo_string + <span style="color: #483d8b;">'&lt;pre&gt;'</span> + repo.<span style="color: black;">description</span> + <span style="color: #483d8b;">'&lt; /pre&gt;'</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">AttributeError</span>:
      repo_string = repo_string + <span style="color: #483d8b;">'&lt;br/&gt;&lt;br/&gt;'</span>
      <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
    repo_string = repo_string + <span style="color: #483d8b;">&quot;&lt;/div&gt;&lt;!--// .repo //--&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
  template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% repos %&gt;'</span>, repo_string <span style="color: black;">&#41;</span>
&nbsp;
  ga = <span style="color: #483d8b;">&quot;&quot;&quot;
    &lt;script type=&quot;text/javascript&quot;&gt;
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', '&lt;% ga_code %&gt;']);
      _gaq.push(['_trackPageview']);
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    &lt;/script&gt;
  &quot;&quot;&quot;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">False</span> <span style="color: #66cc66;">!</span>= settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'google_analytics'</span><span style="color: black;">&#93;</span>:
    template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% google_analytics %&gt;'</span>, ga <span style="color: black;">&#41;</span>
    template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% ga_code %&gt;'</span>, settings<span style="color: black;">&#91;</span><span style="color: #483d8b;">'google_analytics'</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">else</span>:
    template = template.<span style="color: black;">replace</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'&lt;% google_analytics %&gt;'</span>, <span style="color: #483d8b;">''</span> <span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Writing file...&quot;</span>
  f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">'index.html'</span>, <span style="color: #483d8b;">'w'</span> <span style="color: black;">&#41;</span>
  f.<span style="color: black;">write</span><span style="color: black;">&#40;</span> template <span style="color: black;">&#41;</span>
  f.<span style="color: black;">close</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;">&quot;Done!&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
  main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

</p>
<p>Wow. You actually scrolled through all of that. Amazing.</p>


<p>Related posts:<ol><li><a href='http://www.velvetcache.org/2010/02/12/i-was-featured-on-github-sort-of' rel='bookmark' title='Permanent Link: I was featured on Github! Sort of.'>I was featured on Github! Sort of.</a></li>
<li><a href='http://www.velvetcache.org/2010/02/16/territorial-seeds-user-script' rel='bookmark' title='Permanent Link: Territorial Seeds User Script'>Territorial Seeds User Script</a></li>
<li><a href='http://www.velvetcache.org/2010/06/14/python-unix-sockets' rel='bookmark' title='Permanent Link: Python UNIX Sockets'>Python UNIX Sockets</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.velvetcache.org/2010/06/29/auto-generated-github-user-page-with-py-github/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
