I’ve got a Verizon data uplink thinger for my laptop. This is the second day in a row they’re not able to route my packets. Yesterday I couldn’t access a shared host on WebFaction’s network. Today I can’t access my Slicehost VPS.

mike@110psi:~$ traceroute dev.thefirewoodguys.com
traceroute to dev.thefirewoodguys.com (67.23.12.250), 30 hops max, 60 byte packets
 1  64.sub-66-174-217.myvzw.com (66.174.217.64)  73.717 ms  74.616 ms  75.561 ms
 2  127.sub-66-174-217.myvzw.com (66.174.217.127)  85.524 ms  86.513 ms  86.485 ms
 3  138.sub-66-174-31.myvzw.com (66.174.31.138)  101.457 ms  101.434 ms  101.414 ms
 4  233.sub-66-174-217.myvzw.com (66.174.217.233)  99.385 ms  100.343 ms  75.903 ms
 5  194.sub-66-174-217.myvzw.com (66.174.217.194)  77.883 ms  77.870 ms  77.858 ms
 6  98.sub-66-174-31.myvzw.com (66.174.31.98)  77.847 ms  77.837 ms  72.877 ms
 7  169.sub-66-174-31.myvzw.com (66.174.31.169)  73.820 ms  74.790 ms  82.772 ms
 8  162.sub-66-174-31.myvzw.com (66.174.31.162)  81.781 ms  82.744 ms  83.737 ms
 9  169.sub-66-174-31.myvzw.com (66.174.31.169)  83.729 ms  83.721 ms  83.713 ms
10  162.sub-66-174-31.myvzw.com (66.174.31.162)  75.838 ms  75.791 ms  76.679 ms
11  169.sub-66-174-31.myvzw.com (66.174.31.169)  77.664 ms  78.606 ms  78.576 ms
12  162.sub-66-174-31.myvzw.com (66.174.31.162)  69.817 ms  70.718 ms  77.700 ms
13  169.sub-66-174-31.myvzw.com (66.174.31.169)  78.646 ms  78.617 ms  78.588 ms
14  162.sub-66-174-31.myvzw.com (66.174.31.162)  78.565 ms  79.526 ms  79.503 ms
15  169.sub-66-174-31.myvzw.com (66.174.31.169)  79.487 ms  66.962 ms  66.941 ms
16  162.sub-66-174-31.myvzw.com (66.174.31.162)  67.833 ms  72.801 ms  73.800 ms
17  169.sub-66-174-31.myvzw.com (66.174.31.169)  73.787 ms  79.906 ms  80.854 ms
18  162.sub-66-174-31.myvzw.com (66.174.31.162)  80.840 ms  80.828 ms  81.807 ms
19  169.sub-66-174-31.myvzw.com (66.174.31.169)  81.795 ms  81.786 ms  91.778 ms
20  162.sub-66-174-31.myvzw.com (66.174.31.162)  92.730 ms  93.720 ms  70.790 ms
21  169.sub-66-174-31.myvzw.com (66.174.31.169)  71.735 ms  72.670 ms  77.668 ms
22  162.sub-66-174-31.myvzw.com (66.174.31.162)  75.614 ms  76.604 ms  82.729 ms
23  169.sub-66-174-31.myvzw.com (66.174.31.169)  81.718 ms  82.645 ms  84.634 ms
24  162.sub-66-174-31.myvzw.com (66.174.31.162)  86.585 ms  86.555 ms  86.529 ms
25  169.sub-66-174-31.myvzw.com (66.174.31.169)  86.505 ms  86.481 ms  86.464 ms
26  162.sub-66-174-31.myvzw.com (66.174.31.162)  67.786 ms  68.690 ms  69.682 ms
27  169.sub-66-174-31.myvzw.com (66.174.31.169)  74.649 ms  75.588 ms  75.559 ms
28  162.sub-66-174-31.myvzw.com (66.174.31.162)  73.911 ms  100.955 ms  100.945 ms
29  169.sub-66-174-31.myvzw.com (66.174.31.169)  101.868 ms  104.849 ms  104.840 ms
30  162.sub-66-174-31.myvzw.com (66.174.31.162)  103.834 ms  109.823 ms  110.813 ms

The solution? Disconnect and reconnect. Verizon will give you a new IP, and if you’re lucky, your packets will now (by chance) get routed around their fail.

That’s what it took to get San Francisco to tear down their waterfront freeway.

seattle waterfront freeway

seattle waterfront freeway

Tearing out a freeway without an earthquake – to my knowledge, it’s never been done. It would require an enormous amount of political capital. But there’s a group of Seattle citizens working on just that. They have a lot of logic and the tide of public opinion all pushing their way, and with the existing viaduct coming up for replacement, well – good luck!

This script will make a dump of the Django Book to your local filesystem so you can read it offline. Like say on a flight and you don’t want to pay 10 bucks for an hour of wifi. Even though you’re stoked you finally can, if you need/want to.

This script makes all the css links work so everything’s pretty. Also, Firefox by default won’t render index.html files as directory indexes when working in the ‘file://’ scheme, so this script rewrites internal links so that the index.html is explicit.

#!/bin/sh

# this script downloads a copy of the 2.0 django book, complete with css and
# sets it up so you can read it in-flight

WEB_RT="http://www.djangobook.com/en/2.0"
MIN_CHP=1
MAX_CHP=20

CSS1=http://new-media.djangobook.com/yui/container/assets/container.css
CSS2=http://new-media.djangobook.com/yui-ext/css/resizable.css
CSS3=http://new-media.djangobook.com/yui-ext/css/tabs.css
CSS4=http://new-media.djangobook.com/djangobook.css
CSS5=http://new-media.djangobook.com/yui/grids/grids-min.css
CSS6=http://new-media.djangobook.com/yui/reset/reset-min.css

CSS1_FILE=container.css
CSS2_FILE=resizable.css
CSS3_FILE=tabs.css
CSS4_FILE=djangobook.css
CSS5_FILE=grids-min.css
CSS6_FILE=reset-min.css

DIR_RT=django_book

echo "************ Setting up our dir structure *****************"
mkdir $DIR_RT
mkdir $DIR_RT/css
for i in `seq -f 'chapter%02.0f' $MIN_CHP $MAX_CHP`; do
  mkdir $DIR_RT/$i
done

echo "*********** Downloading all the content *****************"
wget $WEB_RT/ -P $DIR_RT
for i in $CSS1 $CSS2 $CSS3 $CSS4 $CSS5 $CSS6; do
  wget $i -P $DIR_RT/css/
done
for i in `seq -f 'chapter%02.0f' $MIN_CHP $MAX_CHP`; do
  wget $WEB_RT/$i/ -P  $DIR_RT/$i/
done

echo "************** Fixing up the css links ****************"
for i in `seq 1 6`; do
  eval "CSS_F=\"\$CSS${i}_FILE\""
  sed -i "s/href=\".*$CSS_F\"/href=\"css\/$CSS_F\"/" $DIR_RT/index.html
done

for i in `seq -f 'chapter%02.0f' $MIN_CHP $MAX_CHP`; do
  for j in `seq 1 6`; do
    eval "CSS_F=\"\$CSS${j}_FILE\""
    sed -i "s/href=\".*$CSS_F\"/href=\"..\/css\/$CSS_F\"/" $DIR_RT/$i/index.html
  done
done

echo "*************** Fixing up the page links **************"
sed -i "s/href='chapter[0-9]\{2\}\//&index.html/" $DIR_RT/index.html
for i in `seq -f 'chapter%02.0f' $MIN_CHP $MAX_CHP`; do
  sed -i "s/href=\"..\"/href=\"..\/index.html\"/" $DIR_RT/$i/index.html
  sed -i "s/href='..\/chapter[0-9]\{2\}\//&index.html/" $DIR_RT/$i/index.html
done

You ever see those ads back in the day where they’d have a little master combo lock, and someone would fire a handgun right at it? The bullet would ricochet off the lock, sending the lock flapping around all over the place, and when everything settled – there was the lock, still all locked up.

I’m not saying those were faked or anything… but they sure were misleading.

To bust apart your master lock, you’ll need a hammer, a flathead screwdriver, a strong pair of pliers, a good pounding surface, and 15 minutes.

Assuming your lock looks like mine, on the back you’ll find a nice little steel lip. Pound the flathead down under that.

Pound forward so that you can get the flathead under the front dial. It’ll pop right off.

Under the dial there’s a thicker piece of protective steel. Choose a good spot and pound through it using the flathead. Pry up a lip and pull it back with your pliers. The insides of the lock will kinda just dissolve and fall out. Give the lock a tug and bam! Your lock is open.