Спецификации Microsoft

Читаю спецификацию Microsoft про рекуррентные встречи в Exchange ([MS-OXOCAL]):

SHOULD be 0x00002023 but MAY be 0xFFFFFFFF

Т. е. «должно быть 0x00002023, но может быть 0xFFFFFFFF».

Оставить комментарий

Дима Смирнов уволился из «Яндекса»

Ничего не предвещало…

Многим известный Дима Смирнов уволился из «Яндекса» по собственному. Куда уходит отказывается, зараза, говорить.

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

Браузеры: порядок загрузки и количество одновременных соединений

Для интереса написал на PHP небольшой скрипт для анализа сколько соединений открывают браузеры и в каком порядке они грузят данные. Создал HTML-файл, внутри 30 включений: по 10 на CSS, GIF и JavaScript. Favicon включён и как «icon» и как «shortcut icon».

Вот что получилось (считаются одновременные соединения):

  • Opera 10 alpha (build 1355) — 4 соединения к серверу, порядок загрузки: js, ico, css, gif; особенности: 0.css почему-то загружен два раза.
    — Internet Explorer 8 — 6 соединений к серверу, порядок загрузки: js, css, gif, ico
    — Internet Explorer 5.5 и 6 — 2 соединения к серверу, порядок загрузки: js, css, gif
    — Google Chrome 1.0.154.53 — 6 соединений к серверу, порядок загрузки: js, css, gif, ico
    — FireFox 3.0.7 — 6 соединений, порядок загрузки: js, ico, css и gif вперемешку; особенности: почему-то ico загружен два раза, gif и css грузились вперемешку
    — Safari 4 beta (528.16) — 4 соединения, порядок загрузки: js и css вперемешку, gif; особенности: js и css грузились вперемешку
    — Safari 3 (526.27.1) под Maкинтош — 3 соединения, порядок: js и css вперемешку, gif; особенности: js и css грузились вперемешку
    — FireFox 2.0.0.20 под Макинтош — 2 соединения, порядок: js, ico, css, gif; особенности: ico загружен три раза

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

Far 2.0: открываем файлы в UTF-8

FAR 2.0 alpha, как известно, умеет работать с файлами в Unicode-кодировках. А вот открывать файлы по умолчанию в UTF-8 пока не умеет.

Но этому его можно легко научить. Заходим в FAR, становимся на какой-нибудь текстовый файл в UTF-8 и нажимаем (запятые нажимать не надо): Ctrl+., Shift+F4, Shift+Enter, ↓, Ctrl+↓, ↓, ↓, ↓, Enter, Enter, Ctrl+., F4

Всё, теперь новые файлы будут по F4 открываться в кодировке UTF-8.

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

Раскрашивание прокрутки в WebKit

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

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

Стилей там добрый мешок, лучше сходить на сайт «ВебКита» и посмотреть, а мне же нравится, что появился новый CSS-хак, который позволит выделять эту и выше версии «ВебКита» (и браузеров на нём). Например, он может выглядеть так:

noindex::-webkit-scrollbar, .someclass {
    color: red;
}

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

Кроссбраузерный data URI в CSS-файлах (многабукв)

Прелюдия

Некоторое время назад, я нашёл способ, использования data URI в Internet Explorer. Data URI — специальный вид URL, который включает в себя код самого объекта. Например, таким образом можно внедрять изображения прямо в код HTML-страницы.

Выглядит такой HTML вот так:

<img src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP…и так далее" />

Где «data» — это протокол URI, image/gif — тип объекта (картинка GIF), base64 — тип кодирования, после запятой идёт сам код картинки.

Такой вид URI понимают сейчас все современные браузеры, включая Internet Explorer 8 (правда, со многими ограничениями). Плохо то, что Internet Explorer 7 и ниже этого не поддерживает, а доля этих версий настолько велика (около 50% на данный момент по данным LiveInternet), что до недавнего времени data URI использовалась крайне редко.

Я, увлёкшись исследованием малодокументированного протокола mhtml (MIME HTML), поддерживаемого в браузерах Microsoft с пятой версии, в одном из экспериментов разобрался как внедрить объект в тело HTML-документа и, что важнее, придумал как совместить оба способа (data URI и MHTML) в одном документе.

Вообще mhtml был придумал для адресации внутри так называемых «веб-архивах» — формат, очень похожий на формат писем электронной почты и предназначенный для сохранения веб-страниц вместе с картинками, стилями, JavaScript и прочим в одном файле. Сейчас он, так или иначе, поддерживается большинством браузеров.

Типичный mhtml-адрес выглядит следующим образом:

mhtml:http://example.net/index.html!fhhryregdy4gere

Где после «mhtml» идёт обычный веб-адрес, а после восклицательного знака — идентификатор объекта внутри веб-архива. Как я уже сказал, веб-архив очень похож на почтовое сообщение, где один из методов кодирования объектов — base64, тот же самый, который применяется и в dataURI.

В итоге, когда мне пришла эта идея, я совместил оба способа так, чтобы Internet Explorer видел файл как веб-архив с закодированным base64 объектом, а остальные браузеры видели этот закодированный объект как часть dataURI.

Специфика HTML допускает переносы, в том числе и внутри data URI, поэтому мне удалось задуманное относительно быстро. В CSS всё сложнее, а тема использования data URI в CSS, как оказалось, актуальнее, чем для HTML. Например, в книге Николая Мациевского «Разгони свой сайт» сделана попытка расширения моего способа на CSS, к сожалению, менее удачная, чем хотелось бы: требуется включение закодированного объекта два раза.

Фуга

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

После немногочисленных экспериментов, оказалось, что оторвать закодированный объект от начала data URI не представляется возможным, что мешает использованить mhtml — там заголовок и кодированный объект должны отделяться пустой строкой.

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

Таким образом, когда встала задача передавать в письмах что-то кроме англоязычных текстов (например, файлы или тексты на других языках), было придумано несколько способов кодирования таких объектов. Один из них — base64 (для математиков — это позиционная система счисления с основанием 64). 64 — это количество знаков, которая использует это кодирование. Это символы A-Z, a-z, 0-9 и плюс со слешем.

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

Итак, строка data URI начинается с чего-то вроде «data:image/gif;base64,» и в CSS не терпит переносов, а MHTML требует, чтобы кодированная строка начиналась с начала строки.

Из вышесказанного следует, что нужно как-то сделать начало data URI частью кодированной строки. Тут надо немного рассказать из чего состоят принятые в вебе стандарты кодирования изображений.

Оставим в покое XBM, BMP, ART, WMF/EMF, JPEG200 и прочую экзотику, поддерживаемую браузерами, и остановимся на триплете JPEG, GIF, PNG. Честно сказать с форматом GIF я знаком плохо, а JPEG и PNG исследовал несколько лет назад довольно подробно.

JPEG и PNG состоят из секций. В общих чертах, сначала идёт заголовок файла, потом сами секции, в формате (с некоторыми вариациями) «имя секции», «длина секции», «конец секции». И у JPEG, и у PNG есть секции для произвольного содержимого. У JPEG это COM и APPn, у PNG — iTXt, tEXt и zTXt. Кстати, и у GIF тоже есть похожее место — Application Extension.

Отсюда идея: Internet Explorer, декодировав файл с начала строки, получает заголовок с секцией из содержимого, куда помещается заголовок для остальных браузеров и мусор, оставшийся от декодирования начала data URI, остальные браузеры должны пропустить заголовок для IE и начать декодирование с data URI.

Получаем, на примере JPEG:

FF D8 — заголовок JPEG для IE FF E0 xx xx — секция APP0, куда прячется всё до данных изображения, «;background-color:url(data:image/jpeg;base64,» — это видят остальные браузеры FF D8 — начало JPEG для остальных браузеров «данные изображения» — это место видят уже все браузеры

Все бинарные данные выравниваются и кодируются (строка начала CSS-стиля для остальных браузеров не кодируется и IE декодирует её как мусор внутри APP0).

В моём примере такой CSS выглядит вот так:

/9j/4AAs;background-image:url(data:image/jpeg;base64;BOLKNOTE.RU,/9j/4AAC…

Легко увидеть, как видит этот стиль браузер: «/9j/4AAs» кажется ему ошибочным атрибутом (его, кстати, можно взять в комментарий), а «;» — разделителем атрибутов. И хорошо просматривается («/9j/AA») двойной старт заголовка JPEG-файла. IE начнёт декодирование с первого заголовка, другие браузеры — со второго.

Остальное должно быть понятно из примера («!ie» — CSS hack, делающий стиль видимым только для IE), как это выглядит в браузере, можно увидеть в разделе «Храню» у меня на сайте.

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

Что в интернет попало…

Костя Коломеец как-то сказал, что в интернете невозможно найти его отчество. Костя, это не так! В забытых уголках интернета, куда не заглядывает солнечный «Яндекс» есть место где написано, что ты Геннадьевич и даже, например, номер твоего дома (№18).

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

«Разгони свой сайт»

Сегодня курьер принёс издание книги «Разгони свой сайт», книга написана Николаем Мациевским по материалам известного сайта «Webo». Так как автор сейчас сидит в столовой «Яндексе» на Красной Розе, у меня теперь экземпляр с авторской подписью.

В книге, в разделе «Благодарности» увековечена моя фамилия, как автора метода кроссбраузерного dataURI в HTML. Сегодня, к приходу Николая, я немного пошаманил и сделал то же самое для CSS.

Вообще, в книге описан метод для CSS, который базируется на моих исследованиях, но требует включения кодированного файла два раза. То, что я придумал сегодня, этого не требует.

Опишу его завтра.

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

Новый рейс Москва — Казань — Москва

Чудесная новость: «Трансаэро» с 30 марта 2009 года открывает новый рейс Москва — Казань — Москва, летать будет «Боинг 737-500». Вылет из Москвы в 11:05, из Казани — 13:25 (рейсы UN 149 и UN 150).

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

Как вегетарианцы представляют себе пищевую цепь

Мясоеды едят мясо (11.97КиБ)

(Основная идея иллюстрации — мясоеды едят те же атомы, которые когда-то побывали гавном, травожуи едят какие-то другие атомы)

Порадовал диаложик в комментах у Смирнова к этой картинке:

Zkhimich: Свинья сьела собаку? Собака сьела кошку? Dr. Strangelove: Картинку рисовал вегетерианец. Zkhimich: «Как мы это себе представляем», ну да, ну да.

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

CAL? SAKA?

В исходниках libmapi (файл gen_ndr/property.h) обнаружилась константа CAL_SAKA. Константа обозначает, что выбран индийский календарь, константа читает как «кал сака». Гыгы.

Оставить комментарий

Fujitsu: цветная электронная книга

FLEPia (35.41КиБ)

Fujutsu начинает выпускать первую электронную книгу с цветной электронной бумагой (картинка с сайта Engadget). Продаваться пока будет только в Японии, в двух форматах — А4 и А5 (разрешение одинаковое — 1024 × 768), два режима — 8 и 4094 цветов.

Есть огромный недосток — скорость листания. В режиме 8 цветов листание занимает 2,3 секунды, в режиме 4096 — 10 секунд (!).

Вообще, я считаю электронные книги бесполезным устройством. Для того, чтобы я хотя бы подумал о покупке этого устройства, нужно устранить множество недостатков. Для меня электронная книга, приближенная к идеалу, это цветной экран (пусть хоть 256 цветов) с временем листания в доли секунды, размером не более 5-6 дюймов, причём с экраном во всё устройство и тонкое (не толще, чем iPhone). Ну и чтобы умело открывать FB2, PDF, Word DOC и TXT с приемлемой скоростью и поддержкой русских шрифтов и кодировок. Плюс подсветка.

Пока этого нет, для меня электронные книги не полезны.

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

Windows Mobile: hard reset

После наложения очередного патча на мой телефон под Windows Mobile, устройство перестало загружаться. Делать нечего — сделал hard reset (для тех, кто не знает — сбрасывает все пользовательские данные, настройки, программы, патчи и прочее, исключая то, что было на карточке или жёстком диске).

То, что Винда стала работать быстрее — этому я не удивляюсь, я удивляюсь тому, что аккумулятор стал садиться медленее. Раньше с трудом хватало на день, а сейчас… завтра пойдёт третий день, аккумулятор на 50%.

Отсюда урок: приобрёл телефон под Windows Mobile, сделай hard reset, неизвестно что там продавцы накрутили (кстати, привет продавцам из «Связного», которые есть на снимках внутри телефона).

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

Láska znamená (любовь это…)

Láska znamená (18.86КиБ)

Нашёл в ЖЖ чудесные словакские вкладыши «Любовь это» с высказываниями различных людей.

На вкладыше надпись: «Любить значит признавать, что мы разные. В этом заключается свобода настоящей любви. Побеждает тот, кто признает и уважает свободу воли своего партнёра»

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

iPhone beta

Я как-то не слежу за новостями из мира Apple, сегодня случайно заглянул на сайт iPhones и увидел заметку — на акцион eBay был выставлен необычный лот (см. картинку).

iPhone beta (37.30КиБ)

Это iPhone, каким он был за полгода до продажи. Темпы за которые ребята из Apple довели его до ума, меня поражают. В комментариях к заметке высказывали предположение, что это фейк, но судя по тому, что Apple запретила продавать устройство на аукционе и попросила YouTube убрать видео, это не так.

Видео с YouTube, конечно, убрали, но это ведь интернет, если что-то туда интересное попадает, то остаётся там навсегда. Осталось оно, благодаря читателям, на: FileFactory, RapidShare, Foldo, DepositFiles, Slil, Upload MB, iFile.it, Badongo, Drop.io. Пароль «bolknote.ru», без кавычек.

Автор видео пишет:

If this video is removed ill just repost it even if my account is suspended ill just make a new one and post video again scew u apple

(«Если это видео удалят, я просто залью его ещё раз, если мой аккаунт закроют, я просто заведу ещё один и залью видео снова, пошла ты Эппл»)

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

Тёплое с мягким, какие ассоциации?

С лёгкой руки Гоблина и его знаменитых «переводов Гоблина», в народ ушла фраза «не путайте тёплое с мягким», да так там и засела. Не понимаю её популярности. За годы употребления она уже настолько приелась, что хочется, чтобы употребляющие её уже проявили какую-то фантазию.

Например, за десяток лет до эры интернета был известен такой «панковский анекдот»:

— Чем отличается помидор от трактора? — Помидор красный, а у трактора дверки наружу открываются.

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

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

Opera Mobile 9.5 technology preview build

Все как-то пропустили выход Opera Mobile 9.5TP с поддержкой Google Gears. Opera Mobile — единственный пока приличный браузер для Windows Mobile.

Google Gears — расширение, которое встраивает в браузер много интересного, например, Database API или Geolocation API (лучше почитать документацию, если вы ещё этого не делали). До этого момента Gears было доступно под все браузеры (включая IE), но не под «Оперу», так что это важный шаг.

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

Opera Turbo

Пока Microsoft идёт по пути Apple (Apple тоже наивно утверждала, что Safari быстрее всех), Opera балуется со сжатием данных. Ничего особо нового, но от этого технология хуже не становится: запрос идёт на прокси-сервер компании «Опера», а оттуда возвращается сжатый текстовый (CSS, JS, HTML) и бинарный (JPEG/PNG/GIF и даже Flash) контент.

Opera Turbo (13.90КиБ)

На скриншоте, который я сделал, заметно, что JPEG (некоторые картинки в lossless-форматах так же преобразовываются в JPEG) пережимается очень сильно, причём опцию для отключения или корректировки такого поведения я не нашёл (в конфиге теперь добавились «Turbo Mode ID», «User Web Turbo Mode» и «Turbo Mode»).

Что, на мой взгляд, можно было бы улучшить: перепаковывать JPEG-картинки в JPEG-2000, а GIF пытаться преобразовать в PNG/APNG (проверяя, не уменьшается ли размер), так же вместо gzip-сжатия (подозреваю, что именно оно и было использовано) использовать что-то более эффективное (в сравнительной таблице архиваторов текста gzip на 169-м месте, bzip2 — на сотом). Ну и было бы нелишним дать пользователю больше возможностей для управления сжатием.

Естественно, интранет-сайты через прокси не проходят, не проходят через него и HTTPS-сайты по понятным причинам.

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

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