<?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>AdamFranco.com</title>
	<atom:link href="http://www.adamfranco.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adamfranco.com</link>
	<description>Musings, projects, software, and photography.</description>
	<lastBuildDate>Fri, 07 Dec 2012 18:11:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>curvature.py &#8212; find the most twisty-turny roads around</title>
		<link>http://www.adamfranco.com/2012/12/05/curvature-py/</link>
		<comments>http://www.adamfranco.com/2012/12/05/curvature-py/#comments</comments>
		<pubDate>Wed, 05 Dec 2012 05:02:32 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Computers and Technology]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[cartography]]></category>
		<category><![CDATA[geography]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[KML]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[motorcycles]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=712</guid>
		<description><![CDATA[In the process of taking up motorcycling this summer I also gained an additional hobby: scouring maps and travel guides to find the roads that would be most fun to ride. While I&#8217;ve had great times on dirt roads through farmland and wide open highways, there just isn&#8217;t anything that compares to the thrill of [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://goo.gl/maps/etqg3" target="_blank"><img class="alignnone" style="width: 100%; max-width: 800px;" title="Page Mill Road, CA" src="http://www2.adamfranco.com/curvature/images/Page_Mill_Rd.jpg" alt="" /></a></p>
<p>In the process of taking up motorcycling this summer I also gained an additional hobby: scouring maps and travel guides to find the roads that would be most fun to ride. While I&#8217;ve had great times on dirt roads through farmland and wide open highways, there just isn&#8217;t anything that compares to the thrill of leaning through the corners on a winding road.</p>
<p>While I&#8217;ve had some good successes in locating roads by map (such as <a href="http://goo.gl/maps/ydJV">Tracy Road</a>), one of the shortcomings of a map is the tight curves you can really lean into tend to be below the resolution for many maps. Atlases and electronic maps like Google Earth allow you to zoom in, but then there is the problem of finding the gems in the sea of data. What I realized I needed was a way to highlight just the most curvy roads so that I would know where to explore next.<br />
<span id="more-712"></span></p>
<p>For those less familiar with the intersection of cartography and software, the electronic mapping systems of the world (your Garmin/TomTom GPS, Google Earth, MapQuest, etc) have sequences of thousands of coordinates that linked together define the paths of roads across the surface of the earth.<br />
<img class="aligncenter size-full wp-image-714" title="Road Curve 1.0" src="http://www.adamfranco.com/files/2012/12/Road-Curve-1.0.png" alt="" width="100%" /><br />
While most of these systems use proprietary data sets, a service called <a href="http://www.openstreetmap.org/" target="_blank">Open Street Map</a> (OSM) is a community driven project that anyone can add and edit &#8212; a Wikipedia for cartographic data. In some parts of the world the Open Street Map has better coverage than any commercial providers; in the US the original data was imported from the public domain <a href="http://mapserver.org/input/vector/tiger.html" target="_blank">USGS TIGER</a> data set and has then been expanded and improved by the community. I&#8217;ve known this data was available for a long time, but it was only last week I realized that it would be possible to search through the coordinates that make up road-paths to analyze their geometry rather than just their position.</p>
<p>I can get the raw data from the Open Street Map for the path of every road, but how to determine which ones are the most twisty? At the beginning I tried a strategies such as calculating the ratio of distance traveled on a road versus the distance between the start and end points. Unfortunately all of these methods had situations that confused the algorithms (such as circular roads) or didn&#8217;t distinguish between fun curves and boring broad changes of direction that would only be exciting at far beyond the speed limit. What I eventually came up with is a process of calculating the radius of curvature at every segment of every road and then adding up the length of the most curvy segments to get a total distance spent turning. The twistier the road, the more time spent turning.</p>
<p>I&#8217;ll get back to more of the details in a bit, but I ended up writing a small program that reads through the Open Street Map data and spits out KML (Google Earth) files that highlight just the twisty roads. This program is called <strong>curvature.py</strong> and is available on Github here: <a href="https://github.com/adamfranco/curvature/wiki" target="_blank">https://github.com/adamfranco/curvature/wiki</a></p>
<p>When running <strong>curvature.py</strong> you can pass a variety of options that allow you to highlight the roads you are most interested in. For example if you live in the flat Midwest you can pass it a low curvature threshold to try to locate roads that have <em>any</em> curves. Give it a medium threshold and the output can help you find a more interesting route to work. Similarly if you want to find just the most absolutely crazy-curvy roads in a region give it a high threshold to filter out wheat from the chaff.</p>
<div style="text-align: center;"><img src="http://www2.adamfranco.com/curvature/images/Bristol.c_1000.jpg" width="75%"/></div>
<p>With the <code>--colorize</code> option, KML files will be generated with each road segment color-coded to match its curve-radius. Green segments are above the threshold considered &#8220;straight&#8221;, while yellow are broad curves, orange tighter, and red tightest:<br />
<img src="http://www2.adamfranco.com/curvature/images/VT%2017.multicolor_B.jpg" width="100%"/></p>
<p><strong>More about calculating the curvature</strong></p>
<p>Each way (road) is made up of a sequence of points defined as a pair of latitude and longitude values. Each sequence of three points makes up a triangle where two of the sides are road segments with a hypotenuse between the 1st and 3rd points. Since we have the latitude and longitude of each point we can easily calculate the distances between them, but figuring out what the curvature of the road is at this set of points is a little tricky. Since the points aren&#8217;t evenly spaced the angle between the three points doesn&#8217;t tell us anything. Instead, we must go back to the geometric relationship that says <a href="http://www.mathopenref.com/trianglecircumcircle.html">for every triangle there is a circumcircle that intersects its three points</a>. Using the equations for the circumcircle, we can plug in the distances between the three points and come up with the radius of that circle. That circle&#8217;s radius corresponds to the radius of the road&#8217;s curve at the middle of the three points.<br />
<img src="http://www.adamfranco.com/files/2012/12/Road-Curve-2.3-e1354682688892.png" alt="" title="Road Curve 2.3" width="100%" class="aligncenter size-full wp-image-726" /><br />
Here is a video explaining the process:</p>
<p><video width="100%" controls="controls"><br />
<source src="http://www2.adamfranco.com/curvature/images/Curvature-Animation.webm" type="video/webm"><br />
<source src="http://www2.adamfranco.com/curvature/images/Curvature-Animation.ogg" type="video/ogg"><br />
<source src="http://www2.adamfranco.com/curvature/images/Curvature-Animation.mp4" type="video/mp4"><br />
<img src="http://www.adamfranco.com/files/2012/12/Curvature-Animation.gif" width="100%"><br />
</video></p>
<p><strong>Using Curvature</strong><br />
The <a href="https://github.com/adamfranco/curvature/wiki/Examples-and-Resources">Curvature Examples page</a> shows a number of examples and provides links to KML files that you can open in Google Earth. If you&#8217;d like to just view curvature KML files that I&#8217;ve generated, you can find them at: <a href="http://www2.adamfranco.com/curvature/kml/">http://www2.adamfranco.com/curvature/kml/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2012/12/05/curvature-py/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www2.adamfranco.com/curvature/images/Curvature-Animation.webm" length="6334825" type="video/webm" />
<enclosure url="http://www2.adamfranco.com/curvature/images/Curvature-Animation.mp4" length="3293866" type="video/mp4" />
		</item>
		<item>
		<title>The Middlebury Town Plan</title>
		<link>http://www.adamfranco.com/2012/09/24/the-middlebury-town-plan/</link>
		<comments>http://www.adamfranco.com/2012/09/24/the-middlebury-town-plan/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 03:13:06 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Life and Everything Else]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Middlebury]]></category>
		<category><![CDATA[urban planning]]></category>
		<category><![CDATA[Vermont]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=705</guid>
		<description><![CDATA[Today I found unexpectedly good reading in Middlebury&#8217;s new 2012 Town Plan. The document is really well done and its quality highlights the vigorous engagement between the town, its citizenry, and businesses that makes this a fabulous place to live. While all 226 pages are worthwhile, I found Section 2.13  &#8220;Land Use &#8211; Conservation and [...]]]></description>
				<content:encoded><![CDATA[<p>Today I found unexpectedly good reading in Middlebury&#8217;s new <a href="http://www.middlebury.govoffice.com/index.asp?Type=B_BASIC&amp;SEC={2B5F6598-DF8B-466E-844C-0B930BABADCC}" target="_blank">2012 Town Plan</a>. The document is really well done and its quality highlights the vigorous engagement between the town, its citizenry, and businesses that makes this a fabulous place to live.</p>
<p>While all 226 pages are worthwhile, I found <a href="http://www.middlebury.govoffice.com/vertical/Sites/%7BCA36F8A3-652B-4085-AA8E-DD3623CC0020%7D/uploads/2.13_Land_Use_-_Conservation_and_Development.pdf" target="_blank">Section 2.13  &#8220;Land Use &#8211; Conservation and Development Plan&#8221;</a> to be especially moving. I mean &#8220;moving&#8221; in a totally serious, non-ironic way. Coming from a town (Carlisle, PA) with rampant &#8220;Miracle Mile&#8221; commercial development and suburban sprawl, this forward-looking vision of how the town should be developed and improved in coming decades reassures me that 30 years from now Middlebury will be an even better place to live than it is today.</p>
<p>My favorite quote is from Section 2.13, page 151:</p>
<blockquote><p>A fundamental objective of this Town Plan is to maintain Middlebury as a traditional Vermont town and to prevent incremental change to “anywhere USA”. This is not merely an aesthetic notion, it is a recognized economic development strategy for Middlebury and Vermont. This Plan supports architecture that is designed to fit its context in Middlebury and does not support standardized trade-marked or corporate prototypes.</p></blockquote>
<p>In 2005 James Howard Kunstler (author of <em>The Geography of Nowhere</em> among other titles) gave a great talk at Middlebury College on human-scale urban development and the lack thereof in much of American urban planning. In his talk he justly derided our own little &#8220;Miracle [1/2] mile&#8221; by the Hannaford Shopping center. As an avid bicycle commuter who lived south of the village for many years I felt the effects of this poor zoning and development planning on a daily basis as I tried to safely navigate the no-shoulder/no-sidewalk turning-lane and fore-court infested section of road without getting killed. I am very pleased to see that slowly remedying these past lapses is part of the town&#8217;s plan for the future.</p>
<p>In addition to spending several hours reading the 2012 Middlebury Town Plan, I heartily recommend taking another hour to watch William H. Whyte&#8217;s <a href="http://vimeo.com/6821934" target="_blank"><em>The Social Life of Small Urban Spaces &#8211; The Street Corner</em></a>. My favorite part is at 12:00: &#8220;People tend to sit where there are places to sit.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2012/09/24/the-middlebury-town-plan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vermont to Michigan on a motorcycle</title>
		<link>http://www.adamfranco.com/2012/07/13/vermont-to-michigan-on-a-motorcycle/</link>
		<comments>http://www.adamfranco.com/2012/07/13/vermont-to-michigan-on-a-motorcycle/#comments</comments>
		<pubDate>Fri, 13 Jul 2012 22:26:42 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Life and Everything Else]]></category>
		<category><![CDATA[motorcycles]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=669</guid>
		<description><![CDATA[In 2005 I took a 3-week trip around Turkey with my parents and brother. Mid-way through this fabulous trip we met the affable Roland Pfitzenmaier, a German man touring the middle east on a Triumph motorcycle. While I am someone who usually travels with a full load of gear &#8212; bicycles, kayaks, and all the [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6786.jpg" rel="lightbox[669]" title="North Channel of Lake Huron"><img class="alignright  wp-image-664" title="North Channel of Lake Huron" src="http://www.adamfranco.com/files/2012/07/IMG_6786-300x199.jpg" alt="" width="240" height="159" /></a>In 2005 I took a <a href="http://www.flickr.com/photos/adamfranco/sets/72157594283347739/" target="_blank">3-week trip around Turkey</a> with my parents and brother. Mid-way through this fabulous trip we met the affable <a href="http://www.flickr.com/photos/adamfranco/tags/rolandpfitzenmaier/">Roland Pfitzenmaier</a>, a German man touring the middle east on a Triumph motorcycle. While I am someone who usually travels with a full load of gear &#8212; bicycles, kayaks, and all the rest &#8212; the minimalism of Roland&#8217;s trek was intriguing. This summer my father was kind enough to lend me the use of his motorcycle (a 1993 BMW R100R) and I figured that there was no time like the present to try a long-distance motorcycle tour. Now, I&#8217;m well aware that for serious <a href="http://www.ironbutt.com/" target="_blank">iron butts</a> a 2,000 mile round-trip isn&#8217;t all that far &#8212; but for someone who is just getting into riding and has only done day-trips, four straight days on the road each way would be a significant journey.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_090801.jpg" rel="lightbox[669]" title="Heading out"><img class="alignright  wp-image-644" title="Heading out" src="http://www.adamfranco.com/files/2012/07/20120703_090801-300x225.jpg" alt="" width="234" height="176" /></a>My family has a small cabin on a lake in northern Michigan where I every summer growing up. Since moving to Vermont 14 years ago my attendance has slipped somewhat as the trip lengthened to a driving time of 15-17 mind-numbing hours along the flats of the New York Throughway and various mid-western highways. That said, I still try to make it to the lake at least once every few years. Since I took the full month of July off from work I figured I&#8217;d make the trip via motorcycle this time and learn if this sort of travel was for me.</p>
<p>To keep things interesting I planned a route out that would avoid expressways as much as possible and give me a chance to see the landscape of central Ontario &#8212; a region I haven&#8217;t seen before.</p>
<p>Total distance: 1077<br />
Total moving time: 23 hours, 17 minutes<br />
Average speed: 46 mph</p>
<p><iframe src="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fwww.adamfranco.com%2Ffiles%2F2012%2F07%2FVT-to-MI.kml&amp;aq=&amp;sll=44.329251,-76.048737&amp;sspn=0.209489,0.459366&amp;t=h&amp;ie=UTF8&amp;ll=45.259422,-79.672852&amp;spn=4.639974,14.260254&amp;z=6&amp;output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="100%" height="300"></iframe><br />
<small><a style="color: #0000ff; text-align: left;" href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fwww.adamfranco.com%2Ffiles%2F2012%2F07%2FVT-to-MI.kml&amp;aq=&amp;sll=44.329251,-76.048737&amp;sspn=0.209489,0.459366&amp;t=h&amp;ie=UTF8&amp;ll=45.259422,-79.672852&amp;spn=4.639974,14.260254&amp;z=6">View Larger Map<br />
</a> Key: blue line &#8211; planned route, red line &#8211; actual route</small></p>
<p><span id="more-669"></span></p>
<p>I planned <a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fwww.adamfranco.com%2Ffiles%2F2012%2F07%2FVT-to-MI.kml&amp;aq=&amp;sll=44.329251,-76.048737&amp;sspn=0.209489,0.459366&amp;t=h&amp;ie=UTF8&amp;ll=45.259422,-79.672852&amp;spn=4.639974,14.260254&amp;z=6" target="_blank">the route</a> with Google Maps, first starting with the default route, then dragging it onto the most twisted and windy back roads that I could find. After establishing a route I tried to break it up into chunks of around 6 hours to give myself plenty of time to wait out passing thunderstorms, deal with break-downs, and just get into each town early enough to do a little sight-seeing. The process worked quite well, but one limitation I found was that Google Maps doesn&#8217;t indicated the road type or surface for small roads. For example, about 20 miles of roads that I picked turned out to be dirt &#8212; not a problem as I thoroughly enjoy dirt roads, but it would have been nice to anticipate that better and might have been a problem if I had picked many more of them.</p>
<p>After planning out my route and making reservations at motels for each night I punched the routes into my GPS (<a href="http://www.amazon.com/gp/product/B001ELJER4/ref=oh_details_o04_s00_i00" target="_blank">Garmin Nuvi 765</a>) with enough &#8220;via-points&#8221; to keep the automated routing on my desired roads. Much of the time I can&#8217;t really see the Garmin&#8217;s screen while I&#8217;m riding because of glare, so I run an extension cord from the Garmin&#8217;s headphone jack back to my in-ear headphones (<a title="MEElectronics M6P-BK" href="http://www.amazon.com/gp/product/B003VTZPO8/ref=oh_details_o02_s01_i01" target="_blank">MEElec M6P</a>) which double as my hearing protection. In this way, I get nice voice prompts for turns without being visually distracted by the screen. Much of my route didn&#8217;t have any mobile phone service and using roaming mobile data while in Canada is stupid expensive ($15/MB) so using my phone&#8217;s navigation app was out of the question.</p>
<h2>Day 1: Weybridge, Vermont to Sharbot Lake, Ontario</h2>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_091108.jpg" rel="lightbox[669]" title="Heading out"><img class="alignright  wp-image-645" title="Heading out" src="http://www.adamfranco.com/files/2012/07/20120703_091108-300x225.jpg" alt="" width="240" height="180" /></a><br />
Distance: 300 miles<br />
Moving Time: 6:45</p>
<p>I decided to make my first day the longest one since I was fresh and roaring to go on Tuesday, July 3rd. My route took me straight west across the Champlain Valley and across the Adirondack Mountains to Watertown, New York and from their north across the St Lawrence River and into Ontario.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_121118.jpg" rel="lightbox[669]" title="Upper Saranac Lake"><img class="alignright  wp-image-646" title="Upper Saranac Lake" src="http://www.adamfranco.com/files/2012/07/20120703_121118-300x225.jpg" alt="" width="240" height="180" /></a>The first hour of riding included my favorite road ever: <a href="http://goo.gl/maps/ydJV" target="_blank">Tracy Road near Moriah, NY</a>. Tracy road has more than 50 curves over 7.5 miles as it winds around hills and beaver ponds in the Adirondack foothills. It was a total blast and a great way to start the day. The next few hours of riding were pretty spectacular as well (though not a twisty) as Routes 73 and 3 wound through the Adirondack Park past many clear lakes surrounded by hills and mountains.</p>
<p>After exiting the Adirondacks I made a quick stop in Watertown, NY before heading into Canada. I was pleasantly surprised at how charming and bustling Watertown was &#8212; I had expected something more &#8220;rust-belt&#8221; than the vibrant downtown I found.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_180550.jpg" rel="lightbox[669]" title="Back roads"><img class="alignright  wp-image-647" title="Back roads" src="http://www.adamfranco.com/files/2012/07/20120703_180550-300x225.jpg" alt="" width="240" height="180" /></a>I crossed into Canada via the Thousand Islands Bridge. The Thousand Islands are a place I will need to return to on a subsequent trip. The multitude of tiny islets with houses on them look so magical, though they are likely best explored by boat rather than road. Drove all over looking for an overlook, but could for the life of me find one. Dark skies threatened, so I gave up my search and headed for the border crossing.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_180833.jpg" rel="lightbox[669]" title="Back roads"><img class="alignright  wp-image-648" title="Back roads" src="http://www.adamfranco.com/files/2012/07/20120703_180833-300x178.jpg" alt="" width="240" height="142" /></a>Once in Ontario I headed straight north through the Land O&#8217; Lakes region, specifically the Rideau Lakes and Frontenac townships. Much to my delight I found that most of the back roads in this area were unpaved. With light rain showers falling I enjoyed many slow miles through very scenic fields and forests.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_191727.jpg" rel="lightbox[669]" title="Bogs"><img class="alignright  wp-image-649" title="Bogs" src="http://www.adamfranco.com/files/2012/07/20120703_191727-300x199.jpg" alt="" width="240" height="159" /></a>I found the <a href="http://www.explorethearch.ca/learn-about-the-arch/geology">geology and geography of the Land O&#8217; Lakes region</a> fascinating. Basically, the landscape is made up of hard metamorphic rock that was the base of an ancient Laurentian Mountain Belt that formed 1 billion years ago. The mountains have since eroded away and recent glaciers from the last ice age have scoured and dimpled the landscape leaving an undulating surface of rock with very little topsoil. Because of the lack of soil, virtually every depression in the land is a rocky lake, pond, or bog.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_191855.jpg" rel="lightbox[669]" title="Bogs"><img class="alignright  wp-image-650" title="Bogs" src="http://www.adamfranco.com/files/2012/07/20120703_191855-300x227.jpg" alt="" width="240" height="182" /></a>The back roads and rural highways wound around these countless water bodies and eventually I reached the sleepy hamlet of Sharbot Lake, my first overnight stop.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120703_204812.jpg" rel="lightbox[669]" title="Sharbot Lake"><img class="alignright  wp-image-651" title="Sharbot Lake" src="http://www.adamfranco.com/files/2012/07/20120703_204812-300x225.jpg" alt="" width="240" height="180" /></a>I spent the night at the <a href="http://www.sharbotlakeinn.com/" target="_blank">Sharbot Lake Inn</a>, a sleepy little motel with a great view of the medium-sized Sharbot Lake. The proprietors were very friendly and when I mentioned that I might arrive late in the evening if I hit bad weather just said, &#8220;We close at 8pm, but we&#8217;ll put you in #7 and just leave the key in the door if you haven&#8217;t arrived by then.&#8221; The hotel was still open when I arrived but quite quiet on this Wednesday evening so after unloading the bike I walked across the street to the Maples Restaurant, the only establishment open past 9pm in this little town.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120704_085917.jpg" rel="lightbox[669]" title="Sharbot Lake Inn"><img class="size-medium wp-image-652 alignnone" title="Sharbot Lake Inn" src="http://www.adamfranco.com/files/2012/07/20120704_085917-300x99.jpg" alt="" width="300" height="99" /></a></p>
<p>All in all the first day was a blast. The only hiccup I had was about an hour into the ride when one of my straps slipped and my kite/tripod bag rubbed on the rear tire for 1/4 mile and melted a hole in the outer bag and the kite bag. The tripod wasn&#8217;t damaged and the kite only had a small tear. To fix the problem I tied some loops in my main tie-down straps to give me something more sturdy to attach the bungee cords to:</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120704_094714.jpg" rel="lightbox[669]" title="New tie-down method."><img class="alignnone  wp-image-653" title="New tie-down method." src="http://www.adamfranco.com/files/2012/07/20120704_094714-300x225.jpg" alt="" width="240" height="180" /></a></p>
<p>&nbsp;</p>
<h2>Day 2: Sharbot Lake, Ontario to Parry Sound, Ontario</h2>
<p><a href="http://www.adamfranco.com/files/2012/07/20120704_103145.jpg" rel="lightbox[669]" title="Back roads"><img class="alignright  wp-image-654" title="Back roads" src="http://www.adamfranco.com/files/2012/07/20120704_103145-300x225.jpg" alt="" width="240" height="180" /></a>Distance: 269 miles<br />
Moving Time: 5:31</p>
<p>I woke up Wednesday, July 4th to a beautiful morning with no hint of rain. After breakfast at The Maples I packed up and checked out only to find the battery dead and unable to start the bike. I assumed that it just needed to charge up, so I unpacked everything to get at the battery under the seat and got a jump from a friendly motel employee, and then packed up the bike while it was running.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120704_104640.jpg" rel="lightbox[669]" title="Rural highways"><img class="alignright  wp-image-655" title="Rural highways" src="http://www.adamfranco.com/files/2012/07/20120704_104640-300x209.jpg" alt="" width="240" height="167" /></a>The first back roads and rural highways of the morning were windy and beautiful, though one of the dirt roads narrowed to little more than a tractor track at one point. I was careful not to stall since I wasn&#8217;t sure how well I would get started again.</p>
<p>After about 40 minutes I needed gas, so I stopped at a tiny station in the middle of nowhere. Even after running for 40 minutes it was no closer to starting, so I unpacked again, got a second jump, repacked, stalled, unpacked, got a third jump, repacked, and headed 40 miles to the closest likely source of help: an Arctic Cat dealer in Cloyne, ON.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120704_131141.jpg" rel="lightbox[669]" title="Nowell Motors"><img class="alignright  wp-image-656" title="Nowell Motors" src="http://www.adamfranco.com/files/2012/07/20120704_131141-300x225.jpg" alt="" width="240" height="180" /></a>At the time I didn&#8217;t realize that motorcycle batteries required checking of the acid level and I must have let the battery go dry during the heat of the previous day and then further killed it while using it dry. The engine stalled as I pulled into Nowell Motors and one of their mechanics, John was able to find me a battery that fit. It wasn&#8217;t a perfect match, but it fit in the hanger and was my only option that didn&#8217;t include driving several hours in the wrong direction.</p>
<p style="text-align: left;">The battery was sorted out by about 1pm and from Cloyne I headed north along the Madawaska River to the Algonquin Provincial Park. Algonquin Park sits on a high rocky plateau that feeds rivers in all directions. Like the Land O&#8217; Lakes region, it is full of many bogs and ponds at all stages of filling in with peat. Other than stopping briefly at the visitor center I drove right through the park and only paused for a moose sighting.</p>
<p style="text-align: center;"><a href="http://www.adamfranco.com/files/2012/07/20120704_170408.jpg" rel="lightbox[669]" title="Algonquin landscape"><img class="size-medium wp-image-657 aligncenter" title="Algonquin landscape" src="http://www.adamfranco.com/files/2012/07/20120704_170408-300x58.jpg" alt="" width="300" height="58" /></a></p>
<p style="text-align: center;"><a href="http://www.adamfranco.com/files/2012/07/20120704_170807.jpg" rel="lightbox[669]" title="Algonquin landscape"><img class="aligncenter size-medium wp-image-658" title="Algonquin landscape" src="http://www.adamfranco.com/files/2012/07/20120704_170807-300x51.jpg" alt="" width="300" height="51" /></a></p>
<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6735.jpg" rel="lightbox[669]" title="Parry Sound Harbor"><img class="alignright  wp-image-662" title="Parry Sound Harbor" src="http://www.adamfranco.com/files/2012/07/IMG_6735-300x194.jpg" alt="" width="240" height="155" /></a>After the high forest of the park the highway descended down toward the rocky eastern shore of Lake Huron and the town of Parry Sound. While I had left myself plenty of time for riding on Wednesday, dealing with the battery had eaten up much of the morning and I arrived in Parry Sound just before sunset without too much time to explore. I checked into the <a href="http://travellershotel.org/" target="_blank">Travellers Hotel</a> in Parry Sound then spent the last moments of daylight wandering about the harbor. I had dinner at a nice restaurant by the harbor and then got to sleep early.</p>
<h2>Day 3: Parry Sound, Ontario to Sault St. Marie, Michigan</h2>
<p>Distance: 292 miles<br />
Moving Time: 5:46</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120705_144931.jpg" rel="lightbox[669]" title="Trans-Canadian Highway"><img class="alignright  wp-image-660" title="Trans-Canadian Highway" src="http://www.adamfranco.com/files/2012/07/20120705_144931-300x129.jpg" alt="" width="240" height="103" /></a>Thursday morning came bright and sunny again, though this time with an easy-to-start bike. After breakfast at the hotel I got on the road for a full day of driving on the Trans-Canadian Highway. I had hoped to get out and see a large part of the Georgian Bay coast, but the eastern shore of Lake Huron is full of more than 30,000 islands and many deep bays and long peninsulas. It turns out that the only way to get beyond a small sheltered bay would be to drive more than 45 minutes out a peninsula, then back the same way. There is really no coast road in this region.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120705_115229.jpg" rel="lightbox[669]" title="French River"><img class="alignright  wp-image-659" title="French River" src="http://www.adamfranco.com/files/2012/07/20120705_115229-300x225.jpg" alt="" width="240" height="180" /></a>I hoped to get to Sault St Marie early enough to do some sight-seeing, so I skipped on the Georgian Bay and kept to the highway. While parts of Route 69 and 17 (Trans-Canada Highway) are 4-lane expressway, the vast majority of the road was straight, flat, 2 lane highway with a third passing lane alternating directions every 5 miles or so. For the most part the landscape was forests, but one highlight was the French River Provincial Park where the French river drains Lake Nipissing into Lake Huron through a marvelous maze of rocky promontories.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6746.jpg" rel="lightbox[669]" title="North Channel of Lake Huron"><img class="alignright  wp-image-663" title="North Channel of Lake Huron" src="http://www.adamfranco.com/files/2012/07/IMG_6746-300x199.jpg" alt="" width="240" height="159" /></a>By the time I reached the North Channel of Lake Huron near the town of Blind River I was finally able to get close to Lake Huron and too a small detour to get over to the lake. The shore here was finally more sandy than rocky, though still with bedrock sticking out hear or there. The landscape was generally pretty flat and houses and cottages dot the lake-shore drives.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6852.jpg" rel="lightbox[669]" title="Lockview Motel"><img class="alignright  wp-image-666" title="Lockview Motel" src="http://www.adamfranco.com/files/2012/07/IMG_6852-300x199.jpg" alt="" width="240" height="159" /></a>After another couple hours of riding I came into Sault Ste. Marie, Ontario, a city of about 80,000 inhabitants and a very smelly factory near the river. The downtown was nice though and I did a lap around the downtown streets and waterfront before heading over the bridge to Sault St. Marie, Michigan &#8212; a much smaller town of about 15,000. While waiting to cross the border a fellow driver pointed out that my rear tire was bald&#8230; &#8230; and looked low. It wasn&#8217;t flat however, so I rode slowly the last 2 miles to my motel.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6856.jpg" rel="lightbox[669]" title="Lockview Motel"><img class="alignright  wp-image-667" title="Lockview Motel" src="http://www.adamfranco.com/files/2012/07/IMG_6856-300x199.jpg" alt="" width="240" height="159" /></a>I checked into the <a href="http://www.lockview.com/" target="_blank">Lockview Motel</a> &#8212; a cute and cheap place right across from the shipping locks &#8212; and unpacked into my little 1-room cottage before looking at the tire. A bit of soapy water showed that there were three small punctures in the center of the tread, one from an unknown source and two from a staple. Since it was evening and there wasn&#8217;t much I could do I left the bike parked on its center stand and toured about the locks and their visitor center. Since no ships were coming through for a few hours I had a passable dinner at the Lockview Restaurant (the only thing open at 9:30pm). The walleye was tasty, but the rest of the meal (salad and mashed potatoes) were totally bland and flavorless.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/IMG_6793.jpg" rel="lightbox[669]" title="Sault St Marie Locks"><img class="alignright  wp-image-665" title="Sault St Marie Locks" src="http://www.adamfranco.com/files/2012/07/IMG_6793-300x199.jpg" alt="" width="240" height="159" /></a>By the time I was done with dinner two large ships were locking through the MacArthur and Poe locks, one going up to Lake Superior and one going down to Lake Huron. Both were bulk freighters that carry iron ore from ports on Lake Superior down to the big cities of the midwest and east.</p>
<h2>Day 4: Sault St. Marie, Michigan to Beulah, Michigan</h2>
<p>Distance: 216 miles<br />
Moving Time: 5:15</p>
<p>I spent most of Friday morning calling around to several motorcycle dealers looking for a replacement tire. Since this bike has a somewhat odd size for its rear tire I struck out, but headed to one of the shops, <a href="http://www.leitzsportcenterinc.com/">Leitz Sports Center</a>, to see if they might at be able to patch the tire or at a minimum have easier access to compressed air than I did at the motel.</p>
<p><a href="http://www.adamfranco.com/files/2012/07/20120706_130524.jpg" rel="lightbox[669]" title="Mackinac Bridge"><img class="alignright  wp-image-661" title="Mackinac Bridge" src="http://www.adamfranco.com/files/2012/07/20120706_130524-300x225.jpg" alt="" width="240" height="180" /></a>The guys at Leitz were very helpful, but recommended against patching the tire since that might open a hole in the thin tread even more. Eventually, I ended up getting a can of the Slime &#8220;spare tire in a can&#8221; stuff and injecting it into the tire. With that and a top-up of air I was able to get on the road for the final 5 hours of the trip.</p>
<p>An hour or so into the trip I crossed the juncture of Lake Huron and Lake Michigan via the Mackinac Bridge and continued south to Petosky where I met up with my parents for lunch. Two more hours driving down the Lake Michigan and Torch Lake shorelines brought me to the end of the journey in Beulah.</p>
<p>While the tire and battery problems were certainly a hassle, they weren&#8217;t particularly unpleasant to deal with since I had left myself loads of extra time. Over all the trip was great fun and I&#8217;m looking forward to following it up with a similar journey on the way home. First though, I have two and a half weeks on Crystal Lake full of the rigors of reading novels on the beach, barbequing, and sailing. Its a tough life&#8230; <img src='http://www.adamfranco.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2012/07/13/vermont-to-michigan-on-a-motorcycle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Black Bean Crostini</title>
		<link>http://www.adamfranco.com/2011/06/15/black-bean-crostini/</link>
		<comments>http://www.adamfranco.com/2011/06/15/black-bean-crostini/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 02:57:30 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Life and Everything Else]]></category>
		<category><![CDATA[CSA]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[recipes]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=603</guid>
		<description><![CDATA[One of the joys of participating in a CSA is exploring new vegetables and foods that I otherwise wouldn&#8217;t have known about or thought to eat. Last year we received husk cherries, red carrots, bok choy, several types of kale, purple potatoes, and at least 4 varieties of beets in addition to many more standard [...]]]></description>
				<content:encoded><![CDATA[<p><a title="252/365: Tomatos in Sacks by Adam Franco, on Flickr" href="http://www.flickr.com/photos/adamfranco/4976745536/"><img src="http://farm5.static.flickr.com/4126/4976745536_b4c1533be8_m.jpg" alt="252/365: Tomatos in Sacks" align="right" /></a>One of the joys of participating in a <a href="http://www.gildrienfarm.com/about-the-csa.html">CSA</a> is exploring new vegetables and foods that I otherwise wouldn&#8217;t have known about or thought to eat. Last year we received <a href="http://www.flickr.com/photos/adamfranco/4976745536/">husk cherries</a>, <a href="http://www.flickr.com/photos/adamfranco/4982297977/">red carrots</a>, bok choy, several types of kale, purple potatoes, and at least 4 varieties of beets in addition to many more standard vegetable varieties.  I don&#8217;t consider myself sheltered in terms of food, but many of these were simply things I never would have thought to look for even if they are available in a grocery store.</p>
<p><a title="241/365: Red Carrots by Adam Franco, on Flickr" href="http://www.flickr.com/photos/adamfranco/4982297977/"><img style="float: right; clear: right;" src="http://farm5.static.flickr.com/4088/4982297977_443043b36a_m.jpg" alt="241/365: Red Carrots" /></a>For the past two weeks our CSA share from the <a href="http://www.gildrienfarm.com/">Gildrien Farm</a> has included several cups of dried black beans, a food I&#8217;ve eaten many times but never really cooked with. In their weekly letter Jeremy and Caitlin helpfully included <a href="http://www.gildrienfarm.com/2/post/2011/01/puetro-rican-black-beans.html">a recipe for Puerto Rican Black Beans</a>, a tasty-sounding launching pad for the evening&#8217;s dinner.</p>
<p>Since I didn&#8217;t have any bacon grease on hand I figured I would just fry up several large pieces of bacon and use both the meat and the grease. I had planned to make a fritata as the main course for the evening, but after sampling the beans, decided to add some more veggies and put them on bread as our main course. Unfortunately, the result was so delicious that the crostini never made it out of the kitchen for a photo shoot.</p>
<p><strong>Black Bean Crostini</strong></p>
<ul>
<li>1 cup dry black beans, soaked overnight</li>
<li>1 large onion, diced as small as possible</li>
<li>1/2 a red pepper, diced</li>
<li>1/4 lb of bacon (4-5 pieces)</li>
<li>1 cup of cherry tomatoes, quartered</li>
<li>salt</li>
<li>1 baguette</li>
</ul>
<ol>
<li>Soak the beans overnight to soften, then simmer over medium heat for 45 minutes until tender.</li>
<li>While the beans are cooking, fry the bacon in a skillet over medium heat until it is crispy and most of the fat has melted off. Pull the bacon strips out of the pan and let cool, trying to keep as much of the grease in the skillet as possible.</li>
<li>Turn down the heat on the skillet to low. Add the diced onion and some salt to the bacon grease in the skillet and cook for 15 minutes, slowly letting the onion turn clear and caramelize.</li>
<li>Drain the majority of the water from the beans (leaving about a half cup) and add the beans and their water to the skillet with the onion and bacon grease. Stir together with the red pepper. Raise the heat to medium and stew for another 15 minutes or so, until the beans begin to fall apart.</li>
<li>Mash the beans in the skillet with a utensil of some sort until you have chunky bean paste interspersed with red-pepper and bean husks. Crumble the bacon and stir it into the beans. Salt to taste.</li>
<li>Cut the baguette into thin slices. Pile a large dollop of beans on each slice and top with diced cherry tomatoes.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2011/06/15/black-bean-crostini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>River Levels Widget v.1.2.2 available</title>
		<link>http://www.adamfranco.com/2011/03/23/river-levels-widget-v-1-2-2-available/</link>
		<comments>http://www.adamfranco.com/2011/03/23/river-levels-widget-v-1-2-2-available/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 00:46:02 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Computers and Technology]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Dashboard widgets]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=581</guid>
		<description><![CDATA[The RiverLevels widget provides an easy way to monitor the amount of water flowing in your favorite streams and rivers right from your Dashboard. The RiverLevels widget is of particular interest to whitewater kayakers and canoeists. Once any United States Geological Survey (USGS) stream-gauge station is selected, it is automatically refreshed to always provide you [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://downloads.sourceforge.net/waterwidgets/RiverLevels.wdgt-1.2.zip"><img src="http://www.adamfranco.com/files/2008/02/screen-shot.jpg" title="RiverLevels 1.0 Screen Shot" alt="RiverLevels 1.0 Screen Shot" style="width: 100%; max-width: 817px" align="middle" border="0" /></a></p>
<p>The <span class="title">RiverLevels</span> widget provides an easy way to monitor the amount of water flowing in your favorite streams and rivers right from your Dashboard. The <span class="title">RiverLevels</span> widget is of particular interest to whitewater kayakers and canoeists.</p>
<p>Once any United States Geological Survey (USGS) stream-gauge station is selected, it is automatically refreshed to always provide you with the latest graph of the water-level. As of version 1.2 you can choose between two graph styles: discharge in cubic feet per second (CFS) and water-height in feet.</p>
<p>This widget is Free software, licensed under the GNU General Public License (GPL) version 3 or later.</p>
<ul>
<li><strong><a href="http://sourceforge.net/projects/waterwidgets/files/RiverLevels.wdgt/1.2.2/RiverLevels.wdgt-1.2.2.zip/download">Download</a></strong> (<a href="http://sourceforge.net/projects/waterwidgets/files/RiverLevels.wdgt/1.2.2/">alternate download link</a>)</li>
</ul>
<ul>
<li><a href="http://waterwidgets.sourceforge.net/">More Info</a></li>
<li><a href="http://www.apple.com/downloads/dashboard/information/riverlevels.html">Apple&#8217;s Download page for RiverLevels.wdgt</a></li>
<li><a href="http://sourceforge.net/tracker/?group_id=149897&amp;atid=776122">Bug Tracker</a></li>
</ul>
<p><strong> Requirements:</strong></p>
<ul>
<li>OS X &#8211; 10.4 &#8220;Tiger&#8221; or later</li>
</ul>
<p><strong>Change Log:</strong><br />
1.2.2 (2011-03-23)</p>
<ul>
<li>Fix for image URL change in USGS site.</li>
</ul>
<p><a href="http://www.adamfranco.com/2008/02/10/river-levels-widget-v121/">1.2.1 (2008-02-10)</a></p>
<ul>
<li>New zip archive includes the &#8216;library&#8217; directory missing in the 1.2 release.</li>
</ul>
<p><a href="http://www.adamfranco.com/2008/02/07/river-levels-widget-v12/">1.2 (2008-02-06)</a></p>
<ul>
<li>Fixed Leopard (10.5) compatability bug.</li>
<li> Added the ability to choose Gauge Height (ft) in addition to discharge (CFS).</li>
</ul>
<p>1.1 (2007-01-08)</p>
<ul>
<li>Fixed graphs extending off bottom of widget</li>
<li>Fixed invisibility of front refresh icon</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2011/03/23/river-levels-widget-v-1-2-2-available/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mission-Style Bookshelf</title>
		<link>http://www.adamfranco.com/2011/02/12/mission-style-bookshelf/</link>
		<comments>http://www.adamfranco.com/2011/02/12/mission-style-bookshelf/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 02:13:05 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Life and Everything Else]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[woodworking]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=572</guid>
		<description><![CDATA[My current woodworking project is a Mission-style bookshelf that I designed to match the sofa table that I built last year. The bookshelf will sit below a window to the kitchen, so it is low and extra wide to fit that space. To support the weight of the books without sagging, sets of stiles transfers [...]]]></description>
				<content:encoded><![CDATA[<p><object width="600" height="450"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fadamfranco%2Fsets%2F72157626035422760%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fadamfranco%2Fsets%2F72157626035422760%2F&#038;set_id=72157626035422760&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fadamfranco%2Fsets%2F72157626035422760%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fadamfranco%2Fsets%2F72157626035422760%2F&#038;set_id=72157626035422760&#038;jump_to=" width="600" height="450"></embed></object></p>
<p>My current woodworking project is a Mission-style bookshelf that I designed to match the <a href="http://www.adamfranco.com/2010/04/11/sofa-table-complete/">sofa table</a> that I built last year. The bookshelf will sit below a window to the kitchen, so it is low and extra wide to fit that space. To support the weight of the books without sagging, sets of stiles transfers weight from the middle shelf to the frame above and below.</p>
<p>I am building the bookshelf out of cherry. Like the sofa table, all joinery is mortise and tenon. This time I am squaring out the mortises with a new set of mortising chisels rather than rounding off the tenons with a knife as I did on the sofa table &#8212; which is making the process go much faster.</p>
<p>If you like the design and wish to build one for yourself, you can download my <a href='http://www.adamfranco.com/files/2011/02/Mission-Bookshelf.skp'>SketchUp model</a> as a starting point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2011/02/12/mission-style-bookshelf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Tip: Grouping feature-branch commits when merging.</title>
		<link>http://www.adamfranco.com/2010/12/12/git-tip-grouping-feature-branch-commits-when-merging/</link>
		<comments>http://www.adamfranco.com/2010/12/12/git-tip-grouping-feature-branch-commits-when-merging/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 18:32:02 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Computers and Technology]]></category>
		<category><![CDATA[Work/Professional]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[source-control]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=478</guid>
		<description><![CDATA[Let&#8217;s say you are working on a large feature or update that requires a bunch of commits to complete. You finish up with your work and are then ready to merge it onto your master branch. For example, here is the history of my drupal repository after some work updating the cas module to the [...]]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s say you are working on a large feature or update that requires a bunch of commits to complete. You finish up with your work and are then ready to merge it onto your master branch.</p>
<p>For example, here is the history of my drupal repository after some work updating the cas module to the latest version (and to support the new version of <a href="https://wiki.jasig.org/display/CASC/phpCAS">phpCAS</a>):<br />
<a href="http://www.adamfranco.com/files/2010/12/git-merge-0.png" rel="lightbox[478]" title="git-merge-0"><img class="aligncenter size-full wp-image-479" title="git-merge-0" src="http://www.adamfranco.com/files/2010/12/git-merge-0.png" alt="" width="100%" /></a></p>
<p>As you can see, I have a number of commits, followed by a merge in with the new module code, followed by some more commits.</p>
<p>Now, if I merge my feature branch (<code>master-cas3-simple</code>) into the <code>master</code> via</p>
<pre>git merge  master-cas3-simple</pre>
<p>then the history will look like this:<br />
<a href="http://www.adamfranco.com/files/2010/12/git-merge-ff.png" rel="lightbox[478]" title="git-merge-ff"><img class="aligncenter size-full wp-image-482" title="git-merge-ff" src="http://www.adamfranco.com/files/2010/12/git-merge-ff.png" alt="" width="100%" /></a></p>
<p>While the history is all there, it isn&#8217;t obvious that all of the commits beyond &#8220;Convert MS Word quote&#8230;&#8221; are a single unit of work. They all kind of blend together because git performed a &#8220;fast-forward&#8221; commit. Usually fast-forward commits are helpful since they keep the history from being cluttered with hundreds of unnecessary merge commits, but in this case we are loosing the context of these commits being a unit of work.</p>
<p>To preserve the grouping of these commits together I can instead force the merge operation to create a merge commit (and even append a message) by using the <code>--no-ff</code> option to <code>git merge</code>:</p>
<pre>git merge --no-ff -m "Upgraded CAS support to to cas-6.x-3.x-dev and phpCAS 1.2.0 RC2.5" master-cas3-simple</pre>
<p>This results in the history below:<br />
<a href="http://www.adamfranco.com/files/2010/12/git-merge-no-ff.png" rel="lightbox[478]" title="git-merge-no-ff"><img class="aligncenter size-full wp-image-484" title="git-merge-no-ff" src="http://www.adamfranco.com/files/2010/12/git-merge-no-ff.png" alt="" width="100%" /></a></p>
<p>As you can see, merging with the <code>--no-ff</code> option creates a merge commit which very obviously delineates work on this feature. If we decided that we wanted to roll back this feature it would be much easier to sort out where the starting point before the feature was.</p>
<div class='attribution'>
Thanks to Vincent Driessen for turning me onto the utility of the the <code>--no-ff</code> merge option via his post &#8220;<a href="http://nvie.com/posts/a-successful-git-branching-model/">A successful Git branching model</a>&#8220;.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2010/12/12/git-tip-grouping-feature-branch-commits-when-merging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mirroring a Subversion repository on Github</title>
		<link>http://www.adamfranco.com/2010/12/05/mirroring-a-subversion-repository-on-github/</link>
		<comments>http://www.adamfranco.com/2010/12/05/mirroring-a-subversion-repository-on-github/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 05:30:12 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Computers and Technology]]></category>
		<category><![CDATA[Work/Professional]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[git-svn]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[source-control]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=445</guid>
		<description><![CDATA[For the past few months I have been doing a lot of work on the phpCAS library, mostly to improve the community trunk of phpCAS so that I wouldn&#8217;t have to maintain our own custom fork with support for the CAS attribute format we use at Middlebury College. The phpCAS project lead, Joachim Fritschi, has [...]]]></description>
				<content:encoded><![CDATA[<p>For the past few months I have been doing a lot of <a href="http://www.ohloh.net/p/phpcas/contributors/290013371731193">work</a> on the <a href="https://wiki.jasig.org/display/CASC/phpCAS">phpCAS library</a>, mostly to improve the community trunk of phpCAS so that I wouldn&#8217;t have to maintain our own custom fork with support for the <a href="https://issues.jasig.org/browse/PHPCAS-88">CAS attribute</a> format we use at Middlebury College. The phpCAS project lead, Joachim Fritschi, has been great to work with and I&#8217;ve had a blast helping out with the project.</p>
<p>The tooling has involved a few challenges however, since <a href="http://www.jasig.org/">Jasig</a> (the organization that hosts the <a href="http://www.jasig.org/cas">CAS</a> and phpCAS projects) uses <a href="http://subversion.apache.org/">Subversion</a> for its source-code repositories and we use <a href="http://git-scm.com/">Git</a> for all of our projects. Now, I could just suck it up and use Subversion when doing phpCAS development, but there are a few reasons I don&#8217;t:</p>
<ol>
<li>We make use of <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#submodules">Git submodules</a> to include phpCAS along with the source-code of our applications, necessitating the use of a public Git repository that includes phpCAS.</li>
<li>The <a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html">git-svn</a> tools allow me to use git on my end to work with a Subversion repository, which is great because&#8230;</li>
<li>I find that Git&#8217;s fast history browsing and searching make troubleshooting and bug fixing much easier than any other tools I&#8217;ve used.</li>
</ol>
<p>For the past two years I have been using git-svn to work with the phpCAS repository and every so often pushing changes up to a <a href="https://github.com/adamfranco/phpcas/">public Git repository on GitHub</a>. Our applications reference this repository as a submodule when they need to make use of phpCAS. Now that I&#8217;ve been doing more work on phpCAS (and am more interested in keeping our applications using up-to-date versions), I&#8217;ve decided to automate the process of mirroring the Subversion repository on GitHub. Read on for details of how I&#8217;ve set this up and the scripts for keeping the mirror in sync.</p>
<p><span id="more-445"></span></p>
<p>On my development server I have a git repository I&#8217;ve cloned from the Jasig Subversion repository via:</p>
<pre>git svn clone --stdlayout https://source.jasig.org/cas-clients/phpcas/</pre>
<p>I use this repository for my phpCAS development and am continually using <code>git svn rebase</code> and <code>git svn dcommit</code> to update my branches from Subversion and commit changes back to the Subversion repository.</p>
<p>My goal was to fetch from Subversion and push all of the branches and tags from the Subversion repository to GitHub while ignoring any private branches or un-dcommited changes I might have kicking about my development repository.</p>
<p><strong>Step 1: Add the GitHub repository as a remote</strong></p>
<pre>git remote add github git@github.com:adamfranco/phpcas.git</pre>
<p><strong>Step 2: Fetch the latest changes from the svn repository</strong><br />
To do this, I just needed to run <code>git svn fetch</code> to import commits from the Subversion repository into my Git repository.</p>
<p><strong>Step 3: Make Git tags for Subversion tag-branches</strong><br />
I may be doing something wrong, but it seems that Subversion tags come through <code>git svn</code> as git branches rather than as git &#8220;tag&#8221; objects. Basically they are a branch with a single commit that just adds the tag message, but no content change. Using <code>git show</code> I found I could grab the parent id, message, and other metadata from the &#8220;tag-branch&#8221;, then feed that into <code>git tag</code> to create actual tag objects in the git repository.</p>
<p style="text-align: center;"><a href="http://www.adamfranco.com/files/2010/12/git-svn_tags.png" rel="lightbox[445]" title="git-svn_tags"><img class="aligncenter" title="git-svn_tags" src="http://www.adamfranco.com/files/2010/12/git-svn_tags.png" alt="" width="100%" /></a></p>
<p><strong>Step 4: Push subversion branches and newly created tags to GitHub</strong><br />
When called with no parameters <code>git push</code> will push all branches that have matching names in both the source and the destination repository. This wasn&#8217;t going to work for me since I want to only automatically push the branch-state that exists in subversion (not any un-dcommitted changes in my Git repository) and want to create mirrors of any new branches that appear in the Subversion repository. To accomplish this I needed to specify every branch individually. I determined the list of branches via:</p>
<pre>git branch -r | grep -v '/' | grep -v trunk</pre>
<p>then looped through them and appended them to the hard-coded mapping between the svn &#8220;trunk&#8221; and the GitHub &#8220;master&#8221;:</p>
<pre>$cmd = 'git push --tags github refs/remotes/trunk:refs/heads/master ';
foreach ($svnBranches as $branch) {
	$cmd .= 'refs/remotes/'.$branch.':refs/heads/'.$branch.' ';
}</pre>
<p><strong>All together: <code>update_github_phpcas</code></strong><br />
Below is a script which performs the tasks above. I&#8217;ve added it to my crontab so that it runs every half-hour and keeps my GitHub repository in-sync with the Jasig Subversion repository.</p>
<div style="display: block; border: 1px dotted; padding: 5px;"><code><span style="color: #000000;"><br />
#!/usr/local/bin/php<br />
<span style="color: #0000bb;">&lt;?php<br />
</span><span style="color: #ff8000;">/**<br />
* Script to mirror a Subversion repository on GitHub or another public Git repository.<br />
*<br />
* Author: Adam Franco (afranco@middlebury.edu)<br />
* Date: 2010-12-04<br />
* License: GNU General Public License (GPL) version 2 or later.<br />
*/&nbsp;</p>
<p><span style="color: #0000bb;">chdir</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'/home/afranco/private_html/phpcas/'</span><span style="color: #007700;">);</span></p>
<p><span style="color: #ff8000;">// Fetch from svn.<br />
</span><span style="color: #007700;">`</span><span style="color: #0000bb;">git svn fetch</span><span style="color: #007700;">`;</span></p>
<p><span style="color: #ff8000;">// Lookup all of the svn branches<br />
</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">= </span><span style="color: #0000bb;">explode</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"\n"</span><span style="color: #007700;">, </span><span style="color: #0000bb;">trim</span><span style="color: #007700;">(`</span><span style="color: #0000bb;">git branch -r | grep -v '/' | grep -v trunk</span><span style="color: #007700;">`));<br />
</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">= </span><span style="color: #0000bb;">array_map</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'trim'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$svnBranches</span><span style="color: #007700;">);</span></p>
<p><span style="color: #ff8000;">// Add all of our branches to the list of those to push<br />
</span><span style="color: #0000bb;">$cmd </span><span style="color: #007700;">= </span><span style="color: #dd0000;">'git push --tags github refs/remotes/trunk:refs/heads/master '</span><span style="color: #007700;">;<br />
foreach (</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">as </span><span style="color: #0000bb;">$branch</span><span style="color: #007700;">) {<br />
</span><span style="color: #0000bb;">$cmd </span><span style="color: #007700;">.= </span><span style="color: #dd0000;">'refs/remotes/'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$branch</span><span style="color: #007700;">.</span><span style="color: #dd0000;">':refs/heads/'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$branch</span><span style="color: #007700;">.</span><span style="color: #dd0000;">' '</span><span style="color: #007700;">;<br />
}</span></p>
<p><span style="color: #ff8000;">// Ensure that Git tags are created for every SVN tag branch.<br />
</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">= </span><span style="color: #0000bb;">explode</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"\n"</span><span style="color: #007700;">, </span><span style="color: #0000bb;">trim</span><span style="color: #007700;">(`</span><span style="color: #0000bb;">git branch -r | grep 'tags/'</span><span style="color: #007700;">`));<br />
</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">= </span><span style="color: #0000bb;">array_map</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'trim'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$svnBranches</span><span style="color: #007700;">);<br />
foreach (</span><span style="color: #0000bb;">$svnBranches </span><span style="color: #007700;">as </span><span style="color: #0000bb;">$svnTag</span><span style="color: #007700;">) {<br />
</span><span style="color: #0000bb;">$ref </span><span style="color: #007700;">= </span><span style="color: #dd0000;">"refs/remotes/$svnTag"</span><span style="color: #007700;">;<br />
</span><span style="color: #0000bb;">$parent </span><span style="color: #007700;">= </span><span style="color: #0000bb;">shell_exec</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"git show --format=\"format:%P\" $ref"</span><span style="color: #007700;">);</span></p>
<p><span style="color: #ff8000;">// If there are no tags on the parent of the tag branch, add one.<br />
</span><span style="color: #007700;">if (!</span><span style="color: #0000bb;">strlen</span><span style="color: #007700;">(</span><span style="color: #0000bb;">trim</span><span style="color: #007700;">(`</span><span style="color: #0000bb;">git tag --contains $parent</span><span style="color: #007700;">`))) {<br />
</span><span style="color: #0000bb;">$message </span><span style="color: #007700;">= </span><span style="color: #0000bb;">shell_exec</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"git show --format=\"format:%s%ntagged by %aN on %aD\" $ref"</span><span style="color: #007700;">);<br />
</span><span style="color: #0000bb;">$date </span><span style="color: #007700;">= </span><span style="color: #0000bb;">shell_exec</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"git show --format=\"format:%ai\" $ref"</span><span style="color: #007700;">);<br />
</span><span style="color: #0000bb;">$tagName </span><span style="color: #007700;">= </span><span style="color: #0000bb;">str_replace</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'tags/'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">''</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$svnTag</span><span style="color: #007700;">);</span></p>
<p><span style="color: #0000bb;">$tagCmd </span><span style="color: #007700;">= </span><span style="color: #dd0000;">'GIT_COMMITTER_DATE="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$date</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'" git tag -a -m "'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$message</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'" '</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$tagName</span><span style="color: #007700;">.</span><span style="color: #dd0000;">' '</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$parent</span><span style="color: #007700;">;<br />
</span><span style="color: #ff8000;">#        print $tagCmd ."\n";<br />
#        print "Creating tag $tagName\n";<br />
</span><span style="color: #007700;">`</span><span style="color: #0000bb;">$tagCmd</span><span style="color: #007700;">`;<br />
}<br />
}</span></p>
<p><span style="color: #ff8000;">#print $cmd;<br />
#print "\n";</span></p>
<p><span style="color: #0000bb;">$output </span><span style="color: #007700;">= `</span><span style="color: #0000bb;">$cmd 2&gt;&amp;1</span><span style="color: #007700;">`;</span></p>
<p>if (<span style="color: #0000bb;">trim</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$output</span><span style="color: #007700;">) != </span><span style="color: #dd0000;">'Everything up-to-date'</span><span style="color: #007700;">)<br />
print </span><span style="color: #0000bb;">$output</span><span style="color: #007700;">.</span><span style="color: #dd0000;">"\n"</span><span style="color: #007700;">;</span></p>
<p></span></span></code>&nbsp;</p>
<p><code> </code>&nbsp;</p>
</div>
<p>I think that this script should work with very few changes for mirroring any Subversion repository as a Git repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2010/12/05/mirroring-a-subversion-repository-on-github/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bittersweet Falls</title>
		<link>http://www.adamfranco.com/2010/11/07/bittersweet-falls/</link>
		<comments>http://www.adamfranco.com/2010/11/07/bittersweet-falls/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 03:09:09 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Life and Everything Else]]></category>
		<category><![CDATA[hiking]]></category>
		<category><![CDATA[outdoors]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[Vermont]]></category>
		<category><![CDATA[waterfalls]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=435</guid>
		<description><![CDATA[A hundred yards from the aptly-named Bittersweet Falls Road, the Beaver Brook cascades over a formation of marble and dolomite to create a beautiful 18 foot cascade. Above Bittersweet Falls, the Beaver Brook cuts a deep ravine through layers of black slate. The gorge can be difficult to traverse without getting one&#8217;s feet wet, but [...]]]></description>
				<content:encoded><![CDATA[<p>A hundred yards from the aptly-named Bittersweet Falls Road, the Beaver Brook cascades over a formation of marble and dolomite to create a beautiful 18 foot cascade.</p>
<p><a href="http://www.flickr.com/photos/adamfranco/5156790398/" title="Bittersweet Falls by Adam Franco, on Flickr"><img src="http://farm5.static.flickr.com/4003/5156790398_292332eda6.jpg" width="500" height="333" alt="Bittersweet Falls" /></a></p>
<p>Above Bittersweet Falls, the Beaver Brook cuts a deep ravine through layers of black slate. The gorge can be difficult to traverse without getting one&#8217;s feet wet, but is filled with cascades and mossy bottoms ringed by ferns and overshadowed by hemlocks.</p>
<p><a href="http://www.flickr.com/photos/adamfranco/5156180895/" title="In the glen by Adam Franco, on Flickr"><img src="http://farm5.static.flickr.com/4124/5156180895_03c0ec8e7b.jpg" width="333" height="500" alt="In the glen" /></a></p>
<p>I headed out the door today planing to swing by Bittersweet Falls for a few quick shots before driving out to the Dead Creek Wildlife Management Area where stargazer05756 has been <a href="http://www.flickr.com/photos/star05/5154438406/">following the migration of snow geese</a>. I never made it to Dead Creek. After taking a few shots below the falls I climbed up above and noticed an impressive gorge winding upstream. Ever since I was a child I have always loved exploring up cascading streams. There is just something magical above clambering around a rock to find another waterfall or quiet pool surrounded by moss, ferns, hemlocks &#8212; and in the south, rhododendrons.</p>
<p><a href="http://www.flickr.com/photos/adamfranco/5156791674/" title="311/365: In the glen by Adam Franco, on Flickr"><img src="http://farm2.static.flickr.com/1249/5156791674_2e6868b936.jpg" width="443" height="500" alt="311/365: In the glen" /></a></p>
<p>The Beaver Brook didn&#8217;t disappoint and while its steep slate side posed a challenge, I hiked about a third of a mile upstream along the stream bed before scaling the hillside and quickly walking back to the car from above.</p>
<p><iframe width="550" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fwww.adamfranco.com%2Ffiles%2F2010%2F11%2FBittersweet-Falls-Combined.kml&amp;sll=44.015337,-73.16734&amp;sspn=0.132586,0.277748&amp;ie=UTF8&amp;t=h&amp;ll=44.028664,-73.215723&amp;spn=0.0054,0.011802&amp;z=16&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=http:%2F%2Fwww.adamfranco.com%2Ffiles%2F2010%2F11%2FBittersweet-Falls-Combined.kml&amp;sll=44.015337,-73.16734&amp;sspn=0.132586,0.277748&amp;ie=UTF8&amp;t=h&amp;ll=44.028664,-73.215723&amp;spn=0.0054,0.011802&amp;z=16" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>
<p>The <a href="http://www.northeastwaterfalls.com/waterfall.php?num=11&#038;p=0">Northeast Waterfalls site</a> has directions and more info.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2010/11/07/bittersweet-falls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BASH tip: Top web pages</title>
		<link>http://www.adamfranco.com/2010/10/14/bash-tip-top-web-pages/</link>
		<comments>http://www.adamfranco.com/2010/10/14/bash-tip-top-web-pages/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 16:00:04 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Computers and Technology]]></category>
		<category><![CDATA[Work/Professional]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://www.adamfranco.com/?p=431</guid>
		<description><![CDATA[Here is a quick command to generate a list of the top pages in the Apache web-server&#8217;s access log: gawk '{ print $7}' /var/log/httpd/access_log &#124; sort &#124; uniq -c &#124; sort -nr &#124; head -n 20 Parts of the command explained: gawk '{ print $7}' &#8212; return only the 7th [white-space delimited] column of text [...]]]></description>
				<content:encoded><![CDATA[<p>Here is a quick command to generate a list of the top pages in the Apache web-server&#8217;s access log:</p>
<p><code>gawk '{ print $7}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -n 20</code></p>
<p>Parts of the command explained:</p>
<ol>
<li><code>gawk '{ print $7}' </code> &#8212; return only the 7th [white-space delimited] column of text from the access log, which happens to be the path requested.</li>
<li><code>sort </code> &#8212; sort the lines of the output.</li>
<li><code>uniq -c </code> &#8212; condense the output to unique lines, prepending each line with the number of times that line occurs.</li>
<li><code>sort -nr </code>&#8211; sort the resulting lines numerically in reverse order.</li>
<li><code>head -n 20 </code> &#8212; chop off all but the first 20 lines.</li>
</ol>
<p>The result should look something like this:</p>
<pre>  83361 /
  49582 /feed
  39616 /robots.txt
  36265 /favicon.ico
  17048 /?feed=rss2
  10798 /archives/3
  10036 /wp-content/uploads/2007/05/img_7870_header.jpg
   9913 /wp-includes/images/smilies/icon_smile.gif
   9425 /wp-comments-post.php
   8274 /feed/
   7508 /archives/category/work/feed
   7367 /archives/88
   7312 /photos/10_small/IMG_3023.JPG.jpg
   7175 /photos/10_small/IMG_3028.JPG.jpg
   7151 /photos/10_small/IMG_3024.JPG.jpg
   7096 /photos/10_small/IMG_3026.JPG.jpg
   6381 /photosetToKML.php?set=72157594417350372&#038;size=small
   6253 /qtvr/2007-04-05_back_deck_snow%20-%2010000x5000%20-%20SLIN%20-%20Blended%20Layer0002.jpg
   5798 /photosetToKML.php
   4344 /archives/category/photography</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.adamfranco.com/2010/10/14/bash-tip-top-web-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
