Facemash своими руками
О Facemash.com Вы наверняка могли слышать из фильма «Социальная сеть»: это именно тот проект, который принес славу Марку Цукербергу и сподвиг его начать работу над Facebook. Сейчас мы попытаемся создать свой Facemash. Тег Рекомендую использовать программу Notepad++, лично мне в ней работать очень удобно и приятно.
Итак, создаем «Rate.php»
include('mysql.php');
include('functions.php');
if ($_GET['winner'] && $_GET['loser']) {
$result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
$winner = mysql_fetch_object($result);
$result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['loser']." ");
$loser = mysql_fetch_object($result);
$winner_expected = expected($loser->score, $winner->score);
$winner_new_score = win($winner->score, $winner_expected);
//test print "Winner: ".$winner->score." - ".$winner_new_score." - ".$winner_expected."<br>";
mysql_query("UPDATE images SET score = ".$winner_new_score.", wins = wins+1 WHERE image_id = ".$_GET['winner']);
$loser_expected = expected($winner->score, $loser->score);
$loser_new_score = loss($loser->score, $loser_expected);
//test print "Loser: ".$loser->score." - ".$loser_new_score." - ".$loser_expected."<br>";
mysql_query("UPDATE images SET score = ".$loser_new_score.", losses = losses+1 WHERE image_id = ".$_GET['loser']);
mysql_query("INSERT INTO battles SET winner = ".$_GET['winner'].", loser = ".$_GET['loser']." ");
header('location: /');
}
?>
Затем прописываем «MySQL.php»
// Настройки MySQL
$user = "";
$password = "";
$database = "";
$host = "";
mysql_connect($host,$user,$password);
mysql_select_db($database) or die( "Unable to select database");
?>
Теперь «install_images.php»
include('mysql.php');
if ($handle = opendir('images')) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if($file!='.' && $file!='..') {
$images[] = "('".$file."')";
}
}
closedir($handle);
}
$query = "INSERT INTO images (filename) VALUES ".implode(',', $images)." ";
if (!mysql_query($query)) {
print mysql_error();
}
else {
print "finished installing your images!";
}
?>
Теперь можно сделать и «index.php»
include('mysql.php');
include('functions.php');
// Get random 2
$query="SELECT * FROM images ORDER BY RAND() LIMIT 0,2";
$result = @mysql_query($query);
while($row = mysql_fetch_object($result)) {
$images[] = (object) $row;
}
// Get the top10
$result = mysql_query("SELECT *, ROUND(score/(1+(losses/wins))) AS performance FROM images ORDER BY ROUND(score/(1+(losses/wins))) DESC LIMIT 0,10");
while($row = mysql_fetch_object($result)) $top_ratings[] = (object) $row;
// Close the connection
mysql_close();
?>
<title>Facemash</title>
body, html {font-family:Arial, Helvetica, sans-serif;width:100%;margin:0;padding:0;text-align:center;}
h1 {background-color:#600;color:#fff;padding:20px 0;margin:0;}
a img {border:0;}
td {font-size:11px;}
.image {background-color:#eee;border:1px solid #ddd;border-bottom:1px solid #bbb;padding:5px;}
<h1>FaceMash</h1>
<h2>Кто горячее? Выбирай.</h2>
<td>Won: <?=$images[0]->wins?>, Lost: <?=$images[0]->losses?></td>
<td>Won: <?=$images[1]->wins?>, Lost: <?=$images[1]->losses?></td>
<td>Score: <?=$images[0]->score?></td>
<td>Score: <?=$images[1]->score?></td>
<td>Expected: <?=round(expected($images[1]->score, $images[0]->score), 4)?></td>
<td>Expected: <?=round(expected($images[0]->score, $images[1]->score), 4)?></td>
<h2>Top Rated</h2>
<td valign="top">Score: <?=$image->score?></td>
<td valign="top">Performance: <?=$image->performance?></td>
<td valign="top">Won: <?=$image->wins?></td>
<td valign="top">Lost: <?=$image->losses?></td>
*/ ?>
И напоследок пропишем функции: «functions.php»
/ / Вычислить ожидаемый результат%
Ожидается функцию ($ Rb, Ra $) {
возвращает 1 / (1 + ПР (10, ($ $ Rb-Ra) / 400));
}
/ / Вычислить новую оценку winnner
Функция выигрыша ($ оценка, $ ожидалось, $ K = 24) {
вернуть $ оценка + $ K * (1 - $ ожидалось);
}
/ / Вычислить новую счетом проиграл
функция потерь ($ оценка, $ ожидалось, $ K = 24) {
вернуть $ оценка + $ K * (0 - $ ожидалось);
}
>
Заливаем все файлы на хостинг сайта. После этого создаем папку «images», но пока не загружаем в нее фотографии. Залезаем в phpMyAdmin и создаем таблицу:
CREATE TABLE IF NOT EXISTS `battles` ( `battle_id` bigint(20) unsigned NOT NULL auto_increment, `winner` bigint(20) unsigned NOT NULL, `loser` bigint(20) unsigned NOT NULL, PRIMARY KEY (`battle_id`), KEY `winner` (`winner`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `images` ( `image_id` bigint(20) unsigned NOT NULL auto_increment, `filename` varchar(255) NOT NULL, `score` int(10) unsigned NOT NULL default '1500', `wins` int(10) unsigned NOT NULL default '0', `losses` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`image_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;;
Отлично, теперь залезаем в MySQL.php и заполняем поля:
$user = ""; $password = ""; $database = ""; $host = ""
Теперь заливаем фотографии в папку images, и «устанавливаем их». Вот и все. Наш собственный Facemash готов к использованию. Если у вас возникнут вопросы — пишите, постараюсь вам помочь. Спасибо за внимание :)