IE9 и CSS3 2D Transforms

Появился Internet Explorer 9 PP6, из интересного — появилась поддержка 2D-трансформаций из CSS3 (свойства -ms-transform и -ms-transform-origin).

Кроме того, появилась поддержка семантических тегов HTML5 (section, nav, article и так далее). Раньше при разборе дерева элементы, содержащие эти теги наследовались от HTMLUnknownElement, теперь — от HTMLElement.

8 комментариев

Stoyan Stefanov

Стоян Стефанов (21.39КиБ)

Стоян Стефанов (архитектор YSlow, автор нескольких книг по JavaScript и ряда любопытных исследований) сейчас в «Яндексе» рассказывает лекцию. К сожалению, я пойти не смог, а жаль:

— Болк, а ты чего не на Стояне? Он тут тебя упомянул =)
— Э… как это?
— Он щас в Яндексе читает лекцию, ну и типа сказал вот крутой чувак (и твоего блога скриншот)

Hello, Stoyan! Sorry I could not attend your lecture.

4 комментария

Квартира, прогресс

Квартира (70.17КиБ)

Дом, в котором будет наша с женой квартира, строится космическими темпами, обещают, что к концу декабря он будет построен целиком. Вполне верится — я время от времени наблюдаю через камеры за строительством, могу оценить скорость.

Из других хороших новостей — квартиру не просто разрешили перепланировать в двухкомнатную, после сдачи дома компания сама предложит проект и осуществит перепланировку. Думаю, что наши с женой многочисленные обращения по этому вопросу помогли набрать критическую массу для принятия такого решения.

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

4 комментария

«Аэрофлот» отменил рейс в Казань 31-го

И «Аэрофлот» туда же, вслед за «Авиановой» — тоже отменил околоновогодний рейс. 31-го мы должны были вылетать «Аэрофлотом», чем лететь теперь непонятно. Ни одного разумного рейса не осталось. Есть только «Ютэйр» ЮТ343, но он прилетает в Казань в 23:10, так что есть вероятность встретить Новый год в воздухе. Кроме того, билет обойдётся тысяч на 7 (!) дороже.

В чём смысл тогда покупать билеты заранее? Это какая-то лотерея.

17 комментариев

Штраф за сжигание листвы

Давайте откроем Закон московской области от 30 ноября 2004 года «О государственном административно-техническом надзоре и административной ответственности за правонарушения в сфере благоустройства, содержания объектов и производства работ на территории Московской области» и прочитаем часть пятую статьи 11 из него:

Сжигание листвы, травы, тополиного пуха, частей деревьев и кустарников, других остатков растительности в местах общественного пользования и на территории хозяйствующих субъектов, за исключением специально отведенных мест, влечет наложение административного штрафа:

на граждан — в размере от пятисот до одной тысячи рублей; на должностных лиц — в размере от одной тысячи до пяти тысяч рублей

Теперь вспоминаем что такое сигарета — бумажный цилиндр, внутри которого находится измельчённый табак для курения. Табак — это травянистое растение, трава. Высушенный и измельчённый табак — явно остатки растительности.

Товарищи курильщики, ну вы поняли, да?

21 комментарий

PHP, UTF-8: шестой этап, она же «строки, часть II». Заменяем

В прошлой части я пытался упростить себе задачу, посчитав сколько различных видов операций получения символа из строки по индексу есть у нас в коде. Но для того, чтобы подсчитать эти ситуации, нужен парсер, который эти случаи выделит.

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

Код я выкинул и начал писать заново, основываясь на токенах (лексемах), которое выдаёт встроенное в язык API токинайзера. По ходу процесса я часто уточнял случаи и производил тестирование. Получился довольно неряшливый парсер, к тому же с некоторыми багами, которые я счёл несущественными. Например, не обрабатывается ситуация isset($var, $var[$idx]).

В PHP isset (а так же empty и unset) — конструкции, а не функции и принимают на вход только переменные. У меня получение символа по индексу заменяется на Utf::get(…), а внутри строки на другую конструкцию — $_ENV[0x5f3759df]->get(…), так что если произойдёт замена внутри isset, будет синтаксическая ошибка.

Т. е. у меня в коде, внутри файла с классом Utf есть ещё и такая строка — «$_ENV[0x5f3759df] = new Utf();». $_ENV я выбрал за то, что это переменная (а переменную внутри строки проще заменять на другую переменную, пусть и с вызовом метода, PHP это позволяется) и это, в терминах PHP, «суперглобальный» массив, то есть он доступен отовсюду.

Итак, я сказал, что парсер имеет баги, но на весь довольно большой код у меня было всего четыре случая, правда один довольно странный — пропала треть исходного кода, так что, если будете применять — сохраните оригинальный код (мой лежал в SVN).

Первая операция, которую вам нужно сделать ещё до запуска парсера — это запустить следующий скрипт. У меня парсер работает с UTF-8, а исходники у меня пока ещё в CP1251. Так что парсер сначала перекодирует код в UTF-8, потом обратно в CP1251. Но я беспокоился — не испортит ли двойная перекодировка что-то в исходниках.

Так что я перекодировал код туда и обратно и сравнил что получилось:

for file in $(find -name '*.php' -or -name '*.inc' -or -name '*.tpl'); do
    sum_new=`iconv -fcp1251 -tutf8 "$file" | iconv -futf8 -tcp1251 | md5sum -b | cut -d' ' -f1`
    sum_orig=`md5sum -b "$file" | cut -d' ' -f1`

    if [ $sum_new != $sum_orig ]; then
        echo $sum_new $sum_orig $file
    fi
done

У меня ничего не поломалось, так что я спокойно запустил пасер. После запуска я проверил синтаксис скриптов интерпретатором и вручную избавил четыре найденные ошибки:

find -name '*.php' -or -name '*.inc' -or -name '*.tpl' | xargs php -l

После всех запусков проект выглядит рабочим, но в понедельник я обязательно буду тестировать весь проект.

Добавлено позднее: а вот как выглядит метод get в классе Utf:

static public function get($str, $index)
    {
        if (!is_scalar($str)) {
            return isset($str[$index]) ? $str[$index] : null;
        }

        return self::substr($str, $index, 1);
    }

Добавлено позже: нашёл ещё два бага: неверно отрабатываются «$prop[$idx]->value» и «$str[$idx] ==». Второе надо править в регулярном выражении. Я их править не буду, они запросто ищутся утилитой «grep» и правятся руками. Кроме того, не заменяются переменные в heredoc (мне это не нужно).

Конструкции heredoc я нашёл при помощи «grep -FR ’<<<’ *» и просмотрел их все, их было очень мало и ни одна из них не содержала переменных.

Добавлено ещё позже: опаснее оказалась ситуация, которую просто так можно и не заметить: замена вызова func($var[$index]) на func(Utf::get($var, $index), где прототип func описан как func(&$var). Синтаксис PHP вполне допускает такие ситуации, а на деле в массив могут не попасть изменения, которые должны были переданы быть по ссылке.

Способов исправить такую ситуацию два. Первый — логгировать все вызовы Utf::get, которые применяются к массивам и править их на получение переменной по индексу. Второй — найти и просмотреть все такие ситуации. Я выбрал второй способ:

find \( -name '*.php' -or -name '*.tpl' -or -name '*.inc' \) |
xargs egrep -oh 'ion[\t ]+\w+[\t ]*([^{]+' | awk -F'[( ]' '/&\$/{print tolower($2)}' |
sort -u | egrep -v '^preg_' | xargs -I{} egrep -iR  --exclude-dir=.svn {}'[\t ]*(.*?Utf::get' *

Этот скрипт (который очень долго работает) показывает все подозрительные строки (у меня их 7 оказалось), их надо просмотреть, выявить потенциально проблемные и поправить, если проблема действительно есть.

И ещё позже: так же есть набор встроенных функций, которые используют передачу массива по ссылке, я их нашёл вот таким способом:

(cat<<FUNCS
'\b(?:array_multisort|array_pop|array_push|\
array_replace_recursive|array_replace|\
array_shift|array_splice|\
array_unshift|array_walk_recursive|\
array_walk|arsort|asort|current|each|\
end|key|krsort|ksort|natcasesort|natsort|\
next|pos|prev|reset|rsort|shuffle|\
sort|uasort|uksort|usort)[ \t]*\([\t ]*[^$)]'
FUNCS
) | xargs -I[] find \( -name '*.tpl' -or -name '*.php' -or -name '*.inc' \) -exec \
egrep [] {} \; -print

4 комментария

Не покупайте билеты на околоновогодние рейсы у «Авианова»

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

Но в прошлом году мы билет не покупали. Вывод, кажется, однозначный — не надо покупать и в следующем.

Обидно не из-за потраченных денег (их обещали вернуть через 5…7 дней), а из-за того, что мы на момент покупки экономили что-то порядка тысячи, покупали сильно заранее, билеты стоили дёшево, а сейчас теряем около пяти, цены уже подскочили.

Два билета обошлись сегодня в 6376 рублей, это самое дешёвое предложение.

2 комментария

Вышла альфа «Оперы» 11 с расширениями

Это очень хорошая новость — вышла 11-я «Опера» с поддержкой расширений. Например, уже появилось расширение «Opera to Phone», к которому я привык на «Хроме».

Оно позволяет одним нажатием кнопки открыть в телефоне (на «Андроиде») ту же страницу, что сейчас открыта в браузере на компьютере, чтобы, например, продолжить её чтение уже с мобильника.

Из других хороших новостей — появилась поддержка WebSockets.

Добавлено: а ещё можно добавить сервисы «Яндекса» — пробки, погоду и отзывы о текущей странице.

7 комментариев

Новый спорт во сне

Должен заметить, что цирк «Дю Солей» интересен театризированным действом, а не трюками, если театр и вы понятия несовместимые, есть вероятность, что вам не нужно ходить в этот цирк.

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

Вкратце, идея заключается в том, чтобы как можно дальше кинуть копьё. Но если бы этим всё ограничилось, я бы не стал об этом писать.

Бросание копья у меня во сне — результат усилий двух людей. На острие копья есть колёсико, один человек бросает копьё в щит другого, задача второго — «принять» копьё на щит, чтобы оно скользнуло и добавить ему скорости.

Очень трудный спорт, кстати. Я пробовал обе роли.

5 комментариев

Цирк «Дю Солей»

Сходили с женой на цирк «Дю Солей». Полный восторг. Обязательно сходите, если будет в вашем городе. Если нет денег, продайте что-нибудь ненужное, нет ненужного, продайте нужное, но сходите!

6 комментариев

«Авианова» временно прекратила рейсы в Казань

Авиакомпания «Авианова» с 31 октября 2010 года прекращает выполнять рейсы Москва-Казань. […] Конечно же, мы надеемся вернуться на направление Москва — Казань так скоро, как это только будет возможно

Чёрт, наш посленовогодний рейс из Казани тоже отменили.

Добавлено позже: купили билеты у авиакомпании «Татарстан» (вот у кого отвратительный сайт-то), завтра надо будет заняться возвратом денег у «Авиановы».

2 комментария

Почему Ильич?

Неожиданно задумался — как там получилось, что на фоне всеобщего обожания Ленина (идеологическая обработка была так сильна, что в детстве я сильно расстраивался, что Ленин не дожил до наших дней), Ленина называют по отчеству — Ильич?

Сталина кто-нибудь называл «Виссарионович»? Хрущёва «Сергеевич»? Я как-то не слышал или это было не так распространено. А тут, куда ни глянь — «Заветы Ильича», «Лампочка Ильича», станция метро в Москве «Площадь Ильича», куча посёлков «Ильич» и так далее.

18 комментариев

Привет из будущего

Привет из будущего (13.81КиБ)

Для тех, кто будет читать этот пост в следующем году и позже: ребята, тут сейчас 2010-й.

5 комментариев

Первые часы с дисплеем из электронных чернил

Иллюстрация не сохраниласьЧасы на электронных чернилах (38.91КиБ)

Phosphor e-ink — первые хорошие часы на электронных чернилах. Минеральное стекло, нержавеющая сталь, натуральная кожа. Хотеть!

9 комментариев

Как пишется «переносица»?

Мне икается, когда октябрята в своём уютненьком пишут «болк», вместо «блог» (похоже, они правда думают, что «блог» так и пишется). Но есть надежда, что они вскорости изобретут новый термин — «болг», ну или «богл», мне-то всё равно.

ПУСТЬ НЕ УПОТРЕБЛЯЮТ МОЙ НИК ВСУЕ!

9 комментариев

Карго-культ личности

Это настолько смешно (для тех, кто понимает), что хочется процитировать полностью. Но только избранное:

Также пока меня не было (последние 2 недели я особо не писал в блог) удалось слить движок Nudnik.ru.

Движок очень хороший. Не побоюсь этого слова Мастер Смирнов постарался на славу (демо естественно у него на его сайте). Но также очень много файлов которые вообще не нужны.

Также есть аспекты в php когда функцию можно обработать в одну строчку, а он зачем-то бабахает в 5-ть. В результате все это добро весит 25 мб. Но это добро не грузит хостинг — это радует. А также он требует PHP 5 версии, а значит Смирнов «ухаживает» за своим детищем.

А также товарищ Болк постарался с движком. И естественно «намудрил» с ним, где разберется только он сам.

Кстати, руку могу дать на отсечение, что движок Димы весит меньше сотни кг, написан без всякого форматирования и не использует буквально ничего, что появилось в PHP5.

Кстати, Дим, а кто этот Кирилл Котиков, какой-то твой фанат?

11 комментариев

Почему в гороскопы верят

Данный эффект также называют эффектом Форера, по имени психолога Бертрама Форера (Bertram R. Forer), который в 1948 году провёл психологический эксперимент, в котором показал действие этого эффекта.

Он дал своим студентам тест личности, чтобы по результатам тестирования предоставить им анализ их личности. Однако вместо настоящего анализа, он давал всем один и тот же расплывчатый текст, взятый из гороскопа.

Затем он попросил каждого студента по пятибалльной шкале оценить соответствие описания их личности действительности, — средней оценкой было 4,26.

На оценку точности описания студентов повлиял в том числе и авторитет преподавателя. Впоследствии эксперимент был повторён сотни раз.

Из «Википедии», статья «Эффект Форера».

4 комментария

Тигры под Москвой, или Найден рассказ Кира Булычёва

— Отец, — сказал сын, садясь у моих ног. — У нашей плантации появился тигр. Он уже украл двух рабочих.

— Что делать, сын, — отвечаю я, как всегда, мудро. — Тигры всегда водились под Москвой. Испокон веку.

Я в этом в самом деле не уверен. Но нельзя вносить смущение в мозг моего сына. Он — моя надежда и опора в старости.

— Выпей холодного тростникового сока, — говорю я сыну. — И не думай о тиграх.

«Новая газета» опубликовала найденный в архиве Кира Булычёва рассказ «Шестьдесят лет спустя». На официальном сайте фантаста есть подтверждение, значит не фейк.

8 комментариев