Defensio 2.0 released!

January 22, 2010
pixelpost.png

This week the guys and girls from Defensio have released the 2.0 version of their API. Not only a SPAM filter, but Defensio can now eliminate malware and other unwanted or risky content from your blog. The best part is Pixelpost supports the latest API version through a new release of the Defensio addon for Pixelpost.

A major difference is the way content is evaluated. The old version depended on an instant results after querying Defensio, sometimes resulting in comments not being processed when the service was hammered with request. Therefore the content is now evaluated asynchronous, sending the content to Defensio which will provide a callback when the processing is done.

Initially all comments for Pixelpost make it into the Defensio Quarantine. These comments can basically have two statuses: FAIL and PENDING. The later means that the results through the callback are not in yet (you can issue a query to fetch them right away). The status FAIL means that for some reason Defensio could not be contacted (either the service is down or the API key is invalid or..). In that case you can send these comments to Defensio for an evaluation.

The major drawback of the 1.0 version of the addon was that each comment that had failed had to be rechecked manually. This issue has been resolved with the addition of a new button that processes every comment with a status of FAIL or PENDING for the last two weeks. Obviously the buttons to send either HAM or SPAM to Defensio remain in full effect.

For more information about the new Defensio checkout the “What’s new with Defensio 2.0?” or the video below. You can also download the latest plugin for Pixelpost.

Comments
1 Comment »
Categories
Programming
Tags
, , ,

Strange behavior GoogleMap addon when using EXIF GPS coordinates

October 14, 2009
googlemaps.png

Today I managed to get to the root of a problem I have been trying to eliminate for some time now. It all has to do with the “use the EXIF coordinates” feature of the GoogleMap addon for Pixelpost. It seemed when using this feature the location magically shifted a few meters or even more.

When using reverse geocoding for latitude and longitude values Google Maps focuses on nearby (and sometimes not so near by) “points of interest” or the closest address it can find. This behavior can be changed by changing the following Javascript function function showLocationLatLng().

Change the code of that function to:
function showLocationLatLng() {
var latlng = new GLatLng(document.forms['view-latlng'].lat.value,document.forms['view-latlng'].lng.value);
editMap.addOverlay(new GMarker(latlng));
editMap.setCenter(latlng, 16);
}

This will force the addon to use the exact location of the image provided in the EXIF.

Entrypage addon updated

August 6, 2009
pixelpost.png

Today a new version of the entrypage was released because a bug related to the optional URL parameters was fixed.

Please get your new copy of the addon over at the plugin page. Please consider a donation for my time and efforts in maintaining these plugins.

Comments
No Comments »
Categories
Programming
Tags
,

SPAM protection in Pixelpost

January 10, 2009
pixelpost.png

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

December 21, 2008
camera.png

John Godley over at UrbanGiraffe.com 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:

SELECT
`pixelpost_ajaxRatings`.`img_id`, `pixelpost_ajaxRatings`.`total_value`,
`pixelpost_ajaxRatings`.`total_votes`,`pixelpost_pixelpost`.`headline`,
`pixelpost_pixelpost`.`body`, `pixelpost_pixelpost`.`image`,
((`total_rate`/5)*`total_votes`) as weighedRating
FROM `pixelpost_ajaxRatings`,`pixelpost_pixelpost`
WHERE `pixelpost_pixelpost`.`id` = `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.