Archive for the ‘Uncategorized’ Category.

Year 2008 Metrics

I worked a lot on my site(s) in 2008. I started a couple of new open source projects, and started experimenting with advertising to counter my hosting and domain costs. Oh, and I switched jobs.


I made a new release of M2Crypto. I also updated my Caltrain schedule applications, both the Python and online version.

I created a Caltrain schedule application for the Google Android platform. I also created a simple office resource finder.

I also created a Pylons project, although it isn’t Open Source:

Check the list of my software projects.


I started blogging pretty regularly around January. It wasn’t until I asked to be included in the two Python planets that my blog traffic skyrocketed. Someone seems to be submitting almost all entries to those planets to Reddit, which brings additional readers.

I also wrote a number of articles on how to run Linux on various laptops and submitted them to Linux on Laptops site, which seems to bring in a fair amount of traffic. Linux on Laptops has been a great resource for me over the years, so I am glad I am finally contributing to the effort as well.

My most popular blog posts include SSL in Python 2.6, Pythonic application deployment and how to use decorators to add arguments.

Below are the raw statistics for my main site:

month	#reqs	#pages
Jan	4303	2647	++
Feb	9524	5846	++++
Mar	7626	5542	++++
Apr	9281	6677	+++++
May	9469	7363	+++++
Jun	8549	6787	+++++
Jul	12690	9282	+++++++
Aug	25567	18250	+++++++++++++
Sep	38036	27645	+++++++++++++++++++
Oct	96574	56477	++++++++++++++++++++++++++++++++++++++
Nov	54221	38583	++++++++++++++++++++++++++
Dec	58537	41648	++++++++++++++++++++++++++++


Google AdSense statistics show over 15,000 impressions (I started in the summer), which have resulted in about $10 of advertising revenue. At this rate it will take about five years to get the first check from Google. Quite disappointing, but in retrospect understandable: the topics I write about tend to interest people like me who are pretty unlikely to even notice the ads.

Dreamhost referral links have been clicked something like 500 times, but nobody has signed up. Again, a bit of a disappointment, but after doing some searches again understandable, since there are pretty good promotion codes out there.

Amazon has been the most disappointing. Just a handful of clicks and no purchases. I will probably be phasing that out in 2009.

I also briefly experimented with an AdSense competitor, but realized quickly that splitting the small ad revenue between several ad providers would mean even longer wait for the first check.

All in all, the results are so insignificant that unless something drastic happens in 2009 I might as well get rid of the ads since managing them does add a little bit of work (not to mention the addiction of checking the statistics to see how much you made at any given time period).

Problems Publishing: Blank Page

I was unable to publish new posts since early December, 2008. Hitting Publish button just gave a blank page. There were no Javascripts errors in browser console. Scheduled publish did not give any errors, but wouldn’t publish either. I read several posts about blank pages, but none of them matched what I was experiencing.

In the end I found it was two problems, although at first I thought there was just one problem. An upgrade of WP Super Cache plugin (0.8.6) had made it impossible to post. But at the same time, an upgrade of WP Widget Cache made it so that attempt to post would result in blank page. In fact many other actions would also result in blank page, like trying to delete posts and do some other administration functions.

After I deactivated and reactivated the WP Super Cache plugin I realized the .htaccess rules had been in error, but deactivate and reactivate fixed this. I was then able to post, but I still got the blank page, and was still unable to do many other actions. I finally went and deactivated a plugin at a time until I found I was able to do everything. It turned out WP Widget Cache upgrade (0.25.1?) was the culprit. I left the WP Widget Cache plugin deactivated for now.

The pattern of error I was seeing in Apache error log was this:

[Mon Jan 05 23:33:25 2009] [error] [client]  File does not exist: .../, referer:

Sorry for the blog spam during my attempts at fixing this.

Undocumented Gotcha with Drupal Installation

I have had an idea for a website for a couple of years. I registered the domain, and never got anything else done. Until now.

Since it seems like a content management system matches the requirements the closest, I did some investigation into content management systems. I host at Dreamhost, and they offer two popular CMS systems in one-click installs: Joomla and Drupal. There are lots of other options too. I decided I did not want to write a custom CMS from scratch, and figured I’d try how far I can get with popular off-the-shelf systems. Wikipedia has some lists and comparisons of CMS software, but the nicest comparison tool I found was cmsmatrix. I looked at some Python options as well, but I didn’t want to go with Plone or any Zope-based system; I am just assuming they are too heavy for Dreamhost’s shared hosting. And they don’t really have a reputation of being easy.

In the end I decided to try Drupal. Besides being an easy install at Dreamhost, the modular architecture is appealing. And while I suspect I won’t be modifying Drupal itself, it has gotten some reputation of being rather well designed. I have read some problems about database connections being too slow on Dreamhost, so I will need to keep an eye on performance.

Installation was an interesting experience. I read the Dreamhost Drupal wiki page, which pointed to an installation video. I think this is the first time I have watched a video on how to install something. Seemed simple enough, but I actually got stuck in a spot: the 6.6 installer requests that you copy sites/default/default.settings.php to sites/default/settings.php and ensure it is writable by the web server account (which in case of Dreamhost is just your user account). Even after the copy I was still getting the error message that I needed to do this. I then made it world writable, with no difference. I found the INSTALL.txt and read through that with no clues. I did a bunch of searches to see if others had seen it, but no luck. I read other people’s install stories, and by luck happened to notice someone mentioned you need to chmod 755 the settings file. Doh! That did the trick, but nowhere in the installation instructions did I find any mention that this file needs to be executable.

I have still tons of configuration to do before the site becomes even remotely useful. I am also on the lookout for a horse-related theme. These themes seem to be surprisingly rare. Maybe most people who are into horses aren’t into computers, and vice versa.

Tinderbox on Dreamhost

Tinderbox is a tool that helps software developers run continuous builds and tests. There are other similar tools, like Buildbot, which I actually prefer over Tinderbox. The problem with Buildbot, though, is that it requires continuously running processes and these are not allowed under Dreamhost’s shared plans. Luckily Tinderbox does not require a continuous process, so it is suitable for Dreamhost.

I wrote the Tinderbox on Dreamhost wiki page on the Dreamhost wiki detailing the instructions.

Yearly Donations to Open Source Projects

For the past few years I have taken the habit of financially supporting some of the open source projects whose products I use. I of course support the projects in many other ways as well, for example by reporting bugs, sending in bug fixes, advocating for open source software and helping other users of open source software. But in the end even open source projects need to pay bills. And it wouldn’t feel fair for me to make a living using open source tools without giving some money back as well.

This year I decided to donate to:

Some of the others that I considered include Gnome, Eclipse, Apache, jQuery, Pidgin and Enigmail. I also considered SQLAlchemy and Pylons, but didn’t actually notice any way to donate to these two. I also considered Mozilla Thunderbird, but there does not seem to be any way to target a donation to Mozilla to Thunderbird specifically.

In previous years I have supported at least the following projects and organizations:

  • Wikipedia
  • mozdev
  • The Python Software Foundation
  • The Electronic Frontier Foundation (ok, so not a software project but well aligned)

In some cases I have donated money directly, in other cases I have bought merchandise that benefit these projects. I am sure I have donated to about half a dozen other projects as well, but I just can’t remember for sure which ones. Which is one of the reasons for this post, to help me keep track of where I have sent money and to get some ideas where to contribute next year.

Have you contributed to your favorite open source project yet?

Update: SQLAlchemy does accept donations, right from the homepage (scroll down) as was pointed out in the first comment. So I made a small donation to SQLAlchemy as well.

Free Usenet News Servers for Comcast Customers

I have been a Comcast customer for years without major problems. But Comcast is shutting off Usenet newsgroups access completely at the end of October 2008, which is a real bummer. I am already paying quite a chunk of money for internet and definitely don’t feel like shelling additional bucks for something which, frankly, I have always expected to be provided by an ISP. I even checked some competitors, but the ones I checked couldn’t offer comparable speeds for my location.

I want to use Usenet newsgroups from my desktop news client, which excludes things like Google Groups. But I remembered a great resource for finding free access to Usenet newsgroups: Free Usenet News Server Index. Finding read-only servers was never much of a problem. Previously when I checked the before mentioned resource I was unable to find a server that allowed posting, but this time the first one in the “Best Overall” category voted by users turned out to work for both. It also happens to include the groups I care about. So for the time being I am content.

Another great resource for people who prefer Usenet newsgroups over mailinglists is Gmane, which turns mailinglists into newsgroups you can access with your favorite newsreader. I wonder if there is a tool that would make web forums accessible with a newsreader…

Some Blog Maintenance

Over the past week or so I spent some time hunting for WordPress plugins I have found useful on other blogs, and while doing so I stumbled into a handful of other useful-sounding plugins.

The one thing I probably find most frustrating about blogs is that once I have taken the trouble to post a comment on someone’s blog, I tend to promptly forget where I did so, and will miss any answers to my comments. So I was really happy to find the Subscribe to Comments plugin. Now when you post a comment on my blog, you can request emails to be sent to you if and when there are replies.

I also like the related posts features many blogs have. At first I tried one plugin (I forget the name), but it occasionally gave no output, and occasionally put output on the blog home page. I then found the Similar Posts plugin, which has worked fine at least in my tests. Time will tell if I’ll stay with it.

Security being close to my heart I was happy to find AskApache Password Protect, which can write all kinds of advanced .htaccess files for your blog to prevent unwanted access to your blog. The name is a little misleading, since it can do more than provide just password protection. Unfortunately some of the features don’t seem to work for my blog, for example the password protect features and a few of the other “safe” settings will just render my blog inaccessible. I haven’t yet tracked down the causes to these.

I was also on the lookout for a plugin that would enable me to fix the keywords and descriptions for each of my posts, and while there were several alternatives I settled on All in One SEO Pack. It actually let me fix a few additional issues I was not even aware of.

I tried two different plugins that were supposed to make my blog mobile friendly, but in both cases this seemed to play badly with caching. If a mobile browser hit a post first, then all subsequent viewers – even on desktop – were served the mobile version, and vice versa. So I am still on the lookout for a good mobile solution that works with WP Super Cache.

And speaking of caches, I also installed WP Widget Cache and Plugin Output Cache, although I am not yet convinced they help much.

While I was in the maintenance mode, I also cleaned up the PHP templates a little from some experiments I had tried earlier. And before I actually started on these plugin experiments I wrote a little backup script to rsync my blog directory and dump the blog database so that if something went wrong I could easily recover. Dreamhost provides backups too, but the hourly interval was not enough for my needs when I was testing several things in an hour.

PS. This is my 101st post!

Cool New Layouts

I have worked on my blog layout a little bit. I started from the Fluid Blue theme, but it had way too small text for may taste. I generally don’t like pages that touch the default text sizes. So I removed nearly all text size changes from the stylesheet.

I also liked the RSS feed icon in the old layout, so I added one to this theme as well.

One major thing that I still want to do is to provide better layouts for mobile devices. Even though the current theme is somewhat fluid, it does require a minimum width that is not available in most mobile devices. I’d like the sidebar to drop to the bottom if the window width is too small.

Finally there are quite a few browsers to test to make sure everything looks decent. Maybe I’ll eventually get to a state where I could release the theme.

I also gave a face lift for the Dead of Winter RPG campaign pages by using by Matthew James Taylor‘s excellent liquid layouts. To make this easier I expanded my earlier Python script to write the headers and footers for all of the pages instead of just splitting the long journal into manageable chapters.