Linkblog - 17.5.2004 - 11.6.2004

ASCII - ISO 8859-1 Table with HTML Entity Names - Reference tables for character sets and HTML entities

New image gallery plugin - needs testers - WordPress plugin for images in posts

The 'process' Python module - Process Management for Python - simpler than the standard functions

Threadframe: multithreaded stack frame extraction for Python - Easier debugging of multithreaded Python applications

microlen.htm - Discussions about macro photography lenses

Natural History with the Microscope as a Hobby - All about microscopy and microphotography

Depth of field, magnification and close-up lens calculator - Calculation of depth of field and magnification ratios

PyWork - Web framework based on Apache, mod_python, XSLT and ZPT

Xoltar Python Page - Functional Programming in Python

PS/2 and MCA History - History of IBM PS/2 Systems

PyPerSyst - Orbtech Wiki - Persistence for Python objects

digitale Fine Art Prints - Barytabzug - Iris Giclee Prints - exposure on baryta paper - unfortunately not really cheap

Schwarzweiss-Magazin Wollstein 6/2003 - Permanence of various photographic techniques

E-MailRelay -- SMTP proxy and store-and-forward MTA - general purpose SMTP proxy with its own spool handling and the ability to integrate external filters

fotoKASTEN - Digital photo development on the Internet

Yet another image printing service with an affiliate program

mtaproxy.py - Teergrube utuility for SpamBayes - Tarpit with integrated SpamBayes

Stopping spam with the Anti-Spam-SMTP-Proxy (ASSP) - SMTP proxy with Bayesian filtering, this one is without honeypot

Greylisting with Exim and PostgreSQL

Greylisting is a technique to reduce spam by temporarily rejecting emails from unknown senders. The mail server is then expected to retry sending the email after a short delay. Since most spam is sent by machines that don't retry, this is an effective way to filter out a large portion of spam.

I've implemented greylisting for my mail server using Exim and PostgreSQL. Here's how it works:

How it works

When an email arrives, Exim checks if the combination of sender, recipient, and sending server has been seen before. If not, the email is temporarily rejected with a "try again later" response. If the combination has been seen before and enough time has passed, the email is accepted and the database is updated.

Implementation

The implementation uses a PostgreSQL database to store the greylisting information. A simple table stores the sender, recipient, sending server, and timestamp of the last attempt.

Configuration

To enable greylisting in Exim, you need to add an ACL rule that queries the database and decides whether to accept or reject the email. The rule should be placed in the DATA ACL.

Results

Since I've enabled greylisting on my mail server, the amount of spam has decreased significantly. Most spam never retries, so it's never delivered. Legitimate emails are still delivered, just with a slight delay on the first message from a new sender.

Gallery :: your photos on your website - Interesting software for photo albums on the web

Photo Organizer - Feature-rich web photo album with a rather stylish default look

Silverlab Partnerprogramm - Photo print service with financial participation of the photographer

EditThisPagePHP - Edit pages online in PHP - Alternative for situations where a real CMS is too large and a wiki or weblog is too rigid in structure

Vellum: a weblogging system in Python - Nice little weblogging system in Python

drbs - Distributed Replicated Blob Server - Server system modeled after Google File System

GDL - GNU Data Language - Another one for the number crunchers

Maypole / Apache::MVC - Perl framework for creating web applications

mnot's Web log: Ubiquitious Fragment Identifiers - Interesting fragment link solution with CSS

paramiko: ssh2 protocol for python - SSH2 protocol implementation in Python

PYSH: A Python Shell - Shell that uses Python as a shell language

Acratech, Inc: Precision Machining & Photographic Equipment - Manufacturer and marketer of the Ultimate Ballhead

KODAK PROFESSIONAL READYLOAD Single Sheet Packs and Holder - 4x5 inch single sheet film cartridge system for easy sheet film use

The Contiki Operating System - System for computers with limited memory

Enblend - Blend images together without visible transitions - preliminary stage to panorama software

Haeufige Augenkrankheiten - Description of common eye diseases

Little Snitch - Reverse Firewall for Mac OS X - take a look when I have time

Noise Ninja 2.0 Beta - Noise reduction for digital images - now also for OS X

Xblend - OS X Frontend to emblend

randomthoughts: PyLucene - Lucene Wrapper for Python

NeuroKode Labs, LLC: remoteD - Interesting IPC solution: shared storage across process boundaries with dictionary interface

ASPN : Python Cookbook : Finding out the number of values the caller is expecting - Using bytecode disassembler to find out how many result values a function caller expects

WordPress Support › Static "like" pages - Discussion about creating pseudo-static pages (e.g. imprint) in WordPress

ASPN : Python Cookbook : Transactionable Objects - oversimplified idea for transactions on objects - not thread-safe, not stable

Python MQI Interface - pymqi. Version 0.5c - MQ Series Interface for Python - interesting in IBM environments

Releases | drupal.org - Download page for Drupal modules

Daring Fireball: Markdown Syntax Documentation - Interesting text conversion to XHTML for PHP and Perl - similar to reStructured Text

Nu Cardboard: Kangapy: Components

Another blogging software in Python - seems similar to PyDS

papercut.org - nntp server for the masses - NNTP server with flexible backend - integrable in forum software

Shrook 2 - RSS and Atom for Mac OS X - Yet another feed reader for OS X - similar to iTunes

Computation Streaming in Python - Interesting alternative technique to threads - particularly interesting for Medusa

entrian.com - goto for Python - goto for Python - GOTO and COMEFROM for Python