ЖЖ от 2006-09-25 15:16:00

Помнится, ещё в школе, учительница русского языка и литературы, увлекаясь всем новым, заставляла нас проходить всякие дурацкие тесты (думаете, это болезнь ЖЖ? хехе). Например — нарисовать любое фантастическое животное, которое придёт на ум, а потом по размеру головы, наличию глаз и восьми рук ставила каждому из нас персональный диагноз. Тест, кстати, довольно распространённый, в интернете его найти труда не составит. Вспомнил я про него, когда наткнулся на вот такой хоровод: http://bkmk.ru/x/

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

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

ЖЖ от 2006-09-19 13:10:00

В голове происходит редизайн. Лично мне хочется надеятся, что в нём есть логика, но я вижу, что рушатся несущие стены, кран прикручивается к канализации, а паркет кладут на стену. В голову приходят неожиданные вещи. Сегодня утром, глядя на , провожающую меня на работу, я вдруг почувствовал, что несколько лет назад я не подозревал о её существовании и меня ужаснула эта мысль. О нет, никакой романтики — ужаснула, потому что я понял, как много лет я не был рядом, как много я не знаю… Как бы это объяснить… Нас многое связывает, но как же много нас не связывает… Жаль. Я могу понять почему «отдыхаешь?» она воспринимает как укор, почему опоздания для неё — норма, приём пищи в одиночку — дикость, а красная икра — солёная и противная. А «у насекомых — лапки», да. Понять и запомнить — могу. Но она другая, любимая, но… другая. Мы смотрели разные фильмы, читали разные книги и слушали разную музыку. Я хочу многое о ней узнать, понять почему так. Но как это сделать быстро и просто?

Сегодня утром я посмотрел на неё как на отдельного человека, вот что меня удивило и ужаснуло. Кажется, я даже внутренние органы увидел в этот момент, так сильно было ощущение. Не помню, чтобы я так её ощущал. Отдельный. Человек. Может именно это она пытается мне объяснить уже несколько недель?

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

ЖЖ от 2006-09-14 12:28:00

RTFM — официальное радио республики Татарстан.

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

ЖЖ от 2006-09-14 12:26:00

bash.org.ru:

«Хрони господи Русь православную и всех православных христеан»
Мдя… Вот из-за таких молитвы Господь и не слышит — спеллчекер рубит.

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

ЖЖ от 2006-09-13 11:14:00

29 лет прошло со дня, когда я впервые воспользовался лёгкими в этой жизни. Спасибо всем тем, кто сегодня с раннего утра мешал мне спать и всем тем, кто более деликатен! :)))

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

ЖЖ от 2006-09-11 17:48:00

Какая прелесть… «Зеркало интернета делается ежедневно». И чего «masterhost» с backup'ами парятся? Есть же откуда данные восстанавливать!

http://doctor-livsy.livejournal.com/169853.html?thread=24561021#t24561021

P.S. Кстати, kukutz, bacek, вот кого надо в Yandex на работу брать! И господам из Google — возьмите на заметку!

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

[LJ2ME]

Сейчас меня сбил трамвай. Как я его не увидел, перебегая дорогу, я не знаю. Отделался болью в плече и дрожью в коленках. Хорошо, что смог быстро ретироваться с места событий, только разборок с водителем мне сегодня нехватает для полного комплекта. Что же за день такой сегодня, а?

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

ЖЖ от 2006-09-08 12:40:00

Отличное дополнение к «поцелую в засос» — «друзья на веки». Было найдено кем-то у нас в офисе в анкетах на сайте kazan.ws.

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

ЖЖ от 2006-08-29 16:10:00

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

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

ЖЖ от 2006-08-28 16:36:00

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

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

ЖЖ от 2006-08-26 15:31:00

Ну вот, решил завести ЖЖ. Не знаю, правда зачем и что с ним делать. А как тут картинки вставлять?

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

MHTML

В предыдущей статье я описывал способ для Internet Explorer, позволяющий внедрить картинки в HTML-код. К сожалению, у него нашёлся недостаток — файл, в котором содержатся ресурсы, должен иметь расширение «mht». Иначе в некоторых версиях Windows браузер ничего не покажет.

Если подумать, это не сильно меняет дело — всего-то придётся выделить «упаковку» картинок в отдельный файл и подключать по мере необходимости. Например, так:

<img src="mhtml:http://sample.com/package1.mht!image.jpg" />
<img src="mhtml:http://sample.com/package1.mht!another_image.gif" />

и так далее. Основное достоинство способа — объединение нескольких картинок в одном соединении и его удаётся сохранить.

Сегодня я расскажу как добиться мультибраузерности при помощи SSI. В других скриптовых языках такой проблемы, понятно, не возникает. Я буду рассматривать SSI веб-сервера Apache, для других серверов, думаю, адаптировать код можно будет без особых проблем. Странно, SSI, этот простой и быстрый язык, который часто отлично подходит для организации нагруженных сайтов, где хотелось бы держать информацию структурированно, почему-то считают недостаточным для программирования. Тем не менее, на нём можно делать достаточно сложные вещи (я как-то писал «песню про пиво» на этом языке, загляните в раздел «99»).

Символом «собачки» (@) я буду выделять места, где перевод строки не нужно ставить — просто мне приходится разбивать длинные места на части. Описание, если не интересно, можно и не читать, просто скопировать всё в нужный файл и положить в каталог /images/.

В настройках Apache или .htaccess должна быть включена обработка SSI в файлах .html и .mht:

AddHandler server-parsed .html .mht

Первый файл (или файлы), который понадобится — это файл самой картинки. Он должен начинаться с полного имени картинки, плюс расширение .html. Например, «1.jpg.html», внутри нужно указать MIME-тип картинки в переменной «TYPE» и после include пометить код картинки в base64:

<!--#set var="NAME" value="$QUERY_STRING" -->@
<!--#set var="TYPE" value="image/jpeg" -->@
<!--#include virtual="pict.html" -->@
4AAQSkZJRgABAgAAZABkAAD...код картинки...mJiBFoxCGkShUxyGCMYMRcSwwRiMdRZ

Следующий файл — img.html. В нём проверяется из какого браузера его вызывают — Internet Explorer или всех остальных (вторым условием убирается Opera, которая иногда притворяется IE) и, в зависимости от этого, выводит, либо ссылку на mht-файл (у меня в коде считается, что все эти файлы лежат в каталоге /images), либо data URL, который генерирует pict.html:

<!--#if expr="$HTTP_USER_AGENT=/MSIE/ && $HTTP_USER_AGENT!=/Opera/" -->@
mhtml:http://<!--#echo var="HTTP_HOST" -->/images/package1.mht!<!--#echo var="QUERY_STRING" -->@
<!--#else -->@
<!--#include virtual="$QUERY_STRING.html?$QUERY_STRING" -->@
<!--#endif -->

Внутри файла package1.mht ссылки на файлы картинок (обратите внимание на параметры вызова в include virtual), в константе BOUND задаётся boundary (разделительная строка), о которой я говорил в прошлый раз. В include надо перечислить (пример показан для двух файлов) все файлы картинок, которые будут входить в этот набор.

<!--#set var="BOUND" value="Next_Section" --><!--
MIME-Version: 1.0
Content-Type: multipart/related; boundary="<!--#echo var="BOUND" -->"

--<!--#echo var="BOUND" -->
Content-Location: index.htm
Content-Transfer-Encoding: base64
Content-Type: text/html

<!--#set var="MHT" value="1" -->
<!--#include virtual="1.jpg.html?1.jpg" -->
<!--#include virtual="2.jpg.html?2.jpg" -->

--<!--#echo var="BOUND" -->-->

Последний файл — pict.html. Вызывается он из файлов картинок. Если он вызывается из mht, то выдаёт кусок mht-кода для данной картинки, иначе — data URI.

<!--#if expr="$MHT" -->--<!--#echo var="BOUND" -->
Content-Location: <!--#echo var="NAME" -->
Content-Transfer-Encoding: base64
Content-Type: <!--#echo var="TYPE" -->

<!--#else -->data://<!--#echo var="TYPE" -->;base64,<!--#endif -->

Теперь, как применять эту груду файлов. Всё очень просто — просто вставляем в нужно место следующий тег:

<img src="<!--#include virtual="/images/img.html?2.jpg" -->" />

И смотрим на результат. В исходном коде в IE мы должны увидеть ссылку на package1.mht, в остальных браузерах — data URI, во всех браузерах — картинку.

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

До скорых встреч!

P.S. До скорых встреч! Что-то давно у меня на сайте не было графики. Пожалуй, надо разбавить. Это я, сбрасываю избыток энергии после Pump It Up. На нижний брейк похоже?

Почти брейк (44.26КиБ)

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

Колдуем с MHTML

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

В некоторых версиях Windows XP, 2000 (закономерность не выявлена, но, видимо, дело в наличии каких-то Service Pack) и, кажется, во всех 2003, способ не работает, если расширение файла не mht. Это несколько сужает сферу применения данного способа.

Обход этой проблемы читайте в следующей статье. Далее сама статья:

Сегодня немного поколдуем, ок? Тем, кому не интересна кухня, где готовят внутренности сайтов, могут перейти к просмотру чего-то более интересного, остальные оставайтесь.

Браузеры всё больше превращаются в комбайны, которые поддерживают десятки схем доступа к данным, от всем известных file, ftp, http, https, до полузабытых gopher, finger, news и так далее. Среди этого списка есть интересная схема — data, который поддерживают уже, кажется, все браузеры, кроме Internet Explorer (включая беты седьмых версий). Для тех, кто незнаком с ним, общий вид строки запроса в этой схеме выглядит так:

data://[mime-тип;][тип кодирования],данные…

смысл в том, что данные (картинки, javascript, другие ресурсы) можно помещать внутрь HTML. Эта схема является частью стандарта HTML 4.0, если я не ошибаюсь, но, в силу того, что она не поддерживается основным игроком на рынке браузеров, используется лишь эпизодически — чаще всего в интранет-приложениях и расширениях к Opera и Mozilla FireFox. Выглядит это, примерно, так:

<img src="data:image/png;base64,iVBORw0KGgoAAAAN...и так далее">

Эта схема, кроме возможности помещать различные данные в HTML, имеет и более очевидные преимущества. Обычно, браузер открывает не более 2-4 соединений с сервером, через которые и получает данные. Если на странице очень много мелких картинок, браузер не имеет возможности загрузить и показать их одновременно — приходится ограничиваться означенным количеством соединений.

Мы, в нашей студии, обычно стараемся использовать карту ссылок, вместо нескольких мелких кнопок, например, для ускорения загрузки. Я очень много разговаривал с поисковиками Google и Yandex, но они уверены, что в IE внедрение ресурсов в HTML невозможно. Так ли это?

Нет. По крайней мере мне удалось найти минимум один способ сделать это. В интернете я ничего подобного не встретил, так что будет считать, что его изобрёл я. Натолкнула меня на эту мысль одна из кошмарных домашних страниц, которую сверстали в Microsoft Word и сохранили… в формате MHTML.

Этот формат первым начали использовать в браузере от Microsoft (поэтому его иногда расшифровывают как «Microsoft HTML») для того, чтобы можно было сохранять текст со всем содержимым — стилями, изображениями в одном файле, поэтому этот формат ещё называют веб-архивом (Web Archive). Чаще же всего его название расшифровывают как MIME HTML и в этом заключается главная проблема.

MIME HTML сильно отличается от обычного HTML форматом — внутри заголовок, информация об именах и форматах файлов, кодированные файлы изображений и так далее — более всего это похоже на файлы писем с вложениями (посмотрите исходный текст письма в своём почтовом клиенте). Нам было бы интересней, если бы в остальных браузерах показывалось бы что-то более похожее на HTML.

Просматривая веб-архив в браузере, я обнаружил, что IE отображает файлы архива через специальную схему — mhtml. У него есть интересная особенность — он позволяет адресовать файлы внутри веб-архива извне, вот так:

mhtml:http://example.com/file.mht!image.jpg

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

<!--
Content-Type: multipart/related; boundary="=_NextPart_01C6A9B1.539AB070"

--=_NextPart_01C6A9B1.539AB070
Content-Location: index.htm
Content-Transfer-Encoding: base64
Content-Type: text/html

--=_NextPart_01C6A9B1.539AB070
Content-Location: img.jpg
Content-Transfer-Encoding: base64
Content-Type: image/jpeg

4AAQSkZJRgA....закодированная...base64...картинка...BAgAAZABkAADMdRZ

--=_NextPart_01C6A9B1.539AB070-->

<body>
<img src="mhtml:http://www.test/index.html!img.jpg">
</body>

Те, кто знает как устроено обычное электронное письмо изнутри, разберутся и сами, для остальных расскажу. Строка, которую вы видите после слова «boundary», разделяет файл на секции. Секции начинаются с двух минусов и разделяющей строки. Заканчивается веб-архив разделяющей строкой, которая начинается и заканчивается двумя минусами — у меня завершающие минусы являются частью закрывающей части HTML-коментария. У секций есть заголовок:

Content-Location — имя файла внутри архива;
Content-Tranfer-Encoding — формат кодирования файла, экономичнее всего использовать base64;
Content-Type — MIME-тип файла;

если вы не знаете, что такое base64 и MIME-тип, то лучше обратиться к поисковику — такие вещи лучше знать. Первая секция с типом «text/html» — обязательная, без неё Internet Explorer не отобразит ваши файлы, остальные могут содержать данные любых типов. Ссылка может указывать на тот же самый или любой другой файл, который содержит веб-архив.

Я не уверен насчёт четвёртой версии браузера, но 5.0 и выше должны отобразить такой HTML нормально. У этого способа есть преимущество перед схемой data — на файл можно ссылаться несколько раз. Организация вывода разного контента для двух групп браузеров — сейчас довольно простая задача. Лучше всего, конечно, использовать для этого язык на стороне сервера (для JavaScript объёмы данных слишком значительные) — например, SSI или PHP.

Кстати, Opera 9 так же поддерживает веб-архивы, но использует для этой цели другую схему — «attachment». Но Opera 9 слишком мало распространена и, кроме того, этот браузер давно поддерживает схему «data».

Ещё хотелось бы упомянуть, что Internet Explorer поддерживает ещё одну схему, через которую, вероятно, можно получить доступ к ресурсам веб-архива — «mid», но я в этом не уверен и никаких экспериментов по этому поводу не проводил.

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

ЖЖ от 2006-08-23 12:37:00

(падает в обморок) Это, наверное, только веб-мастера поймут. Сайт в формате MHT: http://egyptyanka.narod.ru/ (выходя из обморока) смотрите в Internet Explorer или Opera9. FireFox это не откроет.

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

[LJ2ME]

Обьясните, кто в курсе. Почему с 1 августа, несмотря на то, что позвонить с городского на сотовый стоит денег (пусть и вызывающей стороне), операторы всё равно делают какие-то телодвижения в тарифах, вроде фиксации курса, платы за соединение и т.п?

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

ЖЖ от 2006-08-21 13:24:00

Давно мы с  не фотографировались (около 200Кб)
Я в казанском кремле (100Кб)
Рис.1. Я на ступенях кремлёвской стены в Казани



Иллюстрация не сохранилась
Рис.2. вышла на охоту.



Иллюстрация не сохранилась
Рис.3. поймала дичь.

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

ЖЖ от 2006-08-19 18:02:00

Я всегда думал, что самое самое больше, имеющее название число, это гугл («google») — 10100. Оказывается, есть вигинтиллион (10120), центиллион (10600) и даже гуголплекс (1010100).

Источник: http://deb.telenet.ru/know/qa-0047.shtml

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

ЖЖ от 2006-08-19 17:44:00

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

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

Что удручает всё сильнее — времени на эксперименты всё меньше. Масса идей, для проверки которых нет времени, из-за чего страдает, в общем-то, дело, но это никому не объяснить, даже, порой, себе. Выхлоп от идей не бывает 100%, наверное, даже 30% не бывает. Нужно время на реализацию и проверку, многое приходится отправлять в мусорку — так не работает или появилась идея лучше. Всё выношенное до этого, по сути, уже реализованно на стадии проектирования нового framework. Без экспериментов неизбежно технически отстанем, так как frameworks двигаются вперёд и позволяют программистам делать проекты всё быстрее и быстрее. Посмотрите хотя бы на Ruby On Rails. А теперь уберите «рельсы». Разница очевидна. Ничего, пару-тройку лет протянем. Пользователю главное — интерфейс и отсутствие багов. Дальше, когда скорость работы снизиться до неконкурентного минимума пути два — нагнать или делать типовые проекты, ну или почивать на авторитете и связях.

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

Хорошо хоть в отношениях явный прогресс. Вместо «два вперёд, три назад» теперь «два вперёд, шаг назад» или «пробежка туда и обратно». Убеждаюсь, что проблема, в общем-то, не в нас, а в её зависимости от родителей, которые успешно пытаются сломать девушку в ребёнка. Ещё хорошо, что я начал понимать и проще относится к многим вещам. Прогресс — люблю, любой.

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

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