Blog update: December 31st, 2013

, | Tweet this

A few weeks ago, a friend of mine started a site called Nethack-a-day. It's fantastic---a Nethack game with color commentary one turn at a time. If you like Nethack, but haven't seen it, you're missing out.

As he was setting it up, he was looking at various systems he could build it with. I sort of wanted to say, "Yo, just use Pyblosxom." because I was pretty familiar with it (I spent the better part of 9 years maintaining it) and I knew it did 80% of what he needed. But I hesitated because I've been on the fence about switching to something else for a while now.

Then I committed a critical mistake. I said, "You know, Pyblosxom would be great for this, but how about I fix a handful of things first that'll make it easier to deal with." A handful of things turned into a massive overhaul of Pyblosxom ripping out a lot of the technical debt that had been accruing for years, re-imagining some of the bits I was never happy with and tweaking some things just because it seemed like a good idea at the time.

Thus was born Douglas.

Douglas resembles many of the static site blog generator systems written in Python that exist. That suggests it was a dumb idea to go and write it, but it has three compelling aspects that I think made it worth my time:

  1. It's derived from a blog system I maintained and thought about for a long time, so it has all the sorts of things I would want in a static blog generator
  2. I can continue to say, "I've been using the same blog system since 2002." Sure, it's not exactly the same system, but it's not like I have to go rewrite/reformat entries I wrote in 2002.
  3. It has a nicer callback system that I think makes it more malleable when it doesn't do exactly what you want by default.

Right now it's in an alpha state: the test suite doesn't cover enough of the software; the docs are mediocre and in some cases are filled with outright lies; there are a handful of issues; and there's still a bunch of technical debt and some architectural decisions that sucked and are increasingly difficult to work around.

Regardless, about a month, 102 commits and 9980 insertions and 22828 deletions later, I'm now switching my blog over to my new system. And that's how I'm going to end 2013.

Blog update: October 11th, 2012

, | Tweet this

I spent the greater part of my free time over the last two weeks reworking my blog.

Before it ran on Pyblosxom as a CGI process (yes---a CGI process). It had accrued a decade of sediment, redirects, hacks, hacks on hacks, etc (yes---a decade). It was kind of messy and---worse---it really impaired my ability to blog easily. That sucked.

Now it runs on Pyblosxom, but it's statically rendered with a post-receive hook from a git repository. The work flow for blogging is a lot easier and I can test things out locally before pushing them live. I also ditched a bunch of silly things in the blog.

I also ditched comments. I might at some point switch to using something like, but most of the time people were writing comments as a response or a reply to me---not intending to be part of a bigger discussion with other readers. Given that, I ditched comments. No sense in spending the time maintaining them if they don't really get used. Instead, email me.

Blog update

, | Tweet this

I updated my blog to use PyBlosxom from git master HEAD as well as updates to plugins that are now part of the PyBlosxom core. There have been a bunch of bugfixes, so my blog works a lot better now. I also abandoned a bunch of home-made plugins for their suped-up equivalents in PyBlosxom core.

I wrote a script that grabs my dents and generates local entries for them. I figured most people probably don't follow me on (which is a shame), so I'll bring it here.

Then I spent about 30 minutes tweaking the CSS to make the blog look a little better. It's not super, but it's good enough for now.

Migrated my server

, | Tweet this

I run my own server and have been for like 10 years now. It's moved around over the years. Most recently it's been at ServerBeach. A little under a year ago, they obsoleted the server hardware I was using and their pricing was such that I would have to pay more going forward. So I figured it was time to jump ship to a VM somewhere.

Not too long after that, I got to talking with Asheesh about my dilemna. He mentioned how he wanted to build a new server and run a bunch of VMs on it. I helped him pay for the hardware. He bought all the bits, put it together, and then looked around for somewhere to host it. He decided to park it at Cernio--they're fantastic.

In October, the new bluesock instance came up. I finally bit the bullet and did the migration from the old server to the new one yesterday.

There are probably still some things not working, but I think most of it is functional now.

Yay for migrations! Yay for friends! Yay for cutting my server costs from $1200 a year to $120!

Switching to using SyntaxHighlighter

, | Tweet this

I just switched to using SyntaxHighlighter. It's a JavaScript-based syntax highlighter. I decided to use this because I think it'll play well with Planets and my blog.

If you notice any problems, let me know. Only one of my entries uses it so far--I have to go back and update entries.

Comments have been broken

, | Tweet this

Rick kindly pointed out that comments on my blog were broken. Totally my fault--I've been working on PyBlosxom on and off and a couple of weeks ago I updated my blog to use the latest version of PyBlosxom in git master and didn't grab the latest comments plugin.

Comments were getting into the moderator queue (I moderate all comments), but when the comments plugin went to send me a notification email, it'd die.

They're working again.

Dealing with comment spam

, | Tweet this

Someone spammed my blog with 400+ comments for some shoes site. Took me less than 2 minutes to skim the emails, see the pattern, and then remove all the spam from my comments moderator queue. This sort of thing is the big strength of PyBlosxom.

I have my blog set up to store comments as individual text files in a comments/ directory. All comments have to be approved before they make it to the site. Approved comments end in .cmt and comments in the moderator queue end in .cmt-. Additionally, comments that contain one of a series of blacklisted words are rejected automatically. Any time someone posts a comment, I get an email.

It took me a minute to skim my 400+ emails and notice they're all kind of the same, 10 seconds to update the blacklist so that I won't get any additional comments like this in the future, and 10 seconds to remove all the spam from the queue with:

   for mem in `grep -rl spamwordhere *`; do rm $mem; done

That was it--spam gone in less than 2 minutes. Took longer to write the blog post about it.

Top 100 blogs?

, | Tweet this

Got a comment on a post about a conference call today that I'm a "top 100 blog" in Python. I'm not sure what the selection criteria was, but it looked legit-ish. Added their seal and link to the sidebar for now.

Moved Miro stuff over

, | Tweet this

I work at Participatory Culture Foundation and I have a work blog there that I use primarily for blogging about things related to PCF, Miro development, Miro-related development and other things of that ilk. It's on a WordPress system.

I decided after a while that having two blogs sucked. Also, I don't like Wordpress. Also also, I was getting crazy amounts of comment spam on my work blog.

As such, I did a couple of pushes to finish up PyBlosxom 1.5 enough so that I could write a tags plugin that I like so that I could migrate. Then I wrote a Wordpress to PyBlosxom migration script and the result is that I'm now blogging here for all Miro related things. Since it's easier to blog here, I'll probably be talking more about Miro-land. w00t!


, | Tweet this

I spent a few hours throwing together a new tags plugin that makes use of the new commandline features of code in PyBlosxom trunk (which will be PyBlosxom 1.5). Then I spent a while adding tags to all my entries.

I'm still mulling over my choice of tags, but I imagine I'll hone it into a set I'm happy with over time.

Also, I used :: as a tag separator, but I think I'd recommend something that doesn't require a shift key to enter. Perhaps ;; or //.

Tag information is stored in two dicts that are pickled and thrown in a file. It seems to be pretty fast to load for my blog (~500 entries). I picked pickle because it was easy, but if it turns out to be a problem, I'd be game for other storage formats.

I've been waiting for tags support before I did more blogging. Now that I've got tags support, I plan to move my work blog here. That'll make things easier and get me off WordPress.