<?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>ThirdRoute</title>
	<atom:link href="http://thirdroute.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thirdroute.com</link>
	<description>Brian Reavis&#039; rats nest of thoughts.</description>
	<lastBuildDate>Wed, 09 Dec 2009 11:05:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Camera + Lava Lamp + Frost in the Garage</title>
		<link>http://thirdroute.com/camera-lava-lamp-frost-in-the-garage/</link>
		<comments>http://thirdroute.com/camera-lava-lamp-frost-in-the-garage/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 11:05:38 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=615</guid>
		<description><![CDATA[

Some frost built up on a window in the garage. Lit with a halogen work lamp shining through an old lava lamp. How&#8217;s that for a gel?

It&#8217;s been cold lately (around -20&#176;F&#8217;ish)&#8230; so facets are forming all over the place. This isn&#8217;t good for the avy season&#8230; but nature&#8217;s fractals sure make for nice pictures.
&#187; [...]]]></description>
			<content:encoded><![CDATA[<div class="caption">
<a href="http://www.flickr.com/photos/bcreavis/4170891875/" title="Ice Crystals by Brian Reavis, on Flickr"><img src="http://farm3.static.flickr.com/2623/4170891875_8e42fc3ac9.jpg" width="450" height="246" alt="Ice Crystals" /></a></p>
<p>Some frost built up on a window in the garage. Lit with a halogen work lamp shining through an old lava lamp. How&#8217;s <em>that</em> for a gel?</p>
</div>
<p>It&#8217;s been cold lately (around -20&deg;F&#8217;ish)&#8230; so facets are forming all over the place. This isn&#8217;t good for the <abbr title="avalanche">avy</abbr> season&#8230; but nature&#8217;s fractals sure make for nice pictures.</p>
<p><a href="http://www.flickr.com/photos/bcreavis/archives/date-taken/2009/11/08/detail/" style="font-size: 1.3em">&raquo; See the rest on <strong>Flickr</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/camera-lava-lamp-frost-in-the-garage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Captify 1.1.3</title>
		<link>http://thirdroute.com/captify-1-1-3/</link>
		<comments>http://thirdroute.com/captify-1-1-3/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 08:01:12 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=585</guid>
		<description><![CDATA[The image caption plugin I wrote last spring that runs atop jQuery lives again. Made a few fixes, finally got the demonstration online, and zapped the size with Closure (only 2.3kb now!). We're now sitting at 1.1.3. Here's a demo:





Put your mouse over the image above.



Docs / Examples &#124; Download


Follow Me on Twitter


$('#captifyexample').captify({opacity: 0.75});
]]></description>
			<content:encoded><![CDATA[<p>The image caption plugin I wrote last spring that runs atop <a href="http://jquery.com">jQuery</a> lives again. Made a few fixes, finally got <a href="/projects/captify/">the demonstration</a> online, and zapped the size with <a href="http://closure-compiler.appspot.com/home">Closure</a> (only <strong>2.3kb</strong> now!). We're now sitting at 1.1.3. Here's a demo:</p>

<div class="caption">
<div class="captify">
<a href="http://www.flickr.com/photos/bcreavis/3193864966/" title="Cider by Brian Reavis, on Flickr"><img src="http://farm4.static.flickr.com/3455/3193864966_f0c62f7875.jpg" id="captifyexample" width="450" height="225" alt="Cider chillaxin' in the grass" /></a>
</div>
<p>Put your mouse over the image above.</p>
</div>

<p style="font-size: 1.3em">
<a href="/projects/captify/">Docs / Examples</a> | <a href="http://plugins.jquery.com/project/captify">Download</a>
</p>

<a href="http://twitter.com/brianreavis" class="followme">Follow Me on Twitter</a>

<script type="text/javascript" src="/projects/captify/captify.tiny.js"></script>
<script type="text/javascript">$('#captifyexample').captify({opacity: 0.75});</script>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/captify-1-1-3/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Installing RRDTool for PHP on Ubuntu Server</title>
		<link>http://thirdroute.com/installing-rrdtool-for-php-on-ubuntu-server/</link>
		<comments>http://thirdroute.com/installing-rrdtool-for-php-on-ubuntu-server/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 06:49:33 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[notes]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rrdtool]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=415</guid>
		<description><![CDATA[

rrdtool is a data logging and graphing utility that's great for system monitoring.


Compiling the latest RRDTool
cd ~
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.1.tar.gz
tar xzvf rrdtool-1.4.1.tar.gz
cd rrdtool-1.4.1
INSTALL_DIR=/opt/rrdtool-1.4.1
sudo mkdir $INSTALL_DIR
sudo chmod 777 $INSTALL_DIR
./configure --prefix=$INSTALL_DIR &#038;& make &#038;& make install
cd $INSTALL_DIR
sudo cp -r * /usr
rm -r ~/rrdtool-1.4.1

If you want to bypass the steps above and use a possibly-older version of RRD tool, just [...]]]></description>
			<content:encoded><![CDATA[<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/11/rrdtool.png" alt="RRD tool" title="rrdtool" width="450" height="200" class="alignnone size-full wp-image-449" />
<p><strong>rrdtool</strong> is a data logging and graphing utility that's great for system monitoring.</p>
</div>

<h4>Compiling the latest RRDTool</h4>
<pre class="cmd">cd ~
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.1.tar.gz
tar xzvf rrdtool-1.4.1.tar.gz
cd rrdtool-1.4.1
INSTALL_DIR=/opt/rrdtool-1.4.1
sudo mkdir $INSTALL_DIR
sudo chmod 777 $INSTALL_DIR
./configure --prefix=$INSTALL_DIR && make && make install
cd $INSTALL_DIR
sudo cp -r * /usr
rm -r ~/rrdtool-1.4.1</pre>

If you want to bypass the steps above and use a possibly-older version of RRD tool, just run:
<pre class="cmd">sudo apt-get install librrd2-dev rrdtool</pre>

<span id="more-415"></span>
<h4>PHP Extension</h4>

Download and install the PHP extension source:
<pre class="cmd">cd ~
wget http://oss.oetiker.ch/rrdtool/pub/contrib/php_rrdtool.tar.gz
tar zxvf php_rrdtool.tar.gz
sudo mv ./rrdtool /usr/include/php5/ext/rrdtool</pre>

Configure and build the extension:
<pre class="cmd">cd /usr/include/php5/ext/rrdtool
sudo phpize
sudo ./configure --with-php-config=/usr/bin/php-config --with-rrdtool=/usr
sudo make
sudo make install</pre>

<pre class="cmd">sudo nano /etc/php5/conf.d/rrdtool.ini</pre>

Write the contents below to the "rrdtool.ini" configuration file. Note: the file won't already exist&mdash;you're creating it now:
<pre>; Enable rrdtool extension module
extension=rrdtool.so</pre>

Save the file, restart Apache, and she should be all good to go!
<pre class="cmd">sudo service apache2 restart</pre>

<h4>The Result</h4>
To see if the install went fine, create a little *.php file that prints out the php configuration: <code><strong>&lt;?php phpinfo(); ?&gt;</strong></code>. When you pull up the script in your browser, you should see a section labeled "rrdtool" if the install went a-okay.

<h4>Where to go from here...</h4>
<ul>
	<li><a href="http://www.ioncannon.net/system-administration/59/php-rrdtool-tutorial/">PHP RRDTool tutorial</a></li>
	<li><a href="http://oss.oetiker.ch/rrdtool/gallery/index.en.html">Graph Gallery (inspiration)</a></li>
</ul>

<a href="http://twitter.com/brianreavis" class="followme">Follow me on Twitter</a>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/installing-rrdtool-for-php-on-ubuntu-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>We played in the snow today</title>
		<link>http://thirdroute.com/we-played-in-the-snow-today/</link>
		<comments>http://thirdroute.com/we-played-in-the-snow-today/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 03:18:19 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=384</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<object width='400' height='225'><param name='allowfullscreen' value='true' /><param name='allowscriptaccess' value='always' /><param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=7353835&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1' /><embed src='http://vimeo.com/moogaloop.swf?clip_id=7353835&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1' type='application/x-shockwave-flash' allowfullscreen='true' allowscriptaccess='always' width='400' height='225'></embed></object>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/we-played-in-the-snow-today/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Simple Cross-domain JavaScript IFrame Communication</title>
		<link>http://thirdroute.com/simple-cross-domain-javascript-iframe-communication/</link>
		<comments>http://thirdroute.com/simple-cross-domain-javascript-iframe-communication/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 15:15:35 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=313</guid>
		<description><![CDATA[For the past day, I've been working on developing a bookmarklet. Part of it involves injecting a sign-in form as an iframe into the page the user is on. Keeping the form snuggled up in a remote iframe is crucial for keeping the credentials the person types far away from the peeking eyes of potentially-malicious [...]]]></description>
			<content:encoded><![CDATA[<p>For the past day, I've been working on developing a bookmarklet. Part of it involves injecting a sign-in form as an <code>iframe</code> into the page the user is on. Keeping the form snuggled up in a remote <code>iframe</code> is crucial for keeping the credentials the person types far away from the peeking eyes of potentially-malicious code on the page (see "<a href="http://en.wikipedia.org/wiki/Same_origin_policy">Same-origin policy</a>").</p>

<p>Well this is great. *sigh* Now how do you go about sending <em>legitimate</em> messages back and forth between the two documents?</p>

<h5>The Solution</h5>
The answer lies with the blend of two techniques: (A) sending the data by setting the <a href="http://www.w3.org/Addressing/URL/4_2_Fragments.html">fragment identifier</a> for the remote document and then polling for the change, and (B) implementing HTML5's <a href="https://developer.mozilla.org/en/DOM/window.postMessage"><code>window.postMessage()</code></a> method.

<h4>xcom_send</h4>
<pre class="brush: php">
var xcom_send = function(win, msg, origin){
	if (document.all ? document.documentMode : window.postMessage){
		win.postMessage(msg, origin ? origin : &#039;*&#039;);
	}else{
		win.location.hash = &#039;#xcom-&#039; + msg;
	}
};
</pre>
<table width="100%" cellpadding="0" cellspacing="1" class="args">
<tr>
    <th>Argument</th>
    <th>Notes</th>
</tr>
<tr>
    <td valign="top" class="arg">win</td>
    <td valign="top">The target <a href="https://developer.mozilla.org/en/DOM/window">window</a> to receive the message.</td>
</tr>
<tr>
    <td valign="top" class="arg">msg</td>
    <td valign="top">The string to send to <code>win</code>. This will be picked up by the callback setup with <code>xcom_listen</code>.</td>
</tr>
<tr>
    <td valign="top" class="arg">origin</td>
    <td valign="top"><em>(optional)</em> The domain(s) to allow communication to. Accepts a string, or array of strings. Domains should be in the form of <code>http://the.domain.com</code> (make sure to not include a trailing slash). <strong>Important:</strong> Don't depend on this for security---this argument will only be acknowledged by modern browers: IE8, Chrome, and FF3 beta 3 so far.</td>
</tr>
</table>

<h4>xcom_listen</h4>
<pre class="brush: php">var xcom_listen = function(win, cb, origin){
	if (document.all ? document.documentMode : win.postMessage){
		var receiveMessage = function(e){
			var safe = origin == null || origin == &#039;*&#039;;
			if (!safe){									
				if (origin instanceof Array){
					for (var i = 0; i &lt; origin.length; i++){
						if (origin[i] === e.origin){
							safe = true; 
							break;
						}
					}
				}else{
					safe = e.origin === origin;
				}
			}
			if (safe &amp;&amp; cb) cb(e.data);
		};
		if (win.addEventListener) win.addEventListener(&#039;message&#039;,receiveMessage,false);
		else if(win.attachEvent) win.attachEvent(&#039;onmessage&#039;,receiveMessage);
		else win.onmessage = receiveMessage;
	}else{
		var l = win.setInterval(function(){
			if (win.location.hash.substring(0,6)==&#039;#xcom-&#039;){
				//window.clearInterval(l);
				var msg = win.location.hash.substring(6);
				win.location.hash = &#039;&#039;;
				if (cb) cb(msg);
			}
		}, 250);
	}
};</pre>

<table width="100%" cellpadding="0" cellspacing="1" class="args">
<tr>
    <th>Argument</th>
    <th>Notes</th>
</tr>
<tr>
    <td valign="top" class="arg">win</td>
    <td valign="top">The <a href="https://developer.mozilla.org/en/DOM/window">window</a> to listen for messages from.</td>
</tr>
<tr>
    <td valign="top" class="arg">cb</td>
    <td valign="top">The callback function to receive any messages from <code>win</code>. The callback will be invoked with the message string as the first and only argument.</td>
</tr>
<tr>
    <td valign="top" class="arg">origin</td>
    <td valign="top"><em>(optional)</em> The domain(s) to allow communication from. Accepts a string, or array of strings. Domains should be in the form of <code>http://the.domain.com</code> (make sure to not include a trailing slash). <strong>Important:</strong> Don't depend on this for security---this argument will only be acknowledged by modern browers: IE8, Chrome, and FF3 beta 3 so far.</td>
</tr>
</table>

<h4>Usage Example</h4>
To listen for messages sent from an <code>iframe</code> in the document, use <strong><code>xcom_listen</code></strong> with a basic callback function:
<pre class="brush: php">
var frame = document.getElementById(&#039;myframe&#039;);
xcom_listen(
    frame.contentWindow || frame, 
    function(msg){
        alert(&#039;From the iframe: &#039; + msg);
    }, [&#039;http://mydomain.com&#039;, &#039;http://www.mydomain.com&#039;]);
</pre>

From inside the <code>iframe</code>, use <strong><code>xcom_send</code></strong> and <code>window.top</code> to send a message to be captured by <code>xcom_listen</code> in the parent document (seen above).
<pre class="brush: php">
xcom_send(window.top, &#039;I like to talk and be heard!&#039;);
</pre>

No more antisocial cross-domain web apps!]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/simple-cross-domain-javascript-iframe-communication/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Autumna &#8211; A style for Aptana IDE</title>
		<link>http://thirdroute.com/autumna-a-style-for-aptana-ide/</link>
		<comments>http://thirdroute.com/autumna-a-style-for-aptana-ide/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 10:26:01 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=266</guid>
		<description><![CDATA[I spend 12 hours straight in Aptana (an Eclipse-based IDE for web development) some days. Aptana&#8217;s great&#8230; but it&#8217;s pretty vanilla-looking straight out of the box (which gets old). 
This evening, a friend taunted me with Coda screenshots, and I decided enough is enough&#8212;it&#8217;s time to give code highlighting in Aptana a facelift. Well, here [...]]]></description>
			<content:encoded><![CDATA[<p>I spend 12 hours straight in <a href="http://aptana.com/">Aptana</a> (an <a href="http://www.eclipse.org/">Eclipse</a>-based IDE for web development) some days. Aptana&#8217;s great&#8230; but it&#8217;s pretty vanilla-looking straight out of the box (which gets old). </p>
<p>This evening, a <a href="http://pasqualedsilva.com">friend</a> taunted me with <a href="http://cld.ly/683ih">Coda screenshots</a>, and I decided enough is enough&#8212;it&#8217;s time to give code highlighting in Aptana a facelift. Well, here it is: a custom color scheme just for Aptana! I call it &#8220;<strong title="Totally original name, eh?">Autumna</strong>.&#8221;</p>
<h4>How it looks</h4>
<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/10/autumna-js.png" alt="" width="450" height="150" /></p>
<p>HTML, JavaScript, and PHP all at once</p>
</div>
<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/10/autumna-css.png" alt="" width="450" height="150" /></p>
<p>CSS</p>
</div>
<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/10/autumna-php.png" alt="" width="450" height="150" /></p>
<p>PHP</p>
</div>
<h4>Download &amp; Install</h4>
<ol>
<li>Download and extract <a href="/projects/autumna/autumna-1.1.zip">autumna-1.1.zip</a>.</li>
<li>In Aptana, go to: <strong><em>Window > Preferences</em></strong>.
<ul>
<li>In the search box in the upper left of the dialog that comes up, type in <strong>&#8220;colors&#8221;</strong>. This&#8217;ll hide almost all the fields you&#8217;re not interested in.</li>
<li>For each language listed under <strong><em>Aptana > Editors</em></strong>, there will be a <strong>&#8220;Colors&#8221; node</strong>. When you click on each, you&#8217;ll see an <strong>&#8220;Import&#8230;&#8221; button</strong> that will allow you to install the color scheme for the language.</li>
</ul>
</li>
</ol>
<p><a href="http://twitter.com/brianreavis" class="followme">Follow Me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/autumna-a-style-for-aptana-ide/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>An Epic Meetup</title>
		<link>http://thirdroute.com/an-epic-meetup/</link>
		<comments>http://thirdroute.com/an-epic-meetup/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 03:49:18 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=199</guid>
		<description><![CDATA[Last week was pretty good. Naah, epic actually. One of my great friends Pasquale D&#8217;Silva from Australia (now in Vancouver) finally hopped on a plane and came to visit for a week in Cody, WY. 
We got to marvel at tumbleweeds (apparently mystical to Aussies), take a giant roadtrip through Yellowstone and into Jackson,wrestle with [...]]]></description>
			<content:encoded><![CDATA[<p>Last week was <em title="inside joke - Welcome to... TecchhhWebbCastt!">pretty good</em>. Naah, epic actually. One of my great friends <a href="http://pasqualedsilva.com"><strong>Pasquale D&#8217;Silva</strong></a> from Australia (<a href="http://pasqualedsilva.com/blog/america/">now in Vancouver</a>) finally hopped on a plane and came to visit for a week in Cody, WY. </p>
<p>We got to marvel at tumbleweeds (apparently mystical to Aussies), take a giant roadtrip through Yellowstone and into Jackson,<del title="Yogi hid from us.">wrestle with bears</del>, walk through heaps of snow, fine-tune my Aussie accent, delve into a <span title="#000000">pitch-black</span> cave, laugh at cowboy hats, bake little creatures in the oven<sup>1</sup>, pillage McDonald&#8217;s like Vikings, geek out, and all sorts of other awesome.</p>
<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/10/spelunkin.jpg" alt="Spelunking" title="Spelunking" width="450" height="300" class="alignnone size-full wp-image-205" /></p>
<p><strong>Day 3:</strong> Pasquale about to follow Brandon into a shimmy over a decent-sized drop in Spirit Mountain cave. Unfortunately we weren&#8217;t able to find &#8220;The Descent&#8221; creatures down there&#8230;</p>
</div>
<p>Also, I finally got to witness how the illustrating fiend can draw any creature (real or imaginative) in thirty seconds flat&#8230; even on the back of the car.</p>
<div class="caption">
<img src="http://thirdroute.com/wp-content/uploads/2009/10/IMG_3514.jpg" alt="Dirty bear..." title="Dirty bear..." width="450" height="285" class="alignnone size-full wp-image-204" /></p>
<p><strong>At Old Faithful:</strong> A remedy for the hiding bears&#8230;</p>
</div>
<p>The only disappointment of the trip was not getting to see a <em>real</em> bear&#8212;the January-like wintery conditions probably didn&#8217;t help. Anyways, it&#8217;s sure going to be hard to say &#8220;snow&#8221; without pronouncing it as &#8220;snaaaar&#8221; now&#8230; </p>
<p>Twas a totally awesome time! Now to make it up to Vancouver sometime!</p>
<p><div class="caption">
<object width="450" height="253"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7032540&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7032540&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="450" height="253"></embed></object>
<p><strong>Video:</strong> Some random highlights... Especially random at 00:45!</p>
</div></p>
<ol class="footnotes"><li id="footnote_0_199" class="footnote"><a href="http://twitter.com/officialpeta">@PETA</a>: <strong>clay</strong> creatures</li></ol>]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/an-epic-meetup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reviving Bitalizer</title>
		<link>http://thirdroute.com/reviving-bitalizer/</link>
		<comments>http://thirdroute.com/reviving-bitalizer/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 04:32:37 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=183</guid>
		<description><![CDATA[For the past couple months, I&#8217;ve been assuming that I forever lost one of my favorite data visualization projects when my server exploded.

What was it?
A nifty, visual way to visualize the 1&#8217;s and 0&#8217;s that make up digital files. It was a brainchild from a dull lecture on Mesoamerican Culture.
It lives again
Yesterday, about 10 levels [...]]]></description>
			<content:encoded><![CDATA[<p>For the past couple months, I&#8217;ve been assuming that I forever lost one of my favorite data visualization projects when my <a href="/its-alive/" title="Not really">server exploded</a>.</p>
<p><a href="/projects/bitalizer/"><img src="http://thirdroute.com/wp-content/uploads/2009/09/bitalizer.png" alt="Bitalizer" title="Bitalizer" width="450" height="224" class="alignnone size-full wp-image-184" /></a></p>
<h4>What was it?</h4>
<p>A nifty, visual way to visualize the 1&#8217;s and 0&#8217;s that make up digital files. It was a brainchild from a dull lecture on Mesoamerican Culture.</p>
<h4>It lives again</h4>
<p>Yesterday, about 10 levels deep into my &#8220;heap&#8221; folder, <strong>I found it</strong>. For those who&#8217;re wondering: my &#8220;heap&#8221; folder is what I throw <em>everything</em> into when my three monitors get filled with icons. Old &#8220;heap&#8221; folders get thrown in, too. The folders hold what&#8217;d you find behind your bedroom dresser after three years&#8212;in a digital sense.</p>
<p><a href="http://thirdroute.com/projects/bitalizer/"><strong>http://thirdroute.com/projects/bitalizer/</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/reviving-bitalizer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s Alive</title>
		<link>http://thirdroute.com/its-alive/</link>
		<comments>http://thirdroute.com/its-alive/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 04:13:23 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=166</guid>
		<description><![CDATA[Someone has got to have a voodoo doll out there for my blogs.

The very first one got killed after I forgot to renew the domain (brianreavis.com) and then GoDaddy, being the awesome company that they are, stole it out from under me.
The second blog died after an experimental server setup exploded (basically).
This one is here [...]]]></description>
			<content:encoded><![CDATA[<p style="font-size: 1.2em">Someone has got to have a voodoo doll out there for my blogs.</p>
<ul>
<li>The very first one got <strong>killed</strong> after I forgot to renew the domain (brianreavis.com) and then GoDaddy, being the <em>awesome</em> company that they are, stole it out from under me.</li>
<li>The second blog <strong>died</strong> after an experimental server setup exploded (basically).</li>
<li style="font-size: 1.2em">This one is <strong>here to stay.</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/its-alive/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How-to: Authorize SSL keys w/o duplicating</title>
		<link>http://thirdroute.com/how-to-add-a-ssh-key-if-it-doesnt-exist/</link>
		<comments>http://thirdroute.com/how-to-add-a-ssh-key-if-it-doesnt-exist/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 03:05:49 +0000</pubDate>
		<dc:creator>brianreavis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thirdroute.com/?p=140</guid>
		<description><![CDATA[When authorizing SSL keys, you typically concatenate it to the authorized_keys file. Like this:

cat publickey.pub &#62;&#62; ~/.ssh/authorized_keys

But this simple method doesn't work when you're trying to load keys automatically .The keys might already exist, and if you keep concatenating the file, authorized_keys will get miles long with duplicates. So, here's a basic bash script to [...]]]></description>
			<content:encoded><![CDATA[When authorizing SSL keys, you typically concatenate it to the <code>authorized_keys</code> file. Like this:

<pre class="brush: php">cat publickey.pub &gt;&gt; ~/.ssh/authorized_keys</pre>

But this simple method doesn't work when you're trying to load keys automatically .The keys might already exist, and if you keep concatenating the file, <code>authorized_keys</code> will get miles long with duplicates. So, here's a basic bash script to authorize a key if it doesn't already exist in the index:

<pre class="brush: php">
#!/bin/bash
keypub=&quot;/root/github.pub&quot;
keyprivate=&quot;/root/github&quot;
while read line; do 
	keydata=$line
done &lt; $keypub
keydata=&quot;${keydata#&quot;${keydata%%[![:space:]]*}&quot;}&quot;
keydata=&quot;${keydata%&quot;${keydata##*[![:space:]]}&quot;}&quot;
keyfound=`fgrep &quot;${keydata}&quot; ~/.ssh/authorized_keys`
if [[ -n &quot;${keyfound}&quot; ]]; then
	echo &quot;${keydata}&quot;
	echo &quot;SSH key already loaded into ~/.ssh/authorized_keys&quot;
	exit 1
else
	keypubname=`basename $keypub`
	keyprivatename=`basename $keyprivate`
	sudo cp -f &quot;$keyprivate&quot; &quot;/root/.ssh/${keyprivatename}&quot;
	sudo cp -f &quot;$keypub&quot; &quot;/root/.ssh/${keypubname}&quot;
	sudo cat &quot;/root/.ssh/${keypubname}&quot; &gt;&gt; &quot;/root/.ssh/authorized_keys&quot;
	echo &quot;${keydata}&quot;
	echo &quot;Key successfully loaded into ~/.ssh/authorized_keys&quot;
	exit 0
fi
</pre>

Update these values to point to the public/private keys:
<pre class="brush: php">
keypub=&quot;/root/github.pub&quot;
keyprivate=&quot;/root/github&quot;
</pre>

Bash is beautiful for automation, isn't it?]]></content:encoded>
			<wfw:commentRss>http://thirdroute.com/how-to-add-a-ssh-key-if-it-doesnt-exist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
