The Ego-Boosting HotOrNot Project

 

Table of Contents:


 

Overview

HotOrNot is a community site which allows users to upload images (or, more importantly, link to images hosted elsewhere) and then have those images rated by other users. Part of their money-making scheme is that there is the option to meet the other users, which costs the user $6. In order to enforce this, you aren't allowed to include e-mail addresses or other contact information in your image. Before your image is able to be rated, it must pass through the moderators who check the image for undesriable qualities - nudes, grossness, contact info, etc.

Hence, the challenge: get an image through the moderators that includes contact information.


 

In Depth Description

Obviously we will have the image hosted on a website we can control. Together with a method to identify who is who when looking at the image and a method to specify who gets what image, the challenge will be met. Hopefully.

 

Identifying the User

Luckily, HotOrNot is set up very nicely for us - the moderators' hits all seem to come with referer ids of http://mod.hotornot.com/ and regular users all seem to come with referer ids of http://www.hotornot.com/. Using the HTTP HTTP_REFERER variable, we will be able to tell who is who. We can also couple this with the REMOTE_ADDR to keep track of moderators, in case they come at us later on from a different referer.

In perl, you can refer to:
$ENV{'HTTP_REFERER'}
and
$ENV{'REMOTE_ADDR'}

and in PHP you can refer to:
$HTTP_REFERER
and
$REMOTE_ADDR

You'll wanna check and make sure those are defined too, sometimes there is no referer.

 

What to Serve? What to Serve?

My co-worker Joe had previously written a script that would rotate a webpage after its first view. Why? In order to confuse someone - he wrote a webpage about them and told them to look at it. That person got upset by the page and sent the url to friends, who looked at the page and saw a completely different page. Ah, the tricks of the information age...

Instead of waiting for a moderator to view the image and then rotating it to a new one, i wrote a script that serves a particular image to a moderator and a different image to a user. This was made easier since i already serve many of my images through a script, using apache's AddHandler and Action directives.

For apache, add something like this to your httpd.conf (the configuration file):
Action get-image /path/to/script
AddHandler get-image .jpg

Joe has informed me that these directives can also be added to an htaccess file so that you don't have all your images being served with the added overhead of a script.

I originally served all my images through a script so i could control who looked at them - if the viewer didn't have a referer in the blackant.net range then the viewer would not get the image - and also so i could invisibly serve up an image inside a webpage - if you went to something.jpg you would get something.jpg inside an html page. That way i had a bit more control over who was looking at my images (people referencing them from offsite would be denied) and at how the image was being presented (you would always get an image with a bit of surrounding html, including links to the rest of the site and any applicable caption). The second reason was the most valuable to me - the presentation of an image is quite important - but i don't remember why i stopped implementing this.

I currently serve all my images through a script so i can control missing images. Instead of getting a broken link, you will always be presented with a special "not available" images. I forget why this was important to me, but it was important at the time. You can see this in action by clicking on this random (most likely) non-existing image.

Now i added a little bit more to my image serving script. Before serving an image, it checks if the image in question is my hotornot image. If it isn't, it goes on with its regular image serving tasks. If it is the hotornot image, then we determine whether the viewer is a moderator or not. If it is a moderator, then an acceptable image is served, and it is isn't a moderator then we can serve up the not-so-acceptable image.

And that's that.

 

Give Me More To Do!!

But can't we improve on this a little? What if we keep serving up different images to a specific viewer?

Serving up one image versus another was the goal of Joe's project, and something that Rex was also working on. They both use techniques similar to the above. I decided to serve different images to the same viewer, so that the first time they looked at the image url they would see one thing, the second time they looked at the same image url they would see another, etc. etc.

My script also logs how many times one IP has viewed the image, and the image that gets served depends on the number of times viewed.

Now we've gotten somewhere: moderators get a good image and others get a series of one, two, three images.

 

Can We Go Further?

So we can get them to cycle through a couple images if they reload the page. That's a big if which means they might not notice that the image is changing. Can't we make it less interactive?

If the viewer is using a browser other than Internet Explorer then we can use push technology to feed the viewer a series of jpegs. This can be connected to a live camera or it can be connected to a script pushing different jpegs. One of my accounts pushes the 3 images while the other does the live feed. If you are not using IE, then here are the pushed jpegs and here is the live feed (due to the nature of live events, the live feed may be down).

Here is a snippet of code from the perl CGI man page:

#!/usr/local/bin/perl
use CGI qw/:push -nph/;
$| = 1;
print multipart_init(-boundary=>'----------------here we go!');
while (1) {
    print multipart_start(-type=>'text/plain'),
          "The current time is ",scalar(localtime),"\n",
          multipart_end;
    sleep 1;
}

Instead of printing text you can print jpegs and thus push the client a series of jpegs which will appear animated. If you try this, view the image inside a webpage or else you may get very very strange results.

Now if the viewer is using IE we serve up a different image for each reload. If the viewer isn't using IE we push a series of jpegs. And if the viewer happens to be a moderator, we serve up a single, appropriate image of me.

Beautiful.


 

Asides

First, I don't really care too much about HotOrNot. I do find it to be a fascinating phenomena, along with all the other websites that have come up alongside it. Here's a partial list:

I guess these sites give people something to do while at work, but personally, i don't care what rating i get on HotOrNot; from what I've learned about most people, I'm hoping they don't find me attractive.

 

Second, why oh why do websites let me change the Terms of Service? When i created my HotOrNot account, i noticed that their terms of service were in a textarea - a common mistake. This lets me change the terms of service to something i really agree to. I changed them to:

whatever francisco luis roque wants to do will be valid.
additionally, he may at any time take over control of
hotornot.com and all associated finances. he may also
charge the company $100 for each time he views the site.

You can see a small photo of this here, and a larger view here.

 

Another reason i wanted to serve my images via script was so that i could serve different browsers different images. I didn't want text-only browsers to be left out, so i was going to serve images converted to text to text-only browsers, but i never got around to implementing that.

 

Viewers coming from an IP already marked as belonging to a moderator cannot read this text; they get a different spiel about the project. I wouldn't want them to find out about my Plans...


 

Results

As of Thu Jan 10 13:48:49 EST 2002, I have a rating of 5.5, with 24 ratings in. You can rate the photo (or just see it in action) at: http://www.hotornot.com/r/?eid=KMK8H8B&key=NJT but i don't think this will last more than a couple weeks.

I had a bit of a mix-up right at the start of this project. At first I thought that all moderators were coming from a certain range of IP's, but then realised that it was based on referer, not IP. So the first moderator actually saw the changing images, and was looking at them right as i was striving to get the new script (which looked for referer, not ip) in place. This moderator proceeded to look through my site. I checked on the status of my image a few minutes later but the moderator hadn't either allowed or disallowed the image through - it was still listed as pending moderator approval. A bit later i noticed that a couple other moderators had looked at the image, and that my script was working - they had attempted to reload the image a number of times and had gotten the same image each time. I checked the status of the image and it was active.

I'm guessing the first moderator thought my (as of then failed) attempts were humourous and e-mailed some other moderators about it. The other moderators checked it out but didn't see anything wrong with it, so one of them approved it.

So far no HotOrNot viewer has seen the image past the first one - i was hoping that after the rating they might notice a change in the image in the smaller version (rate someone and you'll see what i mean) - so perhaps i'll have to make a more obvious change to the image. As a result, right now i feel the first part of the project (getting an image through the censors) was a success, but the second part (changing images) has been a failure.

For now i'm more curious as to how long i will be able to pull this off. I wonder when a moderator will figure out what is really going on, and what will happen then. Only time will tell, but if anything Bad tries to happen, at least i haven't violated the Terms of Service i signed.

My two accounts flutter between the status of REJECTED and AWAITING MODERATOR REVIEW, with brief periods of ACTIVE. I think viewers see that something funny is up with my image and keep clicking on the link indicating something's wrong.

Still, even when it's in a REJECTED status, people seem to be getting to the image from www.hotornot.com.


 

Conclusion

This project was a waste of time, but a fun waste of time.

Perhaps the image-changing approach can be used in a different method - i can server specific images to specific people, perhaps i could serve you a site with only images of yourself (like Being John Malkovich).

I wonder how many people would notice if i served up slightly different images each time they looked at the site. I could place "You've already seen this image - move on" over the image. But that wouldn't really accomplish anything.

Hopefully a Good Purpose for this technology will emerge in the near future.