Est-ce que quelqu'un connaît l'algorithme de masque facial que Mark Zuckerberg a implémenté dans son site de masque facial? http://www.thecrimson.com/article/2003/11/19/facemash-creator-survives-ad-board-the/
De préférence dans PHP & MySQL.
Je ne sais pas quel algorithme a été réellement utilisé pour le site du monde réel, mais ce qu'ils écrivent sur la fenêtre du film est basé sur le système de notation Elo , qui est originaire du monde des échecs et est maintenant également utilisé dans de nombreux autres jeux.
METTRE À JOUR:
Comme je l'ai dit dans les commentaires, j'ai ajouté cet algorithme à mon nouveau site Web. Au début, cela semblait fonctionner parfaitement. Mais après quelques entrées étranges, un résultat étrange a commencé à se former.
Pendant le débogage, j'ai compris ce que je faisais mal. Lors de l'obtention du score pour une "relation directe" (utilisée également dans la relation indirecte) entre 2 nœuds, j'ai ajouté les scores ensemble. C'était faux, le score d'une relation directe devrait être exprimé de -1 à +1, où:
-1 = lost everything
+1 = won everything
Donc, si A a gagné 8 fois contre B et B a gagné 2 fois contre A, le score devrait être:
(A wins) 8 + (B wins) 2 = (total matches)10
(delta of -1 and +1 =) 2 / (total matches)10 = (points per win) 0.2
Score of A vs B = (points per win) 0.2 * (wins) 8 - 1 = 0.6
Score of B vs A = (points per win) 0.2 * (wins) 2 - 1 = -0.4
De plus, je n'ai pas mentionné cela dans l'explication originale, mais il s'agit de triangles. Donc, quand nous regardons le score indirect, vous n'avez pas besoin d'aller plus loin que 1 saut.
Je l'ai recréé et vérifiez-le. Pas sûr de php mais la classe C # est
Je l'ai utilisé sur mon
Le code de pression des touches est
$(document).keydown(function(event) {
if (event.keyCode == 37) {
//Voted Face 1
Rate("face1", false);
}
if(event.keyCode == 39) {
//Voted Face 2
Rate("face2", false);
}
});
<?php
//This page is responsible to return a JSON object
//code starts after the functions for those who might get confused xD
header('content-type: application/json; charset=utf-8');
global $responseData;
function AdjustRate($Ra, $Ea, $Sa)
{
//i used my own rules here 32 points for less than 500
if($Ra < 500)
$k = 32;
elseif ($Ra < 1000)//24 points for anything between 500 and 1000
$k = 24;
else
$k = 16;//16 for anything more than 1000
return $Ra + ($k*($Sa - $Ea));
}
function GetExpectedChance($rA, $rB) // the ELO formula taken from http://en.wikipedia.org/wiki/Elo_rating_system
{
return (1/(1+pow(10,(($rB-$rA)/400))));
}
function setNewRates($lastCall) // function I used to update my database tables
{
global $responseData;
$A = $lastCall->p1;
$B = $lastCall->p2;
$C = $lastCall->c;
$A->E = GetExpectedChance($A->rate, $B->rate);
$B->E = GetExpectedChance($B->rate, $A->rate);
// decide who won and who lost
if($A->id == $C){
$winner = $A;
$looser = $B;
}
elseif ($B->id == $C) {
$winner = $B;
$looser = $A;
}
// 3 cases, in all of them winner will get his rate/hits increased by 1
//Case #1: normal case we just update rate/hits for the winner, this applies all the time
$winner->rate += 1;
$winner->hits += 1;
//Case #2 / #3 : here we should adjust the rate after applying case #1
// if he won while he is expected to lose OR if he lost while expected to win
// there should be minimum rate different of 40 between the two
$diff = abs($winner->rate - $looser->rate);
if($diff >= 40 && ($winner->E < 0.5 || $looser->E >= 0.5)) {
$winner->rate = AdjustRate($winner->rate, $winner->E, 1);
$looser->rate = AdjustRate($looser->rate, $looser->E, 0);
}
// update the db to update rates, hits for both winner and looser
$updateQuery = 'UPDATE user SET rate='.$winner->rate.',hits='.$winner->hits.' WHERE id=' . $winner->id;
mysql_query($updateQuery);
$updateQuery = 'UPDATE user SET rate='.$looser->rate.' WHERE id=' . $looser->id;
mysql_query($updateQuery);
// Save to responsedate
$responseData->winner = $winner;
$responseData->looser = $looser;
}
//CODE STARTS HERE :)
// Setup the mysql connection
include 'db.php';
// Part 1: calculate the rate and save to db, if we have a lastcall
// GET the last call data object, it has p1, p2, c, these are the items i recieved from my javascript ajax call
$lastCall = json_decode((string)$_GET['lastCall']); // it was a JSON object so i need to decode it first
// Save last call data, will be sent with the respond as well
$responseData->lastCall = $lastCall;
// if there is a json object, means that there was a rating process and I have to set the new rates
if($lastCall->c != NULL)
{
setNewRates($responseData->lastCall);
}
// Part 3: Select new persons and addthem to our responseData
$q = Array();
$q[0] = 'SELECT id, name, sex, rate, hits FROM user WHERE fm_status=1 AND sex="female" ORDER BY Rand() LIMIT 2';
$q[1] = 'SELECT id, name, sex, rate, hits FROM user WHERE fm_status=1 AND sex="male" ORDER BY Rand() LIMIT 2';
// girls or boys ?
srand(mktime());
$query = $q[array_Rand($q)];
$result1 = QueryIntoArray($query);
$responseData->user = $result1;
// Part 4: encode to JSON/JSONP string then respond to the call
$json = json_encode($responseData);
$json = isset($_GET['callback'])? "{$_GET['callback']}($json)" : $json;
echo $json;
mysql_close();
// by Noor Syron :)
//I used this in my www.mimm.me
?>
`J'ai conçu le code en Perl à partir de la recherche Google et cela fonctionne.
Voici
use strict;
use warnings;
use WWW::Mechanize;
use LWP::Simple;
sub images()
{
my $mech = WWW::Mechanize->new();
my ($site,$count,$file,$dir);
print "\t\t\tDesigned By NUMWARZ GAMING\n\n";
print "Enter the name of the site you want to search for images\t:\n";
$site = <STDIN>;
print "Enter the folder where you want to save this\t:\n";
$dir = <STDIN>;
open my $doc, ">" , $dir."sitelist.txt";
$mech->get( $site);
my @links = $mech->images();
$count = 0;
for my $link ( @links )
{
$file = $dir.$count.".jpg";
mirror($link->url,$file);
print $file," : "$link->url,"\n";
print $doc $link->url." ".$file."\n";
$count+=1;
}
close $doc;
exit;
}
images();
voici un clone de facemash disponible http://www.facemash.99k.org
Non, pas ici, nulle part sur le Web. Le code source de Facemash n'a jamais été rendu public. Le seul, qui pourrait encore avoir une copie est Mark Zuckerberg lui-même.
Je l'ai également recréé, mais dans un plugin WordPress
http://codecanyon.net/item/pics-mash-image-rating-tool/3256459?ref=mikemayhem30