программирование
MotionJPEG и favicon
Пришло в голову попробовать использовать «картинку» (я продолжаю считать, что это видео) в формате MotionJPEG в качестве favicon. Ну забавно же — в favicon на сайте не примитивная анимация (через animated GIF или APNG),
Да, понимаю, бесполезно и трафик жрёт, это just for lulz.
Смотрел в последних браузерах. IE9PP2 ничего не показал (он MJPEG не понимает), Opera 10.70a ждёт завершения скачивания и ничего не показывает, не дождётся,

Вот ещё пример бардака в браузерах — стало быть favicon выводится (почему?) не как обычная картинка. Ну, я понимаю, в DOM favicon выглядит совсем иначе, ну и что? Внедрённое изображение через тег OBJECT тоже выглядит в DOM иначе, но выводится наверняка тем же куском кода, который использует и тег IMG.
PHP для «Андроида»
Появился проект «PHP для „Андроида“», поддержка PHP 5.3 интегрируется в т. н. «Android Scripting Environment».
На PHP для «Андроида» можно писать утилиты командной строки, фоновые процессы
В данной версии PHP поддерживается всё API платформы — есть возможность управлять вибрацией, BT, камерой,
PHP 5.3: что нового?
На сайте «SlideShare» появились (на русском языке) слайды с конференции «PHPconf» «Что нового с PHP 5.3» (на случай, если
CSS хак для WebKit («Хром» и «Сафари») через «__qem»
Я тут понял, что CSS Unit «__qem» вполне себе подходит на роль
К примеру:
div {
background: #000; /* фон будет чёрным везде, кроме… */
background: 0__qem #fff; /* …WebKit, тут он будет белым */
border: 0; /* бордюра не будет, кроме… */
border: 0__qem solid black; border-width: 10px; /* …WebKit, тут будет чёрный толстый бордюр */
position: relative; /* блок будет виден везде, кроме… */
top: -100000_qem; /* …WebKit, тут его видно не будет */
}Я попробовал поиграть с Media Queries, скомбинировать с «__qem» не удалось, но зато выяснилось, что браузеры и тут стандарт нарушают:
@media (color: 0!) {
/* работает в «Хроме», по крайней мере, в 6-м */
}
@media (color: 0_) {
/* работает в «Опере», по крайней мере, в 10.60 */
@media {
/* работает в «Опере» 10.60, «Хроме» 6, не работае в FF4, IE8, IE9PP2 */
}
}Судя по всему, эта нестандартная единица измерения не распознаётся
Что такое __qem?
Случайно встретил в коде внутренних CSS WebKit странную единицу (CSS Unit) — «__qem»:
p {
display: block;
margin: 1.0__qem 0px
}Спасибо, во внутренней «Ярушке» подсказали что это:
After lots of digging, I learned that the «__qem» unit used in Safari’s stylesheet stands for «quirky» em, and has to do with how margins behave in «quirks» mode, which is a topic for another day.
Удивительно. Причём, во всём интернете только один человек до этого докопался.
Join the dark side and get cookies
У меня в комментариях происходит интересное про проблемы cookie в «Опере». Проблемы наблюдаются в версиях 7.xx, 8.5x, 9.0x и 10.60. Возможно они есть и ещё
Я
Спасибо Максиму Зотову, всё становится на свои места — некоторые версии «Оперы» принимают cookie с другого домена только со второго раза.
Не слишком ли вы увлеклись всякими тенями и уголками, ребята? Действительно ли нужно так часто выпускать новые версии без должного всестороннего тестирования? Имидж «Оперы» (сужу по комментариям на «Хабре») и без того почти такой же как у IE. Только IE ругают на неподдержку стандартов, а «Оперу» за своеобразное их трактование и баги.
Грустно это всё.
P.S. Подмывает создать тест, который проверял полноту поддержки старых, базовых вещей — поддержку Unicode, cookie, regexp и так далее.
CSS hack для FireFox 4
В FireFox4 входит новый селектор — «
:-moz-any(ol, ul) li {
list-style-type: none
}
a:-moz-any(:hover, :visited) {
color: black;
}В это связи легко получается
:-moz-any(x), .class_for_ff4 {
color: red; /* стиль только для FF 4+ */
}Скорость JavaScript в iOS и Android

Только мне стало интересно как со скоростью JavaScript у флагманов современной мобильности, как оказалось, что добрые люди уже всё оттестировали.
Вред алкоголя или история изобретения тега BLINK
На «Хабре» интересная статья о вреде алкоголя — «Происхождение тега <blink>»:
Субботним утром я направился в офис за чем угодно, но точно не за мигающим текстом. Он мигал на мониторе во всей своей красе и в браузере. Вы спросите, как такое случилось? Выяснилось, одному инженеру так понравилась моя идея, что выйдя заполночь из бара, он вернулся в офис и реализовал тег мигания. Поутру он всё еще был там, крайне гордый собой.
Надо бы узнать историю тега «marquee», возможно там тяжёлые наркотики виноваты.
Motion JPEG или о чём я говорил
Некоторые ребята
Я лишь хотел обратить внимание на два факта:
- на бардак, когда формат видео не поддерживается тегом VIDEO ни в одном браузере, но поддерживается браузерами
- на то, что говорить «в браузерах нет единого формата видео» некорректно
И только.
Бардак: Motion JPEG (M-JPEG) и тег VIDEO
С утра, складывая носковый пасьянс (не сошёлся, три (!!!) разных носка) — жена постирала чёрное, я задумался о формате

Таким образом, вопреки всем разговорам, у нас уже есть единый потоковый видеоформат, de facto, причём есть давно. Правда, плохенький (напоминаю — каждый кадр целый JPEG) и проигрываемый немного
Бардак заключается в том, что тег VIDEO не поддерживает формат Motion JPEG ни в одном из браузеров. Это многое говорит о том как производители браузеров определяют вектор развития их детища. В погоне за модой забывают наводить порядок и править баги (красный круглый камень в дырочкой
Воспроизводится
При помощи тега CANVAS,
Можно, кстати, вспоминить, что Internet Explorer
Ещё более кстати, что этот плеер будет поддерживать видео в формате AVI и кодеки установленные в системе, так что если у вас в системе есть кодек
with в JavaScript и VBScript
Одной из бесполезных конструкций языка JavaScript называют «with». Неспроста, эта конструкция непрозрачна и потенциально может создать непростые проблемы. Небольшой код:
with (MyObject) {
width = '100px';
height = '200px';
display = 'block';
}Что будет, если свойства с таким именем не найдётся? Код заменит значения переменных width/height/display или же создаст их, если их ещё не было. Что приведёт к проблемам, если мы в связанном коде
С языком VBScript я знаком с тех пор как программировал, используя технологию ASP. В дальнейшем, я иногда использовал его, чтобы программировать
Этот язык я,
With MyObject
.width = "100px"
.height = "200px"
.display = "block"
End WithЗаметили точки впереди? Они говорят о том, что используются не просто переменные, а свойства (ну или методы) объекта, указанного в «With». Вот так просто решается куча проблем.
Прощай, «Опера»
Прощай, «Опера», мне было хорошо с тебой, но это невыносимо. С версии 10.50 ты обрастаешь багами, как баржа ракушками. Сегодня я увидел, что на твоём FTP лежит релиз версии 10.60, а в нём три критичных для меня бага, два из которых делают жизнь в нашем интранете для меня труднее. Я терпел, сколько мог, но больше не могу.
Научите меня пользоваться «Хромом», ещё лучше — «Хромиумом», он, говорят, быстрее развивается, что немаловажно для молодого браузера. Что ставить? Откуда скачать уже собранные версии «Хромиума»?
Хороним XBM
Помимо GIF, JPEG, PNG и SVG в браузерах есть ещё один «общий» формат графики — XBM. Не сказать чтобы сильно полезный, скорее забавный. Формат текстовый и очень простой, как раз его использует Wolf5k для отображения графики.
Несколько лет назад его поддержку прекратил браузер IE, с версии IE6.0SP1 XBM больше не поддерживается. Причина проста — IE падал, если подсунуть ему неправильно сформированную картинку. Поэтому поддержку формата просто отключили (сделали ключ в реестре («BlockXBM»), если очень хочется, поддержку можно вернуть).
И вот сегодня я, поставив Firefox 4.0b2pre, увидел, что в нём нет поддержки XBM. Стал разбираться. Оказывается его поддержку выключили в версии 3.6:
It doesn’t seem like anyone uses XBMs on the web these days (microsoft dropped support for them in ie6), and we no longer use them anyone in the platform. Each additional image decoder makes it more time consuming to maintain imagelib, because changes have to be replicated. Thus, unless somebody has a reasoned opinion to the contrary, I’ll remove XBM support in a week or two.
Увы. Из исходников выкинули совсем, никакого ключа в реестре.
Снова про кроссбраузерные скруглённые уголки
Решение проблемы скруглённых уголков через VML есть в статье Льва Солнцева «Кроссбраузерные закруглённые уголки» (без JavaScript). Проблема заключается в следующем:
В VML есть предопределённая фигура: прямоугольник с закруглёнными углами roundrect. […] Но у этой фигуры есть один значительный недостаток: радиус кривизны задаётся через отношение к большей стороне, что делает результат непредсказуемым и неподходящим для многих случаев.
То есть, при одинаковом параметре закругления блоков разного размера, радиус кривизны будет различаться.
Google Native Client
Поиграл немного с Google Native Client — это плагин для браузера (поддерживаются Firefox, «Опера», «Сафари» и «Хром» и платформы Windows, Mac и Linux на x86,
Это плагин, который умеет исполнять скомпилированный бинарный (!) код в браузере.
Меня интересовало как тут соблюдается безопасность. Коду многое запрещено (по сути, всё, что разрешено — это эффективное использование процессорного времени, за остальным нужно обращаться в браузер через NPAPI или SRPC (Simple RPC)), но разработчики много говорят о том, что допускаются ассемблерные вставки.
Как так?
Ларчик, как оказывается, открывается просто и достаточно остроумно.
Не знаю как там в процессорах ARM, а в x86 команды могут иметь разную длину,
Это даёт возможность замаскировать внутри команды любую запрещённую команду и выполнить её, сделав переход не на первый байт. Как Google Native Client защищает нас от этого? Очень просто.
В Ассемблере есть специальная команда — «NOP» (в x86 занимает один байт, её код — «90»), она не делает ничего. Все команды вашей программы выравниваются до 16 байт этой командой. То есть «MOV AL,41» будет дополнена
Вторая опасность — код в данных, ведь почти любые последовательности байт это
Интересно, что код, контролирующий безопасность и реализующий SRPC, получился очень небольшой, в ролике на YouTube разработчик говорит то о 6000 строк, то о 6000 байт. В любом случае, то и другое — немного. Там же (в ролике) показывали интерпретатор Ruby, работающий в браузере. Это интересно, но не более, интереснее то, что код на Си (или там C++, неважно) пришлось менять очень мало, чтобы перекомпилировать его в Google Native Code.
Мне кажется, это интересный проект.
Wolf 5k strikes back
Забавная была игрушка «Wolf5K». Это игра на JavaScript, занимающая пять килобайт (!). Был такой конкурс
Ребята произвели фурор тогда, они уместили в этот размер небольшую псевдотрёхмерную бродилку. Никаких CANVAS! Хитрость в том, что вся графика (кроме кровищи) делается в формате XBM и передаётся тегу IMG через схему «javascript». Игрушка работала в IE5, IE6, Mozilla 1.1+ и Netscape 4.77 для Мака.
Формат XBM — это текстовый формат
В общем, захотелось мне
javascript:void(eval(X.toString().replace(/"j.*?;"/, '"data:image/x-xbitmap," + encodeURI(im)')))В IE
Добавлено утром: читатели сообщают, что в «Сафари» тоже работает.
Короткий способ определения IE через JavaScript в IE9 не сработает
Из блога IEBlog:
var len = [1,2,3,].length;
alert(len); //should be 3, IE8 says 4В IE9 поправили застарелый баг — Internet Explorer добавляет ещё один элемент в массив, если в конце перечисления элементов массива есть запятая. На этом основан самый короткий способ проверки на IE через JavaScript. По стандарту последняя запятая игнорируется. IE9 теперь следует стандарту.
Не будет работать и проверка через «\v» (цитата из того же блога):
alert("\v"==="v");//IE8 said true, should be false
alert("\v"==="\u000b");
//IE8 said false, should be trueВ общем, полагаться на хаки в таких проверках будет нельзя. Думаю, единственный надёжным способом будет условная компиляция:
if (/*@cc_on!@*/0) {
// IE
}P.S. А вот найденную мной… особенность метода split в IE9 так и не поправили.
Canvas в IE9 будет
Ну что, AMD действительно тогда проговорилась, никакой ошибки нет — в IE9 будет CANVAS. Только что появился Internet Explorer 9 Platform Preview 3 и там есть CANVAS.
Должен сказать, скорость очень хорошая. Реализовано пока не всё (это
Кажется, с применением полупрозрачности (и тени) производительность IE9PP3 пока резко падает.
Из других новостей: AUDIO, VIDEO, CANVAS с аппаратным ускорением, увеличена производительность и улучшена его поддержка JavaScript, поддержка WOFF (формат шрифтов), ACID3 — 83%, HTML5 test — 84/300 (предыдущий результат — 32).
Unicode со «школотой»
Видео для веба: у VP8 есть будущее
На «Хабре» появилось сравнение кодеков Theora, H.264 и VP8, основной вывод:
Формат VP8 вполне подходит для веба. Он намного лучше Ogg Theora и сравним с H.264 по параметру размер/качество. Вопросы о патентной чистоте и скорости декодирования остаются пока открытыми. Получит ли формат распространение — это вопрос скорее коммерческого и политического успеха, нежели технического.
H.264 остаётся лидером, а Theora, похоже, безнадёжно отстала от конкурентов.