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

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

PHP: простой способ определения кодировки UTF-8

Придумал простой способ определения кодировки UTF-8 в PHP, работает без модулей iconv и multibyte string (mb-функции):
if (preg_match('//u', $string)) { /* у вас UTF-8 */ }
Работать должно, думаю, с версии PHP 4.3.5, в документации сказано: «UTF-8 validity of the pattern is checked since PHP 4.3.5».
19 комментариев
20 марта 2008 17:42

Система статистики «Spesta 2.10 a+b»

Спеста (0.30КБ) Какое-то время назад я патчил (два раза) систему статистики «Спеста» Дмитрия Смирнова, правил дыры и ошибки. Сама система мне нравится — простая, понятная, после патчей даже работает неплохо. Но при работе генерирует кучу warnings и notices, что захламляет мой лог ошибок и настраивать её не слишком-то приятно.

Недавно я узнал, что существует клон это системы — Spesta 2, который написали в Analog Group. Приятно, что код написан с форматированием и почти не генерирует warnings и notices, но общее ощущение — что авторы двигались в правильном направлении, но заплутали по дороге.

Я было думал выпустить серию патчей, как это было со «Спестой», но патчей оказалось слишком много. В общем, выложил пропатченную версию у себя. Кому надо — забирайте. Оригинальная версия была 2.00a, эта называется 2.10a+b, потому что на «бету» она не тянет, а пачти обозначить как-то надо.

Итак, изменения, всё что успел увидеть и поправить за час работы: Важно: данные «Спесты» и «Спесты 2» между собой несовместимы, т.е. вы потеряете предыдущую статистику при замене одной версии на другую. Второе важное замечание — в «Спесте 2» нет статистики по кликам на ссылки и IP-адресам (лично мне она не нужна, так что вставлять в код я её не буду).

Инструкция по установке: распаковываете в нужную папку «Спесту 2», скрипт должен иметь возможность писать в папки data и reports. Если у вас была оригинальная «Спеста», удалите её, поверх ставить нельзя. Далее, вы должны подключить «Спесту» на каждой странице вашего сайта. Для PHP это будет выглядеть так:
<?include 'каталог со спестой/counter.php'?>;

для HTML страниц можно попробовать сделать следующее:
<!--#include virtual='/каталог со спестой/counter.php' -->

Ссылка для невнимательных, скачать можно отсюда: http://bolknote.ru/files/spesta-210.zip.
92 комментария
20 марта 2008 14:16

Dictatorship IE vs. Open Source Dictatorship

Удивительная избирательная слепота у людей. На «Хабре» опубликовали статью «Новые возможности HTML и CSS в Safari 3.1», где народ восторженно обсуждает возможности, появившиеся в браузере «Сафари». Этим возможностями сто лет в обед — те же яйца, только боком уже давным-давно реализованы в Internet Explorer, причём в версиях 4.xx—5.5.

Это вообще какое-то чудо — все стандарты от Internet Explorer называются «мировым злом» (например, «фильтры»), а стандарты от других производителей — охренительными фичами (вроде тех же «transforms» или CANVAS от Apple). При этом последние шесть лет целая куча функционала была скомуниҗҗена с IE, а сколько там ещё можно утащить (самый известный пример, конечно же, HttpRequest, который придумали в Microsoft и на котором работает AJAX)!

Я составил небольшую таблицу соответствий технологий IE и их реализаций в других браузерах:

Internet ExplorerОстальные браузеры
HTML+TIMESafari CSS transforms
Persisting Session InformationHTML5 Client-side Database Storage
Font EmbeddingCSS3 Web Fonts
VMLSVG
FiltersCSS свойство «opacity»
FiltersCSS свойство «text-shadow»
VMLТег CANVAS
Свойство «writing-mode»CSS свойство «writing-mode»
Microsoft IXMLHTTPRequestW3C XMLHttpRequest
FiltersWebKit gradient


Таблицу можно продолжать. Учтите, что всё, что перечислено в ней слева, появилось ещё шесть лет назад.

Мне интересно, кто первым реализует «data binding» из IE, при помощи этой технологии я написал «Песню о пиве» на HTML.
30 комментариев
19 марта 2008 18:38

HTML5 VIDEO: кто первый? А так же 3D CANVAS

Вышел браузер «Сафари» версии 3.1, в пресс-релизе написано, что «Сафари» — первый браузер, поддерживающий новые теги video и audio из HTML5:

Safari 3.1 is the first browser to support the new video and audio tags in HTML 5 and the first to support CSS Animations. Safari also supports CSS Web Fonts, giving designers limitless choices of fonts to create stunning new web sites
Что касается тега AUDIO — чистая правда, а с VIDEO — вышла накладка. Специальный билд «Оперы», поддерживающий этот тег, вышел 8-го ноября 2007-го года, тогда как Webkit (на движке которого сделан «Сафари») — 12-го ноября, на четыре дня позже.

Кстати, самое интересное, что появилось в том билде «Оперы», это не тег VIDEO, а 3D Canvas — до этого момента тег CANVAS позволял работать только с примитивами на плоскости (отрезками, прямоугольниками, кругами и так далее), знаменитая игра «Canvascape», сделанная с применением этого тега (требует для работы любой браузер, поддерживающий CANVAS), просчитывае 3D-графику самостоятельно, из-за чего игра на средних компьютерах заметно притормаживает.

Для 3D CANVAS задача вращения куба с текстурой, например — тривиальная. Примеров работы с этим новшеством пока немного, в оригинально статье упомянута Snake («змейка») в 3D, написанная Mathieu 'p01' HENRI.
5 комментариев
18 марта 2008 19:19

Декоративная обфускация PERL-кода

Нашёл замечательную старую статью «Декоративная обфускация PERL-кода», в статье есть просто изумительные примеры, например, знаменитый «квадрат» из ключевых слов Perl:
not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split
Это работающая программа, выводящая строку «just another perl hacker».
3 комментария
18 марта 2008 18:31

Доказательство через противного: тактика спора

На «Воффке» увидел неплохую статью, описывающую довольно типичную для «троллей» тактику — приписать что-то оппоненту и обсудить эту ситуацию как свершившийся факт. Приведены несколько примеров и методы защиты.
4 комментария
18 марта 2008 00:09

Туалетная бумага Windows Vista

Туалетная бумага Windows Vista (49.15КБ)

Японцы выпустили забавную туалетную бумагу — с текстом (на японском) списка исправлений SP1 для Windows Vista Ultimate.
6 комментариев
17 марта 2008 02:55

Bookr для PSP

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

Она поддерживает форматы txt, fb2, pdf, djvu, кодировки UTF-8, UTF-16, KOI8-r, CP-1251, CP-866, поддерживает TTF-шрифты, сама загружает последний прочитанный файл, имеет функцию перехода к странице по номеру и так далее. У программы две версии — для прошивки 1.50 и для всех остальных. Так же можно скачать исходники, если интересно почему размер программы вырос почти в два раза.
Комментировать
15 марта 2008 15:06

тИЦ России

Случайно обнаружил, что тИЦ можно измерить и для корневых доменов. Самые большие тИЦ (на данный момент) у России, доменов .com, Узбекистана, .localhost и Казахстана:

2 комментария
14 марта 2008 18:44

CSS только для Mozilla (в том числе — FireFox)

У верстальщиков до сих пор возникает задача — подключить стили только для определённого браузера. Для IE проблема решаема — всё меньше верстальщиков не знают что такое conditional comments. Но исчезающе малое количество народу знает что такое per-site user stylesheet rules. Интересны они тем, что Mozilla FireFox поддерживет их через собственное правило — «@-moz-document».

Вообще, это правило позволяет подключать стили в зависимости от домена, URL или его префикса. Для нас важно, что эти правила увидит только FireFox.

Простой пример использования, из которого становится понятен общий принцип:
<style type="text/css">
body { background: white; color: black }

@-moz-document url-prefix()
{
	body { background: grey; color: white }
}
</style>
<body>White in FireFox</body>
Принципы фильтрации по URL и доменам так же могут оказаться полезными, о них можно почитать в архиве W3C.
11 комментариев
14 марта 2008 16:27

«СУП» отменила базовые аккаунты в ЖЖ

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

То, что случилось вчера посерьёзнее. «СУП» отменил базовые аккаунты в ЖЖ:

Basic Account is an option available to accounts which were created before March 12, 2008. No account created after this date can be turned into a Basic Account.
Базовые аккаунты теперь являются опцией, доступной только аккаунтам, созданным до 12 Марта 2008 года. Аккаунты созданные после этой даты не могут быть базовыми.

New accounts (created after March 12, 2008) may choose between Plus and Paid account levels.
Новые аккаунты, созданые после 12 Марта 2008го года, могут выбирать либо Плюс аккаунт, либо платный
Вот что пишет на эту тему Брэд Фитцпатрик, создатель ЖЖ:

I advised against this (when I heard a rumor about it awhile back). I hadn't heard anything recently about it. Perhaps they interpreted my advice as "well, okay, then maybe we'll at least grandfather the existing Basic users, and not convert them all to Plus…"

In any case, SUP apparently sees no value in freeloaders not looking at ads, not paying, and oh wait... producing most the content for other members to read, other members who are looking at ads and paying for their accounts.

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

В любом случае, SUP, по-видимому, не видит ценности в «иждивенцах», не просматривающих рекламу, не платящих, и боже, подождите… производящих бОльшую часть контента для всех остальных читателей, других пользователей ЖЖ, просматривающих рекламу и оплачивающих свои аккаунты.
За перевод спасибо romik_g.
4 комментария
13 марта 2008 16:37

NOWDOC в PHP 5.3.0

В PHP 5.3.0 появилась новая синтаксическая конструкция: «NOWDOC». Сильно похожа на «heredoc», но с тем различием, что в «nowdoc» нет интерполяции переменных:

Следующий пример выведет в точности тот текст, который находится внутри nowdoc:
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': x41
EOT;
Второе отличие от heredoc, что nowdoc можно использовать в любом статическом контексте, например так:
class foo {
    public $bar = <<<'EOT'
bar
EOT;
}
4 комментария
13 марта 2008 14:26

Беги!

Коты (89.94КБ) Автор фото, к сожалению, не известен.
6 комментариев
12 марта 2008 18:27

«Полиция» vs. «милиция»

Слово «полиция» образовано от гречесчкого «πολιτεία» («государственная деятельность, правление»). Слово «милиция» — от латинского «militia» («войско»). Почувствуйте разницу.
13 комментариев
12 марта 2008 15:17

Ромочке не даёт покоя моя слава

Роме Воронежскому я всё никак не даю покоя. Пять лет (!) назад я, вдохновившись фразой Ромочки «спам придумали боги в отместку за наши молитвы» написал небольшой расказец на эту тему. Рассказ разошёлся по интернету и его стали приписывать Роме, последнему это не понравилось и он назвал меня у себя в ЖЖ мудаком. И вот, прошло пять лет:

А самая умилительная и жутчайшая история случилась, когда я не подумавши ляпнул про спам, который боги придумали. До сих пор умиляюсь и себя кляну: ну ляпнул бы при друзьях, ну хихикнули бы и забыли. Нет, надо было про это в жж написать. Наутро весь рунет просто купается в приколе, а один талантливый юморист из неосмотрительного моего замечания рассказ слепил. Целый рассказ, с подробностями. Как бог сел, там, за компьютер, запустил почтовую программу и т. д. Это, товарищи, пи…ц. Любая шутка - говно. Не шутите никогда.
Я — талантливый юморист. Евгений Владимирович Петросян, ага.
5 комментариев
12 марта 2008 14:49