Destroying Hard Drives

If you’re like me there is a box of hard drives sitting in a dusty corner somewhere. Some are mine, some are others’, but they are all in a failed or semi-failed state. So, why have I lugged them around? I’ve been a bit paranoid about throwing them away. Some of the hard drives are encrypted, others aren’t, and the drives from friends certainly aren’t. Although the chances of somebody getting the drive from a landfill and restoring it is minimal, I never wanted to take the chance. So, I kept lugging a bag of drives through each move. My friend Clinton has recently returned from Europe, and he brought me a gift: a Swiss-made Victorinox, the ‘CyberTool’. After playing …
Read Destroying Hard Drives

Reload a Cisco Router WIthout Worry

Recently I tried editing my Cisco’s ACL at home on the train. It went something like this: I logged in I started updating the ACL I hit a blackspot in my 3g coverage My command stops at “router(config)#access-” I get an alert saying my home internet was down Although it is simple enough to just ask her to “flip the switch on the black box”, I still don’t like doing it. Plus, if she’s not home, I’m stuck. This accident immediately reminded me of one of a trait of the ‘reload’ command: it can be scheduled.
Read Reload a Cisco Router WIthout Worry

Converting GTFS to GraphServer

If you want to use Graphserver to do some analysis with GTFS, you will need to convert GTFS into the database. This is how I did it. I used the following AMI. If you have enough memory, you don’t need to do this. ami-7000f019 Lookup and read the GTFSDB INSTALL.txt document sudo apt-get install mercurial hg clone https://gtfsdb.googlecode.com/hg/ gtfsdb sudo apt-get install python-setuptools sudo easy_install psycopg2 sudo apt-get install build-essential ubuntu@domU-12-31-39-00-5D-B8:/mnt/gtfsdb$ pwd /mnt/gtfsdb sudo python setup.py install sudo wget http://cdn.kelvinism.com/google_transit.zip sudo apt-get install python-psycopg2 EDIT 16-03-2025: I’ve since removed these files.
Read Converting GTFS to GraphServer

Removing Unused ContentTypes

I’ve been cleaning up my personal blog a bit, and I noticed that my tagging system recently broke. I’ve investigated the cause, and it appears to be because I removed some apps but the contenttypes remained. This meant that whenever I tried calling a tag with a TaggedItem that had been deleted, I was getting this error: 'NoneType' object has no attribute '_meta' The solution is to first list all app_labels for contenttypes, and then delete any not in use.
Read Removing Unused ContentTypes

Integrate imified into Django

I recently had the desire to send small updates to my so called lifestream page via XMPP/GTalk. I played around with Twisted Words and several other Python XMPP clients, but I didn’t really want to keep a daemon running if unnecessary. It turns out imified took a lot of the pain out of it. The steps for me were as follows: Create an account with imified, and create a URL, e.g. /app/api/ We then configure the urls.conf
Read Integrate imified into Django

Enable ICMP through UFW

I like using Ubuntu’s UFW command, but today I needed to allow outgoing ICMP. I received results as so: $ ping 4.2.2.2 PING 4.2.2.2 (4.2.2.2) 56(84) bytes of data. ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted To allow outbound icmp I edited ‘before.rules’ and added the following lines. $ sudo vi /etc/ufw/before.rules # allow outbound icmp -A ufw-before-output -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT -A ufw-before-output -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
Read Enable ICMP through UFW

Using HTML in a Django form label

I recently had the need to add some HTML to the label for a form field using Django. The solution is pretty easy, except I didn’t see it written explicitly anywhere, and I missed the memo of the function I should be using. My form first just had the HTML in the form label as so: from django import forms class AccountForm(forms.Form): name = forms.CharField(widget=forms.TextInput(), max_length=15, label='Your Name (why?') However, when I displayed it, the form was autoescaped.
Read Using HTML in a Django form label

Ubuntu 10.04, Django and GAE - Part 1

I’ve started to get into Google’s App Engine again, and have started developing a simple product that I had a use for. The initial first draft was a quick 200 lines in webapp, and it worked great. However, I’m starting to find certain things quite cumbersome. I’m a huge fan of Django, and but also about keeping things as simple as possible, which is why I picked webapp to begin with. I’m now considering making a swap to Django, but there are some development issues; namely, I’m using Ubuntu 10.04, Python 2.6, and Django 1.2. This setup presents several setbacks, as GAE has the requirement of Django 1.1 and Python 2.5. There are two solutions that I found: a) use virtualenv, …
Read Ubuntu 10.04, Django and GAE - Part 1

Ubuntu 10.04, Django and GAE - Part 2

All my Django sites are running 1.2, which poses a conflict with writing apps for Google’s App Engine, as use_library currently only supports < Django 1.1. There are two solutions that I found: a) use virtualenv, or b) chroot, which I’ve already detailed. This document will hopefully show you how to create a virtual environment to use a secondary django version, especially for GAE. Of the two options, I think this one is a bit quicker, but there will likely be tradeoffs that a chroot environment can deal with better, e.g. python imaging (I don’t use it for GAE). First, install PIP and virtualenv:
Read Ubuntu 10.04, Django and GAE - Part 2

Debug Postfix Tip

One thing I love about open source stuff is that the developers usually take great care to allow awesome debug messages. There’s a catch-22, however: how much logging to enable? Today I was creating a Postfix/Dovecot/Postgresql install and I kept getting an error message in mail.log, but it wasn’t very helpful. Luckily you can turn up the verbosity in Postfix for error messages. You’ll need to find out what component is in error, e.g. “postfix/virtual[4467]: warning:”, and then open master.cf. Add a -v to the end of the daemon that’s faulting, and you’ll get more logging than you know what to do with.
Read Debug Postfix Tip