Заметки, ПроектыMD5 и скорость выборки

Пару дней назад завязался небольшой диалог в твиттере по поводу шифрования паролей в веб-сервисах. На фразу «кто не использует — идиот» мне ответили в стиле:

Шифрование создает сильную дополнительную нагрузку для веб-сервиса и большие проекты избегают подобного.

Подобное я слышу уже в сотый раз, поэтому решил сделать маленький тест и показать, что это абсолютно не верно и создатели этих сервисов (в которых важные данные, такие как пароли, номера карт и пр., не шифруются) полные идиоты.

Собственно, сам тест очень простой. Я создал таблицу, в которой 3 поля:

  1. id — привычка;
  2. str — данные в открытом виде (в тесте совпадает с id);
  3. pass — хешированные данные (md5(id)).

Таблицу заполнил 10000-ми строками. Теперь сами тесты:

mysql_connect('openserver', 'root', NULL) or die('err connect');
mysql_select_db('md5') or die('err select db');

$start = microtime(TRUE);
for($i=1;$i<=10000;$i++)
{
mysql_query('SELECT FROM `str` WHERE `str`="'.$i.'" LIMIT 1');
//    mysql_query('SELECT FROM `str` WHERE `pass`=MD5("'.$i.'") LIMIT 1');
//    mysql_query('SELECT FROM `str` WHERE `pass`="'.md5($i).'" LIMIT 1');
}

echo microtime(TRUE) - $start;

Из кода видно, что я проверяю 3 типа запросов:

  1. запрос по не хешированной строке;
  2. запрос по md5, хеширование внутри mysql;
  3. запрос по md5, хеширование в php.

MD5 и скорость выборки →

Заметки, ПроектыЛенивые программисты

В последние несколько дней изучаю движки инет-магазинов, хочу сделать для супруги инет-магазин. В процессе изучения натыкаюсь на много интересных вещей, о которых расскажу как-нибудь потом. А сегодня меня ОЧЕНЬ СИЛЬНО удивил движок инет-магазина, стоимостью почти 400$. Вдумайтесь — в некоторых местах нашей родины столько получают за месяц работы! Ну, думаю, раз такая стоимость — продукт должен быть отличный…
Ленивые программисты →

Kohana, ЗаметкиKohana: Bug Report #4638

Вчера в твиттере Иван скинул ссылку, на баг в kohana 3.3 под №4638. В поисках проблеммы, сегодня, убил почти 2 часа времени и все-равно сам бы не нашел корень проблемы. Спасибо хорошему человеку (Трин, привет :)). Давайте по порядку разберем суть проблемы, источник проблемы и ее решение…

ВНИМАНИЕ! На абсолютные цифры не смотрите, смотрите на процентное изменение. По поводу абсолютных цифр выскажусь в конце поста.
Kohana: Bug Report #4638 →

Kohana, ЗаметкиРоуты в kohana 3.2/3.3

Все, кто используют фреймворк kohana, наверное уже знают, что несколько дней назад вышла версия 3.3.0. Изменений не то, чтобы много, но многие из них (как обычно) что-либо меняют кардинально, т.е. обновить старые проекты просто так не получится (.

В ближайшее время постараюсь рассказать об особенностях тех изменений, которые коснулись меня, а сегодня покажу приятные изменения в роутах. Как Вы, наверное, знаете — начиная с версии kohana 3.1 и при использовании php 5.3, можно было использовать лямбда-функции в роутах. Выглядело это примерно так (в моем случае и пример упрощенный):

Route::set('redirect', function($uri){
	$compiled = Route::compile('r/<key>', array('key'=>'\w+'));
	if (!preg_match($compiled, $uri, $matches))
	{
		return FALSE;
	}
	
	$url = @base64_decode($matches['key']);
	if (empty($url))
	{
		return FALSE;
	}
	
	return array(
		'controller'  => 'link',
		'action'      => 'index',
		'key'         => $matches['key'],
	);
}, 'r/<key>');

Роуты в kohana 3.2/3.3 →

ЗаметкиО блоге

gruz0 попросил немного рассказать, что и как в этом блоге. Начну с установленных плагинов:

  1. .html on PAGES — плагин добавляет .html в url каждой страницы. Честно — не помню, когда и почему его поставил, но мне всегда нравилось, что ссылка заканчивается расширением, получается какая-то законченность ссылки.
  2. All in One SEO Pack — тут наверное никому, кто так или иначе сталкивался с wordpress, объяснять не нужно. Автоматом проставляем keywords и description в мета-теги страницы.
  3. Cyr to Lat enhanced — не люблю ссылки на русском языке :).
  4. Disqus Comment System — я давным-давно отказался от обычных комментариев в блоге. Причин много, но основная — спам. Disqus помогает избавиться от автоматического спама, да и для пользователей относительно удобен. Правда, в последнее время подумываю про hypercomments.
  5. Executable PHP widget — виджет с возможностью использования php-кода. Удобен и прост.
  6. Google XML Sitemaps — не вижу необходимости в объяснении, что это за плагин :).
  7. Quotes Collection — виджет с цитатами. Ставил для пробы, да так он и остался.
  8. SyntaxHighlighter Evolved и SyntaxHighlighter Evolved: PHP5 — подсветка кода в постах. Второй добавляет поддержку php 5.*.
  9. WP No Category Base — один из самых полезных, для меня, плагинов. Он упрощает ссылки вида http://aktuba.com/category/notes до http://aktuba.com/notes. Согласитесь, второй вариант значительнее приятнее на глаз ;).
  10. WP Super Cache — плагин, который заставляет блог работать, после плагинов выше:). Генерация главной страницы этого блога отжирает (по другому и не скажешь) 28.7Мб памяти сервера. Это просто жесть и без кеширования не обойтись (((

Вот и все плагины, которые я использую. Кроме того, настроен Last-Modified и обработка Not Modified, что позволяет страницам значительно быстрее открываться при повторном заходе. Проверить, настроены ли эти заголовки можно на этом ресурсе, кстати. Ну и включен gzip на сервере, т.к. мощности серверов давным-давно позволяют не замечать нагрузки от сжатия выходных данных. Включайте у себя gzip!

Чуть не забыл — еще используются два «вкрапления» (в терминах wordpress). Оба они подменяют функционал wordpress на свой: advanced-cache.php и object-cache.php. Уверен, что работает только один из них, но какой и как — понятия не имею :). Надо будет как-нибудь посмотреть что у них внутри и как они работают…

О блоге →