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

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

Thanks A. Lot

Шутка для умных. Thanks A. Lot.

Лот с родственниками бежит из Содома (71.00КБ)
9 комментариев
10 апреля 2008 12:51

Загрузка изображений в Blok

Проблема с загрузкой изображений через «Semagic» решилась куда проще (напомню, что у меня на сайте нет веб-интерфейса админки, используется API Metaweblog и LJ Flat), чем я расчитывал. Я просто попросил авторов «Семажика» сделать поддержку вставки изображений через data URL.

Мой движок анализирует нет ли во введённых данных тега IMG с data URL, выдёргивает из него данные, кладёт на диск в виде изображения, а обратно отдаёт тег уже с HTTP-ссылкой. Проще некуда.
17 комментариев
10 апреля 2008 01:12

MicroSD → Memory Stick

MicroSD в MemoryStrick (10.19КБ)

Нужный для владельцев PSP адаптор появился. Позволяет использовать MicroSD карточки вместо MemoryStick. Удобно, если MicroSD уже есть, не нужно покупать ещё одну для PSP, да и стоят MicroSD чуть дешевле. Правда есть опасения, что будут поддерживаться не более чем 2Гб карточки, так как карты бóльшего формата называются MicroSD HC.
Комментировать
9 апреля 2008 17:43

Cursor CSS

Заношу себе в закладки хорошую статью с сайта QuirksMode, рассказывающую и наглядно показывающую (если поводить мышкой по названиям свойств) какие значения CSS-свойства «cursor» поддерживаются различным браузерами.

В статье есть смешное место — написано, что значение «url» (помечено как «Microsoft», т.е. собственное свойство IE) не поддерживается браузерами Internet Explorer.

На деле Internet Explorer требует указывать курсоры в форматах .cur или .ani, тогда как в редакции CSS3 (где данное свойство заимствовано и расширено) курсор может быть в любом формате, поддерживаемом браузером (для Gecko это BMP, JPG, CUR, GIF, SVG и XBM), плюс должны быть указаны координаты активной точки (hotspot) курсора.
Комментировать
9 апреля 2008 17:13

Google AdSense

Решил подержать на сайте месяц Google AdSense. Для интереса — сколько с этого можно получить прибыли. У кого-нибудь есть советы, рекомендации, истории использования? Поделитесь. Может сразу выкину.
23 комментария
8 апреля 2008 18:41

Опыт, который получает наёмный работник

Мне понравился коментарий Носика к небольшой заметке про порядки в «Яндексе»:

В нормальной компании работник получает не только бабки, но и training, и доступ к чужим непубличным разработкам, в которые вложены очень нехилые деньги. Эти разработки — не только код, но и принципы, и методы, и архитектурные решения, и эвристики, и опыт, сын ошибок трудных, и другие вещи, трудно защитимые патентным и авторским правом. Если он, всё это освоив за пару-тройку месяцев, встаёт и уходит создавать конкурирующий продукт, от создания которого его на момент найма в компании отделяли годы проб, ошибок, проектирования и разработок — то это, мягко говоря, не совсем его «право». А добровольное обязательство так не поступать — отнюдь не «поражение в правах», а необходимая нанимателю гарантия, что в training данного сотрудника не опасно вкладывать ресурсы и деньги.
Подпишусь под каждым словом.
21 комментарий
7 апреля 2008 18:46

data URL в IE

Пару лет назад я занимался проблемой data URL в Internet Explorer, добился определённых результатов, но то, что получилось, использовать было невозможно. Data URL (иногда его ещё называют «протокол data:») — возможность вставлять ресурсы (графику, CSS, JavaScript и так далее) в HTML код.

Выглядит это примерно так:
<img
src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7" />
В Data URL указывает тип содержимого и способ его кодирования. Способа кодирования два — base64 (именно он и указан в примере), увеличивающий содержимое на треть и URL encoding (в этом случае способ кодирования не указывается) — привычный многим способ кодирования при помощи %xx, в лучшем случае вообще не увеличивает размер содержимого, в худшем — увеличивает в три раза.

Кстати, в настоящее время IE8b1 поддерживает data URL, но, увы, длиной не более 32Кб.

Теперь амбула.

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

Результат — готовый код на PHP из двух функций. Первую функцию («bolk_data_uri_header») нужно вызвать в самом начале перед выводом любого вашего кода, вторую («bolk_data_uri») собственно для включения картинки в код. Надеюсь на примерах всё понятно:
bolk_data_uri_header();

bolk_data_uri('myjpeg.jpg');
bolk_data_uri('ourpng.png', 'border: 2px dotted red');
Код самой библиотеки:
function bolk_data_uri_header()
{
	echo "<!--\n"
		."Content-Type: multipart/related; boundary=\"=_NextPart_01C6A9B1.539AB070\"\n\n"
		."--=_NextPart_01C6A9B1.539AB070\n"
		."Content-Transfer-Encoding: base64\n"
		."Content-Type: text/html\n"
		."-->\n\n";

}

function bolk_data_uri($file, $style = '')
{
	if (!( file_exists($file) && ($data = @getimagesize($file)) )) return false;

	$name = uniqid('', true);

	if ($style <> '') $style = ' style="'.htmlspecialchars($style).'"';

	echo "<!--\n"
		."--=_NextPart_01C6A9B1.539AB070\n"
		."Content-Location: {$name}\n"
		."Content-Transfer-Encoding: base64\n"
		."Content-Type: {$data['mime']}; -->\n"
		."<object data='data:{$data['mime']};base64,\n\n";

	echo base64_encode(file_get_contents($file));

	echo "' {$data[3]}{$style} type='\n{$data['mime']}'><img "
		."src='mhtml:http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}!{$name}' {$data[3]}{$style} /></object>\n\n"
		."<!--\n"
		."--=_NextPart_01C6A9B1.539AB070-->";

	return true;
}
У данного метода, по сравнению с обычными data URL есть масса ограничений: необходим специальный заголовок в начале файла, т.е. этот метод невозможно использовать на чужих сайтах, этим методом нельзя воспользоваться (по крайней мере не в таком виде) для включения ресурсов внутрь CSS или JavaScript. В принципе, тут есть достаточно большое поле для экспериментов, возможно все или некоторые из проблем можно решить.

В разделе «храню» есть пример, который можно потестировать на имеющихся у вас браузерах. Уже протестировано на Opera 9.25 и 9.50b, FF 2.0.0.13 и 4 (Minefield), Safari 3.1 (Safari под iPhone — тоже), Internet Explorer 6.0SP2 и 7.0, Sony PSP browser, Opera mini, Netscape Navigator 9.0.0.5.
29 комментариев
3 апреля 2008 19:39

PHP 5.3.0 jumps to Basic

В PHP 5.3.0 ввели оператор «jump»: «Added "jump label" operator (limited "goto"). (Dmitry, Sara)»

Полюбуйтесь:
$n = 1;

L1:
if ($n > 3) jump L2;
echo "$n: okn";
$n++;

jump L1;

L2:
Здравствуй, непонятный запутанный код! Ребят, сделайте «my» как в Perl, а? Куда ведь более полезный функционал.
25 комментариев
3 апреля 2008 18:24

CAPTCHA: Я, не робот.

CAPTCHA на LiveInternet (17.30КБ)

Форма регистрации на сервисе «LiveInternet». Написать простую фразу «Например Иванов» с ошибкой на сервисе такого масштаба, это надо постараться.
10 комментариев
3 апреля 2008 16:58

Spesta 2.12 a+b

Обновление (файл называется так же) системы стастистики «Spesta 2 a+b». С предыдщего апдейта изменилось следующее: Кто не в курсе, что это за система, прочитайте у меня на сайте соответствующую статью.

Теперь о расширенной граматике. Включается она только тогда, когда в фильтре используется звёздочка («*»). «mozilla*» означает «начинается с mozilla» (регистр значения не играет), «mozilla*windows*» — строка содержит сначала «mozilla», потом «windows». Т.е. «*» — это «любые символы».

Если нужно совпадение и чувствительность к регистру, то можно искать так: «*MSIE*!» — найдёт только строки, где содержится «MSIE» именно в этом регистре.

Если нужно инвертирование поиска, то можно писать так: «!*MSIE*» — найдёт строки, в которых не содержится «MSIE» в любом регистре, «!*MSIE*!» — найдёт строки, где не содержится «MSIE» именно в этом регистре.
25 комментариев
2 апреля 2008 20:53

Что такое SEO

Совершенно раскошное определение SEO:

SEO — это «поисковая оптимизация». Это как сделать так, чтобы какой-нибудь говно-блог об обмене утилизированных б/у японских шин на запчасти к пластиковым окнам занимал топ-позиции в тындыксе-гугле и т.п.

то есть, вы создаете текст, состоящий из фраз «ебут пятиклассницу», маркетинг, заработать на блоге, «скачать», маркетинг, заработать на блоге, «супер-анал», маркетинг, заработать на блоге, пластиковые окна, маркетинг, заработать на блоге, японские шины, маркетинг, заработать на блоге, развратные учительницы сосут прямо на перемене, маркетинг, заработать на блоге, скачать Сопроно-6, маркетинг, заработать на блоге, голые участницы Дома-2, маркетинг, заработать на блоге, в переводе Гоблина и т.п. и засираете им всё, что только можно. Все дела.
C СЕО произошло то же, что с языком программирования PHP в своё время — нужная отрасль из-за низкого порога вхождения превратилась в помойку. Сейчас «программирую на PHP», «занимаюсь поисковой оптимизацией» и «занимаюсь уринотерапией» звучит почти неразличимо.
9 комментариев
2 апреля 2008 17:34

Яндекс меня шантажирует!

BOLK, 02.04.2008 16:38:47:
Ура! Яндекс проиндексировал мой сайт

BOLK, 16:38:49:
дело за тиц

Дмитрий Смирнов, 16:39:28:
это потому, что мы тебя хотим в разработчики

BOLK, 16:39:41:
хотели — уже бы и тиц перевели

Дмитрий Смирнов, 16:39:49:
а ты пока не согласился
Некоторое время назад купил новый домен (для новеньких — мой сайт много лет располагался по адресу bolk.exler.ru), всё ждал когда «Яндекс» его проиндексирует, теперь жду когда перенесётся тИЦ.
10 комментариев
2 апреля 2008 17:10

BLOK: MetaWeblog API, FotoBuilder API

Я, когда писал движок для своего сайта (до сих пор недописанный, кстати), сразу расчитывал на то, что веб-интерфейса к админке у меня не будет. Более здравой мне показалась идея приделать какой-то уже существующий клиент. Я остановился на протоколе livejournal flat и клиентах, его поддерживающих, благо их навалом для любой платформы. В частности, я могу с лёгкостью постить даже с сотового телефона.

Протокол достаточно простой, но описан очень плохо. Как бы то ни было, я его реализовал. Один недостаток — загрузка изображений. В протоколе flat такой возможности нет. Почесав репку, я посмотрел на обилие описанный протоколов и выбрал очень простой MetaWeblog. Протокол излишне многословен (даже по меркам XML, как мне кажется), но зато реализуется за час.

Наконец-то удалось погонять платный клиент BlogJet, я думал, что он очень удобен, оказалось, это совсем не так. Недружелюбный к пользователю Semagic куда удобнее и падает крайне редко. Кстати, нашёл глюк в BlogJet — ошибки на русском он показывает только в кодировке CP-1251, сколько не меняй encoding в XML и заголовке.

Теперь ещё хочу посмотреть Windows Live Writer, но через штатный инсталлятор мне поставить его не удаётся, грешу на прокси. В общем, остаюсь пока на Semagic, но с загрузкой изображений надо что-то делать. Вообще говоря, в LiveJournal для этого используется протокол FotoBuilder, придётся реализовывать его.

Попытался сделать это наскоком, не удалось. Видимо (это обычно для документации LiveJournal) пропустили что-то важное, без чего всё не работает. Или я это важное никак не могу найти. После подключения клиентская программа утверждает, что challenge не найден. Буду бороться.
21 комментарий
2 апреля 2008 13:52

С первым апреля всех!

Друзья!

Если сегодня прочитаете, что Microsoft выпускает новую версию CSS.2012, а друг говорит вам, что принёс девятую серию «Lost», вспомните, что сегодня первое апреля! Мики Болкус (46.71КБ) Кстати, у меня сегодня выросли крылья, малиновая шерсть и жабры, поэтому я завязываю дышать лёгкими и лечу купаться в Балешвар.

Коллаж принадлежит перу и плашету Нияза Сайфутдинова.
2 комментария
1 апреля 2008 14:29

Яндекс раздаёт антивирус Касперского бесплатно

Яндекс совершенно бесплатно предоставляет вам лицензию на специальную версию антивирусной защиты Касперского. Программа содержит ключ для работы в течение полугода. Потом вы сможете получить и установить новый ключ — также бесплатно.
Отличная новость — «Яндекс» раздаёт «Касперского» бесплатно.
13 комментариев
31 марта 2008 16:15