Comments 66
Вот по-моему лучше бы приглашения были примерно такого вида:
Если уж делать интересный инвайт. Программистам не сильно сложней, а у пользователя полет фантазии.

Если уж делать интересный инвайт. Программистам не сильно сложней, а у пользователя полет фантазии.
Вместо Source Code Highlighter на Хабрахабре давно ужé можно пользоваться парою нестандартных элементов разметки <source>…</source>, обеспечивающих синтаксическую подсветку своего содержимого в качестве исходного кода. Достоинством этого подхода также является несколько больший размер шрифта.
Вот пример работы такой разметки:
Вот пример работы такой разметки:
function validate_invite($hash_serialize, $userfile) {
// если при загрузке изображения не было ошибок, размер изображения не превышает допустимый и тип стоответсвует нужному
if (isset($userfile) && is_uploaded_file($userfile['tmp_name']) && $userfile['size'] < 5*1024 && $userfile['type'] == 'image/png' && $userfile['error'] == 0) {
// создаём изображение на основе загруженного
$source = ImageCreateFromPNG($userfile['tmp_name']);
// определяем точки в которых будет проверяться цвет
$x[] = 48; $y[] = 48; $x[] = 2; $y[] = 2; $x[] = 48; $y[] = 2; $x[] = 2; $y[] = 48;
$rgb_array = Array();
for ($i = 0; $i < 4; ++$i) {
// получает индекс цвета в точке
$color_index = imagecolorat($source, $x[$i], $y[$i]);
// получает цвет для индекса
$color_tran = imagecolorsforindex($source, $color_index);
// записываеться в массив
$rgb = Array();
$rgb[] = $color_tran['red'];
$rgb[] = $color_tran['green'];
$rgb[] = $color_tran['blue'];
$rgb_array[] = $rgb;
}
// преобоазует массив в байтово-поточное представление для сопоставления с записью в массиве
$serialize_rgb_array = serialize($rgb_array);
// получает хэш
$hash_serialize_rgb_array = md5($serialize_rgb_array);
// ищет запись в бд
$_CORE['db']->query('SELECT `di_invite`.`invite_id` FROM `di_invite` WHERE `di_invite`.`invite_hash` = ?;', $hash_serialize_rgb_array);
// если найдено, очищает память, и возвращает true, иначе очищает память и возвращает false
if ($_CORE['db']->num_rows() < 1) {
imagedestroy($source);
return false;
} else {
imagedestroy($source);
$hash_serialize = $hash_serialize_rgb_array;
return true;
}
} else return false;
}
В следующий раз я это учту.
А нумерация линий? Вообще, по оформлению лучше все-таки Source Code Highlighter.
Чем лучше-то?
Подозреваю, что нумерацией линий лучше
А она тут кому-то на Хабре реально нужна?
Зодиаку нужна же
О, заминусовали. А аргументировать? Я же специально написал "реально нужна". Я вообще не припомню на хабре фраз типа «на такой-то строке в вашем скрипте ошибка» или ещё что-то такое. Вообще, любого упоминания номеров строк.
Поэтому и задал такой вопрос.
Поэтому и задал такой вопрос.
Дык это — чем хабровский )
фуу
Сколько уже можно позорить наш язык
Тоже мне проблема, картинку через gd сгенерить. Написал бы ты скрипт который реальные инвайты на хабру генерит)
Вы уж простите, но то, что написано в статье — быдлокод. Чему она, фактически, учит? Сгенерировать 4 случайных числа, записать их в базу и сделать на их основании картинку из 4 квадратиков?
Примеры кода
можно было бы переписать, например, так:
Потом дважды сериализуется массив, непонятно зачем:
Кроме того, в коде огромное количество магических констант, мешающих восприятию смысла кода.
Короче говоря, такое задание и такое решение к нему может существовать, но едва ли оно заслуживает статьи про это на хабре.
Примеры кода
$rgb_array = Array();
for ($i=0; $i < 4; ++$i) {
$rgb = Array();
$randnum = intval(mt_rand(0,255)); $rgb[] = $randnum;
$randnum = intval(mt_rand(0,255)); $rgb[] = $randnum;
$randnum = intval(mt_rand(0,255)); $rgb[] = $randnum;
$rgb_array[] = $rgb;
}
можно было бы переписать, например, так:
$rgb_array = Array();
for ($idx=0; $idx < 4; ++$idx) {
$rgb = array();
for($idx2 = 0; $idx2 < 3; ++ $idx2) $rgb[] = mt_rand(0, 255);
$rgb_array[] = $rgb;
}
Потом дважды сериализуется массив, непонятно зачем:
$serialize = serialize($rgb_array);
$hash = md5(serialize($rgb_array));
Кроме того, в коде огромное количество магических констант, мешающих восприятию смысла кода.
Короче говоря, такое задание и такое решение к нему может существовать, но едва ли оно заслуживает статьи про это на хабре.
Да, признаю, некоторую часть кода можно было бы оптимизировать. Просто этот скрипт взят из живого проекта и там как раз эти переменные были нужны. Но всё таки до быдлокода, как мне кажется, он не дотягиваем.
Код в топике немного изменил, соответственно этим рекомендациям.
$rgb = array();
for($idx2 = 0; $idx2 < 3; ++ $idx2) $rgb[] = mt_rand(0, 255);
$rgb = array(mt_rand(0, 255),mt_rand(0, 255),mt_rand(0, 255));
не?
или ещё иначе:
$rgb = array();
for($idx2 = 0; $idx2 < 3; ++ $idx2) $rgb[] = mt_rand(0, 255);
$rgb_array[] = $rgb;
$rgb_array[] = array(mt_rand(0, 255),mt_rand(0, 255),mt_rand(0, 255));
Да, так даже лучше. Я поначалу подумал, что 3 раза писать mt_rand() не круто, особенно с magic numbers, но цикл for оказался уродливее. Жалко что в php нет array comprehensions, как в питоне:
rgb = [ random.randint(0, 255) for _ in range(0,3) ]
То Вам копипаст не нравится, то нравится. Вообще, тот код что Вы упрекали не есть быдлокод, не стоит «наводить красивости» на циклы в строку или две строки копипаста, оно того реально не стоит.
В таких статьях я код вообще не читаю, все равно его использовать не буду.
Мне бы понравились инвайты в виде смайликов. Типа того:


Хочу видеть Online Demo!
Генерируем любую картинку, сэйвим как файл, берём от него мд5 и пихаем в базу, сам файл шлём на мыло, файл удаляем.
В статье зачем-то считываются 4 точки изображения и слишком много кода для такого действия. Массив откуда брать цвета совсем чудесен, потому что это именно тот случай, где помогла бы тригонометрия. Но лучше брать хэш от всей картинки и не думать о квадратах.
В статье зачем-то считываются 4 точки изображения и слишком много кода для такого действия. Массив откуда брать цвета совсем чудесен, потому что это именно тот случай, где помогла бы тригонометрия. Но лучше брать хэш от всей картинки и не думать о квадратах.
Я так понимаю что не сложно будет сделать что бы использовано не 4 цвета, а например 6 или 8?
SELECT `di_invite`.`invite_serialize`, `di_invite`.`invite_username_recipient` FROM `di_invite`.`di_invite` WHERE `invite_hash` = ?;
сработает, только если БД тоже названа `di_invite`.
Дорогой Дед Мороз!
Пожалуйста, сделай так, чтобы ребята, которые постят в блоге PHP на хабре, прочитали наконец-то руководство по кодстайлу.
Твой Серёжа.
Пожалуйста, сделай так, чтобы ребята, которые постят в блоге PHP на хабре, прочитали наконец-то руководство по кодстайлу.
Твой Серёжа.
А ничего, что это кодстайл PEAR? Почему он должен считаться единственно верным? А если мне, например, Zend стиль больше нравится?
Отбор кода для PEAR всегда отличался жестокостью, так как туда попадает только самое лучшее.
Я стараюсь писать в стиле «K&R», но всё же мне удобнее писать с отступами равными двум пробелам, а не 4 или табуляции, и также я не переношу открывающую фигурную скобочку на новую строку. В чём же мой стиль вам так не угодил?
P.S. Некоторые пробелы порезал Source Code Highlighter.
Я стараюсь писать в стиле «K&R», но всё же мне удобнее писать с отступами равными двум пробелам, а не 4 или табуляции, и также я не переношу открывающую фигурную скобочку на новую строку. В чём же мой стиль вам так не угодил?
P.S. Некоторые пробелы порезал Source Code Highlighter.
Я знаю одного программиста, так ему удобнее писать так, что потом коду обфускатор не нужен — всё равно никто не поймёт.
Есть некий набор правил, стили (Zend, PEAR ...) лишь группируют эти наборы правил на свое усмотрение. Нет ничего плохого, если человек будет придерживаться не конкретных стилей, а набору правил.
филиал обсуждения проблемы «пробелы против табуляции» можно считать открытым?
Объясните недалёкому, зачем делать инвайты картинками. Я раньше предполагал, чтобы наглядно видеть, использован ли инвайт или нет (картинка отдаётся сервером), а тут про какую — то защиту толкуют.
Sign up to leave a comment.
Генерация приглашений, похожих на инвайты сайта habrahabr