среда, 19 марта 2008 г.

I can eat own dog food

Некое время назад написал класс для более удобного разбора данных (парсер). И отдал его своему отделу. Они им пользовались, что-то просили исправить, что-то добавить.
А сегодня я разбирал наш старый сайт online игр с его помощью. И остался крайне доволен - работать с ним одно удовольствие! Приятный API, функциональность, неплохая скорость, сохранение cookies. Появляются, правда, конструкции типа $p->part(...)->bpart(...)->fpart(...), но читаемости это не снижает.
Приятно.

четверг, 13 марта 2008 г.

Major bug

Понял что я сделал действительно что-то большое и нужное. Коллега сказал что у меня в системе баг, дескать он не может попасть на доступную (по идее) страницу. Посмотрели. Баг был не у меня, а в данных в базе. Но мне стало откровенно приятно от осознания того, что в лучших традициях Страуструпа я могу сказать: Для понимания ошибок EDMR необходимо обладать эзотерической интуицией. Потому-что система может заподозрить неладное только через несколько дней после того как Вы сделали неверный шаг.

Upd: Еще одно интересное наблюдение - основное действие программиста на EDMR - сбросить кеш. Это помогает в 95% случаев.

вторник, 11 марта 2008 г.

MySQL easter egg

Есть два запроса:
SELECT * FROM `entities_categories` WHERE category IN('16325') AND entity IN ('used') ORDER BY category;
и
SELECT * FROM `entities_categories` WHERE category IN (SELECT id FROM entity_core_category WHERE id IN('16325') ORDER BY path) AND `entity` IN ('used');

Первый выполняется за 1.47 секунды, второй за .... 0,81 секунды! Неожиданно, верно? Начинаем разбираться:
mysql> desc SELECT * FROM `entities_categories` WHERE category IN('16325') AND entity IN ('used') ORDER BY category;


id 1
select_type SIMPLE
table entities_categories
type ref
possible_keys PRIMARY,category
key category
key_len 70
rows 63300
Extra Using where; Using filesort


mysql> desc SELECT * FROM `entities_categories` WHERE category IN (SELECT id FROM entity_core_category WHERE id IN('16325') ORDER BY path) AND `entity` IN ('used');

id 1 2
select_type PRIMARY DEPENDENT SUBQUERY
table entities_categories entity_core_category
type ref const
possible_keys PRIMARY PRIMARY
key PRIMARY PRIMARY
key_len 66 4
ref const const
rows 287754 1
Extra Using where Using index


Я не хочу понять это. Я хочу знать: как с ЭТИМ работать?