Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Формат XBM, Star Wars, LOOSE

Добрый день! Мы продолжим.

Многие, наверное, уже видели 5K Wolfstein, написанный на JavaScript. Явление, само по себе, весьма любопытное, но меня оно интересует с несколько иной точки зрения — в программе использована графика в формате XBM.

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

Формат XBM является частью X Window System, хорошо знакомой юниксоидам. Внешне внутренность такого файла выглядит, как программа на C и имеет вот такой вот формат:

#define имя_width количество_пикселей_по_горизонтали
#define имя_height количество_пикселей_по_вертикали
static unsigned char имя_bits[] = {
       последовательность_чисел
}
XBM

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

#define _width 16
#define _height 16
static unsigned char _bits[] = {
  0xff, 0xff, 0x01, 0x80, 0xfd, 0xbf, 0x05, 0xa0, 0xf5, 0xaf, 0x15, 0xa8,
  0xd5, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0xd5, 0xab, 0x15, 0xa8, 0xf5, 0xaf,
  0x05, 0xa0, 0xfd, 0xbf, 0x01, 0x80, 0xff, 0xff}

Значение выражения последовательность_чисел я, думаю, понятно — это перечисленные через запятую байты матрицы, каждый бит которых определяет цвет соответствующей точки. Мои эксперименты показали, что графику этого типа понимает широкий набор браузеров. Я проводил тесты под Opera 6.04, Microsoft Internet Explorer 6.0, Mozilla 1.01b, Netscape Navigator 4.79 и Netscape Navigator 7.0 — все они без проблем показали эту картинку.

Как я уже упоминал, генерацию графики этого типа под некоторыми браузерами можно поручить клиентским скриптам. Под Windows c этой задачей справляются IE 5, 6 и Mozilla, под Mac — Netscape 4.77 и выше, под Unix — Mozilla. По поводу остальных браузеров и платформ мне ничего не известно.

Метод выглядит несколько странно и заключается в записи содержимого файла в переменную с последующим вызовом в теге <IMG> через метод javascript:

<script>
image_var = '#define _width 16\n#define _height 16\nstatic unsigned char _bits[] = { 0xff, 0xff, 0x01, 0x80, 0xfd, 0xbf, 0x05, 0xa0, 0xf5, 0xaf, 0x15, 0xa8, 0xd5, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0xd5, 0xab, 0x15, 0xa8, 0xf5, 0xaf, 0x05, 0xa0, 0xfd, 0xbf, 0x01, 0x80, 0xff, 0xff}'
</script>

<img src='javascript:image_var' width="32" height="32" />

С GIF, JPEG и BMP такой фокус, к сожалению, не проходит — думаю, во всем виноват символ с кодом 0, который в изобилии встречается в файлах этих форматов.

R2-D2

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

Кстати, при прочтении этого труда у меня возникло стойкое ощущение, что к созданию фильма приложили руку IT-монстры. Так общегалактический язык называется Basic (основной), в типах дроидов фигурирует ASP droid, а самих дроидах установлен процессор Intellex.

Кстати, если верить «Энциклопедии…» процессор дроида серии R1 (судя по всему — Intellex IV) выполняет 10000 операций в секунду, «Энциклопедия…» называет его «высококлассным». Видимо в 1977 году эта цифра казалось просто невероятной.

Увидел этот фокус на канале «Discovery» в передаче про проституток, перерыл весь Интернет и нашел его описание. Мне он показался весьма забавным и очень простым в исполнении, сейчас научу вас его показывать. Так как результат все равно представляет интерес только тем, кто знает английский, то и описание я переводить не буду, тем более, что оно немного неприличное. :)

Фокус нужно показывать на калькуляторе, одновременно рассказывая: «so, there was 1 girl, who was 16, and got 69ed 3 times. (11669×3) What was she? 35007».

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

Для желающих попытать свои силы в придумывании собственного фокуса с калькулятором, даю ссылку на ресурс The Definitive Calculator Dictionary, где вы сможете найти все численные значения, которые соответствуют каким-либо словам в английском языке.

По поводу «фокуса» с почтовым клиентом «TheBAT!», опубликованного в прошлом номере. От читателя Вадима Колонцова поступила интересная теория, которая, хотя бы намекает на то, почему «TheBAT!» может себя так странно вести.

Скорее всего, дело во включенном антиалисинге шрифтов (отсюда и «замыленность»). Но антиалиасятся только векторные шрифты; часть же шрифтов в Windows до сих пор растровая. По-моему, Sans Serif как раз присутствует в двух вариантах: векторном и растровом. Вероятно, в зависимости от кодировки выбирается тот или иной шрифт (уж не знаю, почему).

Может написать разработчикам? :) И, кстати, неужели и в Windows XP сохранились еще растровые шрифты?

И, напоследок, картинка от digitalk.

Страшнее кошки зверя нет

Пишите!