<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUEGQHw9fSp7ImA9WhBaEEs.&quot;"><id>tag:blogger.com,1999:blog-35584545</id><updated>2013-05-20T08:27:01.265-07:00</updated><category term="environment" /><category term="bay area" /><category term="algorithms" /><category term="software" /><category term="outdoors" /><category term="google" /><title>Gregable</title><subtitle type="html">Greg Grothaus' Blog.&lt;br&gt;
Discussing geekery, the environment, and life in Silicon Valley.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gregable.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gregable.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>130</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/gregable" /><feedburner:info uri="gregable" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>gregable</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/gregable" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fgregable" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry gd:etag="W/&quot;DEEMQXs6eCp7ImA9WhBQFUk.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-4711785287329524862</id><published>2013-03-17T11:58:00.000-07:00</published><updated>2013-03-17T11:58:00.510-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-17T11:58:00.510-07:00</app:edited><title>Backups with a ReadyNAS Ultra 4 Plus and CrashPlan</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
After a long vacation full of photography, you load all of your photos up in Picasa. &amp;nbsp;You spend hours tweaking colors, cropping, tagging faces, and plopping down geo-tags onto a big map. &amp;nbsp;The very next day and your computer won't start. &amp;nbsp;The drive is dead.&lt;br /&gt;
&lt;br /&gt;
Despite the fact that the value of those photos and all of your other digital memories are priceless to you, you have never spent the effort to set up a reasonable backup. &amp;nbsp;It was something you planned to do, but never got around to. &amp;nbsp;Three years of photos are now locked away in a lifeless hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-jT9aqDIczSM/UUYIlMvCBbI/AAAAAAAAQ10/G9EYKqbmc6k/s1600/3760706750_80e3a976c9_z.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-jT9aqDIczSM/UUYIlMvCBbI/AAAAAAAAQ10/G9EYKqbmc6k/s400/3760706750_80e3a976c9_z.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
You consult your friends. &amp;nbsp;You get 5 different recommendations for 5 different pieces of software that will attempt to recover the disk. &amp;nbsp;The platters won't spin though, so no software will help. &amp;nbsp;Next you try to find an exact duplicate of that disk and swap the platters. &amp;nbsp;This isn't remotely easy and has a very low chance of success. &amp;nbsp;Maybe you care about your photos enough that you even send the drive off to a professional drive recovery service. &amp;nbsp;Perhaps that works and 30% of your files are recovered, but the cost ends up sky high.&lt;br /&gt;
&lt;br /&gt;
Most of my geek friends at least claim to have a backup system in place for the files that they care the most about. &amp;nbsp;These systems usually have one or more of the following flaws:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Technically complex, ie: cron jobs, command lines, shell scripts. &amp;nbsp;(&lt;a href="https://github.com/Gregable/Backup" target="_blank"&gt;guilty&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Cost fairly large sums of money (the cheapest online backups I see usually start at $5/mo)&lt;/li&gt;
&lt;li&gt;Require regular human action (swap out thumb drives, burn a CD).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
These flaws generally aren't fatal for geeks, but they are for non-geeks (ie: family). &amp;nbsp;So, how do geeks approach the family tech support backup problem? &amp;nbsp;I'll share my solution with you, though I'm sure there are alternatives.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
For software, we are going to install &lt;a href="http://www.crashplan.com/" target="_blank"&gt;CrashPlan&lt;/a&gt;. &amp;nbsp;CrashPlan is a client/server backup system with a number of really handy features that we want:&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;ol style="text-align: left;"&gt;
&lt;li&gt;Unless you want to back up to CrashPlan's servers, it's free to use.&lt;/li&gt;
&lt;li&gt;It's a Java app that runs on multiple systems (windows, mac, linux).&lt;/li&gt;
&lt;li&gt;It has a decent graphical UI that is non-technical.&lt;/li&gt;
&lt;li&gt;You can offer to be a backup destination for a friend. &amp;nbsp;The process is very simple for both of you, Crashplan gives you a 6 character code. &amp;nbsp;If the friend enters that code in their client, they can backup to you. &amp;nbsp;Firewalls, dynamic ip addresses, etc are all negotiated for you keeping things simple. &amp;nbsp;Backups are encrypted before being sent, so there is no privacy risk.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
This last feature is what I use for my family backups. &amp;nbsp;However, on my side things get a little more geeky/technical.&lt;br /&gt;
&lt;br /&gt;
I don't like leaving my machines on when not in use, due to power consumption. &amp;nbsp;However, by default this would make backups challenging as there will only be transfer when both me and my family member's machines are up.&lt;br /&gt;
&lt;br /&gt;
Instead, I use a Network Attached Storage device (NAS) to store my backups. &amp;nbsp;It's low-power-ish and always on, which saves me money over leaving a energy hungry computer on all the time. &amp;nbsp;For CrashPlan, you'll need a NAS with an x86 processor and which allows you to run software on it. &amp;nbsp;I use the ReadyNAS Ultra 4 Plus.&lt;br /&gt;
&lt;br /&gt;
On my NAS, I install the &lt;a href="http://www.readynas.com/?p=4203" target="_blank"&gt;Community Plugin that enables Root SSH Access&lt;/a&gt;&amp;nbsp;and reboot. &amp;nbsp;Now, I have root access to my NAS with the admin password used to setup the NAS. &amp;nbsp;Simply &lt;span style="font-family: Courier New, Courier, monospace;"&gt;ssh root@nas&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now I need to add to &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/etc/apt/sources.list&lt;/span&gt; a new source:&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;deb http://archive.debian.org/debian-backports etch-backports main non-free&lt;/span&gt;&amp;nbsp;by adding that source line to the end of the file.&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: inherit;"&gt;Next update our package list:&lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp;apt-get update&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: inherit;"&gt;Next we need to install Java. &amp;nbsp;We first reconfigure our dialog so we can accept the terms and conditions: &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;dpkg-reconfigure debconf&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Select [1] for dialog and [3] for medium&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: inherit;"&gt;Install Java:&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;apt-get install sun-java6-jre&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;Select 'yes' for everything&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;You can reconfigure again (optional): &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;dpkg-reconfigure debconf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Select [6] for noninteractive and [3] for medium.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: inherit;"&gt;Finally, we can install Crashplan on the ReadyNAS.&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;&lt;span style="background-color: white; line-height: 15px;"&gt;wget http://download.crashplan.com/installs/linux/install/CrashPlan/CrashPlan_3.2.1_Linux.tgz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;&lt;span style="line-height: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 15px;"&gt;tar -xvf CrashPlan_3.2.1_Linux.tgztar -xvf CrashPlan_3.2.1_Linux.tgz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;&lt;span style="line-height: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 15px;"&gt;cd CrashPlan-install&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;&lt;span style="line-height: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white; line-height: 15px;"&gt;./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;Defaults work for most questions except backup location. &amp;nbsp;I used /backup/crashplan.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;Once installed, you can log out of your SSH connection. &amp;nbsp;Crashplan is running as a server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #323229; line-height: 20px;"&gt;&lt;span style="font-family: inherit;"&gt;Of course, you still need to do some configuration which can only be done from the Crashplan client UI. &amp;nbsp;From your computer, install Crashplan and follow these instructions for connecting to your server's headless client:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://support.crashplan.com/doku.php/how_to/configure_a_headless_client"&gt;http://support.crashplan.com/doku.php/how_to/configure_a_headless_client&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once you have that set up, you'll be able to generate a Crashplan backup code, something like &lt;b&gt;FJSW3X&lt;/b&gt;. &amp;nbsp;Send this to your family, ask them to install Crashplan and use your backup code. &amp;nbsp;The first backup may take awhile, but after that Crashplan should keep up to date incrementally with no intervention or hassle from your family.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=gmS57kuw6gU:Qlghzz0SINc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=gmS57kuw6gU:Qlghzz0SINc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=gmS57kuw6gU:Qlghzz0SINc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=gmS57kuw6gU:Qlghzz0SINc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/gmS57kuw6gU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/4711785287329524862/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=4711785287329524862" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4711785287329524862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4711785287329524862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/gmS57kuw6gU/backups-with-readynas-ultra-4-plus-and.html" title="Backups with a ReadyNAS Ultra 4 Plus and CrashPlan" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-jT9aqDIczSM/UUYIlMvCBbI/AAAAAAAAQ10/G9EYKqbmc6k/s72-c/3760706750_80e3a976c9_z.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2013/03/backups-with-readynas-ultra-4-plus-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ADR3w7eyp7ImA9WhNbEU4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-8746937479231843931</id><published>2013-01-13T19:56:00.002-08:00</published><updated>2013-01-13T19:56:16.203-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-13T19:56:16.203-08:00</app:edited><title>Software Development Books</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I'm often looking to improve the software that I write. &amp;nbsp;If you are in the same boat, here's a few books that I felt have helped me. &amp;nbsp;This is not exhaustive, but some of the ones I could think of off the top of my head that I'd recommend. &amp;nbsp;Please share others that have been good for you too, I'm always looking for more.&lt;br /&gt;
&lt;br /&gt;
Note, there are affiliate codes in these links, though feel free to not use them, I don't really care. &amp;nbsp;If you are in the Bay Area, I would plug my favorite bookstore which frequently has some of this kind of stuff in stock (&lt;a href="http://bookbuyers.com/" target="_blank"&gt;BookBuyers&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;a href="http://amzn.to/ZZxkZP" target="_blank"&gt;Algorithms on Strings, Trees, and Sequences&lt;/a&gt;: &amp;nbsp;Very likely the best book on string algorithms (and trees/sequences). &amp;nbsp;It's references computational biology, but you need not know a tree from a frog to get a ton of value out of this book. &amp;nbsp;Invariably, one of my Google coworkers is always borrowing this book. &amp;nbsp;If you are interested in more about the wonderful world of strings, this book will get you pretty far.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/13tHNf6" target="_blank"&gt;Refactoring&lt;/a&gt;: This was a very useful read when I read it a few years ago. &amp;nbsp;It came at the right time in my programming development. &amp;nbsp;This almost has less to do with the mechanics how to refactor and more with how to structure code in the first place. &amp;nbsp;The examples are easy enough, but seeing them and the reasons why they reduce complexity helped a ton.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/V7Di6O" target="_blank"&gt;Design Patterns&lt;/a&gt;: I don't get as much value out of this as most people. &amp;nbsp;I don't find myself implementing the "X pattern" so much as perusing patterns has occasionally tipped off a light bulb in my head on how to structure things. &amp;nbsp;I feel like there is more I can learn from this still and intend to revisit.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/V7Gv6q" target="_blank"&gt;Coders at Work&lt;/a&gt;: A collection of interviews with some of the big software developers in the field. Full of lots of nuts and bolts insights and opinions on software development. &amp;nbsp;This isn't so much about software engineering, but about everything that goes on around it. &amp;nbsp;Unlike the above three books whose hardbacks are high-quality productions with diagrams, this one is a cheap paperback book with only text - there is no reason not to just grab the kindle version. &amp;nbsp;Note I also read &lt;a href="http://amzn.to/10tbYFi" target="_blank"&gt;Founders at Work&lt;/a&gt;, but found it to concentrate more on things like fundraising / making deals - Coders was more relevant.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/13tBFUX" target="_blank"&gt;Javascript the good parts&lt;/a&gt;(O Reilly): &amp;nbsp;More than a few people have mentioned that they never could wrap their brain around Javascript until Crockford's book. &amp;nbsp;I found myself in the same position. &amp;nbsp;I've forgotten too much from this book as I don't use Javascript frequently enough, but this is a great place to start if you want to understand it. &amp;nbsp;There is also an &lt;a href="http://www.youtube.com/watch?v=hQVTIJBZook" target="_blank"&gt;@Google Tech Talk from Crockford&lt;/a&gt; on the same subject that might give you a flavor.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/V7IaJc" target="_blank"&gt;Wireless Nation: The Frenzied Launch of the Cellular Revolution&lt;/a&gt;: A little off-topic, but this is a fascinating book that takes a look into how the cellular industry got started in the US. &amp;nbsp;It helps you to understand clearly how we got to where we are now, such as why the standards are so fragmented. &amp;nbsp;It's also a delightfully fun read.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=ci98KWyWP70:lZnYLfs1Ggk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=ci98KWyWP70:lZnYLfs1Ggk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=ci98KWyWP70:lZnYLfs1Ggk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=ci98KWyWP70:lZnYLfs1Ggk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/ci98KWyWP70" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/8746937479231843931/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=8746937479231843931" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8746937479231843931?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8746937479231843931?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/ci98KWyWP70/software-development-books.html" title="Software Development Books" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://gregable.com/2013/01/software-development-books.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGRn84eyp7ImA9WhNUEUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-3116749725191469095</id><published>2013-01-01T23:23:00.003-08:00</published><updated>2013-01-01T23:23:47.133-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-01T23:23:47.133-08:00</app:edited><title>2012, Looking back</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
2012 was an abysmal year for the Gregable blog. &amp;nbsp;Only &lt;u&gt;4&lt;/u&gt; posts! &amp;nbsp;They were decent, but not great. &amp;nbsp;Google Plus has taken some of my steam for short form postings, but really the blame lies on my shoulders.&lt;br /&gt;
&lt;br /&gt;
Anyway, 2013 should be better. &amp;nbsp;With this post, I'll already be caught up to March of 2012's volume. &amp;nbsp;Dear Gregable readers, what would you like to know more about? &amp;nbsp;Help me break out of my writer's block. &lt;br /&gt;
&lt;br /&gt;
And... Happy New Year to you and yours!&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sc3Rl6Ugs70:KBUIzBTLBjg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sc3Rl6Ugs70:KBUIzBTLBjg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sc3Rl6Ugs70:KBUIzBTLBjg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=sc3Rl6Ugs70:KBUIzBTLBjg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/sc3Rl6Ugs70" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/3116749725191469095/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=3116749725191469095" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3116749725191469095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3116749725191469095?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/sc3Rl6Ugs70/2012-looking-back.html" title="2012, Looking back" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://gregable.com/2013/01/2012-looking-back.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMRHk7fip7ImA9WhJWFkQ.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-8374730320193731782</id><published>2012-08-22T20:08:00.000-07:00</published><updated>2012-08-22T20:08:05.706-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-22T20:08:05.706-07:00</app:edited><title>rel=canonical as a browser feature</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I informally propose that &lt;a href="http://gregable.com/2009/02/relcanonical.html"&gt;rel=canonical&lt;/a&gt; become a tag that not only search engines respect, but also browsers.&lt;br /&gt;
&lt;br /&gt;
For a little while now HTML5 browsers seem to have a feature where javascript can modify the displayed URL of the page using &lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;window.history.pushState&lt;/span&gt;. &amp;nbsp;The changes are of course subject to &lt;a href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank"&gt;same origin policy&lt;/a&gt; rules (ie: the protocol, hostname, and port cannot be modified, only the path and parameters). &lt;br /&gt;
&lt;br /&gt;
Originally javascript folks hacked this in with older browsers by shoving text after the "#" symbol in the URL. &amp;nbsp;Even though there are a number of problems with this, it was useful enough that it became somewhat widely used. &amp;nbsp;With modern browsers this is no longer required.&lt;br /&gt;
&lt;br /&gt;
To see what I mean, click on this little demo:&amp;nbsp;&lt;a href="http://kurtly.tumblr.com/sticky-history" target="_blank"&gt;http://kurtly.tumblr.com/sticky-history&lt;/a&gt;&amp;nbsp;and look at the URL bar. &amp;nbsp;If you aren't running an outdated browser, you should see the URL changing every few hundred msec. &amp;nbsp;The page is not being re-fetched from the server.&lt;br /&gt;
&lt;br /&gt;
The&amp;nbsp;&lt;a href="http://gregable.com/2009/02/relcanonical.html"&gt;rel=canonical&lt;/a&gt;&amp;nbsp;link tag has been telling search engines basically "I know you are fetching the URL &lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;http://gregable.com/&lt;b&gt;foo&lt;/b&gt;&lt;/span&gt;, but I'd suggest you should pretend this URL is &lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;http://gregable.com/&lt;b&gt;bar&lt;/b&gt;&lt;/span&gt; in your search index". &amp;nbsp;Basically the same idea as the&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace; font-size: x-small;"&gt;window.history.pushState&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;functionality&lt;/span&gt;, only for search engines.&lt;br /&gt;
&lt;br /&gt;
I propose that a&amp;nbsp;&lt;a href="http://gregable.com/2009/02/relcanonical.html"&gt;rel=canonical&lt;/a&gt;&amp;nbsp;link tag&amp;nbsp;on any HTML page which satisfies the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank"&gt;same origin policy&lt;/a&gt;&amp;nbsp;should visibly change the URL in the browser. &amp;nbsp;All the same motivations exist for this as they do in the browser. &amp;nbsp;If a user copy/pastes the displayed URL, they'll get a more satisfying experience. &amp;nbsp;If the user mis-types an URL (ie: .htm&lt;b&gt;&lt;u&gt;l&lt;/u&gt;&lt;/b&gt; vs .htm), sending them to the correct one generally requires a 301 redirect which adds latency. &amp;nbsp;The javascript solution is less reliable as users sometimes surf with javascript off, and the javascript may not execute until the page has finished loading either.&lt;br /&gt;
&lt;br /&gt;
Are there any obvious reasons I'm missing why this is a horrible idea?&lt;br /&gt;
&lt;br /&gt;
Are there any regular Gregable readers who work on browser standards and might want to propose this more formally?&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Y2aPoO76tuw:R1-9Ci09gEs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Y2aPoO76tuw:R1-9Ci09gEs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Y2aPoO76tuw:R1-9Ci09gEs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=Y2aPoO76tuw:R1-9Ci09gEs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/Y2aPoO76tuw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/8374730320193731782/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=8374730320193731782" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8374730320193731782?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8374730320193731782?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/Y2aPoO76tuw/relcanonical-as-browser-feature.html" title="rel=canonical as a browser feature" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://gregable.com/2012/08/relcanonical-as-browser-feature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUBQHw5eip7ImA9WhVVFUk.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-798612728608709492</id><published>2012-05-08T23:00:00.001-07:00</published><updated>2012-05-08T23:00:51.222-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-08T23:00:51.222-07:00</app:edited><title>LED Bulbs</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I've just been trying out some LED light bulbs and they seem to have progressed a great deal since the last time I played with them. &amp;nbsp;For recessed fixtures that have a narrow angle of lighting, they seem to be a pretty good deal.&lt;br /&gt;
&lt;br /&gt;
Previous generations of LED light bulbs had problems:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Blueish color of light&lt;/li&gt;
&lt;li&gt;Delay after turning on the wall switch&lt;/li&gt;
&lt;li&gt;Wouldn't work with dimmer controls&lt;/li&gt;
&lt;li&gt;Not as many lumens (brightness) as desired.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
I've bought a couple different bulbs off of Amazon and tried them out. &amp;nbsp;I ended up really liking these ecoBrites:&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/B003THZHOU"&gt;http://www.amazon.com/gp/product/B003THZHOU&lt;/a&gt;. &amp;nbsp;No affiliation / kickbacks for me at all, I'm sure there are other great options out there too.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://ecx.images-amazon.com/images/I/511A3NZ8StL._SL500_AA300_.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://ecx.images-amazon.com/images/I/511A3NZ8StL._SL500_AA300_.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
They seem to solve all of the above problems, though they do look a little bit different than regular bulbs if you look at the bulb when it's turned off. &amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The key is to look for bulbs of a certain "color temperature". &amp;nbsp;The blue or "cool" colors are a higher temperature (around 4000-5000k) whereas the yellowish incandescents tend to be a warmer color around 2500-3000k. &amp;nbsp;CFLs are usually a higher temperature too though not usually blue, so they look very white.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
My PG&amp;amp;E rates are tiered - 12.8c/kWh for the baseline, then it goes up to 14.6c/kWh for the next chunk and I'm actually bumping a small amount in to 30c/kWh rate lately. &amp;nbsp;So, my incremental cost of shaving off power usage is 30c/kWh initially and if I can get it down enough, probably 14.6c/kWh.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
The above bulbs are 7W and replace 60W incandescents. &amp;nbsp;So, I'm saving&amp;nbsp;&amp;nbsp;53W/h while these run. &amp;nbsp;They cost $39/bulb though. &amp;nbsp;Very conservatively, let's go with the 14.6c/kWh rate. &amp;nbsp;That's .7c/hr savings. &amp;nbsp;Assume I run each bulb for only 2 hrs per day. &amp;nbsp;To save $39, it'll take 6.9 yrs to breakeven. &amp;nbsp;That's the conservative number.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
If you assume only that:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;I'm replacing a bulb, so would have to pay $7 anyway, the breakeven is 5.6 years&lt;/li&gt;
&lt;li&gt;I need to buy a new incandescent bulb every ~750 hrs, the breakeven is 4.4 years&lt;/li&gt;
&lt;li&gt;the extra 53W of heat an incandescent bulb generates needs to be matched by at least 53W of air conditioning work (likely far more due to inefficiency), the breakeven is 3.4 years&lt;/li&gt;
&lt;li&gt;I'm actually reducing my bill by the 30c/kWh rate, the breakeven is 3.4 years&lt;/li&gt;
&lt;li&gt;If I'm using the bulb for 3 hrs / day, the breakeven is 4.6 years&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
If you assume &lt;i&gt;all &lt;/i&gt;of the above, my breakeven becomes only 11 &lt;i&gt;months&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In practice, the real story is probably somewhere in the middle. &amp;nbsp;I do need to buy incandescent replacements periodically, I sometimes need to use air conditioning, but certainly not always, and my savings is probably a mix between the 30c and 14.6c rates once all is said and done. &amp;nbsp;So maybe the breakeven is 2-3 years, so roughly a 26% return. &amp;nbsp;That still seems like a very good investment these days.&lt;/div&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hfw9-hfND0E:Odk4eYlqdiw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hfw9-hfND0E:Odk4eYlqdiw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hfw9-hfND0E:Odk4eYlqdiw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=hfw9-hfND0E:Odk4eYlqdiw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/hfw9-hfND0E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/798612728608709492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=798612728608709492" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/798612728608709492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/798612728608709492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/hfw9-hfND0E/led-bulbs.html" title="LED Bulbs" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2012/05/led-bulbs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDR3c7eip7ImA9WhVWE08.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-8079592062204175808</id><published>2012-04-24T20:47:00.001-07:00</published><updated>2012-04-24T21:54:36.902-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-24T21:54:36.902-07:00</app:edited><title>Cloud Storage Price Comparison</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;a href="https://drive.google.com/"&gt;Google Drive&lt;/a&gt; launched today right on the heels of &lt;a href="http://windows.microsoft.com/en-US/skydrive/home"&gt;Microsoft's Skydrive&lt;/a&gt;&amp;nbsp;earlier in the week. &amp;nbsp;It seems the cloud storage revolution is heating up, with other big competitors including &lt;a href="http://aws.amazon.com/s3/"&gt;Amazon's S3&lt;/a&gt; and &lt;a href="https://www.dropbox.com/"&gt;Dropbox&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Of course, each of these services has different sets of features. &amp;nbsp;Amazon S3 is more of a bare-bones backend for developers to build on top. &amp;nbsp;Dropbox has linux support, yay. &amp;nbsp;Google Drive has some amazing appstore integration and rich Google Docs interface. &amp;nbsp;Microsoft's Skydrive presumably has the deepest integration with Office software (although Drive does have an Office plugin called &lt;a href="http://tools.google.com/dlpage/cloudconnect"&gt;Cloud Connect&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
While it's sometimes hard to compare long lists of features, it's pretty easy to compare a number. &amp;nbsp;Today, Gregable readers, that number is GB and monthly cost. &amp;nbsp;Here's what the 4 offerings above look like when stacked up against each other (please correct my math if I missed something):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://docs.google.com/spreadsheet/oimg?key=0Ajb5pGMhH-vsdERYeUEzSjNvcUhlRzVuNHlzTlFzZWc&amp;amp;oid=1&amp;amp;zx=klfkuln62aqm" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/spreadsheet/oimg?key=0Ajb5pGMhH-vsdERYeUEzSjNvcUhlRzVuNHlzTlFzZWc&amp;amp;oid=1&amp;amp;zx=klfkuln62aqm" /&gt;&lt;/a&gt;&lt;/div&gt;
Microsoft Skydrive and Dropbox don't publish rates beyond their 100GB additions and may not even offer them. &amp;nbsp;Google Drive keeps the same ratio past 1TB, and amazon actually gets a tiny bit cheaper. &amp;nbsp;The interesting stuff to most people is in the left part of that graph, so let me blow that part up for you:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://docs.google.com/spreadsheet/oimg?key=0Ajb5pGMhH-vsdERYeUEzSjNvcUhlRzVuNHlzTlFzZWc&amp;amp;oid=2&amp;amp;zx=o1pqtjbd9hzf" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/spreadsheet/oimg?key=0Ajb5pGMhH-vsdERYeUEzSjNvcUhlRzVuNHlzTlFzZWc&amp;amp;oid=2&amp;amp;zx=o1pqtjbd9hzf" /&gt;&lt;/a&gt;&lt;/div&gt;
That's a simple view, but I think it's roughly accurate. &amp;nbsp;Some other caveats just to the pricing to keep in mind:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Amazon S3 charges separately for upload and download bandwidth where the other solutions include bandwidth in the price, so Amazon S3 really costs more than what's shown above in practice.&lt;/li&gt;
&lt;li&gt;Amazon S3 gives you 5GB free only for the first year. &amp;nbsp;The other services' freebie quotas are permanent. &amp;nbsp;Dropbox gives you 2GB free, Google gives you 5GB free and Skydrive gives you a nice round 7GB free.&lt;/li&gt;
&lt;li&gt;Microsoft Skydrive charges you annually rather than monthly, so I converted all of their prices to monthly prices. &amp;nbsp;Of course, this means less flexibility as well as the fact that you have to pay everything upfront.&lt;/li&gt;
&lt;li&gt;Sharing in dropbox &lt;a href="https://www.dropbox.com/help/59"&gt;counts against all of those users' quota&lt;/a&gt;, while sharing in Google Drive &lt;a href="https://support.google.com/drive/bin/answer.py?hl=en&amp;amp;answer=2375194"&gt;counts only against the person who shared&lt;/a&gt;. &amp;nbsp;It isn't clear about Microsoft Skydrive's policy on this.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Also, I imagine that it'll be very interesting to take a look back at this post in a couple years and see how this has all changed.&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=u7nJ2XmoH3g:JDMK598naW0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=u7nJ2XmoH3g:JDMK598naW0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=u7nJ2XmoH3g:JDMK598naW0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=u7nJ2XmoH3g:JDMK598naW0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/u7nJ2XmoH3g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/8079592062204175808/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=8079592062204175808" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8079592062204175808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8079592062204175808?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/u7nJ2XmoH3g/cloud-storage-price-comparison.html" title="Cloud Storage Price Comparison" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2012/04/cloud-storage-price-comparison.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFQnk8cSp7ImA9WhVRFk4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-7058317820296675982</id><published>2012-03-24T16:50:00.000-07:00</published><updated>2012-03-24T16:50:13.779-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-24T16:50:13.779-07:00</app:edited><title>Mega Millions</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I for one think the lottery is a tax on people who aren't very good at math. &amp;nbsp;If I wanted to gamble, I'd buy a casino. &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://www.megamillions.com/"&gt;Mega Millions&lt;/a&gt; is the big multi-state lottery that has in recent days grown it's jackpot to the point where the payout could be worth the risk. &amp;nbsp;The cash payout is currently at $255 million (the $356M number is an annuity) and growing. &amp;nbsp;To win, you buy a $1 ticket where you must pick 5 random numbers correctly out of a pool of 56 and 1 random number correctly out of a pool of 46. &amp;nbsp;The&lt;span style="background-color: white;"&gt; odds of a correct pick are 1 &lt;span style="font-family: inherit;"&gt;in&amp;nbsp;&lt;sub style="line-height: 1em; text-align: -webkit-auto;"&gt;56&lt;/sub&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;C&lt;/span&gt;&lt;sub style="line-height: 1em; text-align: -webkit-auto;"&gt;5&lt;/sub&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;&amp;nbsp;x 46 or 1 in 175,711,536.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;Is this a "good bet"?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="line-height: 19px; text-align: -webkit-auto;"&gt;For the sake of simplicity, let's ignore taxes as well as the possibility that there is more than one winner (thus splitting the payout). &amp;nbsp;Also, most people's utility for money is non-linear (ie: beyond a certain point, more money doesn't matter as much any more). &amp;nbsp;Those are important issues to consider in real life as they have a fairly large effect.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="background-color: white; line-height: 19px; text-align: -webkit-auto;"&gt;To estimate the expected net returns, P(win) x jackpot - cost =&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: -webkit-auto;"&gt;
&lt;span style="line-height: 19px;"&gt;=&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/-8qnx_fnadWM/T25ZqCqrqOI/AAAAAAAAFGc/IQfFIPwi0Tk/s1600/MSP23761a0haifd895g16i7000016b6d7727i6116ce.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-8qnx_fnadWM/T25ZqCqrqOI/AAAAAAAAFGc/IQfFIPwi0Tk/s1600/MSP23761a0haifd895g16i7000016b6d7727i6116ce.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
= &amp;nbsp; &amp;nbsp; $0.451. &amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
45% return on your dollar in just a few days sounds like a great investment. &amp;nbsp;Mortgage your house, max out your credit lines, sell your stocks, and invest in tickets!&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
The problem with bets is that even if you have the odds in your favor, you can still lose everything. &amp;nbsp;How do you choose what to bet then? &amp;nbsp;Bet too little on a good gamble and you'll leave money on the table. &amp;nbsp;Bet too much and the losses will keep wiping too much of your winnings out. &amp;nbsp;It turns out that there is formula that predicts the optimal size in a series of bets which will maximize your winnings in the long run. &amp;nbsp;This is called the &lt;a href="http://en.wikipedia.org/wiki/Kelly_criterion"&gt;Kelly criterion&lt;/a&gt;. &amp;nbsp;It determines a bet size based on your odds and your current bankroll available to wager. &amp;nbsp;As your bankroll grows, you bet more.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Let's say that you were only allowed to buy one mega-millions ticket per round with the 1 to 175,711,536 odds of winning $255M. &amp;nbsp;Is this one ticket a sound investment? &amp;nbsp;The Kelly criterion tells you the fraction of your bankroll you should invest in this bet. &amp;nbsp;The formula is simple enough, divide the expected net returns ($0.451) by the net winnings if you win ($255M). &amp;nbsp;The result is 1.77x10&lt;super&gt;-9&lt;/super&gt; or 1 in $565,410,199. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;If and only if you have at least&amp;nbsp;$565,410,199 to invest,&amp;nbsp;buying a $1 ticket is a mathematically sound investment.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Buying two tickets in the same lottery round is a slightly different gamble than buying 1 ticket each round. &amp;nbsp;It's a little better odds. &amp;nbsp;Taken to the extreme, buying&amp;nbsp;175,711,536&amp;nbsp;tickets guarantees a win whereas buying 1 ticket in each of&amp;nbsp;175,711,536 rounds does not. &amp;nbsp;A modified Kelley criterion can evaluate the case where you buy multiple tickets too, and it's going to be more favorable. &amp;nbsp;Unfortunately, I don't have the time at the moment to add that to the post. &amp;nbsp;If there is interest, perhaps I'll return and see if I can work through that math.&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=zuCPkomsV-M:M1PT7-TF9fs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=zuCPkomsV-M:M1PT7-TF9fs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=zuCPkomsV-M:M1PT7-TF9fs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=zuCPkomsV-M:M1PT7-TF9fs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/zuCPkomsV-M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/7058317820296675982/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=7058317820296675982" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7058317820296675982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7058317820296675982?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/zuCPkomsV-M/mega-millions.html" title="Mega Millions" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-8qnx_fnadWM/T25ZqCqrqOI/AAAAAAAAFGc/IQfFIPwi0Tk/s72-c/MSP23761a0haifd895g16i7000016b6d7727i6116ce.gif" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://gregable.com/2012/03/mega-millions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDQ3o6fyp7ImA9WhdaGEg.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-5296891694145941803</id><published>2011-10-28T19:12:00.000-07:00</published><updated>2011-10-28T19:12:52.417-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T19:12:52.417-07:00</app:edited><title>Etsy</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Cristin, my better half, has been making jewelry for several years now and selling it in a store in her hometown in Virginia. &amp;nbsp;She just set up an etsy store and listed some of her first jewelry on it for sale. &amp;nbsp;Just a few pieces for now, but I think you should check it out:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://strangeterrain.etsy.com/"&gt;strangeterrain.etsy.com&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://strangeterrain.etsy.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-LQJufFY7z1M/Tqtg5FlzORI/AAAAAAAAEZc/jU6Ea-zB3gY/s1600/caterpillar_bracelet.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1cJQT1xyyWA:eu5csKFZVM0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1cJQT1xyyWA:eu5csKFZVM0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1cJQT1xyyWA:eu5csKFZVM0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=1cJQT1xyyWA:eu5csKFZVM0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/1cJQT1xyyWA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/5296891694145941803/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=5296891694145941803" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5296891694145941803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5296891694145941803?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/1cJQT1xyyWA/etsy.html" title="Etsy" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-LQJufFY7z1M/Tqtg5FlzORI/AAAAAAAAEZc/jU6Ea-zB3gY/s72-c/caterpillar_bracelet.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2011/10/etsy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAGRXkzfyp7ImA9WhdaFEo.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-8497942656002316662</id><published>2011-09-06T09:51:00.000-07:00</published><updated>2011-10-24T10:52:04.787-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-24T10:52:04.787-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="bay area" /><title>Yosemite High Sierras</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I just returned from a 6-day, 50 mile hike between Yosemite's High Sierra camps. &lt;br /&gt;
&lt;br /&gt;
Most people who visit Yosemite visit the iconic Yosemite valley, which is truly beautiful, but teeming with people. &amp;nbsp;A smaller fraction turn north as they are entering the Park and head up to the higher altitude area of Tuolomne Meadows and Tioga Pass. &amp;nbsp;Equally beautiful, although less iconic, this area of Yosemite has more limited amenities and is far less busy even in the summer months. &lt;br /&gt;
&lt;br /&gt;
Fewer people still are even aware of Yosemite's High Sierra Camps. &amp;nbsp;These are 5 staffed camps (beds, cooked meals, running water, showers) that cannot be reached by road. &amp;nbsp;You can only reach these camps by trails, either on foot, or by mule. &amp;nbsp;Few people I've talked to have ever heard of these camps. &amp;nbsp;Still, availability is extremely limited so reservations are made a year in advance by lottery. &amp;nbsp;The season for some of the camps this year was less than 1 month, and they could only handle about 40 people per night.&lt;br /&gt;
&lt;br /&gt;
The camps are arranged in a loop, and all of the camps can be reached via a long day hike from the road. &amp;nbsp;The most remote camp, at Merced Lake, is a 12 mile hike&amp;nbsp;from the valley. &amp;nbsp;We decided to visit all of the camps along the loop in clockwise order (apparently counterclockwise is more common). &amp;nbsp;The route is below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" height="480" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/ms?msid=208299726002133564436.0004aac93c05488f13c57&amp;amp;msa=0&amp;amp;ie=UTF8&amp;amp;t=p&amp;amp;vpsrc=0&amp;amp;ll=37.823887,-119.406967&amp;amp;spn=0.260343,0.439453&amp;amp;z=11&amp;amp;output=embed" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?msid=208299726002133564436.0004aac93c05488f13c57&amp;amp;msa=0&amp;amp;ie=UTF8&amp;amp;t=p&amp;amp;vpsrc=0&amp;amp;ll=37.823887,-119.406967&amp;amp;spn=0.260343,0.439453&amp;amp;z=11&amp;amp;source=embed" style="color: blue; text-align: left;"&gt;High Sierras&lt;/a&gt; in a larger map&lt;/small&gt;
&lt;br /&gt;
&lt;br /&gt;
The days ranged from 6 - 10 miles, some of the days up days, some down. &amp;nbsp;The most elevation change was ~3000 ft. &amp;nbsp;The experience was different every day: granite, forests, meadows, waterfalls, streams, lakes, vistas, sunsets, stars, and wildlife. &amp;nbsp;I've detailed more of the trip below for those interested, but feel free to skip.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 1: Tuolomne Meadows to Vogelsang&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The first day's issue is dealing with the altitude as we aren't yet acclimated. &amp;nbsp;We climb a modest 1,400 ft over 7 miles from Tuolomne Meadows to Vogelsang camp. &amp;nbsp;The climb is relatively steady uphill the whole way with forest cover some of the way and the most amazing meadows especially as you near the end of the trip. &amp;nbsp;Wildflowers, pikas running around, streams with fish, and granite walls on either side of the valley you are walking through. &amp;nbsp;A quick climb at the end over a lip and you are at the base of Fletcher peak at Vogelsang camp, the highest altitude camp of the 5. &lt;br /&gt;
&lt;br /&gt;
Vogelsang camp sits a little above 10,000 ft on a ledge above a granite valley below with Fletcher peak above and Vogelsang Peak in the distance. &amp;nbsp;A few hundred feet away, a few of us took a brief dip in Fletcher lake, which is just above freezing even in August. &amp;nbsp;You can watch the snow melt immediately above the lake while you are swimming. &amp;nbsp;As it turns out Fletcher is a vast aquifer. &amp;nbsp;We are told that Vogelsang has the only legal non-chlorinated drinking water in California. &amp;nbsp;I didn't notice the difference.&lt;br /&gt;
&lt;br /&gt;
After dinner, the stars at Vogelsang are fantastic. &amp;nbsp;Our trip chanced to schedule Vogelsang on a new moon, so it was very dark. &amp;nbsp;The milky way was quite bright and visible.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 2: Vogelsang to Merced Lake&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
We opted for the slightly shorter / easier route of the two options. &amp;nbsp;This turned out to be one of the prettiest stretches on the trip so we were happy with the decision, although who knows what the other option had in store. &amp;nbsp;This day was the biggest elevation change of the hike, dropping ~3,000 ft over 7.6 miles, but it wasn't a smooth gradual drop. &amp;nbsp;Instead it was long switchbacks alongside waterfalls interspersed with more beautiful meadows. &amp;nbsp;Very difficult on the knees. &amp;nbsp;My favorite stretch along this hike was what seemed like a half mile long water slide that just kept going forever. &amp;nbsp;The image below shows a tiny section of it, but can't really do it justice:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qrIEGbO-6S4/TmWi5QsXZlI/AAAAAAAAEWg/917rerjHQQo/s1600/IMG_20110829_113415.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/-qrIEGbO-6S4/TmWi5QsXZlI/AAAAAAAAEWg/917rerjHQQo/s640/IMG_20110829_113415.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Merced Lake camp used to be a military post. &amp;nbsp;The tents are arranged in a half circle around a central campfire which probably was once a flagpole. &amp;nbsp;This is the most comfortable of all of the camps, with 8 showers, a warmer swimming hole in the stream, washbasins, and lots of shade. &amp;nbsp;Not much for a view though as you are at the base of a valley and deep in trees. &amp;nbsp;It's also the most remote - the nearest road is in the valley, 12 miles away. &amp;nbsp;As with the other camps, all supplies are brought in by mules.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 3: Merced Lake to Sunrise&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Day 3 started with a few hundred feet of drop, then climbing back up 2,300 ft. &amp;nbsp;All over 10 miles. &amp;nbsp;Here again the elevation is not evenly distributed, with several switchback sections. &amp;nbsp;Only this time they are up. &amp;nbsp;It was a long day, easily the hardest of the 6, and probably the least scenic of the trail stretches, although that's relative - it still packed some amazing views.&lt;br /&gt;
&lt;br /&gt;
Sunrise camp on the other hand was likely my favorite, and I spoke with several people who would agree. &amp;nbsp;The camp is perched on a ledge above an alpine meadow at ~9,400 ft. &amp;nbsp;The meadow then drops off and you can see incredible views of several mountain ranges in the distance. &amp;nbsp;The view at sunset was amazing. &amp;nbsp;Sunrise in the morning was even more so as the meadow had frosted over during the night and would sparkle in the sun. &amp;nbsp;The camp also had showers, and the staff formed a one-song band at dinner, which was a fun experience. &lt;br /&gt;
&lt;br /&gt;
The photo below is from the meadow below sunrise camp. &amp;nbsp;Sunrise Camp itself is a little higher, affording good views of the meadow as well as the mountain ranges behind the trees in this photo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-LOwf_er8vB8/TmWmuiuEiqI/AAAAAAAAEWk/N6_Hl4sHW6Q/s1600/IMGP1039.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/-LOwf_er8vB8/TmWmuiuEiqI/AAAAAAAAEWk/N6_Hl4sHW6Q/s640/IMGP1039.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 4: Sunrise to May Lake&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Day 4 was an 8 mile hike that was fairly easy except for a painful ~2 mile stretch of rapid descent along switchbacks above Tenaya Lake. &amp;nbsp;You begin by climbing over the ridge behind sunrise camp and dropping down gradually past several photoworthy "sunrise lakes" that might have been great for swimming had we had the time. &amp;nbsp;Immediately before the painful descent is a trail marker for Clouds Rest. &amp;nbsp;At the recommendation of someone at Sunrise, we took a side trip out a few hundred feet along this trail to be rewarded with a fantastic view down into Yosemite Valley, including the back side of Half Dome.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-AyULLRyLkJ8/TmWodV7UjOI/AAAAAAAAEWo/zFvofovBQoE/s1600/IMG_20110831_111511.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-AyULLRyLkJ8/TmWodV7UjOI/AAAAAAAAEWo/zFvofovBQoE/s640/IMG_20110831_111511.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
The switchbacks were panoramic as well, although overlooking the Tuolomne area and Tenaya lake rather than the valley. &amp;nbsp;At about the 6 mile mark, we reached our strategically placed car at Tenaya Lake, the only road crossing for the hike. &amp;nbsp;We switched out for some fresh gear and finished the rest of the hike uphill to May Lake. &lt;br /&gt;
&lt;br /&gt;
May Lake is nestled halfway up Mt Hoffman, which a staff member from Sunrise mentioned is the geographic center of Yosemite. &amp;nbsp;The camp lies between the lake and a short granite lip. &amp;nbsp;Scrambling up the lip affords a panoramic view of the ridge you just climbed down as well as many other peaks, as seen in the photo below. &amp;nbsp;May lake is pretty comfortable too. &amp;nbsp;The manager, Brian, treated us to some colorful historical stories of the camp as we enjoyed the delicious salmon dinner.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-P6iVMzPicB8/TmWq7UQk6rI/AAAAAAAAEWs/2DiFiUdiCg0/s1600/IMG_3675.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="426" src="http://1.bp.blogspot.com/-P6iVMzPicB8/TmWq7UQk6rI/AAAAAAAAEWs/2DiFiUdiCg0/s640/IMG_3675.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 5: May Lake to Glen Aulin&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Day 5 was pretty mellow - a gradual downhill, mostly flat, over 8 miles. &amp;nbsp;We got into camp fairly early as a result. &amp;nbsp;Most of the day is within forested areas, so there is little to see. &amp;nbsp;The only challenge was a few patches of mosquitos and flies. &amp;nbsp;We donned some mosquito nets and moved on - I've seen much worse. &amp;nbsp;The only real vista was early in the morning, but &amp;nbsp;it was fantastic - you could almost see all the way to the next camp, below is a fraction of that view. &amp;nbsp;Glen Aulin is just behind that small mountain almost in the center of the photo, right behind the first forested saddle.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-12m4fVgGh-4/TmWsTyywJzI/AAAAAAAAEWw/2pGe6q7LWPw/s1600/IMG_3684.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="426" src="http://1.bp.blogspot.com/-12m4fVgGh-4/TmWsTyywJzI/AAAAAAAAEWw/2pGe6q7LWPw/s640/IMG_3684.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Glen Aulin itself is in an amazing location. &amp;nbsp;It sits directly beside a large waterfall on the Tuolomne River. &amp;nbsp;You can barely see some green benches and one or two of the white tents on the opposite side of the river in this photo.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-eogMvHw2TKo/TmWtIgEdUoI/AAAAAAAAEW0/2ZdEvaO26-4/s1600/IMG_3695.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="426" src="http://1.bp.blogspot.com/-eogMvHw2TKo/TmWtIgEdUoI/AAAAAAAAEW0/2ZdEvaO26-4/s640/IMG_3695.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Downstream a short bit, we took a swim in the river, below yet another waterfall. &amp;nbsp;Still cold, but much warmer than Vogelsang. &amp;nbsp;Glen Aulin has no showers, so this was the only option for washing off.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Day 6: Glen Aulin back to Tuolomne Meadows&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
The final day is also pretty easy, you follow the Tuolomne river upstream for a little under 6 miles back to parking lots at Tuolomne Meadows. &amp;nbsp;For the first few miles, it's literally one waterfall after another and progress is slow due to enjoying the views and taking photos. &amp;nbsp;After a while, the river slows down, flattens out, and widens into a Tuolomne Meadows. &amp;nbsp;A different type of amazing view, more relaxed. &amp;nbsp;Overall, this hike is just a wonderful finale.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Ik81YVp4BTc/TmWu2QiP0cI/AAAAAAAAEW4/zZxu5lJehKM/s1600/IMG_20110902_101700.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-Ik81YVp4BTc/TmWu2QiP0cI/AAAAAAAAEW4/zZxu5lJehKM/s640/IMG_20110902_101700.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'll eventually upload some more photos and I'll post a link on &lt;a href="https://plus.google.com/116196404021952428596"&gt;Google+&lt;/a&gt;&amp;nbsp;if you want to follow along there.&lt;br /&gt;
&lt;br /&gt;
I also thought I'd share a few boring notes on logistics, as I had a little bit of a hard time figuring out much of this online. &amp;nbsp;Only read the remainder if you are planning on making this trip yourself and have questions about the camps and what you need to bring:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;The camps are tent cabins. &amp;nbsp;4 (usually) spring cots with matresses. &amp;nbsp;You'll share with strangers depending on your party size. &amp;nbsp;Each bed has 2 army blankets and a heavy comforter. &amp;nbsp;This was plenty to keep me warm at night and it got below freezing at least one night. &amp;nbsp;The only other thing you'll need to bring is a sleep sack or sheets, no bed linens are provided. &amp;nbsp;The beds also have a pillow and a pillowcase that gets washed. &amp;nbsp;Don't bring pads/sleeping bags/pillows.&lt;/li&gt;
&lt;li&gt;Except for Merced Lake which is lower elevation and warmer, every tent has a wood burning stove and you'll be provided with wood, starters, matches, candles. &amp;nbsp;Everything you'd need to start a fire.&lt;/li&gt;
&lt;li&gt;As for temperature, it seemed plenty warm as long as the sun was out. &amp;nbsp;After sunset but before you climb into bed, you'll be chilly and the morning will be chilly. &amp;nbsp;Still, all I needed was a light jacket. &amp;nbsp;Unless you plan on staying up late and watching stars, my experience was that lots of heavy clothing was unnecessary. &amp;nbsp;The Yosemite packing list suggested a down jacket, fleece, mittens and thermal underwear. It was nowhere near that cold, but check your weather forecast I guess.&lt;/li&gt;
&lt;li&gt;Speaking of weather forecast, use NOAA and click on the map where your hike is - the nearest station which is what weather.com and others use is too far away to be useful.&lt;/li&gt;
&lt;li&gt;Merced Lake, Sunrise, and May Lake have showers. &amp;nbsp;You will want to bring a towel and soap/shampoo, although you may be able to buy a towel from the camp store if you forget. &amp;nbsp;A small washcloth is provided at every camp, but that's it. &amp;nbsp;Other than sunrise, all of the camps have great nearby swimming options which might cover for a shower depending on your preferences. &amp;nbsp;Best to bring some kind of shoes you can wear into the water though as the rocks can be a little annoying. &amp;nbsp;Flip flops worked for me. &amp;nbsp;You might need these for water crossings on the trail anyway.&lt;/li&gt;
&lt;li&gt;Either carry lots of water (4 liters) for the day or carry a filter. &amp;nbsp;We toted a filter and were rarely far from water, so we didn't need to carry as much water weight.&lt;/li&gt;
&lt;li&gt;On food, breakfasts and dinners are plenty of food and wonderful. &amp;nbsp;Best backpacking food ever. &amp;nbsp;Bag lunches include a decent sandwich and optionally fruit, trail mix, cookies, and a fruit drink. &amp;nbsp;You can order it all or a la carte. &amp;nbsp;You order at the camps the night before, not much advanced planning required. &amp;nbsp;Credit Cards are accepted if you don't want to tote cash. &amp;nbsp;Basically, you don't need to bring any food, or just some snacks if you would like.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_4T7gpAy2P8:61QgJF1UDwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_4T7gpAy2P8:61QgJF1UDwE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_4T7gpAy2P8:61QgJF1UDwE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=_4T7gpAy2P8:61QgJF1UDwE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/_4T7gpAy2P8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/8497942656002316662/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=8497942656002316662" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8497942656002316662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/8497942656002316662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/_4T7gpAy2P8/yosemite-high-sierras.html" title="Yosemite High Sierras" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-qrIEGbO-6S4/TmWi5QsXZlI/AAAAAAAAEWg/917rerjHQQo/s72-c/IMG_20110829_113415.jpg" height="72" width="72" /><thr:total>3</thr:total><georss:featurename>Yosemite National Park</georss:featurename><georss:point>37.81873440498776 -119.42756652832031</georss:point><georss:box>37.79364740498776 -119.46704852832032 37.84382140498776 -119.3880845283203</georss:box><feedburner:origLink>http://gregable.com/2011/09/yosemite-high-sierras.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NRHw9fyp7ImA9WhdWE08.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-3130807378751934052</id><published>2011-08-15T13:59:00.000-07:00</published><updated>2011-09-06T09:51:35.267-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-06T09:51:35.267-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="outdoors" /><category scheme="http://www.blogger.com/atom/ns#" term="bay area" /><title>Canyon Creek Backpacking, Trinity Alps</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-TaZLCalS7ss/TkmFnYcWmhI/AAAAAAAAERI/swnzMewICEw/s1600/canyoncreeklakes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-TaZLCalS7ss/TkmFnYcWmhI/AAAAAAAAERI/swnzMewICEw/s640/canyoncreeklakes.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Last weekend I got the chance to go hiking in Trinity Alps Wilderness in Northern CA. &amp;nbsp;It's an area I've been wanting to visit for some time, but logistics are challenging - it's a ~6hr drive from the Bay Area and there is only a narrow season when hiking wouldn't require snow traversal.&lt;br /&gt;
&lt;br /&gt;
The Trinity Alps area is very large, we hiked only one valley. &amp;nbsp;The trail starts down the valley shown in the upper left side of the above photo, climbs slowly along Canyon Creek, and then there is a short scramble up to these lakes: Lower and Upper Canyon Creek Lakes at around the 8 mile mark. &amp;nbsp;The trail then cuts between the two lakes&amp;nbsp;and after a short stream fording&amp;nbsp;wraps around to the northern side of the upper creek (right side of photo). &amp;nbsp;Most folks stop and camp around here.&lt;br /&gt;
&lt;br /&gt;
We cut east (camera in the above photo is facing west) climbing at a 40-60% grade for the another mile up to L Lake (some maps show "el" or "ell"). &amp;nbsp;We camped on the granite domes above and to the south. That last mile was quite tiring, but rewarding. &amp;nbsp;We were sitting in a bowl with a great view of the surrounding area and night sky. &amp;nbsp;We enjoyed the Perseid meteor shower until around 11pm when the full moon rose above the nearby ridges and the whole valley was illuminated.&lt;br /&gt;
&lt;br /&gt;
The map below shows the rough trace of the trail, although I just drew this by hand from memory rather than GPS, so it's not entirely accurate.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe frameborder="0" height="350" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/ms?msa=0&amp;amp;msid=208299726002133564436.0004aa913c64d5500e984&amp;amp;ie=UTF8&amp;amp;ll=40.93548,-123.020096&amp;amp;spn=0.096353,0.010643&amp;amp;t=p&amp;amp;vpsrc=6&amp;amp;output=embed" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?msa=0&amp;amp;msid=208299726002133564436.0004aa913c64d5500e984&amp;amp;ie=UTF8&amp;amp;ll=40.93548,-123.020096&amp;amp;spn=0.096353,0.010643&amp;amp;t=p&amp;amp;vpsrc=6&amp;amp;source=embed" style="color: blue; text-align: left;"&gt;Trinity Alps, Canyon Creek&lt;/a&gt; in a larger map&lt;/small&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=9BfXRBrsleo:0Yi23GccPv8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=9BfXRBrsleo:0Yi23GccPv8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=9BfXRBrsleo:0Yi23GccPv8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=9BfXRBrsleo:0Yi23GccPv8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/9BfXRBrsleo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/3130807378751934052/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=3130807378751934052" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3130807378751934052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3130807378751934052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/9BfXRBrsleo/canyon-creek-backpacking-trinity-alps.html" title="Canyon Creek Backpacking, Trinity Alps" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-TaZLCalS7ss/TkmFnYcWmhI/AAAAAAAAERI/swnzMewICEw/s72-c/canyoncreeklakes.jpg" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://gregable.com/2011/08/canyon-creek-backpacking-trinity-alps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIHSXs7fip7ImA9WhdRFU8.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-3327340899288206032</id><published>2011-08-04T22:40:00.000-07:00</published><updated>2011-08-04T22:52:18.506-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-04T22:52:18.506-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Can we build communities with Google+ ?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
Apologies, this might be a bit long. &amp;nbsp;I want to discuss an idea for Google+.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Progression of a Community&lt;/u&gt;&lt;br /&gt;
Imagine a mailing list about a somewhat broad topic, rock climbing. &amp;nbsp;This could apply to other social software systems (bbs, forum, social news), but I’ll use the mailing list for my example.&lt;br /&gt;
&lt;br /&gt;
Initially the list grows out of a small group of contributors, likely folks who know each other IRL. &amp;nbsp;For these seed members, the list is just a convenient way to communicate out-of-bandf, organize trips, share local news, etc. &amp;nbsp;It’s a shorthand version of a cc list in email.&lt;br /&gt;
&lt;br /&gt;
Over time, people invite their friends and the list starts to grow. &amp;nbsp;Geographical differences may begin separate the members. &amp;nbsp;If you could draw the social graph of the members, it would have sub-clumps. &amp;nbsp;At this stage, not everyone knows each other any longer.&lt;br /&gt;
&lt;br /&gt;
As the list continues to grow, at some point the signal to noise starts to creep up on the list. &amp;nbsp;Reading a discussion on a local rock face in another time zone is minimally relevant. &amp;nbsp;More annoying is that user on the list trying to sell a new belay device to this targeted rock climbing audience. &amp;nbsp;At this stage, a community can collapse under it's own weight.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Scaling Patterns&lt;/u&gt;&lt;br /&gt;
Strong communities usually attempt to solve the above problems. &amp;nbsp;The attempts often fall into one or more of several patterns:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Individuals who are least similar to the “list personality” unsubscribe or are forced out.&lt;/li&gt;
&lt;li&gt;A subgroup of “community administrators” creates strict rules defining acceptable content or acceptable users, removing content or approving it. &amp;nbsp;This administrator group can eventually have scaling problems too. &amp;nbsp;Wikipedia is a classic example of this approach.&lt;/li&gt;
&lt;li&gt;Formation of fractured smaller lists to discuss more specific topics. &amp;nbsp;Reddit is a classic example with its numerous subreddits.&lt;/li&gt;
&lt;li&gt;Using algorithms / voting to promote the more interesting discussions to help users filter content from noise. &amp;nbsp;Digg or the reddit home page are classic examples here.&lt;/li&gt;
&lt;li&gt;I don't think that these patterns are full solutions. &amp;nbsp;Some seem to allow for a larger scale without fully solving the scaling problem. &amp;nbsp;Some succeed at promoting content that is most interesting to the lowest common denominator, but fail at promoting what’s most interesting to each individual.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;u&gt;Communities in Google+&lt;/u&gt;&lt;br /&gt;
I wonder if + Circles with some tweaks could work better as a community model. &amp;nbsp;I’m interested in your ideas, but here is my strawman:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Anyone can form a “public” rock climbing circle, but it doesn’t contain people, it contains comments, so let’s call it a rock climbing square rather than a circle.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;I can post to that square. &amp;nbsp;Those posts don’t show up in the streams of people who follow me.&lt;/li&gt;
&lt;li&gt;All posts to the square are visible, but it’s liable to get noisy and unlikely anyone will really pay attention to the full stream for long.&lt;/li&gt;
&lt;li&gt;I can follow other people strictly within the context of the rock climbing square. &amp;nbsp;I won’t see their public posts, just their rock climbing posts, but it’s public in a sense as they aren’t required to follow me in return.&lt;/li&gt;
&lt;li&gt;I can reshare strictly within the context of the rock climbing square. &amp;nbsp;If Bob is following Alice, Alice is following Charlie, but Bob is not following Charlie - then Alice resharing a post from Charlie will display it to Bob, thus giving the square friend of a friend semantics with a filtering component.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
In this sense, the community becomes a very weakly defined notion. &amp;nbsp;It’s not a fully connected graph like facebook, forums, or mailing lists. &amp;nbsp;It’s not disconnected subtopics either, like subreddits. &amp;nbsp;Members become filters for other members, and I can pick and choose my filters as their interests match my interests.&lt;br /&gt;
&lt;br /&gt;
It has many similarities to twitter, but one important difference that I see (other than the character limit). &amp;nbsp;I can follow someone’s rock climbing posts without following their underwater basketweaving posts.&lt;br /&gt;
&lt;br /&gt;
What do you think? &amp;nbsp;How could this be improved?&lt;br /&gt;
&lt;br /&gt;
PS: I work for Google Search, but have no visibility into what the Google+ team’s plans are. &amp;nbsp;As a result I assume it’s safe to write about this kind of thing, but do remember - these are just my personal thoughts.&lt;br /&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kKg1beEFN3A:0MFHceULyW8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kKg1beEFN3A:0MFHceULyW8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kKg1beEFN3A:0MFHceULyW8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=kKg1beEFN3A:0MFHceULyW8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/kKg1beEFN3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/3327340899288206032/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=3327340899288206032" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3327340899288206032?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/3327340899288206032?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/kKg1beEFN3A/can-we-build-communities-within-google.html" title="Can we build communities with Google+ ?" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://gregable.com/2011/08/can-we-build-communities-within-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBRnw7eSp7ImA9WhdTGU4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-4513640673310419919</id><published>2011-07-08T14:23:00.000-07:00</published><updated>2011-07-17T12:19:17.201-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T12:19:17.201-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>My Circles</title><content type="html">&lt;a href="http://google.com/+"&gt;Google+&lt;/a&gt; seems well received so far. &amp;nbsp;Most of the people I've talked to really enjoy the "Circles" feature and feel that it fits their mental model well. &amp;nbsp;I thought it would be fun to do a little data dive on my facebook graph to see how my relationships were actually interconnected and whether the data matched my perceptions of how I was planning my circles. &amp;nbsp;First the graph, then the explanation:&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OVpeSQSqoS4/Thdrb24lFgI/AAAAAAAAEFA/7i6tsMtIgq0/s1600/facebookcolored.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="548" src="http://1.bp.blogspot.com/-OVpeSQSqoS4/Thdrb24lFgI/AAAAAAAAEFA/7i6tsMtIgq0/s640/facebookcolored.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Gregable's Facebook Social Graph - click through see a larger version.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Each vertex is a friend of mine on facebook. &amp;nbsp;There is an edge between two friends if they are friends with each other. &amp;nbsp;I'm not actually in this graph, otherwise there would be a vertex with an edge to every other vertex.&lt;br /&gt;
&lt;br /&gt;
I called out my wife, Cristin, who bridges several regions of my graph. &amp;nbsp;Even without me calling out that node, it would have been easy to guess.&lt;br /&gt;
&lt;br /&gt;
The &lt;span class="Apple-style-span" style="color: #38761d;"&gt;green&lt;/span&gt; region is high school. &amp;nbsp;The &lt;span class="Apple-style-span" style="color: #0b5394;"&gt;blue&lt;/span&gt; region includes Google employees, which is naturally over-represented. &amp;nbsp;College gets broken up a bit, and I wasn't really using facebook much for keeping in touch there. &amp;nbsp;You can see some other dense clusters in here as well, but I'd didn't bother labeling them.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
To me, this reinforces the Circles concept pretty well!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Technical Details:&lt;/b&gt;&lt;br /&gt;
I installed a firefox plugin that saved a copy of every page I visited. I then turned off javascript and clicked through to all of my friends to extract the data. &amp;nbsp;I'm &lt;i&gt;sure&lt;/i&gt;&amp;nbsp;there is any easier way to do this, but I would have spent just as long figuring it out for this one-off.&lt;br /&gt;
&lt;br /&gt;
Parsing the pages was some hacky python and regex. &amp;nbsp;Some of the templates weren't parsed as easily as others, so a few friends just got dropped due to laziness. &amp;nbsp;Any friend who didn't have any mutual friends also got dropped. &amp;nbsp;However, I didn't require a connected graph. &amp;nbsp;That just happened on it's own, to my surprise.&lt;br /&gt;
&lt;br /&gt;
The graph was laid out using &lt;a href="http://www.graphviz.org/"&gt;neato&lt;/a&gt;, and then I added the colored boxes on top by hand using Gimp.&lt;br /&gt;
&lt;br /&gt;
With neato, I can change a line and get the nodes as text boxes with names instead, which is fascinating to look through, but not something I feel comfortable sharing publicly. &lt;br /&gt;
&lt;br /&gt;
Also note that I don't do a good job of maintaining facebook, and have had purge cycles&amp;nbsp;many times in the past. &amp;nbsp;A larger graph with a bigger picture would be even more fascinating I think.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Oq6MrAdNgnk:B3_4o5au2ps:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Oq6MrAdNgnk:B3_4o5au2ps:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Oq6MrAdNgnk:B3_4o5au2ps:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=Oq6MrAdNgnk:B3_4o5au2ps:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/Oq6MrAdNgnk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/4513640673310419919/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=4513640673310419919" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4513640673310419919?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4513640673310419919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/Oq6MrAdNgnk/my-circles.html" title="My Circles" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-OVpeSQSqoS4/Thdrb24lFgI/AAAAAAAAEFA/7i6tsMtIgq0/s72-c/facebookcolored.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://gregable.com/2011/07/my-circles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANQnwzfyp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-7097487297965763171</id><published>2011-07-03T16:24:00.000-07:00</published><updated>2011-07-17T08:33:13.287-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:33:13.287-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Find me over on Google+</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-peLck0pD9GM/ThD69OppmBI/AAAAAAAAEDs/zuPbsuG8Ve4/s1600/google_plus_android_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-peLck0pD9GM/ThD69OppmBI/AAAAAAAAEDs/zuPbsuG8Ve4/s1600/google_plus_android_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Don't worry, I've been blogging for 9 years and no social network is going to stop me any time soon. &lt;br /&gt;
&lt;br /&gt;
That said, Google+ is a social network that I can share with a wider audience. &amp;nbsp;Lots of folks tend to read my blog: techies, SEOs, etc. &amp;nbsp;I didn't want the same large crowd seeing all of my personal facebook content that I was sharing with close friends and families.&lt;br /&gt;
&lt;br /&gt;
Google+ lets me filter who sees each post using the "circles" interface. &amp;nbsp;So, if you find this blog mildly interesting, I encourage you to follow me on Google+ as well: &amp;nbsp;&lt;a href="http://goo.gl/xxT1h"&gt;Gregable on Google+&lt;/a&gt;.&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=h1FeyWm6HPc:VlBulJEdYEA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=h1FeyWm6HPc:VlBulJEdYEA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=h1FeyWm6HPc:VlBulJEdYEA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=h1FeyWm6HPc:VlBulJEdYEA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/h1FeyWm6HPc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/7097487297965763171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=7097487297965763171" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7097487297965763171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7097487297965763171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/h1FeyWm6HPc/find-me-over-on-google.html" title="Find me over on Google+" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-peLck0pD9GM/ThD69OppmBI/AAAAAAAAEDs/zuPbsuG8Ve4/s72-c/google_plus_android_logo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2011/07/find-me-over-on-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANQn07fip7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-7414655553912646973</id><published>2011-06-24T08:30:00.000-07:00</published><updated>2011-07-17T08:33:13.306-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:33:13.306-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Dilbert on SEO</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;a href="http://dilbert.com/strips/comic/2011-06-24/"&gt;&lt;img border="0" src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/20000/5000/500/125508/125508.strip.gif" /&gt;&lt;/a&gt;&lt;br /&gt;
Today Dilbert learns that only organic linking works. &amp;nbsp;Links such as: &lt;a href="http://dilbert.com/strips/comic/2011-06-24/"&gt;Dung for Brains&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=vbmplmI2akw:iwQtIvNkdQs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=vbmplmI2akw:iwQtIvNkdQs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=vbmplmI2akw:iwQtIvNkdQs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=vbmplmI2akw:iwQtIvNkdQs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/vbmplmI2akw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/7414655553912646973/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=7414655553912646973" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7414655553912646973?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7414655553912646973?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/vbmplmI2akw/dilbert-on-seo.html" title="Dilbert on SEO" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2011/06/dilbert-on-seo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BSXc-cSp7ImA9WhZQGU4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-2037153069971349391</id><published>2011-04-27T12:52:00.000-07:00</published><updated>2011-04-27T12:52:38.959-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-27T12:52:38.959-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>The Nap Pod Awakens: Sweet Dreams</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If you've ever toured one of the Google Campuses, you may have seen one of our "Nap Pods" designed to let folks get a short refresher nap if they are feeling the need. &amp;nbsp;There happens to be one such pod right outside my office. &amp;nbsp;With someone's legs sticking out, it often looks an awful lot like pacman just ate an employee.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Several of the search folks got together yesterday and we brought our little nap pod to life. &amp;nbsp;It's a bit cheesy largely because we were limited to the primary colors of electrical tape we had on hand. &amp;nbsp;I still think it turned out great. &amp;nbsp;Either way, the process was definitely a lot of fun. &amp;nbsp;What do you think? &amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8hJqu4uyZlM/TbhutuvHAOI/AAAAAAAADzM/Q44_ZryYA1k/s1600/NapPod.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-8hJqu4uyZlM/TbhutuvHAOI/AAAAAAAADzM/Q44_ZryYA1k/s320/NapPod.jpg" width="240" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-yBGo5oxQq_Y/TbhuoZXtU0I/AAAAAAAADzI/p59YT0ic0g4/s1600/NapPod2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-yBGo5oxQq_Y/TbhuoZXtU0I/AAAAAAAADzI/p59YT0ic0g4/s320/NapPod2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Sweet Dreams&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=12FGI_mcPh4:vMeLk2PL2Io:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=12FGI_mcPh4:vMeLk2PL2Io:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=12FGI_mcPh4:vMeLk2PL2Io:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=12FGI_mcPh4:vMeLk2PL2Io:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/12FGI_mcPh4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/2037153069971349391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=2037153069971349391" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/2037153069971349391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/2037153069971349391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/12FGI_mcPh4/nap-pod-awakens-sweet-dreams.html" title="The Nap Pod Awakens: Sweet Dreams" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-8hJqu4uyZlM/TbhutuvHAOI/AAAAAAAADzM/Q44_ZryYA1k/s72-c/NapPod.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2011/04/nap-pod-awakens-sweet-dreams.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ERH85cSp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-5673031111685444335</id><published>2011-03-05T23:29:00.000-08:00</published><updated>2011-07-17T08:33:25.129-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:33:25.129-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Secure Snapshotted Backups with python, encfs, and rsync</title><content type="html">I recently made a very dumb mistake and wiped out &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/home/greg/&lt;/span&gt; on my personal desktop. &amp;nbsp;It wasn't a hardware failure, it was user error. &amp;nbsp;I had some manual backups, it wasn't catastrophic. &amp;nbsp;I had never really set up a good system though, and there were some annoying losses. &amp;nbsp;After restoring my sanity I decided it was time to set up better backups. &amp;nbsp;I run a &lt;a href="http://gregable.com/2010/05/using-amazons-mechanical-turk-for-price.html"&gt;NAS&lt;/a&gt;&amp;nbsp;with ~3T of usable disk space and part of the reason for running this was backups. &amp;nbsp;My failure to set up a backup system was the only thing missing.&lt;br /&gt;
&lt;br /&gt;
Obviously lots of people have solved this problem before, but my situation was unique enough that many options were off the table. &amp;nbsp;I had a few requirements:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;My home directory (primaries) is encrypted with Ubuntu's TrueCrypt setup, the documents I want to back up the most are financial in nature, and so I wanted my backups always encrypted on disk.&lt;/li&gt;
&lt;li&gt;I want snapshotted backups so that I was resilient against hardware failures, but also from &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rm -rf&lt;/span&gt; stupidity.&lt;/li&gt;
&lt;li&gt;However, I did not want to simply store a series of diffs as that would make recovery more complex and I want recovery to be simple.&lt;/li&gt;
&lt;li&gt;Still, I wanted efficiency and speed so I wasn't choking my internal network at various points in the day.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Most importantly though, I wanted to understand exactly how my backup system works and what it's doing. &amp;nbsp;Rather than trust some other code that I didn't understand and couldn't tweak, I wanted to roll my own. &amp;nbsp;Most folks do this with shell scripts, cron, and rsync. &amp;nbsp;I wanted to do something similar, but since my shell-foo is abysmal, I decided on python.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If this is useful to anyone else, I've shared my code. &amp;nbsp;The script has two modes controlled by arguments: backup and snapshot&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Backup:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Optionally tries to mount a path which should be set up in /etc/fstab. &amp;nbsp;In my case, this is NFS.&lt;/li&gt;
&lt;li&gt;Mounts an encrypted filesystem at /mnt/.../current/&lt;/li&gt;
&lt;li&gt;Rsyncs a series of files and paths to /mnt/.../current/&lt;/li&gt;
&lt;li&gt;Optionally unmounts the encrypted filesytem.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Snapshot:&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;Makes up to N periodic snapshots of the encrypted files at one of several frequencies. &amp;nbsp;For example, it might be configured to keep 24 hourly snapshots, 7 daily snapshots, 4 weekly snapshots, and 3 monthly snapshots. &amp;nbsp;Any number of snapshots can be kept at any frequency.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The snapshots are taken of the encrypted files, not from the decrypted filesystem.  As a result, you can run the snapshots directly on the remote backup system, I run it on my NAS.  It works just fine if you run it locally as well.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;div&gt;Both modes are managed using a .backuprc file in the user's home directory. &amp;nbsp;For example, mine looks something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;# Optional, log all events
LOG_FILE /home/greg/logs/backup.log

# Optional, we try to mount this path first.  Failures halt execution.
PRE_MOUNT /mnt/backup/

# Required, password and mount point for encrypted/decrypted file 
# systems. The password can be in plaintext since this file is stored
# on an encrypted filesystem anyway.  We aren't going for paranoid.
ENCFS_PASSWORD AddYourOwnPasswordHere
ENCRYPTED_MOUNTPOINT /mnt/backup/desktop/
# This is where we will write files unencrypted.  Must be empty, must
# not be mounted already.
DECRYPTED_MOUNTPOINT /mnt/encryptedbackup/

# Required, rsync flags.
RSYNC_FLAGS -CRa --delete

# Number of snapshots.  Format: [type=&lt;count&gt;,...] e.g. hourly=12,daily=7
SNAPSHOTS hourly=12,daily=7,weekly=2,monthly=1

# List of file paths to rsync.  Any line that doesn't contain a space is
# a file path.  Paths can be filenames or directories.  This is simply
# the argument passed to rsync.  As a result, you can use rsync features
# like adding a "./" directory to tell rsync which components of the
# path to sync over.
/home/greg/./.heartbeat
/home/greg/./src/
/home/greg/./financial/
/home/greg/./picasa/
&lt;/count&gt;&lt;/pre&gt;&lt;/blockquote&gt;The python source, an example .backuprc and an example crontab are all found &lt;a href="https://github.com/Gregable/Backup"&gt;over here on github&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
Some other helpful resources I came across while putting this together:&lt;br /&gt;
&lt;a href="http://www.readynas.com/?p=4203"&gt;ReadyNas Root Access Add On&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://iandykes.blogspot.com/2010/10/install-python-26-on-readynas-nv.html"&gt;Install Python2.6 on a ReadyNas NV&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://rbackup.lescigales.org/"&gt;RBackup - Diff based backups with python&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.mikerubel.org/computers/rsync_snapshots/"&gt;The ultimate guide to rsync backups&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://pebkac.homelinux.net/2008/10/19/encrypted-backups-with-encfs-and-rsync/"&gt;How to set up encfs for use with rsync&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=agLDLmAf5Lk:UuVDizgixfc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=agLDLmAf5Lk:UuVDizgixfc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=agLDLmAf5Lk:UuVDizgixfc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=agLDLmAf5Lk:UuVDizgixfc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/agLDLmAf5Lk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/5673031111685444335/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=5673031111685444335" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5673031111685444335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5673031111685444335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/agLDLmAf5Lk/secure-snapshotted-backups-with-python.html" title="Secure Snapshotted Backups with python, encfs, and rsync" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://gregable.com/2011/03/secure-snapshotted-backups-with-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNR3w-eCp7ImA9Wx9UF0w.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-5176664067919743391</id><published>2011-02-14T11:03:00.000-08:00</published><updated>2011-02-14T11:03:16.250-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-14T11:03:16.250-08:00</app:edited><title>Favorite Chrome Browser Extensions</title><content type="html">Everyone eventually does one of these posts right? &amp;nbsp;If you aren't running the&amp;nbsp;&lt;a href="http://google.com/chrome"&gt;Chrome Web Browser&lt;/a&gt;, you should try it (about 1/4 of my readers do). &amp;nbsp;If you have tried it and still aren't running it, ignore the rest of this post.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/aeolcjbaammbkgaiagooljfdepnjmkfd"&gt;AutoPatchWork&lt;/a&gt;: for paginated web pages, this magically makes the page into an infinite scroll, preloading the next page as you get close to the bottom. &amp;nbsp;Great for reading stupid NyTimes articles that get paginated into 8 pages. &amp;nbsp;Also forum threads, search results, etc. &amp;nbsp;I've never had it do anything to screw up a page, although it has&amp;nbsp;occasionally&amp;nbsp;failed to trigger, but that's no worse than what I was previously doing. &amp;nbsp;This extension has simply saved me a ton of time and helps me use the mouse less.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/nnbmlagghjjcbdhgmkedmbmedengocbn"&gt;PDF/Powerpoint viewer&lt;/a&gt;: Converts all links to a .pdf or .ppt to link instead to google docs' inline viewer. &amp;nbsp;I hate waiting to load a large application every time I click on these links, this extension makes my experience much better. &amp;nbsp;Doesn't work if the document can't be fetched from the web (password protected, internal network, etc), but in those cases you can right click and just load the large application instead.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/aapbdbdomjkkjkaonfhkkikfgjllcleb"&gt;Google Translate&lt;/a&gt;: Auto-detects if the page you are looking at is in a different language and offers to translate the page to your language of choice (english for me).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/hiffdaigjahnndmjpkccgiklpmhkfckh"&gt;Pandora&lt;/a&gt;: - Not the official Pandora extension, that one is pretty worthless. &amp;nbsp;This one integrates your pandora controls into your browser. &amp;nbsp;Only useful if you use Pandora of course.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://chrome.google.com/webstore/detail/nedjejdfkkjgebciefdfofjhmeogiaga"&gt;Favorite Doodle&lt;/a&gt;: Change google's homepage doodle to your favorite on days when there isn't a special one running. &amp;nbsp;I &lt;a href="http://gregable.com/2009/12/favorite-google-doodle-fun-chrome.html"&gt;wrote about this&lt;/a&gt; in 2009.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="https://chrome.google.com/webstore/detail/pgkcfihepeihdlfphbndagmompiakeci"&gt;Secbrowsing&lt;/a&gt;: &amp;nbsp;Chrome itself is known to be&amp;nbsp;&lt;a href="http://blogs.forbes.com/andygreenberg/2011/02/03/google-puts-20000-bounty-on-chrome-in-hacking-contest/"&gt;very secure&lt;/a&gt;, but many of it's plugins (PDF, Flash, Java, etc) aren't as secure. &amp;nbsp;This extension will monitor to make sure that you've got the most secure versions of all of these plugins and helps you upgrade them if you don't.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="https://chrome.google.com/webstore/detail/iblijlcdoidgdpfknkckljiocdbnlagk"&gt;Goo.gl Url Shortener&lt;/a&gt;: &amp;nbsp;Click button, get short URL. &amp;nbsp;From the&amp;nbsp;&lt;a href="http://royal.pingdom.com/2010/10/29/is-goo-gl-really-the-fastest-url-shortener-chart/"&gt;fastest/most reliable&lt;/a&gt;&amp;nbsp;url shortening service. &amp;nbsp;I'm biased though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="https://chrome.google.com/webstore/detail/ejpepffjfmamnambagiibghpglaidiec"&gt;Facebook Disconnect&lt;/a&gt;: Blocks facebook from tracking you when you are not on facebook.com (ie: from like buttons or other javascript widgets). &amp;nbsp;Make sure to go into your extensions and enable this when incognito browsing too.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://23pp.david-web.co.uk/"&gt;23++&lt;/a&gt;: If you use 23andMe, adds some much needed enhancements to the website like telling you automatically which surnames match for relatives.&lt;br /&gt;
&lt;br /&gt;
What are some other good ones I haven't tried? &amp;nbsp;I'm always looking for good extensions, especially those that operate in the background making my life better without me having to be aware of them.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Au6gMjvJ-Dg:sA_1n_UtK-M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Au6gMjvJ-Dg:sA_1n_UtK-M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=Au6gMjvJ-Dg:sA_1n_UtK-M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=Au6gMjvJ-Dg:sA_1n_UtK-M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/Au6gMjvJ-Dg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/5176664067919743391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=5176664067919743391" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5176664067919743391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5176664067919743391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/Au6gMjvJ-Dg/favorite-chrome-browser-extensions.html" title="Favorite Chrome Browser Extensions" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://gregable.com/2011/02/favorite-chrome-browser-extensions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4GQXs7cSp7ImA9Wx9UEU4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-7244498540934272533</id><published>2011-02-07T18:42:00.000-08:00</published><updated>2011-02-07T18:42:00.509-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-07T18:42:00.509-08:00</app:edited><title>Bulk Cookie Pricing</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;I spotted this gem at Subway this afternoon. &amp;nbsp;How much am I saving again if I buy 3?&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_s5emCsFnEdE/TVCssWCSsGI/AAAAAAAADoQ/d1fetTMoOxA/s1600/IMG_20110207_144132+%25281%2529.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_s5emCsFnEdE/TVCssWCSsGI/AAAAAAAADoQ/d1fetTMoOxA/s640/IMG_20110207_144132+%25281%2529.jpg" width="480" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sE1DZCQHSbs:tX48hoTK1WI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sE1DZCQHSbs:tX48hoTK1WI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=sE1DZCQHSbs:tX48hoTK1WI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=sE1DZCQHSbs:tX48hoTK1WI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/sE1DZCQHSbs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/7244498540934272533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=7244498540934272533" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7244498540934272533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/7244498540934272533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/sE1DZCQHSbs/bulk-cookie-pricing.html" title="Bulk Cookie Pricing" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_s5emCsFnEdE/TVCssWCSsGI/AAAAAAAADoQ/d1fetTMoOxA/s72-c/IMG_20110207_144132+%25281%2529.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://gregable.com/2011/02/bulk-cookie-pricing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8FSX08eip7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-5138393659172602948</id><published>2011-01-27T13:51:00.000-08:00</published><updated>2011-07-17T08:33:38.372-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:33:38.372-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Referrer Stripping</title><content type="html">Inspired by &lt;a href="http://www.gabrielweinberg.com/"&gt;Gabriel Weinberg&lt;/a&gt;'s &lt;a href="http://news.ycombinator.com/item?id=2135317"&gt;strange fixation on stripping search queries&lt;/a&gt; from HTTP&amp;nbsp;referrers, I thought it would be interesting to describe how to &lt;i&gt;actually&lt;/i&gt; strip referrers from an HTTP Request. &amp;nbsp;I don't think I've seen any good information on this elsewhere on the web. &amp;nbsp;It's a neat trick, albeit marginally useful.&lt;br /&gt;
&lt;br /&gt;
First, let me explain what Gabriel is doing so as to compare. &amp;nbsp;If you do a query on Duck Duck Go and click a result, javascript on that page intercepts the click (in a sense) and sends you to&amp;nbsp;http://duckduckgo.com/post.html&amp;nbsp;instead. &amp;nbsp;http://duckduckgo.com/post.html is just static HTML with some more javascript that then re-sends you on your way to the actual destination page you had in mind, so the referrer sent to the destination is&amp;nbsp;http://duckduckgo.com/post.html. &amp;nbsp;Duck Duck Go prefetches this URL before you click on any URL and your browser caches it, so there is only a tiny latency hit from running the javascript, and no network delay. &amp;nbsp;Reasonably clever.&lt;br /&gt;
&lt;br /&gt;
This doesn't in fact strip referrers at all, it just changes them so that the referrer sent to the destination page is simply&amp;nbsp;http://duckduckgo.com/post.html. &amp;nbsp;The query is gone, but the fact that you did a query and that you did so on Duck Duck Go isn't. &amp;nbsp;I'd honestly suspect the fact that one uses Duck Duck Go to be more revealing about demographics than the query itself, but I digress.&lt;br /&gt;
&lt;br /&gt;
You as a user can strip referrers by modifying your browser: [&lt;a href="https://chrome.google.com/extensions/detail/dkpkjedlegmelkogpgamcaemgbanohip"&gt;Chrome&lt;/a&gt;, &lt;a href="http://cafe.elharo.com/privacy/privacy-tip-3-block-referer-headers-in-firefox/"&gt;Firefox&lt;/a&gt;, &lt;a href="http://www.opera.com/support/kb/view/93/"&gt;Opera&lt;/a&gt;, IE?, Safari?] &amp;nbsp;What if you as a webmaster really want to strip the referrer for your users clicking on your links? &amp;nbsp;That's a browser feature and as a webmaster you can't change your users' settings, you can't, right? &amp;nbsp;Turns out that you can, but it's a pain in the ass because you need to do different things in different browsers.&lt;br /&gt;
&lt;br /&gt;
With later versions of Webkit and hence Safari and Chrome, it's well known that attaching &lt;a href="http://webkit.org/blog/907/webkit-nightlies-support-html5-noreferrer-link-relation/"&gt;rel=noreferrer&lt;/a&gt;&amp;nbsp;to an anchor will successfully tell the browser to not send the referrer on that request. &amp;nbsp;If you want to do this in javascript instead of through a plain anchor, you can make it happen by creating an anchor element in the DOM &amp;nbsp;and then simulating a click event via &lt;a href="https://developer.mozilla.org/En/DOM/Event.initMouseEvent"&gt;event.initMouseEvent&lt;/a&gt;. &amp;nbsp;Older versions of Safari and Chrome don't work here, and I don't know a workaround, but these browsers auto-update, so it's not common to see really old versions.&lt;br /&gt;
&lt;br /&gt;
Firefox and IE don't support rel=noreferrer as far as I know. &amp;nbsp;However&amp;nbsp;for as far back as I've tested them, a web page that performs a meta-refresh to a destination URL, even a 0-second refresh, will not send any referrer to that destination URL. &amp;nbsp;This doesn't work in Webkit - it passes a referrer, but for some reason it works in Firefox and IE. &amp;nbsp;It's undefined behavior, nowhere in the spec, so it could change in later versions of these browsers, buyer beware. &amp;nbsp;However rel=noreferrer is part of HTML5, so later versions of these browsers will probably eventually work with rel=noreferrer. &amp;nbsp;Want to do this with a plain link or javascript? &amp;nbsp;Simply stick an intermediate page&amp;nbsp;with the meta refresh&amp;nbsp;as an in-between URL&amp;nbsp;like Gabriel does with javascript, and you'll have the same effect.&lt;br /&gt;
&lt;br /&gt;
Konqueror and Opera don't allow any of these tricks last I checked (it's been awhile), and for your various other browsers (phones mostly), all bets are off.&lt;br /&gt;
&lt;br /&gt;
I don't really know why you would want to strip referrers as a webmaster. &amp;nbsp;It literally is "breaking" the way browsers and the internet are supposed to work. &amp;nbsp;I've used it occasionally for internal systems (like a control panel) where you don't want a referrer to expose the existence of an URL not usually accessible, but one can use obfuscation with a different URL in this case, as Gabriel does. &amp;nbsp;Obfuscation is guaranteed to work in all browsers, and so is simpler to implement and maintain.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hoNxAd1S5Zw:RalD5KDFBBs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hoNxAd1S5Zw:RalD5KDFBBs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=hoNxAd1S5Zw:RalD5KDFBBs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=hoNxAd1S5Zw:RalD5KDFBBs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/hoNxAd1S5Zw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/5138393659172602948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=5138393659172602948" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5138393659172602948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/5138393659172602948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/hoNxAd1S5Zw/referrer-stripping.html" title="Referrer Stripping" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2011/01/referrer-stripping.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcDRXw5cSp7ImA9Wx9XEE4.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-6234292429531751749</id><published>2011-01-02T22:27:00.000-08:00</published><updated>2011-01-02T22:27:54.229-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-02T22:27:54.229-08:00</app:edited><title>Preserving Digital Remains</title><content type="html">Lately, I've started researching my genealogical history a little bit.  Intrigued by discovering previously unknown relatives within &lt;a href="http://www.23andme.com/"&gt;23andMe&lt;/a&gt;, I've spent some time combing through public records, bought a couple more 23andMe kits for living ancestors, and started talking to my family to see what they remember while they are still alive.  It's a fascinating puzzle problem.&lt;br /&gt;&lt;br /&gt;One thing that I've started wondering about is the future of the content I'm creating during &lt;i&gt;my&lt;/i&gt; lifetime.  This goes beyond backups: I 'm reasonably skilled at protecting my data while I'm still alive.  I'd like to have some of my data survive me.  I want my story to be immortal.  I have no clue how I would go about making such guarantees.  Lots of organizations are trying very hard to bring data from the past into the present, but how would one go about pushing data from the present into the future?&lt;br /&gt;&lt;br /&gt;This isn't just motivated by ego, although that's partially true.  For example, it would be useful for my future relatives to be able to know my medical history to understand their own risks.  Sshould I become famous after my death for some odd reason, it would be historically interesting to have more details on my life story.  As someone living in my ancestor's distant future, I would absolutely love it if I could comb through the digital remains of my great great great grandparents who lived during the civil war.&lt;br /&gt;&lt;br /&gt;It's an interesting problem.  How can I assure that the content in my blog posts will be immortal and searchable for all time.  Can I safely assume that blogger will keep my blog running forever?  &lt;a href="http://www.archive.org/web/geocities.php"&gt;Yahoo closing Geocities&lt;/a&gt; makes it pretty clear that there is no guarantee of persistence in free services.  Lots of  companies have appeared that allow me to &lt;a href="http://www.wired.com/magazine/2010/02/pl_scottbrown_digitalself/"&gt;send data to family immediately after my passing&lt;/a&gt;, but what if the future historian who is interested in my data hasn't yet been born, and family that outlives me doesn't take much care to preserve my data?&lt;br /&gt;&lt;br /&gt;One approach would be to create a company designed for this purpose that would attempt to outlive it's employees.  That company would require a large upfront payment for storage, for example: $100/GB.  The price would be calculated such that interest on a safe investment of that size could safely expect to cover ongoing archival costs for eternity along with some profit.&lt;br /&gt;&lt;br /&gt;Even this though seems risky.  What if interest rates decline and storage costs increase (peak oil causing a rise in electricity cost for example).  What if the company changes hands and the new owners decide that the best option for shareholders is to delete all old data and cash out the interest bearing bank account?  Maybe the executives decide to invest in something a little risky to improve profits and the company goes bankrupt.&lt;br /&gt;&lt;br /&gt;Maybe we could back this organization by some large government, such as the US.  Costs are still paid as a large upfront chunk, so it would require no taxpayer burden unless there is a gravely bad estimation of the ongoing costs.  Presumably it would be politically unpopular to risk losing this data, so there would be more pressure felt from historians or the like than if the organization was profit motivated.  Governments have historically done at least a reasonable job of preserving records, such as Census data or birth certificates.&lt;br /&gt;&lt;br /&gt;I think lots of people would pay a reasonable cost for this service.  Perhaps most wouldn't while they were living, but as part of a funeral service, a mortuary could accept a box of writing or a CD or whatever and scan/upload all of the data found for the deceased.  Compared to the rest of the costs of funerals, this line item would be pretty modest.  If there were privacy issues, you just put some kind of digital seal on the data: do not open for 100 years.  Future Historians would presumably find this to be a very valuable trove of information.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=UnK6FFnk8EQ:Y4tDV2SWmCg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=UnK6FFnk8EQ:Y4tDV2SWmCg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=UnK6FFnk8EQ:Y4tDV2SWmCg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=UnK6FFnk8EQ:Y4tDV2SWmCg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/UnK6FFnk8EQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/6234292429531751749/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=6234292429531751749" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/6234292429531751749?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/6234292429531751749?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/UnK6FFnk8EQ/preserving-content.html" title="Preserving Digital Remains" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2011/01/preserving-content.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHQX0_cCp7ImA9Wx9SEks.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-4597174014560935685</id><published>2010-12-01T21:43:00.000-08:00</published><updated>2010-12-01T21:43:50.348-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-01T21:43:50.348-08:00</app:edited><title>Network Aware Sheetfed Scanner</title><content type="html">I'm hoping someone out there has done something like this before and can help me out. &amp;nbsp;I want to set up a sheetfed (where I drop a stack of papers in at once) scanner at home. &amp;nbsp;I want to have that scanner either connected to the home network (ethernet or wireless) or connected to a headless linux box on the network (via usb presumably). &lt;br /&gt;
&lt;br /&gt;
I want it set up so that I drop in a multipage document, hit some single button - ideally a button on the scanner, but I'd accept something I could trigger over the network on the linux box. &amp;nbsp;At this point, the scanner goes to town, makes a pdf (or any image) with all the pages currently in the tray, and then drops this PDF on the network via NFS / Samba / FTP / whatever I can run from linux. &amp;nbsp;I'll come along later and organize / rename this file, but until then I don't want to have to go to a computer, open up some application, scan, preview, save, ...&lt;br /&gt;
&lt;br /&gt;
I'm willing to buy whatever scanner and/or other devices, up to a few hundred dollars. &amp;nbsp;I'm happy to write a little code, install libraries, etc. &amp;nbsp;I don't need anything fancy like OCR.&lt;br /&gt;
&lt;br /&gt;
I've heard of some products that do stuff like this when hooked up directly to a windows / mac machine that is already running, but I don't leave my windows/mac machines running. &amp;nbsp;I do however have a small linux machine that is always on. &amp;nbsp;I've also seen a scanner that will do this completely over the network, with a fancy touchscreen interface and such, but it was north of $1,500 which is out of my price range for this.&lt;br /&gt;
&lt;br /&gt;
Any ideas? &amp;nbsp; Pointers? &amp;nbsp;I've searched around on the Google for some sage advice, but I think I'm running the wrong queries.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1fEZQMqU9dA:NdTna6bjhFw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1fEZQMqU9dA:NdTna6bjhFw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=1fEZQMqU9dA:NdTna6bjhFw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=1fEZQMqU9dA:NdTna6bjhFw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/1fEZQMqU9dA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/4597174014560935685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=4597174014560935685" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4597174014560935685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4597174014560935685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/1fEZQMqU9dA/network-aware-sheetfed-scanner.html" title="Network Aware Sheetfed Scanner" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2010/12/network-aware-sheetfed-scanner.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQFSHg4fCp7ImA9Wx9TFks.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-6458428668824556931</id><published>2010-11-24T21:39:00.000-08:00</published><updated>2010-11-24T22:58:39.634-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-24T22:58:39.634-08:00</app:edited><title>Squanto: The original American Badass</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.televisionsky.org/2008/11/squanto-is-my-home-boy/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="236" src="http://1.bp.blogspot.com/_s5emCsFnEdE/TO3jkQQ6xuI/AAAAAAAADm8/V4LaXd3g_0I/s320/pilgrim21.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Thanksgiving is probably one of my favorite American holidays.  For most people, it means a day or two off work and some awesome food with some family and friends.&lt;br /&gt;&lt;br /&gt;Everyone knows the basic Thanksgiving myth - the Pilgrims landed in Plymouth after enduring a tortuous journey only to face a really bad winter storm.  They met the Native American locals, including some guy named Squanto, who taught them how to fish, farm, and essentially survive.  They all had a big feast together, and lived happily ever after.  This all mythically represents the seeds of a new country, the good old US-of-A.&lt;br /&gt;&lt;br /&gt;The true story in these things is sometimes dull and always full of facts and dates.  In this case though there is a quite interesting true thanksgiving story within the real Plymouth Pilgrim landing.  I'm referring to Squanto's story, whose tale blows the Illiad out of the water.  Squanto was the original American Badass.&lt;br /&gt;&lt;br /&gt;When the Pilgrims arrived in Plymouth, they explored the area before settling down.  They choose Plymouth because of it's empty fields, freshwater brooks, pre-built homes, etc.  Hardly starting from scratch, they had pitched camp right in the middle of Squanto's lovely village of Patuxet, appropriating native american cornfields and homes for themselves.  One colonist noted "&lt;i&gt;In this bay wherein we live, in former time hath lived about two thousand Indians.&lt;/i&gt;".  Not only the cornfields, but they also set to work robbing native american homes and graves.  In their weak defense, much of Patuxet's population had recently succumbed to a plague, probably smallpox, that had arrived just ahead of the Pilgrims.&lt;br /&gt;&lt;br /&gt;Despite taking over an existing settlement, over half of the colonists died in the first winter.  It was their superb luck that the next spring, a local walked into Plymouth and said in perfectly accented English "&lt;i&gt;How can I help you gentlemen?"&lt;/i&gt;.  This local was Squanto and Patuxet (Plymouth) was his hometown.  Of course, the Pilgrims didn't expect a local to speak English.  They had no way of knowing that Squanto had just recently returned home from Europe.&lt;br /&gt;&lt;br /&gt;Let's go backwards in time.  In or around 1605, the Englishman Capt. George Weymouth was exploring the Maine and Massachussets area.  Capt. Weymouth decided to capture 5 natives and take them back to England, fairly brutally.  Weymouth wrote, "&lt;i&gt;For they were strong and so naked as our best hold was by their long hair on their heads.&lt;/i&gt;".  One of these natives is believed to have been Squanto, at the time referred to as Tisquantum.  Weymouth gave the natives to Sir Ferdinando Gorges, an investor.  Gorges presumably trained Squanto as a guide for sea captains exploring the New England coast, teaching him English along the way.&lt;br /&gt;&lt;br /&gt;We don't know much about what happened to Squanto from 1605 until 1614, for all we know, he made several expeditions for Gorges during this period.&lt;br /&gt;&lt;br /&gt;In 1614, Squanto joined a small fleet (2 ships) with Capt. John Smith where he was promised to return to his people in Patuxet in exchange for his help as a guide.  At some point the fleet reached Patuxet and separated.  Squanto remained in Patuxet with the captain of the 2nd ship (Thomas Hunt), and Capt. Smith headed north.   Hunt was supposed to fill his ship with beaver skins and head home.  Instead, Hunt kidnapped 20 natives including Squanto, and took them back to Spain to sell as slaves.&lt;br /&gt;&lt;br /&gt;When Squanto arrived in Spain, some local monks discovered the plan, didn't like it, and "rescued" the surviving Indians from Hunt "&lt;i&gt;to instruct them in the Christian faith&lt;/i&gt;". Squanto lived with the monks for a year or two, but eventually traveled back to England.&lt;br /&gt;&lt;br /&gt;In England, Squanto arranged to travel on another expedition to Newfoundland.  In Newfoundland Squanto was recognized as belonging to Sir Ferdinando Gorges, was recaptured, and taken back to England again.  From there, Sir Ferdinando Gorges launched another expedition back to New England with Squanto.  Their stops included dropping anchor in Plymouth Harbor in 1619, about a year before the Pilgrims arrived.  This time Squanto found that every single man, woman, and child that he had once known in his home of Patuxet had disappeared in the intervening 5 years.  They had either been wiped out by the plague or were so afraid of the plague that they had fled to escape it.  Squanto, who must have been heartbroken, decided to join the Pokanokets, in Rhode Island.&lt;br /&gt;&lt;br /&gt;Squanto later received news of the Pilgrims settling in Patuxet and he travelled to visit them.  He joined their society as a guide, never to leave them again until his death.  During this period, he commanded great power in both Native American and New England societies because of his unique familiarity with both worlds.&lt;br /&gt;&lt;br /&gt;3 years later, in 1623, the Pilgrims had another poor corn harvest and were searching for corn to get them through the winter.  Squanto was able to lead a trading expedition with local indians that successfully secured for the Pilgrims the corn and beans that the needed.  During that expedition however, Squanto came down with a fever and died suddenly.  Before his death, he talked with Governor Bradford and asked him "&lt;i&gt;to pray for him, that he might go to the Englishmen's God in heaven, and bequeathed sundry of his things to sundry of his English friends as remembrances of his love, of whom they had a great loss&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;A little more interesting than some local who taught the Pilgrims to grow corn, eh?  Happy Squanto Day.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=TeuJYs7V_6w:ULs-fNJ2XZA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=TeuJYs7V_6w:ULs-fNJ2XZA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=TeuJYs7V_6w:ULs-fNJ2XZA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=TeuJYs7V_6w:ULs-fNJ2XZA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/TeuJYs7V_6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/6458428668824556931/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=6458428668824556931" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/6458428668824556931?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/6458428668824556931?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/TeuJYs7V_6w/happy-thanksgiving.html" title="Squanto: The original American Badass" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_s5emCsFnEdE/TO3jkQQ6xuI/AAAAAAAADm8/V4LaXd3g_0I/s72-c/pilgrim21.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gregable.com/2010/11/happy-thanksgiving.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ARHwzcSp7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-403582653392864343</id><published>2010-10-17T15:38:00.000-07:00</published><updated>2011-07-17T08:34:05.289-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:34:05.289-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Birthday Doodle</title><content type="html">&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d-0wOUSwqko?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/d-0wOUSwqko?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A friend of mine just launched a neat easter egg on Google earlier this week. &amp;nbsp;If you have specified a birthday in your &lt;a href="http://www.google.com/profiles/me"&gt;Google Profile&lt;/a&gt;&amp;nbsp;(inexplicably under the Contact Info section), we'll show a special doodle to you on the front page of Google on your birthday.  The short webcast video above is from &lt;a href="http://dannybrown.me/2010/10/16/google-birthday-smile/" rel=nofollow&gt;Danny Brown&lt;/a&gt; who stumbled across this fun easter egg accidentally.&lt;br /&gt;
&lt;br /&gt;
My birthday is right around the corner, I'm looking forward to seeing the doodle. &amp;nbsp;Although I will admit that I cheated on the launch date and set my birthday to that day instead. &amp;nbsp;For testing purposes only. &amp;nbsp;Yeah, that's it.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kVdV2tK5-cI:-FZ6EIbxJdQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kVdV2tK5-cI:-FZ6EIbxJdQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=kVdV2tK5-cI:-FZ6EIbxJdQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=kVdV2tK5-cI:-FZ6EIbxJdQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/kVdV2tK5-cI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/403582653392864343/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=403582653392864343" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/403582653392864343?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/403582653392864343?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/kVdV2tK5-cI/google-birthday-doodle.html" title="Google Birthday Doodle" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://gregable.com/2010/10/google-birthday-doodle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ARHwyfip7ImA9WhdTGUw.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-4167136994802281560</id><published>2010-09-30T14:51:00.000-07:00</published><updated>2011-07-17T08:34:05.296-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T08:34:05.296-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Goo.gl URL Shortener</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_s5emCsFnEdE/TKUVi2BopBI/AAAAAAAADl8/lffvi7khF7g/s1600/googl.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/_s5emCsFnEdE/TKUVi2BopBI/AAAAAAAADl8/lffvi7khF7g/s200/googl.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Friends and coworkers of mine just launched &lt;a href="http://goo.gl/"&gt;Goo.gl&lt;/a&gt;, an URL Shortener run on Google Infrastructure.&lt;br /&gt;&lt;br /&gt;To me, stability is the biggest selling point of &lt;a href="http://goo.gl/"&gt;Goo.gl&lt;/a&gt; over alternatives - it's run by a company that isn't likely to disappear next year and is known for having some of the most scalable systems in the world.  I know the team has worked hard on making this as scalable and reliable as most anything at Google, including search.  I think it's safe to say &lt;a href="http://goo.gl/"&gt;Goo.gl&lt;/a&gt; links are any one's best bet as far as future-proofing your shortened URLs.  Also, because of Google's obsession with end-user speed, this is likely the fastest URL shortener you are going to ever find.  You don't have to take my word from it, see &lt;a href="http://techcrunch.com/2010/03/17/url-shorteners-speed/"&gt;this post from TechCrunch&lt;/a&gt; a few months ago that shows &lt;a href="http://goo.gl/"&gt;Goo.gl&lt;/a&gt; as the fastest and most reliable from two different third-party analyses.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://blog.watchmouse.com/2010/03/url-shorteners-make-the-web-substantially-slower-facebooks-fb-me-is-slowest/" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://blog.watchmouse.com/wp-content/uploads/2010/03/shortURL_availability.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;b&gt;Reliability, Greener is Better&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://blog.watchmouse.com/2010/03/url-shorteners-make-the-web-substantially-slower-facebooks-fb-me-is-slowest/" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://blog.watchmouse.com/wp-content/uploads/2010/03/shortURL_performance2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Speed, Smaller is Better&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Of course, I'm the first one to admit that I'm &lt;a href="http://gregable.com/2009/05/why-do-we-even-need-url-shorteners.html"&gt;disappointed that we even need URL Shorteners&lt;/a&gt;, but if you assume that you indeed do, this is a great choice.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_-nVH8nDPjc:aOaEYfJO-n0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_-nVH8nDPjc:aOaEYfJO-n0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=_-nVH8nDPjc:aOaEYfJO-n0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=_-nVH8nDPjc:aOaEYfJO-n0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/_-nVH8nDPjc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/4167136994802281560/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=4167136994802281560" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4167136994802281560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4167136994802281560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/_-nVH8nDPjc/googl-url-shortenere.html" title="Goo.gl URL Shortener" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_s5emCsFnEdE/TKUVi2BopBI/AAAAAAAADl8/lffvi7khF7g/s72-c/googl.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://gregable.com/2010/09/googl-url-shortenere.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EEQ3szfCp7ImA9WhBQFUk.&quot;"><id>tag:blogger.com,1999:blog-35584545.post-4085002372790078586</id><published>2010-09-29T01:24:00.000-07:00</published><updated>2013-03-17T10:33:22.584-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-17T10:33:22.584-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Why you should learn just a little Awk - An Awk Tutorial by Example</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.google.com/search?q=great+auk" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_s5emCsFnEdE/TKLk4ZBFfwI/AAAAAAAADl4/pQsWzHs9da0/s400/awk.JPG" width="220" /&gt;&lt;/a&gt;&lt;/div&gt;
In grad school, I once saw a prof I was working with grab a text file and in seconds manipulate it into little pieces so deftly it blew my mind.  I immediately decided it was time for me to learn awk, which he had so clearly mastered.&lt;br /&gt;
&lt;br /&gt;
To this day, 90% of the programmers I talk to have never used awk.  Knowing 10% of awk's already small syntax, which you can pick up in just a few minutes, will dramatically increase your ability to quickly manipulate data in text files.  Below I'll teach you the most useful stuff - not the "fundamentals", but the &lt;b&gt;5 minutes&lt;/b&gt; worth of practical stuff that will get you most of what I think is interesting in this little language.&lt;br /&gt;
&lt;br /&gt;
Awk is a fun little programming language. It is designed for processing input strings.  A (different) prof once asked my networking class to implement code that would take a spec for an RPC service and generate stubs for the client and the server.  This professor made the mistake of telling us we could implement this in any language.  I decided to write the generator in Awk, mostly as an excuse to learn more Awk. &amp;nbsp;Surprisingly to me, the code ended up much shorter and much simpler than it would have been in any other language I've ever used (Python, C++, Java, ...). &amp;nbsp;There is enough to learn about Awk to fill &lt;a href="http://oreilly.com/catalog/9781565922259"&gt;half a book&lt;/a&gt;, and I've read that book, but you're unlikely to be writing a full-fledged spec parser in Awk. &amp;nbsp;Instead, you just want to do things like find all of your log lines that come from ip addresses whose components sum up to 666, for kicks and grins. &amp;nbsp;Read on!&lt;br /&gt;
&lt;br /&gt;
For our examples, assume we have a little file (&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;logs.txt&lt;/span&gt;) that looks like the one below. &amp;nbsp;If it wraps in your browser, this is just 2 lines of logs each staring with an ip address.&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;br /&gt;
07.46.199.184 [28/Sep/2010:04:08:20] "GET /robots.txt HTTP/1.1" 200 0 "msnbot"&lt;br /&gt;
123.125.71.19 [28/Sep/2010:04:20:11] "GET / HTTP/1.1" 304 - &amp;nbsp;"Baiduspider"&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
These are just two log records generated by Apache, slightly simplified, showing Bing and Baidu wandering around on my site yesterday.&lt;br /&gt;
&lt;br /&gt;
Awk works like anything else (ie: &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;grep&lt;/span&gt;) on the command line. &amp;nbsp;It reads from stdin and writes to stdout. &amp;nbsp;It's easy to pipe stuff in and out of it. &amp;nbsp;The command line syntax you care about is just the command &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;awk&lt;/span&gt; followed by a string that contains your program.&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
awk '{print $0}'&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Most Awk programs will start with a "&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;" and end with a "&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;". &amp;nbsp;Everything in between there gets run once on each line of input. &amp;nbsp;Most awk programs will print something. &amp;nbsp;The program above will print the entire line that it just read, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt; appends a newline for free. &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$0&lt;/span&gt; is the entire line. &amp;nbsp;So this program is an identity operation - it copies the input to the output without changing it.&lt;br /&gt;
&lt;br /&gt;
Awk parses the line in to fields for you automatically, using any whitespace (space, tab) as a delimiter, merging consecutive&amp;nbsp;delimiters. &amp;nbsp;Those fields are available to you as the variables $1, $2, $3, etc.&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
echo 'this is a test' | awk '{print $3}' &amp;nbsp;// prints 'a'&lt;br /&gt;
awk '{print $1}' logs.txt&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
07.46.199.184&lt;br /&gt;
123.125.71.19&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Easy so far, and already useful. &amp;nbsp;Sometimes I need to print from the end of the string though instead. &amp;nbsp;The special variable, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;NF&lt;/span&gt;, contains the number of fields in the current line. &amp;nbsp;I can print the last field by printing the field &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$NF&lt;/span&gt; or I can just manipulate that value to identify a field based on it's position from the last. &amp;nbsp;I can also print multiple values simultaneously in the same &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt; statement.&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
echo 'this is a test' | awk '{print $NF}' &amp;nbsp;// prints "test"&lt;br /&gt;
awk '{print $1, $(NF-2) }' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
07.46.199.184 200&lt;br /&gt;
123.125.71.19 304&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
More progress - you can see how, in moments, you could strip this log file to just the fields you are interested in. &amp;nbsp;Another cool variable is &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;NR&lt;/span&gt;, which is the row number being currently processed. &amp;nbsp;While demonstrating &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;NR&lt;/span&gt;, let me also show you how to format a little bit of output using &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt;. &amp;nbsp;Commas between arguments in a &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;print&lt;/span&gt; statement put spaces between them, but I can leave out the comma and no spaces are inserted.&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
awk '{print NR ") " $1 " -&amp;gt; " $(NF-2)}' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
1) 07.46.199.184 -&amp;gt; 200&lt;br /&gt;
2) 123.125.71.19 -&amp;gt; 304&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Powerful, but nothing hard yet, I hope. &amp;nbsp;By the way, there is also a &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;printf&lt;/span&gt; function that works much the way you'd expect if you prefer that form of formatting. &amp;nbsp;Now, not all files have fields that are separated with whitespace. &amp;nbsp;Let's look at the date field:&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{print $2}' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
[28/Sep/2010:04:08:20]&lt;br /&gt;
[28/Sep/2010:04:20:11]&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
The date field is separated by "/" and ":" characters. &amp;nbsp;I can do the following within one awk program, but I want to teach you simple things that you can string together using more familiar unix piping because it's quicker to pick up a small syntax. &amp;nbsp;What I'm going to do is pipe the output of the above command through another awk program that splits on the colon. To do this, my second program needs two {} components. &amp;nbsp;I don't want to go into what these mean, just to show you how to use them for splitting on a different delimiter.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{print $2}' logs.txt &amp;nbsp;| awk 'BEGIN{FS=":"}{print $1}'&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
[28/Sep/2010&lt;br /&gt;
[28/Sep/2010&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
I just specified that I wanted a different FS (field separator) of ":" and that I wanted to then print the first field. &amp;nbsp;No more time, just dates! &amp;nbsp;The simplest way to get rid of that prefix [ character is with sed, which you are likely already familiar with:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{print $2}' logs.txt &amp;nbsp;| awk 'BEGIN{FS=":"}{print $1}' | sed 's/\[//'&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
28/Sep/2010&lt;br /&gt;
28/Sep/2010&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
I can further split this on the "/" character if I want using the exact same trick, but I think you get the point. &amp;nbsp;Next, lets learn just a tiny bit of logic. &amp;nbsp;If I want to return only the 200 status lines, I could use grep, but I might end up with an ip address that contains 200, or a date from year 2000. &amp;nbsp;I could first grab the 200 field with Awk and then grep, but then I lose the whole line's context. &amp;nbsp;Awk supports basic if statements. &amp;nbsp;Lets see how I might use one:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{if ($(NF-2) == "200") {print $0}}' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
07.46.199.184 [28/Sep/2010:04:08:20] "GET /robots.txt HTTP/1.1" 200 0 "msnbot"&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
There we go, returning only the lines (in this case only one) with a 200 status. &amp;nbsp;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if&lt;/span&gt; syntax should be very familiar and require no explanation. &amp;nbsp;Let me finish up by showing you one stupid example of awk code that maintains state across multiple lines. &amp;nbsp;Lets say I want to sum up all of the status fields in this file. &amp;nbsp;I can't think of a reason I'd want to do this for statuses in a log file, but it makes a lot of sense in other cases like summing up the total bytes returned across all of the logs in a day or something. &amp;nbsp;To do this, I just create a variable which automatically will persist across multiple lines:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{a+=$(NF-2); print "Total so far:", a}' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
Total so far: 200&lt;br /&gt;
Total so far: 504&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Nothing doing. &amp;nbsp;Obviously in most cases, I'm not interested in cumulative values but only the final value. &amp;nbsp;I can of course just use &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tail -n1&lt;/span&gt;, but I can also print stuff &lt;i&gt;after&lt;/i&gt;&amp;nbsp;processing the final line using an END clause:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
$ awk '{a+=$(NF-2)}END{print "Total:", a}' logs.txt&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;u&gt;Output:&lt;/u&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
Total: 504&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
If you want to read more about awk, there are several good books and plenty of online references. &amp;nbsp;You can learn just about everything there is to know about awk in a day with some time to spare. &amp;nbsp;Getting used to it is a bit more of a challenge as it really is a little bit different of a way to code - you are essentially writing only the inner part of a for loop. &amp;nbsp;Come to think of it, this is a lot like how MapReduce feels, which is also initially disorienting.&lt;br /&gt;
&lt;br /&gt;
I hope some of that was useful. &amp;nbsp;If you found it to be so, leave a comment to let me know, I enjoy the feedback if nothing else.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update Sep 30, 2010&lt;/b&gt;: There are some great comments elsewhere in addition to here. &amp;nbsp;I wish they would end up in one place, but the best I can do currently is to link to them:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.reddit.com/r/programming/comments/dkew8/why_you_should_know_just_a_little_bit_of_awk/"&gt;Programming Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://news.ycombinator.com/item?id=1738688"&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Update Jan 2, 2011&lt;/b&gt;: This post caught the interest of Hacker Monthly who republished it in &lt;a href="http://hackermonthly.com/issue-8.html"&gt;issue #8&lt;/a&gt;. &amp;nbsp;You can grab&lt;a href="http://dl.dropbox.com/u/392751/Why%20You%20Should%20Know%20Just%20A%20Little%20AWK.pdf"&gt; the pdf version of this article&lt;/a&gt;&amp;nbsp;courtesy of&amp;nbsp;Lim Cheng Soon, Hacker News' Founder.&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Birds of a Feather&lt;/h3&gt;
&lt;div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.theage.com.au/articles/2004/09/09/1094530769493.html" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_s5emCsFnEdE/S52Dt5OHDOI/AAAAAAAADO8/trxKPkXvwSc/s200/google_jobs.jpg" width="176" /&gt;&lt;/a&gt;&lt;/div&gt;
If you are the type of person interested in Awk, you are probably the type of person I'd like to see working with me at &lt;a href="http://www.google.com/jobs/"&gt;Google&lt;/a&gt;. &amp;nbsp;If you send me your resume (&lt;a href="mailto:ggrothau@gmail.com"&gt;ggrothau@gmail.com&lt;/a&gt;), I can make sure it gets in front of the right recruiters and watch to make sure that it doesn't get lost in the pile that we get every day.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/gregable?a=6sGrM51cpWg:BJcd-FILASI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=6sGrM51cpWg:BJcd-FILASI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/gregable?a=6sGrM51cpWg:BJcd-FILASI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/gregable?i=6sGrM51cpWg:BJcd-FILASI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregable/~4/6sGrM51cpWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gregable.com/feeds/4085002372790078586/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=35584545&amp;postID=4085002372790078586" title="63 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4085002372790078586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/35584545/posts/default/4085002372790078586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregable/~3/6sGrM51cpWg/why-you-should-know-just-little-awk.html" title="Why you should learn just a little Awk - An Awk Tutorial by Example" /><author><name>Greg Grothaus</name><uri>http://www.blogger.com/profile/06692328337754346540</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_s5emCsFnEdE/TKLk4ZBFfwI/AAAAAAAADl4/pQsWzHs9da0/s72-c/awk.JPG" height="72" width="72" /><thr:total>63</thr:total><feedburner:origLink>http://gregable.com/2010/09/why-you-should-know-just-little-awk.html</feedburner:origLink></entry></feed>
