Комментарии 66
НЛО прилетело и опубликовало эту надпись здесь
Вот по-моему лучше бы приглашения были примерно такого вида:
Если уж делать интересный инвайт. Программистам не сильно сложней, а у пользователя полет фантазии.
Если уж делать интересный инвайт. Программистам не сильно сложней, а у пользователя полет фантазии.
+30
Вместо 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;
}
+13
В следующий раз я это учту.
0
А нумерация линий? Вообще, по оформлению лучше все-таки Source Code Highlighter.
+5
Чем лучше-то?
+1
Подозреваю, что нумерацией линий лучше
+14
А она тут кому-то на Хабре реально нужна?
0
Зодиаку нужна же
+12
О, заминусовали. А аргументировать? Я же специально написал "реально нужна". Я вообще не припомню на хабре фраз типа «на такой-то строке в вашем скрипте ошибка» или ещё что-то такое. Вообще, любого упоминания номеров строк.
Поэтому и задал такой вопрос.
Поэтому и задал такой вопрос.
0
Дык это — чем хабровский )
-1
фуу
+1
Сколько уже можно позорить наш язык
-21
Тоже мне проблема, картинку через gd сгенерить. Написал бы ты скрипт который реальные инвайты на хабру генерит)
+26
Вы уж простите, но то, что написано в статье — быдлокод. Чему она, фактически, учит? Сгенерировать 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));
Кроме того, в коде огромное количество магических констант, мешающих восприятию смысла кода.
Короче говоря, такое задание и такое решение к нему может существовать, но едва ли оно заслуживает статьи про это на хабре.
+30
Да, признаю, некоторую часть кода можно было бы оптимизировать. Просто этот скрипт взят из живого проекта и там как раз эти переменные были нужны. Но всё таки до быдлокода, как мне кажется, он не дотягиваем.
-6
Код в топике немного изменил, соответственно этим рекомендациям.
+4
$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));
не?
+2
или ещё иначе:
$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
Да, так даже лучше. Я поначалу подумал, что 3 раза писать mt_rand() не круто, особенно с magic numbers, но цикл for оказался уродливее. Жалко что в php нет array comprehensions, как в питоне:
rgb = [ random.randint(0, 255) for _ in range(0,3) ]
+1
То Вам копипаст не нравится, то нравится. Вообще, тот код что Вы упрекали не есть быдлокод, не стоит «наводить красивости» на циклы в строку или две строки копипаста, оно того реально не стоит.
+3
В таких статьях я код вообще не читаю, все равно его использовать не буду.
+5
Мне бы понравились инвайты в виде смайликов. Типа того:
+1
Хочу видеть Online Demo!
-8
Генерируем любую картинку, сэйвим как файл, берём от него мд5 и пихаем в базу, сам файл шлём на мыло, файл удаляем.
В статье зачем-то считываются 4 точки изображения и слишком много кода для такого действия. Массив откуда брать цвета совсем чудесен, потому что это именно тот случай, где помогла бы тригонометрия. Но лучше брать хэш от всей картинки и не думать о квадратах.
В статье зачем-то считываются 4 точки изображения и слишком много кода для такого действия. Массив откуда брать цвета совсем чудесен, потому что это именно тот случай, где помогла бы тригонометрия. Но лучше брать хэш от всей картинки и не думать о квадратах.
+2
Я так понимаю что не сложно будет сделать что бы использовано не 4 цвета, а например 6 или 8?
0
SELECT `di_invite`.`invite_serialize`, `di_invite`.`invite_username_recipient` FROM `di_invite`.`di_invite` WHERE `invite_hash` = ?;
сработает, только если БД тоже названа `di_invite`.
+1
Дорогой Дед Мороз!
Пожалуйста, сделай так, чтобы ребята, которые постят в блоге PHP на хабре, прочитали наконец-то руководство по кодстайлу.
Твой Серёжа.
Пожалуйста, сделай так, чтобы ребята, которые постят в блоге PHP на хабре, прочитали наконец-то руководство по кодстайлу.
Твой Серёжа.
-4
А ничего, что это кодстайл PEAR? Почему он должен считаться единственно верным? А если мне, например, Zend стиль больше нравится?
+5
Отбор кода для PEAR всегда отличался жестокостью, так как туда попадает только самое лучшее.
Я стараюсь писать в стиле «K&R», но всё же мне удобнее писать с отступами равными двум пробелам, а не 4 или табуляции, и также я не переношу открывающую фигурную скобочку на новую строку. В чём же мой стиль вам так не угодил?
P.S. Некоторые пробелы порезал Source Code Highlighter.
Я стараюсь писать в стиле «K&R», но всё же мне удобнее писать с отступами равными двум пробелам, а не 4 или табуляции, и также я не переношу открывающую фигурную скобочку на новую строку. В чём же мой стиль вам так не угодил?
P.S. Некоторые пробелы порезал Source Code Highlighter.
0
Я знаю одного программиста, так ему удобнее писать так, что потом коду обфускатор не нужен — всё равно никто не поймёт.
0
Есть некий набор правил, стили (Zend, PEAR ...) лишь группируют эти наборы правил на свое усмотрение. Нет ничего плохого, если человек будет придерживаться не конкретных стилей, а набору правил.
+1
филиал обсуждения проблемы «пробелы против табуляции» можно считать открытым?
0
Объясните недалёкому, зачем делать инвайты картинками. Я раньше предполагал, чтобы наглядно видеть, использован ли инвайт или нет (картинка отдаётся сервером), а тут про какую — то защиту толкуют.
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Генерация приглашений, похожих на инвайты сайта habrahabr