IE9 и CSS3 2D Transforms
Появился Internet Explorer 9 PP6, из интересного — появилась поддержка
Кроме того, появилась поддержка семантических тегов HTML5 (section, nav, article и так далее). Раньше при разборе дерева элементы, содержащие эти теги наследовались от HTMLUnknownElement, теперь — от HTMLElement.
Вкусни! Сочни!

Stoyan Stefanov

Стоян Стефанов (архитектор YSlow, автор нескольких книг по JavaScript и ряда любопытных исследований) сейчас в «Яндексе» рассказывает лекцию. К сожалению, я пойти не смог, а жаль:
— Болк, а ты чего не на Стояне? Он тут тебя упомянул =)
— Э… как это?
— Он щас в Яндексе читает лекцию, ну и типа сказал вот крутой чувак (и твоего блога скриншот)
Hello, Stoyan! Sorry I could not attend your lecture.
Квартира, прогресс

Дом, в котором будет наша с женой квартира, строится космическими темпами, обещают, что к концу декабря он будет построен целиком. Вполне верится — я время от времени наблюдаю через камеры за строительством, могу оценить скорость.
Из других хороших новостей — квартиру не просто разрешили перепланировать в двухкомнатную, после сдачи дома компания сама предложит проект и осуществит перепланировку. Думаю, что наши с женой многочисленные обращения по этому вопросу помогли набрать критическую массу для принятия такого решения.
Понятно, что это за отдельные деньги, но всё равно радует. Есть оправданная надежда, что эти отдельные деньги будут сильно меньше, чем в сторонних фирмах, которые занимаются перепланировкой.
«Аэрофлот» отменил рейс в Казань 31-го
И «Аэрофлот» туда же, вслед за «Авиановой» — тоже отменил околоновогодний рейс.
В чём смысл тогда покупать билеты заранее? Это
Штраф за сжигание листвы
Давайте откроем Закон московской области от 30 ноября 2004 года «О государственном
Сжигание листвы, травы, тополиного пуха, частей деревьев и кустарников, других остатков растительности в местах общественного пользования и на территории хозяйствующих субъектов, за исключением специально отведенных мест, влечет наложение административного штрафа:
на граждан — в размере от пятисот до одной тысячи рублей; на должностных лиц — в размере от одной тысячи до пяти тысяч рублей
Теперь вспоминаем что такое сигарета — бумажный цилиндр, внутри которого находится измельчённый табак для курения. Табак — это травянистое растение, трава. Высушенный и измельчённый табак — явно остатки растительности.
Товарищи курильщики, ну вы поняли, да?
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).
Первая операция, которую вам нужно сделать ещё до запуска парсера — это запустить следующий скрипт. У меня парсер работает
Так что я перекодировал код туда и обратно и сравнил что получилось:
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);
}Добавлено позже: нашёл ещё два бага: неверно отрабатываются
Конструкции 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Не покупайте билеты на околоновогодние рейсы у «Авианова»
Как я недавно писал «Авианова» отменила несколько десятков рейсов в Казань, мы с женой тоже попали под раздачу. В прошлом году было то же самое — почти 100 рейсов отменено примерно в это же время.
Но в прошлом году мы билет не покупали. Вывод, кажется, однозначный — не надо покупать и в следующем.
Обидно
Два билета обошлись сегодня в 6376 рублей, это самое дешёвое предложение.
Вышла альфа «Оперы» 11 с расширениями
Это очень хорошая новость — вышла
Оно позволяет одним нажатием кнопки открыть в телефоне (на «Андроиде») ту же страницу, что сейчас открыта в браузере на компьютере, чтобы, например, продолжить её чтение уже с мобильника.
Из других хороших новостей — появилась поддержка WebSockets.
Добавлено: а ещё можно добавить сервисы «Яндекса» — пробки, погоду и отзывы о текущей странице.
Новый спорт во сне
Должен заметить, что цирк «Дю Солей» интересен театризированным действом, а не трюками, если театр и вы понятия несовместимые, есть вероятность, что вам не нужно ходить в этот цирк.
После того, что там творилось, было бы странно, если бы мне не приснилось
Вкратце, идея заключается в том, чтобы как можно дальше кинуть копьё. Но если бы этим всё ограничилось, я бы не стал об этом писать.
Бросание копья у меня во сне — результат усилий двух людей. На острие копья есть колёсико, один человек бросает копьё в щит другого, задача второго — «принять» копьё на щит, чтобы оно скользнуло и добавить ему скорости.
Очень трудный спорт, кстати. Я пробовал обе роли.
Цирк «Дю Солей»
Сходили с женой на цирк «Дю Солей». Полный восторг. Обязательно сходите, если будет в вашем городе. Если нет денег, продайте
«Авианова» временно прекратила рейсы в Казань
Авиакомпания «Авианова» с 31 октября 2010 года прекращает выполнять рейсы
Москва-Казань. […] Конечно же, мы надеемся вернуться на направление Москва — Казань так скоро, как это только будет возможно
Чёрт, наш посленовогодний рейс из Казани тоже отменили.
Добавлено позже: купили билеты у авиакомпании «Татарстан» (вот у кого отвратительный
Почему Ильич?
Неожиданно задумался — как там получилось, что на фоне всеобщего обожания Ленина (идеологическая обработка была так сильна, что в детстве я сильно расстраивался, что Ленин не дожил до наших дней), Ленина называют по отчеству — Ильич?
Сталина
Как правильно убить себя фанеркой (видеоинструкция)
Привет из будущего

Для тех, кто будет читать этот пост в следующем году и позже: ребята, тут сейчас
Первые часы с дисплеем из электронных чернил
Phosphor
Как пишется «переносица»?
Карго-культ личности
Это настолько смешно (для тех, кто понимает), что хочется процитировать полностью. Но только избранное:
Также пока меня не было (последние 2 недели я особо не писал в блог) удалось слить движок Nudnik.ru.
Движок очень хороший. Не побоюсь этого слова Мастер Смирнов постарался на славу (демо естественно у него на его сайте). Но также очень много файлов которые вообще не нужны.
Также есть аспекты в php когда функцию можно обработать в одну строчку, а он
зачем-то бабахаетв 5-ть. В результате все это добро весит 25 мб. Но это добро не грузит хостинг — это радует. А также он требует PHP 5 версии, а значит Смирнов «ухаживает» за своим детищем.А также товарищ Болк постарался с движком. И естественно «намудрил» с ним, где разберется только он сам.
Кстати, руку могу дать на отсечение, что движок Димы весит меньше сотни кг, написан без всякого форматирования и не использует буквально ничего, что появилось в PHP5.
Кстати, Дим, а кто этот Кирилл Котиков,
Почему в гороскопы верят
Данный эффект также называют эффектом Форера, по имени психолога Бертрама Форера (Bertram R. Forer), который в 1948 году провёл психологический эксперимент, в котором показал действие этого эффекта.
Он дал своим студентам тест личности, чтобы по результатам тестирования предоставить им анализ их личности. Однако вместо настоящего анализа, он давал всем один и тот же расплывчатый текст, взятый из гороскопа.
Затем он попросил каждого студента по пятибалльной шкале оценить соответствие описания их личности действительности, — средней оценкой было 4,26.
На оценку точности описания студентов повлиял в том числе и авторитет преподавателя. Впоследствии эксперимент был повторён сотни раз.
Из «Википедии», статья «Эффект Форера».
Тигры под Москвой, или Найден рассказ Кира Булычёва
— Отец, — сказал сын, садясь у моих ног. — У нашей плантации появился тигр. Он уже украл двух рабочих.
— Что делать, сын, — отвечаю я, как всегда, мудро. — Тигры всегда водились под Москвой. Испокон веку.
Я в этом в самом деле не уверен. Но нельзя вносить смущение в мозг моего сына. Он — моя надежда и опора в старости.
— Выпей холодного тростникового сока, — говорю я сыну. — И не думай о тиграх.
«Новая газета» опубликовала найденный в архиве Кира Булычёва рассказ «Шестьдесят лет спустя». На официальном сайте фантаста есть подтверждение, значит не фейк.