My name is Paul Bissex, and e-scribe.com is my consulting business. I build web applications using as much open source software as possible. From September to June I teach web design and other important non-photographic professional skills to photographers. In the '90s I wrote technology commentary and reviews for magazines, newspapers, and web publications, including Wired, Salon.com, FamilyPC, the late lamented Web Review, and the Chicago Tribune. Feel free to email me.
I'm co-authoring a book, "Python Web Development with Django", with Jeff Forcier and Wesley Chun. It will be published by Prentice Hall in July 2008, but is available for pre-ordering on Amazon now.
This site is built on a fresh trunk checkout of Django, running on Python 2.5.1, served by Apache and mod_python. The database is SQLite. The operating system is FreeBSD, on a VPS hosted at Johncompanies.com. Comment-spam protection by Akismet. Vintage topo imagery from the Maptech archive.
Akismet, del.icio.us, Django, dpaste.com, Emacs, FreeBSD, Freenode, jQuery, LaunchBar, MacPorts, Markdown, Mercurial, OS X, Postfix, Python, SQLite, Subversion, TextMate, Trac, Ubuntu Linux, wmii
Copyright 2008
by Paul Bissex
and E-Scribe New Media
For several weeks at work I've been prepping for a server move; this week we flipped the switch. It was the most serious migration I've ever done, and it went very well. Some notes:
Previously we shared a dedicated box at a certain very large colo provider. A few weeks ago, in the course of swapping out a failing drive in our box, staffers at the colo 1) wiped out the live backup of the drive and then 2) destroyed the contents of the failing drive, overwriting it with a week-old backup. A week is a lot for us, with a couple limited-access applications (Django apps, naturally) seeing steady daily use by hundreds of users. This just firmed my resolve to go with a smaller provider (JohnCompanies) who has taken good care of me over the past three years.
The other thing the above incident drove home is that backups are good. We lost no data in the end, but recovering some of it was a real pain (in one case reconstructing database inserts from logfiles). So, the new server, in addition to being backed up daily onsite, backs up daily to an rsync.net server. There are also hourly and daily cronjobs making database dumps -- at any given point I have a snapshot for each of the previous 24 hours and one for each of the previous 7 days. And finally, we can pull down local copies from the rsync.net server. It's about a gig of data right now; I burned it to two CDs and brought them home for safekeeping.
There are three Django projects running on the server, and more to come. All back-end content administration is handled by Django, and in the fall I plan to replace the remaining front-end PHP pieces. Having full control over the box and Apache makes my Django work much easier. Perhaps oddly, I have three different versions of the source running in parallel (0.91, pre-merge magic-removal, and current trunk), roughly reflecting the times when the three projects were created. These are all straight Subversion checkouts living in /usr/local/www/django, and I set the PYTHONPATH appropriately for each in my Apache config.
I had tested most of our software configuration on a play server, so setup was fairly straightforward. The glitches were minor and familiar: an "HTTP Accept" filter warning on Apache startup, a thread-related workaround for Apache, and a stable SVN checkout of mod_python (rather than the current 3.2.8 release) needed to work with Apache 2.2.
I'm using portsnap instead of CVSup, and ssmtp instead of sendmail.
The fact that our email is handled by a separate provider (not my department, thankfully) made this much easier than it otherwise would have been.
The shared colo box was well run -- but there's no substitute for having root!
Comments use Markdown syntax. Your comment will not appear until approved, which may take a few hours or more. Spammers will be torpedoed.
The iPhone keyboard doesn't suck
Python one-liner of the day
7 comments
How not to advocate via Google Code
2 comments
99 problems
3 comments
bitmonk
Obscure "svn mv" problem solved
88 days ago
Charlie
Book news: Rough Cuts and Amazon
89 days ago
Simon Griffee
Django Mercurial mirror tweaks
106 days ago
Jason Calleiro
From PHP to Python
107 days ago
Yuli
dpaste.com
110 days ago
bruce
Neat Python hack: infix operators
114 days ago
David Reynolds
The original Lego Star Wars
122 days ago
At least 36612 pieces of comment spam killed since January 12th. Thanks are mostly due to Akismet.