Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

DLL попадают в ад, а SO — в рай

Когда я установил Windows XP (6.93КБ)

На блоге «Дурдом 2.0» автор критикует замшелую точку зрения, согласно которой, Windows приходится переставлять каждые пару месяцев. И правда — у меня Windows XP, на компьютере за котором я сейчас сижу, установлен с первого мая 2004-го года, т.е. 3.5 года назад! Это при том гигантском количестве софта, который я на него поставил (большая часть из которого — кривой мусор). При этом uptime — 5 дней, 12 часов, после последнего случайного отключения.
12 комментариев
3 декабря 2007 01:15

Custom tags в Internet Explorer

Утверждаю и буду продолжать утверждать, что Internet Explorer — самый недооценённый браузер века интернета, а все более поздние идеи — суть калька технологий, которые в нём уже есть. Ещё одна технология, с которой я познакомился в году 1998. Тогда (впрочем, как и многие сейчас) в качестве «растяжек» для ограничения минимальной ширины контента, использовали так называемый «нуль-gif» — прозрачную GIF-картинку 1x1 пикселей, которая вставлялась внутрь контейнера. Картинке выставлялась нужна ширина и высота, таким образом контейнер не мог «схлопнуться».

Способ настолько популярен, что некоторые веб-серверы, например «nginx» (в модуле http_empty_gif) или 0W (директива EMPTY) умеют встроенные средства, чтобы её генерировать, причём 0W умеет даже менять её цвет.

В те времена, как я уже говорил, существовали только две программы, имеющие право носить звание «браузера» — это Internet Explorer и Netscape Navigator. Их различия, часто, были настолько коренными (в разнице отображения, а то и названиях тегов), что изготавливались две версии сайта — под два браузера и пользователя автоматически (или предлагая выбор) перебрасывали на одну из них. В частности, такая особенность вёрстки позволяла задействовать мощности браузеров на полную силу.

Custom tag — технология в Internet Explorer, позволяющая (в определённых пределах) «придумывать» свои теги. Что-то похожее есть сейчас в браузере «Опера» — можно использовать любое сочетание букв как тег, задав ему произвольный стиль, это хороший ход, потому что какую-то часть тегов можно описать в виде CSS-файла, не заморачиваясь над встроенной обработкой. Скорее всего, это было следствием поддержки «Оперой» WAP-сайтов (кстати, если вы не знали, то попробуйте — «Опера» отображает WAP-сайты!).

В Internet Explorer такой свободы нет, custom tag «работает» только в определённом пространстве имён, но есть и свои, очень существенные плюсы. Если вы не знаете, что такое пространство имён, не расстраивайтесь — на понимании сути это никак не сказывается. В следующем примере префикс «b:», с которого начинается тег и есть «пространство имён», а «xmlns:b» — его идентификатор.

Итак, в те далёкие времена я делал «растяжки» через специально придуманный custom tag «spacer», с появлением в 1999-м году IE 5 и expression в нём (специальные CSS-свойства, позволяющие использовать JavaScript внутри CSS) это стало делать ещё удобнее.
<html xmlns:b="http://bolk.exler.ru/">
<style type="text/css">
b\:spacer
{
	display: inline-block;
	width: expression(this.width+'px');
	height: expression(this.height+'px');
}
</style>

Слово<b:spacer width="200" height="1"></b:spacer>Слово
</html>
В примере задан тег «spacer» в пространстве имён «b» (поэтому он используется с префиксом «b:», custom tags только так и работают). Я использовал expression в CSS, чтобы свойства новоявленного тега попадали в CSS. В «Опере» такой фокус невыполним, к сожалению, хотя свойство «attr» вполне подошло бы для такой цели, но он работает только с атрибутом «content».

В тех же рамках можно усложнить поведение — добавить значения по умолчанию, новые атрибуты, можно назвать тег для экономии «b:s» , а атрибуты — «w» и «h».
6 комментариев
3 декабря 2007 00:06

Ошибка 80108351 в PSP

Если у вас возникает внутренняя ошибка 80108351 (internal error 80108351) при попытке установить PTF-тему в PSP, сделайте так (рецепт для custom-прошивок): У меня сработало. Наконец-то могу поставить что-то другое, кроме стандартного оформления. Рецент был найден на форуме PSPx.ru.
Комментировать
2 декабря 2007 21:27

Упячка

Упячка (25.82КБ)

DiBR обнаружил упячку в IKEA! Если вы не в курсе что такое «упячка», то можно, например, начать знакомство со статьи «Упячка и семантическая смерть».

Судя по всему, это чья-то шутка. Я посмотрел статью «Правила чтения в шведском языке» (файл Word, 16 килобайт) Ирины Кемайкиной, слово «Uppäcka» должно читать примерно как «Ыппэкка», где двойные «п» и «к» обозначают долгий звук.
10 комментариев
2 декабря 2007 03:31

[LJ2ME] Подписка на комментарии

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

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

У кого-нибудь есть предложения по этому вопросу?
15 комментариев
1 декабря 2007 15:56

Сжатие картинок

Вчера попробовал натравить инструменты для оптимизации картинок на свой каталог с картинками этого блога. Результат следующий: выигрыш составил около 10 процентов (больше всего у меня JPEG-файлов). Немного, но и не мало в некоторых ситуациях. Я использовал только утилиты для командной строки.

PNG. Для сжатия PNG использовался известнейший pngcrush. Интересен в режиме «brute force» (перебора), где перебираются комбинации фильтров (фильтры — это специализированные методы сжатия, например, для градиента и т.д.). Я запускал сделующим образом: «pngcrush -brute -fix -e .png1 *.png». В итоге, все файлы png у меня в папке получают свою оптимизированную копию с расширением png1. Есть опасный момент — если у вас есть файлы APNG, pngcrush их превратит в файл без анимации. Экономия получилась порядка 7%.

JPEG. В JPEG'e особо оптимизировать нечего, формат сжатия с потерями, поэтому оптимизацию без участия человека не произвести — трудно просчитать насколько критично изменился рисунок. Оптимизировать тут нечего, но можно убрать мусор — многие программы записывают в файл комментарии, лишнюю информацию. Я использовал для чистки PureJPEG, после него прошёлся своим Photoshop Crap Remover, чтобы дочистить файл. Формат запуска PureJPEG следующий: «dir /B /S /A-D *.jpg | purejpeg», в итоге все файлы с расширением jpg будут вычищены. Моя утилита написана на PHP, так что я даже не буду упоминать как её запустить — кому надо разберётся, остальным объяснить очень трудно. Экономия — около 10%.

GIF. Несмотря на то, что утилите GIFLite уже около 12 лет, мне она кажется лидером по переупаковке GIF. Утилита написана White River Software, её разработка начата ещё в 1992 году и она рабоатет под DOS, т.е. должна запускаться даже в Linux из-под какого-нибудь DOSEmu. Утилита платная, но кому платить уже непонятно — никаких координат этой фирмы в сети нет. Поэтому ищем любой ключ, запускаем giflite с ключём /R и «регистрируемся».

Запускать её сложнее, чем предыдущие — в 1992-м году длинных имён не было, да и перебирать свои методы она не умеет. Поэтому я написал небольшую batch-программу. Она проходит по всем GIF-файлам в папке, применяет на каждый один из четырёх методов (видимо выбирается какая-то стратегия для выбора словаря в LZW-сжатии), после чего выбирает файл с наименьшим размером. Экономия составила около 8%.

giflite.cmd — внутри по ссылке
12 комментариев
30 ноября 2007 14:10

ИзнаСИлование программного кода

Видели когда-нибудь нижепроцитированное? Веб-сервер Apache на домашней машине сегодня порадовал при попытке скачать на вторую машину фильм в 3.9 гигабайта (обратите внимание на «content-length»). Корень проблемы ясен — какому-то программисту зачем-то понадобилось использовать знаковый integer для поля длины файла, соответственно всё, что больше двух гигабайт становится отрицательной длины. Чуть попозже попробую присоединить к этому файлу ещё мегабат двести и посмотреть как лопнет мозг у Apache при попытке засунуть это значение в 32 бита.
HTTP/1.1 200 OK
Date: Thu, 29 Nov 2007 18:04:09 GMT
Server: Apache/1.3.33 (Win32) PHP/5.2.0-dev
Last-Modified: Thu, 21 Jun 2007 11:27:00 GMT
ETag: "0-f702ceea-467a6084"
Accept-Ranges: bytes
Content-Length: -150810902
Connection: close
Content-Type: video/x-msvideo
Попробовал. Файл 4171 мегабайт Apache 1.3.33 показал как 74-х мегабайтный.
8 комментариев
29 ноября 2007 22:29

«Ты суслика видишь? — Нет. — И я нет. А он есть!» (фильм «ДМБ»)

До протокола HTTP, известного любому, кто бывает в интернете (для чайников — посмотрите в строку браузера, видите там «http://»?), в интернете был протокол «gopher» (с английского «суслик»). Протокол был широко распространён до изобретения World Wide Web, занимал 70-й порт и был больше похож на FTP — файловая структура с папками и документами, поддерживался тип документа (но куда более простенько, чем MIME-типы в HTTP), в том числе HTML и даже поисковые запросы.

Протокол придумала целая команда авторов — Mark McCahill, Farhad Anklesaria, Paul Lindner, Dan Torrey и Bob Alberti из университета Минесоты в 1991-м году и теперь он медленно умирает на каких-то блогами забытых серверах в дальних, тёмных уголках интернета.

Сейчас в интернете насчитывается около 100 gopher-серверов. Если у вас FireFox или Lynx, то можете попытаться зайти на один из последних серверов этого типа. Konqueror поддерживает протокол лишь частично, Safari и Opera не поддерживают (точнее, «Опера» требует использование специального прокси), в Internet Explorer поддержка отключена ещё в июле 2002-го. Как не странно, поклонники протокола существуют до сих пор. Есть протокол расширения Gopher+ и основанный на нём трёхмерный GopherVR.
10 комментариев
29 ноября 2007 01:29

Минздрав предупреждает!

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

Пока ты находишься в табачном плену, сосед-спортсмен еб… твою жену (48.42КБ)

Не надо заставлять задумываться о вреде курения, надо подходить с другой стороны — пусть в голову лезут подозрения, а глаза застилает гнев. Человек, забирающийся на третий этаж с одышкой достаточно хорош в постели для своей женщины?
15 комментариев
28 ноября 2007 16:17

Это у американцев странные законы?

Нашёл на блоге «HeavyWave» ссылку на статью в «BBC Russian» «Саудовская Аравия: 200 розг жертве насилия». Выдержка:

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

Мужчина оказался приятелем девушки. Однако совсем не он выступил в роли насильника.

Машина, в которой находились молодые люди, была остановлена бандой из семи человек. Оба были жестоко изнасилованы.

Четверо из участников банды были признаны виновными по статье о похищении людей.

Их жертвам тоже определили наказание - по 90 ударов плетьми каждому за «незаконные отношения».

Однако потом суд решил ужесточить действия в отношении 19-летней девушки и увеличил количество ударов плетьми до 200, а также назначил ей тюремное заключение сроком на полгода.

Адвоката, вызвавшегося защищать девушку, не допустили в зал суда, а затем и вовсе лишили лицензии на адвокатскую деятельность.
5 комментариев
28 ноября 2007 15:23

Транскриптор

Как-то упустил на сайте студии Лебедева прекрасный инструмент — «транскриптор». Обычно, если я встречаю в тексте на иностранных сайтах имя, фамилию, незнакомое название, я не беру на себя ответственность за транскрибированние этих слов (т.е. запись их на русском с приблизительным сохранением звучания), пишу как есть, тем более, откуда мне знать как, к примеру, на чешском звучат «Jůza» или «Třeblický».

«Транскриптор» для того и нужен — передаёт звучание на русском имён, фамилий, названий и прочего, знает африкаанс, болгарский, валлийский, венгерский, испанский, итальянский, немецкий, нидерландский, польский, румынский, сербский, словацкий, хорватский, чешский. В разделе, посвящённом каждому языку, кроме самого инструмента для online-преобразования, описаны сами правила, включая исключения и уточнения для сложных случаев.
5 комментариев
27 ноября 2007 15:45

«Очистка» плавающих блоков

В блоге «Life Style» полезная статья «„Очистка“ плавающих блоков». Новое решение старой проблемы — плавающие блоки не растягивают внешний контейнер, которая обычно решается добавлением дополнительного элемента с «clear: both». Вкратце, рецепт выглядит следующим способом, но рекомендую взглянуть и на полную статью:
div.container {
	overflow: auto;
	width: 100%
}
В комментариях подсказали ссылку на первоисточник: http://www.quirksmode.org/css/clearing.html.
2 комментария
27 ноября 2007 14:52

Генсек (general sexual)

Дарю два новых свежепридуманных слова: «гетеросятина» и «гетеросек».
5 комментариев
27 ноября 2007 13:14

Размер имеет значение

Мне тут подумалось, что мониторы 16:9 удачный ход для производителей мониторов — на прилавке чисто визуально кажется, что wide-мониторы (16:9) имеют большую площадь по сравнению с «традиционными» (4:3) при той же диагонали. Много раз видел в глазах недоверие, когда сообщал людям, что дела обстоят ровно наоборот. Попробуем подсчитать?

Все школу заканчивали, все помнят как считается площадь прямоугольника: перемножаем длины сторон. Исходя из известных нам пропорций, получаем исхомые площади:

4 * x * 3 * x = S4:3
16 * x * 9 * x = S16:9


или

12 * x² = S4:3
144 * x² = S16:9


Теперь осталось найти величину «x». Расчитать её просто по теореме Пифагора (сумма квадратов катетов равна квадрату гипотенузы, если кто позабыл что это такое):

(4x)² + (3x)² = D²4:3
(16x)² + (9x)² = D²16:9


Для определённости можно взять диагональ 20 дюймов. Попробуем найти «x» и подсчитать площади:

x² = 20² / (4² + 3²) ; S4:3 = 12 * (400 / 25) ; S4:3 = 192
x² = 20² / (16² + 9²) ; S16:9 = 144 * (400 / 337) ; S16:9 = 171

Вывод: монитор 4:3 с диагональю 20′′ больше монитора 16:9 с той же диагональю на 21 дюйм² (на 135 см²).
18 комментариев
26 ноября 2007 14:57

I see a fire in the hole

Наверное многие видели в американских фильмах как Крутые Парни на боевых операциях подают друг другу определённые знаки. Многие из них понятны, но есть и очень специфические вещи, которые понять трудно. В интернете есть замечательная страничка «Standardized Hand Signals For Close Range Engagement (C.R.E.) Operations», где на картинках всё прекрасно понятно. Язык английский, но на уровне первого класса.

Сигнал «снайпер» (14.56КБ)

Например, на рисунке выше солдат показывает сигнал «снайпер».
3 комментария
26 ноября 2007 01:06