Amber and I spent a year in Key West, Florida working at Subtropic Dive Center. They take photos of the passengers and post them to the web. Since the photos are such low resolution, they keep them forever. We just dug through and grabbed all we could find with us in them, as well as some with friends and coworkers. They're in chronological order (September 1998 - August 1999).
Tue, 28 Sep 2004
The transition was surprisingly simple. The things I had feared the most about moving to a non-Zope system (or at least, a non-ZODB system) are absolutely non-issues with PyBlosxom. The biggest hangup I had with other systems was their reliance on an RDBMS, which I feel I've kinda gotten over since working with Zope/Python. PyBlosxom doesn't at all. All the content resides on the filesystem as plain text files, even the comments.
This was the direction I found myself headed as I was refining just what I wanted my home-grown system to do. With the ZODB, we strive so hard to make the object database mimic a filesystem. For something like this, why not just use it?
PyBlosxom supports (through its plugin architecture) reStructuredText as an entry formatter. I had planned on using reST as the basis for all my entries in my homegrown system. One more reason to just use PyBlosxom. At this point, I think I'll pass on writing my own system (at least for the foreseeable future).
Because it's such a simple setup, I've got my entire PyBlosxom site replicated here on my PowerBook, and when it's time to publish, I just rsync my web directory to my server. I don't even have to use Hobo. Since I'm running Apache locally, I can even vet the whole system before publishing. I had to make some slight changes at the top of my config.py:
import os
host = os.uname()[1]
bits = { 'fbyc.net' : { 'web_dir' : '/home/urbanape/html',
'base_url' : 'http://www.urbanape.com' } }
web_dir = bits.get(host, {}).get('web_dir', '/Users/zbir/Sites')
These let me do things like this:
# Plugin directories:
# You can now specify where you plugins all lives, there are two types
# of plugindirectories, the standard pyblosxom plugins, and the xmlrpc
# plugins. You can list out as many directories you want, but they
# should only contain the related plugins.
# Example: py['plugin_dirs'] = ['/opt', '/usr/bin']
p_dir = "%s/cgi-bin/plugins" % web_dir
py['plugin_dirs'] = [p_dir]
# Where are this blog's entries kept?
py['datadir'] = "%s/blog" % web_dir
# Where should PyBlosxom log files be kept?
py['logdir'] = "%s/log" % web_dir
# What should this blog use as its base url?
py['base_url'] = bits.get(host, {}).get('base_url',
"http://localhost/~zbir")
So that I don't have to change anything else about the system. I can rsync the entries, flavors, comments, and images and have exactly the same setup on my PowerBook. Very keen.
My Apache configuration directive on the PowerBook is contained in /etc/httpd/users/zbir.conf:
<Directory "/Users/zbir/Sites/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /~zbir/images/ /Users/zbir/Sites/images/ ScriptAlias /~zbir/ /Users/zbir/Sites/cgi-bin/pyblosxom.cgi/
The VirtualHost directive on the server is similar:
<VirtualHost 8.7.96.33:80> ServerName www.urbanape.com ServerAlias www.urbanape.org ServerAlias urbanape.com ServerAlias urbanape.org ErrorLog logs/www.urbanape.com-error_log CustomLog logs/www.urbanape.com-access_log common DocumentRoot /home/urbanape/html Alias /images/ /home/urbanape/html/images/ ScriptAlias / /home/urbanape/html/cgi-bin/pyblosxom.cgi/ RewriteEngine On RewriteLog "logs/www.urbanape.com-rewrite_log" RewriteLogLevel 1 RewriteRule ^/rdf10_xml /index.rss [P] </VirtualHost>
That last rewrite rule is to support feed subscribers that are subscribed to my old blog's feed. This way, they'll continue to work.
Lastly, to perform the actual synchronization, I wrote a dead-simple shell script, called sync_blog:
#!/bin/sh
RSYNC='/usr/bin/rsync -urvz -e /usr/bin/ssh'
BASE_LOCAL='/Users/zbir/Sites'
BASE_REMOTE='urbanape@urbanape.com:/home/urbanape/html'
echo 'Synching blog entries and templates... ' && \
$RSYNC $BASE_LOCAL/blog/ $BASE_REMOTE/blog/
echo 'Synching images... ' && \
$RSYNC $BASE_LOCAL/images/ $BASE_REMOTE/images/
This forces the sync from the PowerBook to my site. I still need to see whether/how this will affect comments. I don't believe it will, but it's worth testing.
After a brief look into static rendering of the site, I think I'm going to pass for the time being. It seems to prevent commenting. I'm looking for more information/example configurations that allow periodic static rendering, while still allowing for dynamic commenting.
So, I'm trying to make a fresh start. For the longest time now, I've been piddling away at trying to write blog software from scratch. It was going to be everything I needed from such software. I would write my entries in Mail, and they'd be sucked into a ZODB storage. The front-end would be easily templated in either Zope (2 or 3, it's gone through several iterations) or Twisted and Nevow (I'm still leaning in this direction), but practicality won over ambition. Time stretched out longer and longer between posts. There's so much going on right now that I've wanted to get out, but I've been so stubborn trying to get the system down first. I realized today that I'd rather write about my life than write software to write about my life.
So, I'm trying PyBlosxom, a Blosxom clone written in Python. While I'll maintain an interest in writing the software I want to use, it seems at least easy enough to get going.
I tried writing my entries with MarsEdit, a blog editor by Brent Simmons, of NetNewsWire fame. I'd been beta testing NetNewsWire 2.0, and MarsEdit is the blogging tool that was previously bundled in the software. Unfortunately, it doesn't play well with PyBlosxom, so I'm using my trusty text editor, Emacs with Hobo.
So much has been happening in the past several months since I've been blogging. Some quick recaps follow, from most recent to least.
I've just turned 31. My wonderful neighbors, friends, and family have loaded me up with presents:
- Gameboy Advance SP
- 007: Everything or Nothing
- Star Wars Trilogy DVD
- Isaac Newton by James Gleick
- Hackers & Painters by Paul Graham
- The Amazing Adventures of Kavalier and Clay by Michael Chabon
- The First Chimpanzee by John Gribbin and Jeremy Cherfas
- The Day My Butt Went Psycho! by Andy Griffiths
- Two new pint glasses from Montana
- A chimpanzee cookie
- Yellow Tail Shiraz
- Generous checks from the parents
I've joined a softball league. Right now I'm playing an outfield position, and I've gotten 6 R.B.I.s. We absolutely crushed the other team our second game, 13-2. Strangely enough, I don't feel nearly as out of shape as I feared I would.
Our upstairs renovation is coming along nicely. By year-end we will have gone from a two-bedroom, one-bath Cape Cod to a four-bedroom, two-bath dream palace. Our upstairs master bathroom will have a six-foot-long claw-foot bathtub, two pedestal sinks, one commode, and an eight-foot-by-four-foot shower with twin showerheads. So far, we've got the paint on the walls in the office, master bedroom, and walk-in closet, and the tile down on the floor of the bathroom proper. I laid all the tiles by hand, and poured the cement for the shower pan. Next up is finishing the shower area with Hardibacker and tile, and laying red oak tongue-and-groove hardwood flooring all throughout the upstairs. Then we'll pass plumbing and final inspection and can move in.
Amber and I took our summer vacation sailing for a week in the British Virgin Islands aboard a Sunsail Charter. She used to work for Sail Caribbean, who now charters with Sunsail, and we had a discount for their twenty-fifth anniversary. It was incredible. Ten days aboard a fifty-foot sailboat was just heaven. We spent quite a lot of time at the Baths on Virgin Gorda, secluded in Savannah Bay, snorkeling in the Caves on Norman Island, and partaking of too much rum.
I'm hoping that the ease of writing entries (even if in an interim fashion) will enable me to keep my friends up-to-date while I pursue my ideal goal of a home-grown blogging system.
