WTF: Spamming the Competition

March 6th, 2009

So it’s been … oh, about a month or so since the launch of my share accommodation web site, and I’ve just received my first bit of spam via the support email address. I would’ve just deleted the email, except from the fact it’s come from a direct competitor to the site. An apparently Australian competitor at that. Check it out:

G’day!

Have you been worrying about looking for new share mate? Have you been tired of posting rent ads everywhere? Have you been upset about posting your Ad in some forum and soon could not find it again? So, what are you waiting for? Go to PostXDays now!

Have you been worrying about looking for a room for yourself? Have you been spending too much time browsing the forum but hardly find anything useful to you? So, get on to PostXDays right now!

PostXDays is one of the biggest and the most professional classified advertisement website in Australia for rent.

Do you know?
Everyday, PostXDays has more than 1000 visits, and more than 5000 ads be browsed!
PostXDays automatically provides Google map, which will help you to locate your rental property!
You can upload up to 8 photos for your rental property in PostXDays.
PostXDays has more than 30 descriptive items to describe your property, including around condition, furnitures, and so on, to show every feature of the property detailedly.

It takes only 2 minutes to post rental information on PostXDays.
On XYZ, you can search the rental information you want according to suburbs, price, and even more.

Thank you for all your support and we hope you enjoy the service from PostXDays!

www.postxdays.com.au

Now, this bit of spam actually pissed me off a little. There’s a certain level of arrogance required to spam direct competitors (I’m guessing by the nature of their site that this was no accident). So I wrote a bit of a response*:

Hi,

I don’t know why this email has been sent to me — I’ve neither heard of nor contacted any business called PostXDays nor its apparent parent company Tangram Trading Pty Ltd.

In light of this, you should be aware that it’s now illegal in Australia to send an email of this nature without the consent of the recipient (see the Spam Act 2003).

I find it particularly offensive to receive this email in light of the fact I go to certain lengths to obfuscate the email address(es) used on my web site. Even more bizarre is that you’re advertising a service that is in direct competition to the site I run.

Hopefully this is just a misunderstanding, but I’m CCing turboservers.com.au (which appears to be hosting postxdays.com.au) on this email to be sure that you’re not scraping email addresses off sites like mine: I don’t want my users annoyed nor the reputation of my site damaged by garbage like this.

Cheers,
Tom

Unbelievable. I’m *hoping* that this was just a one-off email and he’s not scraping email addresses off the site trying to directly divert users. It sholdn’t be too much of a concern, because ausroomies members communicate with one another using a contact form, so their email addresses are never made public unless they enter it into the listing description field (which some users unfortunately do). Still annoying though.

Anyway, more updates when and if they come.

UPDATE PostXDays was responsible for this spam. The following is a series of emails between myself and the hosting provider of postxdays.com.au which leave me wondering if they’ve got any reason to actually change their practices:

From: Turbo Servers Info
Date: 2009-03-07

Hi,

The email is definately not sent by Net Logistics. Was the sender indicated that the email sent by Net Logistics? Could you please forward the whole message (include the host header for us) to investigate further?

Regards,

Thu Nguyen, Support Technician
Net Logistics Pty. Ltd.
http://www.netlogistics.com.au

<My response to this email has somehow disappeared off the face of the planet, but it was something to the effect of “look at the headers, it came from postxdays.com.au — right down to the path of the PHP script that generated it”">

From: Turbo Servers Info
Date: 2009-03-07

Hi,

It is true that postxdays.com.au is one of our clients. It is violated our Term of Service that client hosted on our servers is sending out spam emails.
I will chase up our client on this matter. Thank you for informing us.
Regards,

Thu Nguyen, Support Technician
Net Logistics Pty. Ltd.
http://www.netlogistics.com.au

From: Thomas Lee
Date: 2009-03-16

Hi,

Do you have a status update? I’m concerned that my own users are still being affected by this, and have no real way to be sure.

Can you confirm whether or not your client’s script was scanning for email addresses on my site? Were other share accommodation sites impacted by this spam?

Cheers,
Tom

From: Net Logistics Support
Date: 2009-03-16

Hi,

I have already contacted our client and given them warning about this issue.
Could you please get back to us if you still receive those spam email?

Regards,

Thu Nguyen, Support Technician
Net Logistics Pty. Ltd.
http://www.netlogistics.com.au

Not exactly comforting.

Mail headers from the original spam:

Return-Path: <nobody@reventon.turboservers.com.au>
X-Original-To: xxx@xxx
Delivered-To: xxx@xxx
Received: from reventon.turboservers.com.au (reventon.turboservers.com.au [122.201.72.110])
	by ausroomies.com.au (Postfix) with ESMTPS id B422854173
	for <xxx@xxx>; Thu,  5 Mar 2009 02:28:53 +1100 (EST)
Received: from nobody by reventon.turboservers.com.au with local (Exim 4.69)
	(envelope-from <nobody@reventon.turboservers.com.au>)
	id 1Let4p-0006k8-FP
	for xxx@xxx; Thu, 05 Mar 2009 02:32:07 +1100
To: xxx@xxx
Subject: PostXDays -- Advanced Classified Ads Network
X-PHP-Script: postxdays.com.au/_admin/utility/dailyTask.php for 122.201.72.110
MIME-Version: 1.0
Content-type: text/html; charset=utf-8
From: PostXDays <info@postxdays.com.au>
Message-Id: <E1Let4p-0006k8-FP@reventon.turboservers.com.au>
Date: Thu, 05 Mar 2009 02:32:07 +1100
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - reventon.turboservers.com.au
X-AntiAbuse: Original Domain - ausroomies.com.au
X-AntiAbuse: Originator/Caller UID/GID - [99 32002] / [47 12]
X-AntiAbuse: Sender Address Domain - reventon.turboservers.com.au
X-Source:
X-Source-Args: /usr/local/apache/bin/httpd -DSSL
X-Source-Dir: postxdays.com.au:/public_html/_admin/utility

Categories: Life, Linux | No Comments

When Speed Matters

April 3rd, 2008

I’d be the first to tell you if, when confronted with a task that requires a degree of automation, you use a scripting language like Python, Ruby, Perl, Bash or some mix of the four. However, I recently had a problem that involved changing the permissions on a large number of files.

My initial approach used a small (10 lines or so) Bash script to traverse the filesystem hierarchy and change the permissions based on whether we were processing a file or a directory. The resulting script ran over more than 3000 files and directories in about a minute and a half. Which wasn’t exactly slow, but I had to run this script about twenty to thirty times throughout the day and it felt very unproductive to have to wait for a whole minute and a half before I could continue my work. So I did something crazy: I rewrote that little Bash program in C.

The resulting C program – of maybe 75 lines of code – finished in 1.3 seconds.

Initially I thought I had made a mistake, so I checked the processed files. They were all exactly as I expected them to be. I was astounded: I could execute this program almost 150 times before my old Bash solution finished even once! This decision made my day – the rest of my afternoon was much more productive. I even felt happier to know I wasn’t wasting so much time on something trivial and secondary to the actual task at hand.

Again, I’m not one to go preaching about how important performance is with respect to any given language – often it’s much, much easier to write a few Python/Ruby/Perl scripts and push data between them with some Bash glue. In this particular case, however, the choice of a lower-level language was clearly a massive win.

Even in retaining the pragmatic perspective, it really makes you wonder just how much time is lost to “inefficient” software stacks…

Categories: C, Linux, Software Development | 4 Comments

Passing Data Between GTK Applications With GtkClipboard

June 27th, 2007

GtkClipboard is a wonderful (if somewhat recent) addition to GTK. As you would expect, it allows users to pass data between your application and other GTK applications via the X11 clipboard (and vice versa). A common past annoyance with the clipboard under linux is that data stored disappeared from the clipboard when the application which set the data terminated. No longer so, thanks to gtk_clipboard_store and the GNOME Clipboard Daemon.

Now, tutorials on GtkClipboard are a little sparse and the documentation seems to leave a few questions unanswered, so here’s a quick and dirty primer on passing text data between your GTK applications using GtkClipboard.

Python

import pygtk
pygtk.require('2.0')
import gtk

# get the clipboard
clipboard = gtk.clipboard_get()

# set the clipboard text data
clipboard.set_text('Hello!')

# make our data available to other applications
clipboard.store()

Ruby

require 'gtk2'

# initialize Ruby's GTK bindings
Gtk.init

# get the clipboard
clipboard = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)

# set the text. Ruby-Gnome2 also provides a text= setter
clipboard.set_text('Hello, World')

# make the clipboard data available to external applications
clipboard.store

C

#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <string.h>

int main (int argc, char **argv) {
    const char *message = "Hello, World";

    /* initialize GTK */
    gtk_init (&argc, &argv);

    /* set the clipboard text */
    gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), message, strlen(message));

    /* store the clipboard text */
    gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));

    return 0;
}

You can also use gtk_clipboard_set_image (for Ruby and Python, there are equivalents) to pass GdkPixbuf data to the clipboard. Check the GTK/PyGTK/Ruby-Gnome2 documentation for more details.

It’s actually all quite easy, but I thought it might be nice to see the code in practice.

Categories: C, GTK, Linux, Python, Ruby, Software Development | 3 Comments

Locate & Install Ubuntu/Debian Package Build Dependencies

June 9th, 2007

I wanted to make a slight modification to the gaim source on one of my systems and found I was unable to build the application due to missing build tools and dependencies. Stumbled across this in an obscure thread in the Ubuntu forums:

$ apt-get source <package>
$ sudo apt-get build-dep <package>
$ (cd <package> && sudo dpkg-buildpackage -b -uc -d)

You’ll need to install build-essential for build-dep to work. If the stars are aligned, you should now have a ready-to-install .deb file. Install it using the following command:

dpkg -i <package>-<version>.deb

UPDATE 2009-04-21: fixed plurals and stuff … only took me about a year and a half to notice! Oh and thanks for your comment, Richard. :)

Categories: Linux | 1 Comment