Thursday, September 30, 2010

But Don't Swans Have Very Pointy Toes?

OMG, OMG, the Great Chinese State Circus does "Swan Lake".

The whole video is worth seeing, but if you want to understand very quickly why I say OMG, OMG, skip ahead to 3:00 and watch for 20 seconds.




Author website: J. J. DeBenedictis

Monday, September 27, 2010

Troll Bouncing



Okay, that may have worked. I guess I'll find out soon enough.

Recently, there's been someone I...haven't cared to listen to particularly. And so, I idly scooted around the internet and thereby learned that no, there isn't any good way to ban people from your blog when aforementioned-blog is hosted on Blogger. You can delete comments, screen comments, restrict comments to a certain group of people, but you can't--for example--slap a "COOTIES!" sticker on someone's IP address.

There's no good way to ban someone, but after some experimentation, I found a way. As I'll explain later, it's not particularly robust protection, but it may be better than nothing.

So here's how to quasi-ban someone so they can't view your blog:

~~~~~~~~~~~~~~~~~~~~
Troll Bouncing Instructions

1) You do need the troll's IP address, which is a pain because Blogger doesn't give it to you.

However, if you have a hit counter service such as StatCounter, you may be able to figure it out. First, check the time stamps on the blog comments your troll has made.

Next, go into the statistics of your hit counter service and try to figure out which commenter has visited your blog at the same time as all those comments were left. Unless you have a high traffic blog, you might be able to sort out who your troll is.

Once this is done, record their IP address. You will need it later.

2) Now you're ready to wield your ban-hammer, flimsy as it is. To do so, you will need the following code:
~~~~~~~~~~~~~~~~~~~~

<!-- BEGIN TROLL BOUNCING -->
<script src="http://www.jjdebenedictis.com/ipnab.php"></script>
<script>
var ip=getip();
if (ip=="xxx.xxx.xxx.xxx")
{
window.location="http://www.dailysquee.com";
}
</script>
<!-- END TROLL BOUNCING -->

~~~~~~~~~~~~~~~~~~~~
Just so you know what this does, the first line returns a function containing your blog visitor's IP address via a bit of code on my personal website. (If my website goes down, this fix will stop working.) The rest of the code tests to see if the person visiting your blog has the same IP address as the troll, and if so, it bounces them to another website.
~~~~~~~~~~~~~~~~~~~~

3) Now log in to blogger and go to your "Dashboard" (where all the controls are.)

Up at the top, click on the "Design" tab, then click "Edit HTML". (See the image below.)



4) You see that heading that says "Backup/Restore Template"? I recommend you click "Download Full Template" and save the file to your computer before proceeding. That way, if something goes wrong and your blog gets borked, you can restore it by uploading the saved file.

5) In the section labelled "Edit Template", look in the code for the <head> tag. Once you've found it, insert a few spaces just after it and then paste in the code from Step (2) above.

6) Now: See the little xxx.xxx.xxx.xxx in the code? You have to replace that with the IP address of your troll.

By the way, if you want to ban more than one person, you would replace

if (ip == "xxx.xxx.xxx.xxx")

with

if (ip == "xxx.xxx.xxx.xxx" || ip == "yyy.yyy.yyy.yyy")

for two trolls or

if (ip == "xxx.xxx.xxx.xxx" || ip == "yyy.yyy.yyy.yyy" || ip == "zzz.zzz.zzz.zzz")

for three trolls (and so on), where the x's, y's and z's get replaced by IP numbers.

7) I recommend you preview the page just to make sure things look normal. Remember, the only person who is supposed to see something weird is the troll. Everyone else, including you, should just see your regular old blog.

8) If everything looks completely normal, save the changes and log out. Your troll has hopefully now been bounced.

(By the way, if you leave the IP address as xxx.xxx.xxx.xxx, then no one is going to trigger it, i.e. you can put the code in now and defer adding an IP address until you have someone you want rid of.)

9) If you want to test the code is working, put your own IP address into it and try to get to your blog. If you can't, then hurray! The code works. Go back into your blogger dashboard (which you won't be blocked from) and delete your IP address from the code to restore your access.
~~~~~~~~~~~~~~~~~~~~

So what exactly, you ask with concern, is the troll going to experience? After all, we are kindly, moral creatures here and would not wish harm upon our trolls.

Well, when they try to view your blog, they will instead get taken to The Daily Squee, where they can frolic among photos of adorable puppies and kittens. (Or eat them. I don't know. Whatever trolls do when they're confused.)

Okay, now the caveats.

This form of banning is stupidly easy to evade. For obvious reasons, I won't explain how to do it here, but anyone with even a modest understanding of how these things work can get past this sort of defence in five seconds flat.

Furthermore, some people's systems are set up in such a way they won't even notice you've done this.

So this isn't a good way to handle smart trolls, but thankfully some of the more obnoxious ones don't fall into that category. As long as they also fail to be lucky trolls, you're cooking with diesel.

Second caveat: Even if this works, someone who reads your blog via an RSS feed probably can still view your blog contents that way. They just can't show up and leave comments anymore.

Third caveat: As those who know how to get around this can attest, your troll may find that some of the time it can access your blog and sometimes it can't. With more hit counter snooping, you may be able to block their other means of entry.

One last note: The code should work on any HTML based webpage including blogs not hosted on Blogger. Just make sure you put the code right after the <head> tag and substitute in the troll's IP address correctly.

Happy Troll Bouncing!


PS - Brave New World, who recently left blogging due to trolls, suggested a very elegant alternative to the method mentioned above. It prevents the troll from accessing the comments form, but not from reading your blog. The troll might even be fooled into thinking the problem is with Blogger! This method is a little harder to implement, but here's how to do it:

1) Go into your template. Make sure to click the "Expand Widget Templates" option.

2) Do a search for "comment-form". Change <div class='comment-form'> to <div class='comment-form' id='comment-form'>.

3) Add the following script AFTER the <!-- end outer-wrapper --> comment:
~~~~~~~~~~~~~~~~~~~~

<!-- BEGIN TROLL BOUNCING -->
<script src='http://www.jjdebenedictis.com/ipnab.php'/>
<script language='javascript'>
var ele = document.getElementById("comment-form");
var ip=getip();
if (ip=="xxx.xxx.xxx.xxx")
{
ele.style.display = "none"
}
</script>
<!-- END TROLL BOUNCING -->

~~~~~~~~~~~~~~~~~~~~

4) Of course, change the "xxx.xxx.xxx.xxx" to whatever IP address you want to block from commenting.


PPS - Oh, and, um, if you're specifically having trouble with this person, email me at jen_deben ~at~ yahoo ~dot~ ca and I can give you their IP address.


Author website: J. J. DeBenedictis

Sunday, September 26, 2010

Boiling Light

My first thought was, "Wow, that's beautiful."

My second thought was, "Hmm. Climbing ropes aren't susceptible to wearing out on rough rock, but they do melt easily, y'know..."




Author website: J. J. DeBenedictis

Wednesday, September 15, 2010

Don't His Stone Cajones Weigh Him Down?

I used to rock climb. And I thought being window washer on a skyscraper would make an awesome summer job.

But this? No.



Link via io9.
The video keeps getting yanked, so if you got to see this before it is once more, yay!



Author website: J. J. DeBenedictis

Sunday, September 12, 2010

Making Bookselling a Game


Today's post will show signs of brain-fry, that non-life-threatening condition brought on by too many hours spent failing to make a computer program do what you want it to.

However, my case of brain-fry is actually related to what I want to talk about today.

A week or so ago, someone (I've forgotten who; blame the brain-fry, and please remind me if you know) had a discussion on their blog about how to self-pimp (i.e. market yourself/your book) without making people roll their eyes.

The point this writer made was that social networking is about community, and if you do nothing except stump for your product, you are creating noise-pollution for the (few) people who are still listening to you and thus you're wasting everyone's time. Call it the classic "teaching a pig to sing" exercise: It doesn't work and it annoys the pig.

And that's a good point, but what I wanted to discuss was the thought I had while was reading that post. It ran along the lines of, "Well, ads don't give people anything they want. That's why the audience rolls their eyes."

This thought sent my brain rollicking off on a tangent. How can an advertisement give the audience something they actually value?

First, I'll back up and note that some ads do give the audience what they want, but these must be exquisitely well-targeted ads. For example, if I'm definitely in the market for a flying car, and you give me a pamphlet telling me all the specifications for your flying car (now on sale), then you're doing me a favour. The ad gives me something I really do want and potentially need, and the chances of me buying your flying car have now jumped. It's a win-win situation for seller and customer.

Some advertisements give you something you want that is unrelated to their product. The Isaiah Mustafa ("I'm on a horse") Old Spice ads are a perfect example of this. They give you a few seconds of genuine entertainment in addition to the advertising message. A lot of ads strive to do this.

Many advertisements try to convince us on the spot that their product is something we want or need, and thereby try to turn themselves into a well-targeted ad. The problem is, when these ads fail, they become a "teaching a pig to sing" exercise. E.g. If I don't own a television, then you can't sell me cable, and trying to do so just irritates me.

Now back to the discussion.

Imagine you're an author with a new book. To try to drum up enthusiasm for the book, you use Twitter to tweet about the upcoming release date or link to some good reviews.

This is arguably porcine voice lessons. Here's why: Those tweets can fall into just a few categories for the audience:

1) I didn't know that! I want to buy your book, so this is useful information to me!
2) I already knew this, but you're my friend and you hope I'll do you the favour of passing this information on. I will!
3) I already knew this, but you're hoping I'll pass it on. However, I already have, and I don't plan to continue doing so indefinitely.
4) I already knew this, and I planned to buy your book anyway, so I don't need to hear the message again.
5) I don't plan to buy your book so I didn't need to hear this.

Reactions (1) and (2) are the only outcomes you want, but with enough repetition, reactions (3), (4) and (5) are going to be the only ones you're getting.

How do you change this? How do you self-market without annoying people? What can authors do that provides the audience with something they want in addition to the message of the ad (which is, of course, "HI! MY BOOK EXISTS AND IT IS A GOOD BOOK.")

A book trailer has to provide something beyond just an ad for a book. It needs to be funny, interesting, touching or beautiful. Ideally, it should provide a little of what the book provides more of and ensure the audience knows where to get that "more of" should they desire to.

A bookmark/pen/author-bobblehead provides the audience with an item of value along with its advertising message. I don't personally consider these to be good ways to advertise books, because the item itself doesn't tie its worth to the book. You can't tell if a novel is good based on its title, and a pen doesn't have room on it for much more than that. A bookmark might, but it's probably still not enough.

A pamphlet with an excerpt of the book would provide a better way to convince people of the book's worth, but it's only going to be read if you provide it to people already in a situation where they might idly be looking for something to read--perhaps on the bus or in a cafe. Then you're providing them something they want.

Now the reason for my brain-fry.

I remember an author recently had a personality test you could take online to find out what sort of wizard from his series you would be (and I can't remember the book or the author's name--more brain-fry. Sorry.) (UPDATE: It was Brent Weeks! Thanks to Josh for having a better memory than me.)

Over and above whether you were interested in the book, the test was pretty fun. I thought it a sincerely clever idea, in the way that the "I'm on a horse" ad was clever. The audience got some enjoyment out of the advertisement itself.

So I've been exploring the possibility of creating a Flash game as an advertisement for a book.

The problem is, I staunchly believe book marketing by the author should be done on a shoe-string. There's darned little money in publishing; DON'T SPEND ANY if you can avoid it.

And a lot of freeware programs for creating flash animations kinda suck. I may break down and get a 30-day free trial of the real deal, but that means I can't "try" it again later.

When, y'know, I might have a real book out.

~~~~~~~

Got any ideas for how to make an advertisement for a book into something the audience wants regardless? I'd love to hear your thoughts! (Also, any cures for brain-fry you might have, especially if they involve applications of chocolate.)


Author website: J. J. DeBenedictis

Wednesday, September 08, 2010

A Big Chunk of My Life's Solidity is Vaporware

View out the porthole

An embarrassingly-long time ago, a fellow student in university was making money designing websites for people. He remarked to me one day that as soon as you got high speed access (as opposed to using a modem), it changed how you used the internet.

Suddenly the internet was a tool you could work with more or less constantly, instead of something you got in touch with only when you needed it. Easy access changed how you thought about the internet.

Just a few days ago, I made the marvelous discovery that I could read a programming book I needed from the library online. This was particularly wonderful because the library was actually closed that day, and I didn't have to wait--I didn't even need to change out of my slippers and bathrobe.

Today, the library's website is having difficulties. I can't get to that book.

And it's such a weird feeling. Yesterday, I had that book. Today, it's not there. This feels like having your cutlery evaporate or something. I am so used to the internet--and all its candy--simply being there.

All its candy and all its resources, I should say. If my email provider lost my address files, I couldn't contact a whole mess of really important people in my life. I don't have their email addresses memorized; I rely on someone else's server instead of my own brain or even a scrap of paper kept in my own home. It's so easy to think that it's just there. Where I left it.

Like that book I was reading yesterday.


Author website: J. J. DeBenedictis

Tuesday, September 07, 2010

Those Are Some High Seas

Security footage from a cruise ship.

I don't know whether to laugh or to feel really, really guilty about laughing.



Link from Geekologie


Author website: J. J. DeBenedictis

Monday, September 06, 2010

Not Safe For Work

Okay, I don't mean to be turning into the YouTube spammer here, but I found this really funny. Behold a parody of James Blunt's song "Beautiful" for the office: "My Cubicle".



Thanks to FairyHedgehog and Richard North for the link on Twitter!


Author website: J. J. DeBenedictis

Ask a Geek - Quantum Mechanics 2


Okay, last geek-post for a while! Next Monday I'll talk about something else, but you're welcome to keep asking me questions about anything physics-related.

Today I'll talk about some of the most ooky-spooky aspects of quantum mechanics. If you haven't read last week's post, you probably should hit that one first, because I'll be building on those ideas here.

At the heart of quantum spookiness is the idea that before you collapse a particle's waveform, it doesn't behave like a particle. It behaves like a zillion quasi-ghostly particles located in every possible location that they can be located in.

Including, in principle, every single corner of the entire universe.

However, let me point out that the chances of a particle existing very far from where you think it's supposed to be drop off extremely sharply, so realistically, there's no chance a particle located in your left nostril will, upon having its waveform collapse, abruptly find itself on Pluto. The possibility that it could is built into our math, but that outcome is effectively impossible.

However, particles do sometimes wind up where they're not supposed to be thanks to a process called quantum tunneling.

To explain this idea, let me first give you a sketch of what the difference between an electrical insulator (like glass, wood, or helium) and an electrical conductor (called a metal) is.

Here's a picture of an atom:


And here's a picture of a bunch of atoms:


Look at the orbits that the electrons (in blue) take around the atoms' cores. Whatever this material is, it would be an electrical insulator because the electron orbits for any two adjacent atoms don't touch one another.

But here's what happens when they do touch one another:


Whoa, dude--psychedelic!

See how the orbits have joined together? Now an electron can zip from one atom to the next quite easily. Electricity (which is simply a bunch of electrons in motion) flows well through this material, so we call it an electrical conductor, a.k.a. a metal.

(Just as an aside, this tendency for electrons to move easily through metals is also the reason why metals are shiny. Light is an electromagnetic wave, and it is reflected most effectively by freely-moving electrons. Hence, electrical conductors look shiny--i.e. metallic--and electrical insulators don't.)

Now, let's look at that insulator again, because it provides the perfect environment for quantum tunnelling to occur in.


The electrons attached to these atoms can also move from one atom to the next; it's just a lot harder for them.

You see, the black lines I've drawn in are just the electrons' approximate orbits. In truth, the electrons can be located anywhere within a "cloud" that centres on these lines. The chance of finding an electron way out on the edge of the "cloud" is very small--but it's not zero.

And so, every now and then, an electron will ride out to the edge of its "cloud" and hop over to the next atom. This phenomenon is called quantum tunnelling because the gap between atoms acts like a barrier, and the electrons need to burrow through it. The bigger the space, the less likely the electron will make it.

The semiconductors used to create the microchips in your computer actually rely on tunnelling. Without the freakishness of quantum mechanics, you wouldn't be on the internet right now!

But all that? That's just child's play compared to the really spooky thing that quantum mechanical particles do. What I'm about to discuss now (and it'll take a while; sorry) is sometimes called quantum teleportation.

Say you have a big hefty particle that is unstable. At some point it breaks down ("decays") into two daughter particles.


Certain quantities in nature must be "conserved", which is just a way of saying that what goes in must come out.

For example, if you have a pie and you cut it in half, all the pie is still there. The pie is conserved! If the pie had 753 blueberries in it, you will still have 753 blueberries after you cut the pie. The berries are conserved!

And, in a fundamental way, even after you eat the pie, the pie is conserved. It might be in a different form now, but all of the pie still exists in our universe.

One of the quantities that nature conserves is a weird thing called "spin". It's called "spin" because that's what it seems to be--some quantum particles behave as if they are spinning.

And I call this fact weird because some of those quantum particles--like the electron, for example--appear to be point particles. That is to say, we've tried and failed to measure the size of an electron--as far as we can tell, it is infinitely small.

And yet electrons have "spin". But if an electron has no size, what exactly is spinning?

I haven't got an answer for that and neither does anyone else. Spin is one of those properties where your instructor waves her hands vaguely and says, "It just acts like that. No one knows why...yet."

So I'll wave my hands (...these are not the droids you're looking for...) and gloss over it also. Spin just is.

Now back to quantum teleportation! When a particle with no spin decays into two particles, sometimes the two daughter particles also have no spin, and sometimes they have opposite spin.

Quick: give me a thumbs-up. (But only if you're right-handed.)


Physicists refer to spin as "spin-up" or "spin-down". This is just a reference to the way your thumb points when the fingers of your right hand are curling counter-clockwise (thumb points upward, so "spin-up") or clockwise (thumb points downward, so "spin-down".) It's a handy (har, har) way to keep track of which way the particle is spinning.

(In fact, spin can point any direction, but for simplicity, we usually pick the direction it's actually pointing in and call that either spin-up or spin-down, then measure other particles relative to it.)

If the parent particle had zero spin, and one of its daughter particles has spin-up, then the other daughter particle must have spin-down. That's the only way to "conserve" spin in this case, because the "spin-up"ness and "spin-down"ness cancel one another out--they add to zero.

But what the heck has that to do with quantum teleportation? After all, we just want to get to "Beam me up, Scotty," don't we?

Remember that the waveform of the particle doesn't collapse until you observe it. Until you take a measurement, the particle acts like a composite of a zillion different particles all behaving in their own unique way.

And a particle's spin is likewise unknown until you actually observe it. Until you've measured the spin, it doesn't point up or down--it points in all directions simultaneously.

Quantum teleportation isn't like the teleportation you see on Star Trek, but it is cool, and here's why: Imagine a parent particle decays into two daughter particles with opposite spins, and the decay happens in such a way that the two daughters shoot off in different directions.

A thousand kilometres away, you capture one of these daughter particles and measure its spin.

You have an equal chance of finding it to be spin-up or spin-down, so let's say you measure it to be spin-up this time.

But! Before you made your measurement, the spin didn't have a well-defined direction. The waveform hadn't collapsed yet, so the particle was simultaneously spin-up and spin-down.

Meanwhile, a thousand kilometres away in the other direction, someone else has just captured the other daughter particle.

Before they measure its spin, their particle acts as ours did--like a particle whose waveform has not yet been collapsed and is thus simultaneously both spin-up and spin-down.

But when that person does measure the second daughter particle's spin, they will find it to be spin-down. It must be spin-down because we found its sibling to be spin-up! Nothing else will allow spin to be conserved.

And this fact scared the crap out of physicists when it was first discovered.

You see, if the second person measures their particle's spin an instant after you measure yours, then the particles had to somehow communicate with one another faster than the speed of light allows!


Basically, this is teleportation--not of matter, but of information. Nothing in our universe is supposed to travel faster than light, and yet these two particles just coordinated their spins instantaneously over massive distances. That isn't supposed to be possible.

(Also, just so you know the lingo, the two daughter particles are said to be "entangled" when they behave like this. Physicists have done entanglement experiments, and although the "massive distances" involved are only about 30 metres, this phenomenon is verifiably real.)

Now you may be thinking, "Heeeeey now... Are you sure you physicists aren't just fooling yourselves?"

After all, I keep going on about how a particle's waveform doesn't collapse until it's observed, but how do I really know that? I'm talking about what's happening to this thing before I've looked at it.

So maybe the waveform really does have a well-defined spin and I just don't know it. That would make the instant communication of the two daughter particles an illusion. In reality, they would have organized their spin-up/spin-down positions at birth and just kept them.

In fact, this whole scenario that I've described was proposed by Einstein, Podolsky and Rosen as a way to poke holes in the idea that the waveform doesn't collapse until after it is observed. Einstein famously described this apparently instant communication as "spooky action-at-a-distance", and he considered it absurd.

Of course, being Einstein, he was predisposed toward thinking nothing could travel faster than light, wasn't he? Father of relativity and all that.

But then a fellow named Bell showed (mathematically, which means I'm just going to wave my hands and hope you believe me) that it isn't possible for there to exist some unknown mechanism to allow the two daughter particles to only seem to be in instant communication.

Bell found if you try to insert a very generic term into the equations to account for this unknown mechanism, you wind up getting an inequality. (Where an inequality is something like "1 does not equal 3"; it's pretty hard to argue with a blatant inequality.)

The orthodox view of physicists today is that quantum mechanics does allow instantaneous communication between "entangled" particles. We don't know what the mechanism for this is, but for now, that's our most conservative and logical explanation. There is always the possibility that as we learn more, we will discover a less "spooky" reason, but we aren't there yet.

The reason why entanglement is sometimes called quantum teleportation is because one elementary particle is identical to every other. There is no way to tell electrons (for example) apart.

So you can, with a bit of brain-flexing, think of ways to use entanglement to effectively move a person instantaneously across huge distances. In a practical sense, the process is impossible, but we can at least dream it, even if our understanding doesn't (currently) allow it to really happen.

The idea here is you would first entangle every particle of your body with the sister particles in a doppelganger of you that had been built far, far away. Then, you somehow observe every particle in your body.

The states of all the particles in your doppleganger would then become identical (but opposite) to yours, and since the "oppositeness" of most particles doesn't matter to biology, the doppelganger would instantly become you.

Or at least a copy of you. It's all pretty creepy, actually, but it would potentially allow humanity a way to explore space. Astronauts wouldn't so much travel as be cloned in distant locations, and then the clone could be re-cloned here on Earth to report their findings.

Which is...brrr...just not something I'd volunteer for.

~~~~~~~

As always, please feel free to ask questions or request clarifications in the comments. I'm also happy to having crazy brainstorming sessions about how you can turn these ideas into stories!


Author website: J. J. DeBenedictis

Sunday, September 05, 2010

Boing, Boing

If this doesn't make you grin, your face might be paralysed.



Shamelessly yoinked from Cute Overload


Author website: J. J. DeBenedictis

Saturday, September 04, 2010

Paper Unleashed

Yow, yow, yow--here are some gorgeous examples of artists creating art from paper rather than on paper.

Click the image to be taken to a gallery of photos.



Link found via Perry A. Wilson's twitter.

Update of OMG:
Aspiring_X just pointed out some even more amazing papercut artwork! Click the image below to see Peter Callesen's incredible work!





Author website: J. J. DeBenedictis

Thursday, September 02, 2010

Congratulations to the Practical Vampire Slayer!


The human animal is arguably better at spotting a good idea than coming up with one. I mean, innovation is hard, but when you spot a person doing something that's just plain smart? You recognize that almost instantly.

Several millenia ago in internet-time, I spotted someone doing something I thought was brilliant. It was Claudia Cunningham, and she had a blog about practical vampire-slaying.

What she meant by "vampire", however, was all those people who sap the life and energy out of you--that neighbour who constantly asks for favours, the friend who belittles you regularly, or the co-worker who schleps part of their workload onto you whenever they can get away with it.

And Claudia had things to say about how to deal with these people that were just plain smart. She had eye-opening analogies and respectful-yet-firm tactics for dealing with these "vampires" such as concrete advice on how to say no and ways to prevent someone from using your politeness against you.

So I was delighted to hear Claudia had gotten a book deal! An idea this good needs to become a book.

Today is the release day for Biting Back: A No-Nonsense, No-Garlic Guide to Facing the Personal Vampires in Your Life. (By the way, you can pre-read a bit of the book at that link.) I recommend you check it out!

The book's available from many venders, including Barnes and Noble, Llewellyn the publisher, and of course Amazon.

Congratulations, Claudia, and I hope Biting Back is a stake-wielding success!


Author website: J. J. DeBenedictis

Wednesday, September 01, 2010

Wookie the Chew

My head may have just exploded from having been exposed to a deadly combination of cute and awesome.

From artist James Hance, Star Wars characters reimagined as Winnie the Pooh characters:



Link found via Boing Boing

UPDATE OF OMG: There is a book version available!
Thanks to Adam Heine for spotting the additional awesomeness!


Author website: J. J. DeBenedictis

Pageloads since 01/01/2009: