Web Playpen

Things I'm experimenting with.

Check out my bulge

Simple minds like simple things. I guess that's why I like basic geometric shapes like circles, triangles, and squares so much. What could be easier than assembling millions of different colored squares to create everything from works of art to the words that you're reading on your computer monitor right now? A different pixel here, a different pixel there . . . nothing much . . . child's play, really.

Another thing a child's mind delights in, for the purposes of this post, is optical illusions. I certainly remember that I liked them as a kid, and still do. Around the web you'll find many great optical illusions. One in particular that I like on that page is "A bulge". I like it because it contains nothing but squares lined up on a grid, yet manages to produce the effect of curved lines.

Needless to say, rectangular shapes are easy to produce with the box model of web layout. That's certainly the foundation of how I developed the basic Town Square spatial content system. So on a particular slow day I got around to reproducing the image using only div elements and a little CSS. Enjoy:

As an added bonus, the HTML (15984 bytes) is quite a bit smaller than the original image (59287 bytes). There are many other variations on the same theme that it would be easy enough to reproduce with the style sheet I have, or I could possibly animate the bulge using JavaScript. Let me know if you'd like to see anything else interesting done with this.

A spammer's dozen

As noted in my last post about email spidering, I changed the email contact for Impossibly Stupid to be a simple mailto: link. Here it is just over 12 days later, and I'm spammed already! Quite a bit sooner than the corporate email. Let's examine the data, starting with the important email headers:

Received: from mail.kz (frontend03n.mail.kz [92.46.53.18])
	by homiemail-mx7.g.dreamhost.com (Postfix) with ESMTP id 18F6CCF3EF
	for <info@waitingwatching.impossiblystupid.com>; Sat, 13 Feb 2010 04:54:54 -0800 (PST)
Received: from [213.154.94.76] (account mrszenila3@mail.kz)
  by backend01n.mail.kz (CommuniGate Pro WEBUSER 5.2.13)
  with HTTP id 2954844; Sat, 13 Feb 2010 18:54:56 +0600
From: "mrszenila" <mrszenila3@mail.kz>
Subject: I NEED YOUR  ASSISTANCE TO INVEST IN YOUR COUNTRY

Reading backwards, we have this mrszenila user account that is associated with an IP 213.154.94.76 which is, surprise, located in Africa (the Dakar, Senegal area). The actual mail server IP 92.46.53.18 looks to be out of Almaty, Kazakhstan, using what is likely a free email provider.

That's all good and fine, but it doesn't directly shine any light on how they got our email. A simple mailto: doesn't log anything on the server, so we have to dig at the logs a bit to find anything relevant to the above:


213.154.94.195 - - [12/Feb/2010:21:32:16 -0800] "GET / HTTP/1.1" 200 38080 "-" "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent"

That's it. That's the only hit from the entire 213.154.0.0/16 since I made my previous post. No site referral, no images were loaded, no links were followed, no indication of any kind points to a human actually looking at the page. Just the index grabbed, and then the spam a few hours later.

The conclusion is that spammers are still spidering for email addresses, just not very deeply. At least this site, anyway, which is already an oddly large target for comment spammers. The results might be different if I had chosen to run this experiment on index page of the corporate site. I may still do that, but I don't suggest you do unless you use some of the same techniques I do (e.g., disposable addresses).

The state of web spidering for spam emails

Since there haven't been any new notable organizations spamming the blog comments here in the last couple weeks (although there have been quite a number of repeat offenders), I'm going to pass along some observations about the good ol' fashioned email variety of spam.

I have a long history of fighting spam emails. I won't get into the details, but I was onboard with all the mainstream anti-spam efforts from the early days. Then something happened in 2005, which I also won't get into, that made me realize that a lot of the anti-spam people weren't much more than power-hungry goons who themselves were more interested in profiting from spam than eliminating it.

At the time, my main address was getting 5000+ spam/day. So I did the Impossibly Stupid thing of taking a step back from all the filtering and blacklisting and reporting and all the other machinery that has been thrown at the problem of email spam, asking myself instead what I, as a lone individual, could do to keep my inbox clean.

I now get maybe 1 spam/week. I do no filtering. I maintain no blacklists. My server only sees that one email, so there isn't much need to do anything fancy after the fact. I'm not really hiding my contact info, either. I even provide a clickable email link on web pages without a hint of JavaScript obfuscation. I did think up and use some new techniques to choke the flow, but this post isn't really about detailing them.

Instead, because my inbox was essentially cleared of spam for over a year, I decided to start an experiment. In November of 2007, I put up a web page on the corporate site that had a unique email address link in the clear. The question in my mind at the time was "Is web spidering even done to collect email addresses anymore?"

You see, the trickle of spam I was getting in my "real" email was easily traced by my new techniques. 99% of it was from Usenet posts; if I started using an invalid address there I'd essentially get no spam at all. Nothing was coming in via any web site I was on, but I wasn't certain if that was directly due to things I had done. So I put up an email address free and clear. Very retro!

Just now, 2 years and 2 months later, I saw the first spam to that email address. A couple more came in after that, and I'm going to keep an eye on whether or not the volume starts to take off. But the conclusion is pretty clear: there seems to be very little need to make people browsing your web site jump through a lot of hoops to get your email, because that doesn't appear to be how spammers are finding you these days.

Caveats abound, to be sure, but that's what I'm seeing. One obvious factor is that the web has gotten so large that it no longer makes sense to spider it all just to scrape out a new email address or two. It may be that they just hit the index page of most sites (my test email address was buried at least 3 clicks deep). I'm even going to test that out by making my main contact to the right a clear email address. Stay tuned for progress reports. If they're not even doing that small amount of spidering, you might have a long wait . . .

Are you with it, baby?

You've probably played games on your computer. You've maybe even played games in your browser. But have you ever played a game with your browser? This gets the Impossibly Stupid Seal of Approval:

Browser Pong

Recycling chaos: the entropy strikes back

A few months ago I added a Chaos Game implementation to the site. It was pretty slow, partly by design and partly by happenstance. When Apple recently released a new version of Safari with some impressive performance claims, I decided to revisit the code and see what I could see.

The initial version I wrote capped the drawing speed at 100 points/second. That was mainly because I didn't want it to overwhelm an OLPC, because I liked the educational aspect. Of course, that also limited the performance on machines that are very much faster, too. What I did was go in and change the code so that the update interval lengthened for slower machines.

Now if you go in and test it, it should be blazingly fast on better hardware. After you hit Stop, it'll display just how fast it was if you hover over the drawing area. On my machine, I get around 4000 points/second using Firefox 3.0.11. Using Safari 4.0, it gets around 15000 points/second; nearly the 4x benchmark that Apple lists. The OLPC comes in at a fairly pokey 300 points/second, and isn't very responsive otherwise, the poor thing!

It gets bigger when you touch it

Some work I've done on a project probably won't make it to the final version, so I'll drop it off here because it covers something I find impossibly stupid: image zoom/enlarge on the web. With high speed connections the norm, people think nothing of making larger images available, but they really should think more about how they make them available. Here are some things I find annoying about what sites commonly do (if I missed your own pet peeve, please add it to the comments).

Pseudo-zoom
If you have a 300x500 image normally, don't give me a 315x525 image as though it were a useful enlargement. Pick a web template that doesn't force you to provide more detailed images if you don't have them available. This has less to do with the technique and more to do with the source material, but I had to get it off my chest. By contrast, using a zoom itself might not be appropriate if there is a huge size difference between the two images; that calls for dealing with thumbnails, which is different from zooming.
Pop-up windows
I'm not a big fan of dropping extra windows on the user's screen. They are often blocked, although you'll probably be safe if they have to click to see the larger picture. The bigger problem is that they take the user away from the immediate page, so the context is lost (e.g., technical specs in one window, image of the part detail in another window).
Obscuring content
Some of the JavaScript libraries I've seen used accomplish the zoom by putting the larger view over some other part of the page that I'm still interested in seeing. In some ways it's like popping up a window, but it's worse because I usually can't move it somewhere else or control it in any way.
Elaborate and expensive
I suppose if someone is looking to ding you for a $40 JavaScript library they have to cram in a lot of features, but I don't think most users need an image zoom to be rocket science. What I provide here isn't a drop-in solution, but it gives a simple starting point to show how complicated it isn't.

So here is image zooming done impossibly stupid. A click swaps between a large and small picture bound to the same element. Mouse movement is followed so that the enlarged image tracks the small image proportionally. A click returns you to normal.

Using my half-beard image as an example also reminds me to remind you to vote in the beard poll! Time is running out! Only nearly four to eight years left!

Anarchy: good luck with that!

Some people have a hard time grasping that disorder can yield order, or that an impossibly stupid approach can yield beautiful results. Those people have clearly never heard of the Chaos Game. I bet you knew my earlier talk of fractals would get us here eventually.

Or perhaps you have heard of the Chaos Game, but you're just disappointed by the 10 year old Java applets around the web. For your amusement, I present what looks to be the first decent JavaScript version. Click in the drawing area to set your points, pick your decimal fraction to move, and let it go! Suggestions for improvements and/or bug reports are appreciated.

Note: my code attempts to use the canvas element to draw the dots. For browsers that don't support that, the code uses 1 pixel div elements. Having thousands of elements in the document for longer plots can potentially suck up a lot of resources. If you're going to let it run for longer than around 30 seconds, you're probably best served by using a browser with canvas support.

Update: the code has been modified since original publication as explained here

All for one, and one for all

Here is the first web toy/exploration of best practices for using JavaScript to do something that is very common: reducing information overload. There are many times when hiding information is just as important as showing it. There are many things that are all helpful to have on a web page, but are distracting if they're always in your face.

Being impossibly stupid, I'm just trying to find a reasonable way of adding the minimal amount of code to a page to accomplish that. For your amusement, here is my first draft. If you've found a better way, please let me know in the comments. Thanks!

Breaking out of the blog

A CMS is nice and all, but it can also be a bit of a pain if you want to add some content that isn't in the same style as everything else. I plan on doing a fair bit of that in this Web Playpen section, so let me start by taking the impossibly stupid path: trying out some obvious things and see what breaks.

The easiest thing to do is just jam all the special HTML/CSS/JavaScript into an iframe and be done with it. Since that does indeed appear to work with this CMS, I present you with my previous pseudo-personal site:

Syndicate content