February 8, 2009 by gerad
I had a little accident on my way to a triathlon training ride yesterday morning.
I lost traction while trying to slow down going down a steep, wet hill. I hit the guardrail next to the road, was thrown off my bike, and over the rail.
A number of nice nearby onlookers saw the spectacle, rushed over, and called the paramedics. The fall obviously looked more impressive than it ended up being: after the paramedics arrived I was able to get up and walk around. The paramedics were impressed how much worse it could have been.
I was lucky that my helmet and backpack (with running shoes in it) provided padding for much of my body. Also, I credit years of wakeboarding and snowboarding for teaching me how to fall. Tuck and roll, don’t stick out arms or catch wrists.
While I wasn’t in extraordinary pain after the fall, I thought a trip to the ER was probably a good idea.
At the ER, I got my wounds cleaned and a tetanus shot. The doctor x-rayed my hand and found I had fractured my finger. So my finger was splinted and I now need to see a specialist to rehabilitate it properly.
I got to keep a digital copy of the x-rays, so I thought I’d share them here.

Hand X-Ray 1

Hand X-Ray 2

Hand X-Ray 3
Posted in Events | 4 Comments »
January 26, 2009 by gerad
On Google news on my iPhone this morning.

Posted in Thoughts | Leave a Comment »
September 25, 2008 by gerad
This week, I was able to see Dan Roam speak at Adaptive Path about some of the ideas behind his book The Back of the Napkin
.
Here are my notes from the event.
Executive Summary:
Our brains think visually, but abstractly. Quirky hand-drawn sketches can communicate and solve problems better than other methods.
Details:
- We can solve problems with picures.
- Our mind works from an image perspective. 75% of our neurons process vision.
- There are three unwritten rules of visual problem solving:
- Whoever best describes the problem is the one most likely to solve it. (Corollary: whoever draws the best picture gets the funding).
- The more human the picture, the more human the response. (Corollary: when we look at a hand-drawn picture, we’re seeing things the way we think them).
- Everything is a layer cake. Different people enjoy different layers of the cake. They focus on their part of the task. Hand-drawn sketches can communicate the idea of the full cake to each audience focused on a different layer.
- Our brains process things in 6 ways. Every problem can be communicated by breaking it down into these 6 components.
- Who / what – who or what are we looking at? (drawn as a smiley face or box)
- Where – where is that object? (drawn as a map)
- How much – how many of the object are there? (drawn as graph)
- When – what is changing over time, in what way? (drawn as a series of arrows)
- How – what is the cause of something? (drawn as a flowchart)
- Why – what is the effect of something? (drawn as a multi-variable chart)
- “The barrier to change is not too little caring, it’s too much complexity. To turn caring into action, we need to see a problem, see a solution, and see the impact. But complexity blocks all three steps.” – Bill Gates
- Dan Roam (who gave the talk) was invited by the Microsoft CFO to prototype the next generation of financial analytics software.
- Microsoft wants to end the analysis-paralysis cycle.
- They do a quarterly business review where the CFO sits with each of the division presidents (who report to the CFO).
- Each division president presents a different set of numbers, and comes to a different conclusion.
- The CFO goes back to the division presidents and says, “Why are you looking at different things and coming to different conclusions? Give me a report is consistent and coherent.”
- The presidents sit down together and think: “What does the CFO want to see? Let’s show him everything.”
- There is too much data to show the CFO everything.
- The conclusion they came to (but they didn’t have much time to think about).
- Let’s get the data and people in one place.
- And create a customizable portal.
- Where people can choose what they want to see.
- The hand-drawn prototype that they built looked exactly like Swivel.
- A report/dashboard in the primary part of the screen.
- Links between data in the top of the side column.
- Links between people in the bottom of the side column.
- They presented the first sketch after three days as a hand-drawn picture and it elicited tremendous response (much better feedback than the illustrator prototypes I had done in the past).
- He recommended the book Authenticity
to explain why the hand-drawn sketches worked so well.
Posted in Uncategorized | Leave a Comment »
September 5, 2008 by gerad
Sunrise from my apartment.

Posted in Events | Leave a Comment »
September 5, 2008 by gerad

At least the start page is out of beta...
Posted in Thoughts | Leave a Comment »
August 26, 2008 by gerad
Here’s a quick bash script that I wrote to help people upload data to Swivel. (Sorry about the poor bash script syntax, I don’t do shell script very often).
# Usage: sh swivel_update.sh email@address.com password 12345 data_set_data.tsv
EMAIL=$1
PASSWORD=$2
DATA_SET_ID=$3
DATA_SET_DATA=$4
echo "$EMAIL $PASSWORD $DATA_SET_ID $DATA_SET_DATA"
# log in
curl -X POST -s -L -c cookies.txt -d "email=${EMAIL}" -d "password=${PASSWORD}" 'http://www.swivel.com/security/login' > /dev/null 2>&1
# upload the file
UPLOADED_FILE_ID=`curl -X POST -s -L -b cookies.txt \
-F "uploaded_text_area[text_area]=" \
"http://www.swivel.com/update/update_upload/${DATA_SET_ID}?upload_type=type_in" | perl -ne 'print $1 if($_ =~ /uploaded_file_id=(\d+)/)'`
echo "$UPLOADED_FILE_ID"
# set the settings on the file
# (for comma-delimited use 'uploaded_file[column_separator]=,')
curl -X POST -s -L -b cookies.txt \
-d 'uploaded_file[column_separator]=\t' \
-d 'uploaded_file[first_line_number]=1' \
-d 'uploaded_file[first_line_titles]=false' \
-d 'continue=Continue >' \
"http://www.swivel.com/update/update_preview/${DATA_SET_ID}?upload_type=type_in&uploaded_file_id=${UPLOADED_FILE_ID}" > /dev/null 2>&1
# append the data
# (to append use -d 'append=Append +')
# (to replace use -d 'replace=Replace -/+')
curl -X POST -s -L -b cookies.txt \
-d 'append=Append +' \
"http://www.swivel.com/update/update_alter/${DATA_SET_ID}?uploaded_file_id=${UPLOADED_FILE_ID}&upload_type=type_in" > /dev/null 2>&1
Posted in Thoughts | Leave a Comment »
August 18, 2008 by gerad
I’ve been consolidating files from multiple computers lately. Here are a couple quick scripts that I found useful.
1. Create an MD5 hash of every file in a directory.
# md5.py
import os, os.path, sys
from subprocess import Popen, PIPE
def walk(start_dir = '/'):
directories = [start_dir]
while directories:
directory = directories.pop()
for name in os.listdir(directory):
fullpath = os.path.join(directory,name)
if os.path.isfile(fullpath):
md5 = Popen(["md5", fullpath], stdout=PIPE).communicate()[0].strip().split(' = ')[-1]
print md5 + ' ' + fullpath
elif os.path.isdir(fullpath):
directories.append(fullpath)
if __name__ == "__main__":
walk(sys.argv[1])
2. Find duplicate MD5 hashes in multiple files.
> python md5.py /path/to/dir1 > dir1_md5_files.txt
> python md5.py /path/to/dir2 > dir2_md5_files.txt
# get just the md5 hashes
> cut -d' ' -f1 dir1_md5_files.txt > dir1_md5s.txt
> cut -d' ' -f1 dir2_md5_files.txt > dir2_md5s.txt
# find the duplicates
> cat dir1_md5s.txt dir2_md5s.txt | sort | uniq -d > md5_dupes.txt
3. Do stuff to the files which are duplicates.
Posted in Uncategorized | Leave a Comment »
August 17, 2008 by gerad
Chapter 10 of The Innovator’s Dilemma provides a case study of how to take advantage of disruptive change. I thought the chapter was particularly valuable, so I’m summarizing it here.
The case study in the chapter deals with the electric car, and how to structure a product such that it could take advantage of the disruptive technology and eventually overtake the mainstream market.
Step 1: Determine if the technology is disruptive
- Graph the trajectory of the performance improvement demanded by the market with compared to the trajectory of the performance improvement of the technology. In the case of the electric car, the market demands only mild performance improvement in speed and driving ranges. The technological performance improvement in battery technology is happening at a much greater pace.
- Important: ”To measure market needs, I would watch carefully what customers do, not simply listen to what they say.”
- Make sure the technology is not a sustaining technology. That is, it does not and cannot currently meet the needs of the mainstream market. In the case of the electric car, the cruising range and charging time make it fundamentally unmarketable to the mainstream.
Step 2: Determine where to market the disruptive technology
- Do not try to market it to the existing, mainstream market. You will surely fail.
- Do not leave the technology in the laboratory until the technology is ready for the existing market. History has found enormous value in learning from having the technology in the market and getting a disruptive technology to market first..
- It is often the case, the same attributes that make technologies a poor fit for mainstream markets are seen as positives in new markets. In the electric car example, for instance, can a limited range be seen as a positive in a new market?
- Important: ”No one can learn from market research what the early market(s) for electric vehicles will be.”
- Plan to learn, rather than to succeed. ”Plan to be wrong and to learn what is right as fast as possible.” Do not blow your nest egg on an “all-or-nothing first-time bet.”
Step 3: Determine a strategy
- “Without a market, there is no obvious or reliable source of customer input; without a product that addresses customers’ needs, there can be no market.” So prepare to experiment.
- Important: ”the basis of competition will change over a product’s life cycle.” When one feature of the product is “good enough,” people will begin to care about a different feature. For example, when acceleration of the electric car is “good enough,” people will begin to care about range. Only when range is good enough will people care about other attributes, like fuel economy.
- Focus on attributes like simplicity, reliability, and convenience. Focus on the low-margin, low end of the market, rather than the power user.
- Since the market is unknown, and can change, “design a product in which feature, function, and styling changes can be made quickly and at low cost.”
- Hit a low price point. Not necessarily price per feature, but low unit price. For example, don’t worry about a lower price per mile of range than the current automobile. Make your product a low-cost investment for potential people in the market to try out.
- Do not count on technological breakthroughs, or even feel the need to create your own technology. Pull together components of proven technologies into a new product and market. For example, in the electric car, count on laptop batteries, rather than creating a new battery technology.
- Do not count on an existing distribution channel (especially if it involves salespeople) to sell the product. The disruptive technology will be lower margin, hence lower commission and will get less focus than it deserves from existing channels. For example, do not try to sell your electric car through an existing auto franchise.
- Create an organization small enough to be excited about a small market. You’re not going to get to the big wins for a long-time, and the organization should be small enough to be happy about the small ones. Selling $10 million dollars worth of product is nothing to an automobile manufacture, but it’s a huge amount of revenue for a 100-person company.
Note that the hybrid car concept has changed the electric car from a disruptive technology to a sustaining one.
However, were that not the case, then I would say that a laptop battery powered bike assisting electric motor for use in the city would be an ideal way to break into the electric car market, I’ll explore the reasons why in another post.
Posted in Uncategorized | Leave a Comment »
August 3, 2008 by gerad
God, it’s beautiful here.


Posted in Events | Leave a Comment »
August 1, 2008 by gerad
Here’s a quick tip. You can save a website for offline viewing with wget.
wget -np -k -r -p 'http://code.google.com/appengine/docs/'
- -np – don’t go up to the parent directory
- -p – grab page links (CSS, javascript, images)
- -k – convert http links to file links
- -r – do it recursively, does a default recursion depth of 5, you can change this with -l
Posted in Thoughts | Leave a Comment »