Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

Ой-йо

Что-то какой-то тяжёлый конец года выпал, последние два месяца. Не могу, устал, каждую неделю какие-то события, которые выбивают меня из колеи. Может уйти в отпуск перед Новым Годом уйти? Тут всего ничего осталось, но кто знает что ещё за три рабочих дня может произойти? А то сегодня я уже кончился.
3 комментария
25 декабря 2009 23:17

CSS hack для Firefox 3.5

В комментариях на «Хабре» попросили придумать CSS-хак для FireFox 3.5. Пожалуйста:
<style type="text/css">
x:-moz-any-link:nth-child(0), body { background: red; } /* FF 3.5+ */
</style>
Проверил в Firefox 2.0.0.19, Firefox 3.0.3 и в Firefox 3.5.5.
8 комментариев
25 декабря 2009 20:54

Ура, подживает!

Сегодня попробовал (с разминкой) толкнуть 88, оценить будет ли болеть трицепс. Ура! Не болел абсолютно. Толкнул 6 или 7 раз, значит форма почти не потеряна. Пока больше брать не буду, пусть подживает дальше.
2 комментария
25 декабря 2009 18:36

CSS hack для Opera 10.50, 10.xx, не 10.50

«Опера» 10.50 стала поддерживать border-radius и много других интересных вещей, в этой связи встал вопрос — как отличить 10.50 от более ранних версий в CSS?

Например, у меня на сайте скруглённые уголки для «Оперы», начиная с версии 9.50 делаются при помощи SVG, 10.50 вполне могла бы нарисовать их без этого «изыска». Помучался-помучался и придумал несколько CSS-хаков, собственного изобретения.
<style type="text/css">
@media (0) {
    body { background: red; } /* Opera 10.xx, но < 10.50 */
}

@media all and (resolution = 0dpi) {
    body { background: red; } /* Opera < 10.50, минимальной версии не знаю, 9.27 работает */
}

@media all, () {
    body { background: red; } /* Opera 10.xx (включая 10.50) */
}

@media all, {
    body { background: red; } /* Opera 10.50 prealpha */
}
</style>
Нужно понимать, что хаки сделаны исключительно для того, чтобы отличить одну версию «Оперы» от другой и могут сработать в других браузерах, так что лучше подстраховаться и добавить в стили какой-нибудь хак, чтобы отличать «Оперу» от всего остального.

Я не знаю минимальной версии при которой срабатывает хак №2, но подозреваю, что будет работать где-то начиная с 7-й версии.

Все хаки я испытывал на «Операх» 10.50 prealpha, 10.10, 10.01, 9.50 и 9.27. Надеюсь, баг 10.50 не исправят и хак будет работать и дальше (pepelsbey, пожалуйста, молчи!:).

Добавлено 25 декабря 2009 10:38: проснувшись утром, я обнаружил, что умудрился ночью запостить этот текст два раза. Решил удалить один из них и удалил тот, что с комментариями. Простите, это утро :(
16 комментариев
25 декабря 2009 02:56

XML в MySQL

Почему-то мало кто слышал, что в MySQL с версии 5.1.5 появился «чудесный» способ нарушать 1NF, при этом работая с частями поля таблицы, как со сложной структурой.

Кавычки вокруг слова «чудесный» какбэ намекают, что я не очень-то одобряю этот шаг, хотя понимаю, что иногда он оправдан. Просто я понимаю его опасность — можно увлечься этой возможность и забыть чем грозит нарушение первой нормальной формы.

Речь идёт о двух функциях — ExctractValue и UpdateXML. Если в поле таблицы хранится XML, то первая функция позволит выбрать данные при помощи XPath, а вторая — (при помощи XPath же) изменить какую-то их часть. Ничего неожиданного — функции могут работать как с полями таблицы, так и со строкой, переменной, результатом функции или любой комбинацией вышеперечисленного.

Примерно так:
SELECT ExtractValue('<a>c</a><b/>', '//a');

SELECT UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>');

SELECT * FROM users WHERE ExtractValue(info, '//firstname') == 'Иван' AND ExtractValue(info, '//surname') == 'Сагалаев';
В случае, если XPath не дал результата или в поле оказался не XML, функции вернут NULL (версии MySQL до 5.1.12 содержат баг и частично могут работать даже с not-well-formed XML).
6 комментариев
25 декабря 2009 01:15