Czy ktoś zna algorytm obliczania masek, który Mark Zuckerberg zastosował w swojej witrynie na facemash? http://www.thecrimson.com/article/2003/11/19/facemash-creator-survives-ad-board-the/Algorytm Facemash
Najlepiej w PHP & MySQL.
Czy ktoś zna algorytm obliczania masek, który Mark Zuckerberg zastosował w swojej witrynie na facemash? http://www.thecrimson.com/article/2003/11/19/facemash-creator-survives-ad-board-the/Algorytm Facemash
Najlepiej w PHP & MySQL.
Nie wiem, jaki algorytm został użyty w prawdziwym świecie, ale to, co piszą w oknie w filmie, oparte jest na Elo rating system, który powstał w świecie szachów i jest teraz również używany w wielu inne gry.
Nie tutaj nie ma nigdzie w Internecie. Kod źródłowy programu Facemash nigdy nie został udostępniony publicznie. Jedynym, który może nadal mieć kopię, jest sam.
Odtworzyłem go i sprawdziłem. Nie wiesz o PHP, ale klasy C# jest
Używałem go na moim
klucz kod prasowej jest
$(document).keydown(function(event) {
if (event.keyCode == 37) {
//Voted Face 1
Rate("face1", false);
}
if(event.keyCode == 39) {
//Voted Face 2
Rate("face2", false);
}
});
Mówi "jak widać w The Social Network", ale wygląda zupełnie inaczej. W filmie jest gruby, czerwony nagłówek i biały kolor tła. –
jak zaimplementowałeś używanie klawiatury w lewo i prawo. czy możesz udostępnić kod? –
Wow ... Jak udało Ci się zdobyć tak wiele osób korzystających z Twojej witryny? @Luke –
<?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
?>
o to klon dostępnego facemasha http://www.facemash.99k.org
UPDATE:
Jak powiedziałem w komentarzach, Dodałem ten algerithm do mojej nowej stronie internetowej. Z początku wydawało się, że działa doskonale. Ale po kilku dziwnych danych zaczęły się pojawiać dziwne wyniki.
Podczas debugowania zorientowałem się, co robiłem źle. Otrzymując wynik dla "bezpośredniego związku" (używanego w pośredniej relacji) między 2 węzłami, dodałem razem wyniki. Było to źle, wynik bezpośredniej relacji należy wyrazić w -1 do +1, gdzie:
-1 = lost everything
+1 = won everything
więc jeśli wygrał 8 razy, B, a B wygrał 2 razy zgodnie wynik powinien być następujący:
(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
także nie wspomnieć o tym w oryginalnym wyjaśnienia, ale to wszystko jest o trójkątów. Kiedy więc spojrzymy na wynik pośredni, nie trzeba iść dalej niż 1 skok.
Witaj Peter, mam wątpliwości co do udostępniania tych informacji. W jednej ręce sądzę, że to informacje należące do ludzkości, dlatego muszę się z wami podzielić. Z drugiej strony są naprawdę duże firmy, które szukają czegoś podobnego do patentu, aby użyć go przeciwko ludziom takim jak ja. Przechowując go na własnym serwerze mogę zalogować wszystkich, którzy patrzyli na stronę i będą mogli z niego korzystać w sali sądowej, jeśli będzie to konieczne. Bardzo mi przykro, ale zachowuję to w ten sposób. – ikwillem
Dobrze, rozumiem. –
Zgaduję, że i tak tutaj dodałeś informacje. Dzięki. –
`Zaprojektowałem kod w Perlu z wyszukiwania google i działa.
Oto ona
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();
Mam odtworzył go jako dobrze, ale w WordPress plugin
http://codecanyon.net/item/pics-mash-image-rating-tool/3256459?ref=mikemayhem3030
dzięki! W takim przypadku znalazłem parę linków. PHP: http: //webscripts.softpedia.com/scriptDownload/ELO-Calculator-Download-11611.html i Python: http://github.com/gak/elo-rating-simulator/blob/master//elo.py – ma11hew28
To jest moje repozytorium github :) –