Projects I’m currently working on

The site hasn’t seen much updates lately, but as usual there is a good reason for that. I’ve been busy working on several projects. Inquisitive readers might ask what those projects are. Well, let me reveal at least some of them.

One of the projects I’m working on is the Adobe Photoshop Lightroom Export Plugin,, initially developed by my buddy Jay. As not only the author but also user of both the Googlemap addon and the FTP security addon I needed to modify the Lightroom Export plugin to facilitate both GPS coordinates and the automatic opening and closing of both the image and the thumbnail folders. Currently we have a working copy which I use extensively in testing right now. Did I mention we also managed to squash some bugs while producing cleaner code?

The other project I’m working on is the aforementioned Googlemap addon. Since I began working writing code in a more OOP manner I could see how this approach could seriously limit the duplicate code currently found in the addon. I found a nice Googlemap API Class for PHP and intend to use that as a base to rewrite the addon yet again. All features of the (unpublished) third version will be retained, but it will be lean and fast thanks to the use of OOP practices.

Last but not least I’m also working on the new version of Pixelpost. Recently we added two more plugins dealing with both tags and categories. While testing and writing new things resumes we’re building the next-generation photoblog with a solid codebase.

What’s up with Pixelpost?


Every once in a while people ask us: “what’s up with Pixelpost?” The latest update was released at July 27, 2008 and they wonder about the current status.

Well, the truth is that the current release, 1.71, is pretty much rock solid and very stable (quite an accomplishment if you look at the code ;-) ). Security wise this has been one of the best versions thus far. However, we have made some minor modifications to the code since the release, but mostly we cleaned up the abundance of old code. Perhaps we will release this as an intermediate version between 1.7x and 2.x.

The last couple of months we basically didn’t do much with the old 1.x code. We spend most of our time on the new version: Pixelpost 2.0. This is going to be a complete rewrite compared to the old 1.x code and as you probably know, this will take some time.

On the forums I compared it to building a house. Let’s assume your blog is a house. Everyone likes a different style: some will like brick buildings while others are looking for a simple wooden house. But every house needs a solid foundation. The foundation is the most important part of the whole building. A house can be expanded/modified to your own taste as long as the foundation is solid.

This is an analogy for where we at with Pixelpost at this time. The main focus is building a solid foundation on which everyone can build what they like. For instance: if you want people to comment on your photos you add the comment plugin. If you don’t want comments and correspondingly no SPAM, just don’t install the comment plugin. It is going to be that simple.

If you look at the current 1.x codebase there is no way to disable comments since they are an essential part of the system. Even if you don’t want users to comment on your images it is likely you do receive SPAM comments, because the code for the comments is an integral part of the system.

So hopefully the new version will address all those issues (and much more in the form of plugins/modules, like multiple users, openID, better EXIF support and the list goes on and on). To accomplish that we have to provide a nice, clean foundation build for speed.

SPAM protection in Pixelpost


Over the last few months several threads have been posted on the Pixelpost forum regarding SPAM comments. In some of these threads the author boldly claims that Pixelpost isn’t stopping any SPAM. Well, since December 28th, 2006 I have installed a SPAMlog addon on my blog. Basically, what this addon does is keeping track if and why a comment is blocked.

First I think I have to elaborate on my settings, so here they are. I use the <TOKEN> setting from Pixelpost, along with a 30 seconds SPAMflood protection setting and a maximum of three URLS in a comment. Besides that I use the http://BL addon (more info about this addon) and I have installed Defensio addon for Pixelpost.

So now we know the configuration let’s show some stats from the last 743 days shall we?

It seems my photoblog received a total of 31897 comments (43 comments per day). A total of 2457 comments actually made it through the defensive lines of both Pixelpost and the http://BL addon. Defensio managed to catch 2256 comments as SPAM, so this leaves out 201 comments. It turns out that 70 of these comments were SPAM, but these slipped through before the Defensio addon was installed (The Defensio addon was installed a few months after the initialization of the SPAMlog).

These are the numbers, but what happened to the initial 31897 – 2457 = 29440 comments which were blocked by both Pixelpost and the http://BL addon?

Let me break that number down: Pixelpost internal measures took care of 17194 of these comments while the http://BL addon took care of the other 12246 comments. Basically this says that the measures in Pixelpost are capable of catching at least 50% of all SPAM comments.

So what is the internal Pixelpost method that stops most of the SPAM?

  • 887 comments contained words listed in ban or moderation list
  • 10379 comments used an incorrect token
  • 2 commenters waited too long before posting (30 minutes)
  • 156 comments were posted to rapidly in succession (SPAM flood)
  • 5403 comments contained too many URLs (3)
  • 114 comments contained an URL on the blacklist
  • 210 comments were not allowed (commenting disabled)
  • 41 commenters used an invalid e-mail address

As can be seen the token protection is responsible for 60% of the SPAM stopped by Pixelpost own defensive measures. Feel free to comment on my analysis.

Downloads are up again and some notes about the book


John Godley over at has released the updated DrainHole plugin, which is compatible with WordPress 2.7. This means the downloads are up again! Happy leeching everyone! :P

At the end of November I blogged about my idea of taking 40 of the highest rated images and turning it into a book. In the post I have described a method for selecting the highest rated images but there were some flaws in my reasoning.

So I took another approach, which is much easier. Let’s assume everyone who has visited my photoblog has voted, but (and this is it) people who didn’t vote actually voted zero stars. In other words, they didn’t found the picture worth at least 1 star. When we assume this, the selection of the images becomes easier because now we only have to select the pictures with the highest total. But to narrow the selection a bit down I have included another rule: an image must have at least 5 votes to participate. Perhaps you’re wondering why I enforce this rule? The reason is quite simple. This way I know at least 5 people found the image good enough to give a rating between 1 – 5 stars.

Furthermore, whenever there is a situation in which two or more images have the same total rating the image with the least votes will be given the highest ranking.

For those of you wondering what the SQL looks like (you do need to have the AjaxRatings addon installed and I assume the prefix of the tables is “pixelpost_“) I have it included below. As can be seen I also let the statement I used earlier (weighted ratings) in the SQL for comparison:

pixelpost_ajaxRatings.img_id, pixelpost_ajaxRatings.total_value,
pixelpost_pixelpost.body, pixelpost_pixelpost.image,
((total_rate/5)*total_votes) as weighedRating
FROM pixelpost_ajaxRatings,pixelpost_pixelpost
WHERE = pixelpost_ajaxRatings.img_id
ORDER BY pixelpost_ajaxRatings.total_value DESC, pixelpost_ajaxRatings.total_votes ASC
LIMIT 0,41

So, how does this look compared to my earlier approach? Well, the top 30 of my images stayed the same, some images shifted a bit but there were no real surprises. At the bottom of the list there were some small changes which has surprised me a bit. For instance: on number 37 (at the time of this post) was the Mosaic image I created containing the 200 images I had on my blog at that time. I’m not sure if I have a high resolution of the image lying around somewhere. In case I don’t I have chosen to omit this file.

Anyway, have a peek at the current output of the script.

Pixelpost addons cannot be downloaded


It seems the Drain Hole plugin used on this blog to manage the downloads of the Pixelpost addons is not compatible with the latest version of WordPress.

The author of the plugin has been notified of the problem and is currently working on a fix. I expect to have the downloads up and running pretty soon again. In the meantime, please be patient and keep your eye on this space to see if the issues have been resolved.

Thanks to everyone who bothered to notify me of this problem and once again my sincere apologies for the inconvenience.