JSSS, JavaScript-based Style Sheets
В своё время, когда браузер фирмы Netscape был лидером на рынке, в нём была поддержка интересной, на мой взгляд, технологии, которая уже при рождении была незаслуженно забыта — «
Итак, в чём суть? Суть та же самая, что и в CSS, разница лишь в представлении. Несколько примеров, думаю, достаточно наглядно покажут суть:
<style type="text/javascript"><!--
// H1 { color: blue }
tags.H1.color = "blue";
// BODY { color: black; background: white }
with(tags.BODY) {
color = "black";
bgColor = "white";
}
// H1 EM .reddish { color: red }
contextual(tags.H1, tags.EM, classes.reddish.all).color = "red";
/* UL LI { color: red }
UL UL LI { color: blue } */
with(tags) {
contextual(UL, LI).color = "red";
contextual(UL, UL, LI).color = "blue";
}
// P:first-line { font-style: small-caps }
tags.P.firstLine.fontStyle = "small-caps";
// P:first-letter { font-size: 200% }
tags.P.firstLetter.fontSize *= 2; // 200%
--></style>Теперь самое интересное, вычисляемые значения и функции:
<style type="text/javascript"><!--
tags.IMG.width = .50 * document.width;
evaluate_style() {
if (visual.colorDepth < 2) {
bgColor = "white";
color = "blue";
} else {
bgColor = "black";
color = "white";
}
}
tag.BODY.apply = evaluate_style()
tag.ids.headertable.apply = evaluate_style()
--></style>Блогосфера на gopher'e — все друг друга знают
ЖЖ от 2007-12-17 12:38:00
MSIE6 (MuSt dIE 6.0)
Мне очень нравится проект «UpgradeBrowser», это очень разумный способ снижения доли устаревших Internet Explorer в интернете. Смысл в следующем. Вы устанавливаете у себя на сайте специальный
<!--[if lte IE 6]>
<script type="text/javascript" src="http://upgradebrowser.org/ie6fuck.js"></script>
<![endif]-->Так же код ie6fuck.js можно скачать себе и вызывать локально. Пользователи Internet Explorer 6.0 и ниже увидят сверху сайта следующую симпатичную надпись:
Через ваш устаревший и небезопасный браузер к вам могут попасть вирусы с сайтов. Обновите его!
Ссылка «обновите его» ведёт на страницу, где рассказывается о последних версиях Internet Explorer, FireFox и Opera. Чисто психологически проще поставить новую версию программы, чем переходить на её аналоги, так что на этой странице очень разумно первым упоминается Internet Explorer 7.0.
Что так же немаловажно, эту панельку можно закрыть (в оригинале справа есть крестик) и она не будет появляться ещё 30 дней. Кстати, она очень напоминает стандартную панель Internet Explorer, так что есть шанс, что многие пользователя подумают, что обновиться предлагает сам браузер.
Я код себе уже поставил, присоединяйтесь к проекту.
ЖЖ от 2007-12-15 20:54:00
Мои ошибки при ведении блога
В предыдущей версии сайта я совершил несколько ошибок, Я говорю даже не о SEO, а о вещах, которые усложняли жизнь и мне и читателям.
Первое и самое главное — неверно выбранный формат блога. Понимая тенденцию к быстрому потреблению, я сократил тексты, но решил делать выпуски (как до сих пор делает «Кулер», который я читаю много лет), а не обновления. Мне показалось это удобным — заходить на сайт только раз в сутки и получать все новости сразу. Сейчас эту проблему решает наличие RSS — заходить на сайт, чтобы узнать об обновлениях вовсе необязательно. Беда в том, что выпуски делать сложнее, так как это отнимает массу времени. Поэтому иногда не подходил к блогу несколько месяцев.
Второе. Я убирал заголовки, мне они показались ненужным элементом. Заголовки оказались нужны для RSS, писем с сайта и обособления записей в блоге друг от друга. Благодаря заголовкам пользователь может оценить — тратить ли ему время на чтение текста или пролистать дальше.
Третья. Мне хотелось сделать всё стильно, поэтому я назвал элементы меню единообразно — «пишу», «читаю», «ищу» и так далее. Единообразно, но непонятно, пользователи просто не знали куда идти. «Блог» и «поиск» скучно, но более понятно. Навигация пока ещё моя головная боль — в TODO большой список доделок, но пока на это нет времени, хотя
Что я не отношу к ошибкам — это отключение комментариев и существующая схема RSS/OpenID. Комментарии я отключал, думаю, по той же причине, по которой их отключал
Это уже Web 3.0, новый уровень всемирной паутины, когда интернет работает не на уровне HTTP, а на уровне «сайт» и представляет собой свободноинтегрированные друг в друга сайты.
₥₳₪€¥
Отличную расшифровку DRM подсмотрел — «₫¥₲¥₮₳£ R€$₮r¥₡₮¥¤₦₴ ₥₳₪₳₲€₥€₦₮» (искажённое «Digital Rights Management», составленное из знаков валют) . Напомню, что DRM — это технические средства для защиты авторских прав.
Easter Ogg
Из HTML5 официально исключены форматы Ogg Vorbis и Ogg Theora (предназначенные для использования проигрывания мультимедия в тегах AUDIO и VIDEO). Против формата выступали фирмы Nokia и Apple.
Напомню корень проблемы: в HTML есть стредство для внедрения рисунков и определены форматы (GIF, PNG, JPEG), которые гарантированно будут показываться во всех графических браузерах, но нет ничего подобного для видео и аудио. Нет единых форматов и средств управления проигрыванием из браузера через JavaScript. С появлением HTML5 ситуация должна быть исправлена появлением тегов VIDEO и AUDIO и введением стандартов кодеков, которые должны поддерживаться всеми браузерами.
Возможно, вместо форматов Ogg, будут использованы H.264
Так же ходят слухи, что основной причиной того, что форматы Ogg исключили, является то, что они не поддерживают DRM (средства для защиты авторских прав), это соображение возникло, большей частью
Как бы ноги не ошпарить

Я в Москве, это моё новое рабочее место, пока сфотографировать ничего не могу, но от нового компьютера писаю кипятком.
Кстати, у меня
А город подумал: ученья идут
На все сайты в домене exler.ru уже несколько дней идёт мощнейшая
DDoS — это «Distributed Denial of Service» («распределённая»
Сейчас админы уже успешно справились с отражением атаки, так что если и будут «пропадания», то очень кратковременные.
ЖЖ от 2007-12-07 21:12:00
Нанотехнологии уже среди нас!
Ваш собственный OpenID
Многие думают, что OpenID — это
Что делать, если вы хотите подписываться у меня в комментариях не как «user.livejournal.com», а как «myblog.sample.com»? Наверное вам нужно будет установить себе на сайте собственный сервер OpenID? Правильно? Неправильно!
В OpenID есть интересная возможность — делегирование. Вы можете попросить другой
Вот как это выглядит для сервера myopenid.com (кстати, очень рекомендую его к использованию):
<link rel="openid.server" href="http://www.myopenid.com/server/" />
<link rel="openid.delegate" href="http://ваш_ник.myopenid.com/" />А вот так это будет выглядеть для Ya.Ru:
<link rel="openid.server" href="http://openid.yandex.ru/server.xml" />
<link rel="openid.delegate" href="http://openid.yandex.ru/users/ваш_ник" />Так, для Живого Журнала:
<link rel="openid.server" href="http://www.livejournal.com/openid/server.bml" />
<link rel="openid.delegate" href="http://ваш_ник.livejournal.com" />Для Liveinternet.ru:
<link rel="openid.server" href="http://www.liveinternet.ru/openid.php" />
<link rel="openid.delegate" href="http://http://www.liveinternet.ru/users/ваш_ник" />Для того, чтобы изготовить эту строку
«Спеста» — винтажная система статистики, часть II.
Ещё несколько советов по работе со «Спестой», предыдущая пачка — в первой части статьи.
Совет пять. Судя по коду, «Спеста» иногда способна пропустить
$fp = fopen($COUNT_FILE, 'a+');
flock($fp, LOCK_EX);
fseek($fp, 0);
$conts = fread($fp, filesize($COUNT_FILE));ftruncate($fp, 0);
fseek($fp, 0);
fwrite($fp, $content);
fclose($fp);Совет номер шесть. Открываем все
$s_addurl = "";PHP2EXE
Решил посмотреть что у нас на старую добрую тему php2exe — т. е.
Вот этот компилятор я и скачал. Версия 2.9.0, бета. Первое, что я выяснил, когда нашёл где включается режим вывода лога компиляции, инсталлировать надо было туда, куда программа предлагала по умолчанию. Путь «Program Files» вызывает проблемы
В итоге, эксперимент окончился плачевно. Мало того, что итоговый файл оказался размером шесть мегабайт (при том, что исходная программа занимает 1.5 килобайта) — это ещё терпимо, понятно, что с ростом исходной программы этот размер меняться почти не будет, да и упаковывается он до одного мегабайта, например, при помощи NPack. Хуже, что скомпилированная (даже не сжатая) программа так и не заработала — при выполнении возникают ошибки переполнения.
Вывод: возможно, это огрехи
Новую собаку старым трюкам
Егор Куновский описал способ при помощи которого можно научить Google понимать переходы с Rambler, Mail.ru и других российских поисковых машин. Не знаю, действительно ли Google знает только Яндекс, но лучше сделать это более аккуратным способом. У меня, до того как я убрал Google Analytics было так:
_uacct = "UA-ВАШНОМЕ-Р";
_uOsr.push('mail.ru','rambler.ru','webalta','aport','blogs.yandex.ru')
_uOkw.push('q','words', 'q', 'r', 'text')
urchinTracker();Первой строчкой указываются адреса поисковых сайтов, второй — параметр в котором указывается поисковый запрос.
Сирены «Титана»

На фотографии — моё предыдущее рабочее место, где я провёл три с лишним года на посту технического директора. В понедельник буду обживать новые место, в Москве, там уже купили
Spesta — винтажная система статистики
Выкинул гугловский «Урчин» и поставил смирновскую «Спесту». Все эти
Четыре совета, если будете ставить «Спесту».
php_flag error_reporting off
php_flag register_globals onecho "<b>Google</b>:<br /><br />
<script language='JavaScript'
src='http://www.mipagerank.com/mipagerank.php/$hosturl?d=2'></script>";Теперь вы сможете видеть ещё и PageRank вашего сайта.
Совет номер три. Откройте counter.php, найдите строку 150, там определяется IP человека, который к вам зашёл. Определяется несколько… некорректно, да и считает всех с одного IP за одного человека. Чтобы хоть
$ip = $_SERVER['REMOTE_ADDR'];
$fields = array
(
'HTTP_X_FORWARDED_FOR', 'CLIENT_IP', 'HTTP_FROM', 'HTTP_CLIENT_IP', 'HTTP_CLIENTIP',
'HTTP_CLIENT', 'HTTP_X_FORWARDED', 'HTTP_X_DELEGATE_REMOTE_HOST', 'HTTP_SP_HOST',
);
foreach ($fields as $field)
if (isset($_ENV[$field]))
{
$ip .= ' '.$_ENV[$field];
break;
}
$fields = array
(
'HTTP_USER_AGENT', 'HTTP_ACCEPT_LANGUAGE', 'HTTP_ACCEPT_CHARSET',
'HTTP_ACCEPT_ENCODING', 'HTTP_TE', 'HTTP_UA_CPU', 'HTTP_UA_OS', 'HTTP_UA_COLOR',
'HTTP_UA_PIXELS', 'HTTP_UA_VOICE',
);
$uniq = '';
foreach ($fields as $field)
if (isset($_SERVER[$field])) $uniq .= '~'.$_SERVER[$field];
$ip .= ' ('.md5($uniq).')';Четвёртый совет — поставьте flock. Нет, не настройку в конфигурационном файле, она ни на что не влияет. Если умеете — поставьте вызов flock после каждого fopen. Если не умеете — ну оставьте как есть.
ЖЖ попал в СУП
Многие уже знают, что российская компания «СУП» купила LiveJournal. Читать российские «мы все умрём» на эту тему забавно, но куда забавнее читать то, что пишут на эту тему американцы. Если уж мы до такой степени не доверяем сами себе, то представьте как они нам недоверяют:
- «So does this mean our journals and communities are going to be deleted» («Значит ли это, что все наши журналы и сообщества будут удалены»).
— «YOU SOLD US TO THE FUCKING RUSSIANS?! Hello, waves and waves of spam attacks!» («Вы продали нас долбанным русским?? Здравствуйте новые и новые волны атак спама!»).
— «Call me paranoid, but I don’t want any Russian Nigerians knocking at my email address» («Назовите меня пораноиком, но я не хочу, что быкакие-то русские принцы Нигерии стучались в мой почтовый ящик»).
— «omg that can’t be good» («Боже мой, в этом не может быть ничего хорошего»).
— «THIS IS SO BAD. BAD BAD BAD» («Это очень плохо. Плохо, плохо, плохо»).
Ну и так далее. Сейчас Смирнов мне написал, что они в комментариях ещё и Чернобыль нам припомнили.
Кстати, узнал оттуда новое для меня выражение «tl;dr» («too long; didn’t read»), вариант нашего «ниасилил».
DLL попадают в ад, а SO — в рай

На блоге «Дурдом 2.0» автор критикует замшелую точку зрения, согласно которой, Windows приходится переставлять каждые пару месяцев. И правда — у меня Windows XP, на компьютере за котором я сейчас сижу, установлен с первого мая
Custom tags в Internet Explorer
Утверждаю и буду продолжать утверждать, что Internet Explorer — самый недооценённый браузер века интернета, а все более поздние идеи — суть калька технологий, которые в нём уже есть. Ещё одна технология, с которой я познакомился в году 1998. Тогда (впрочем, как и многие сейчас) в качестве «растяжек» для ограничения минимальной ширины контента, использовали так называемый
Способ настолько популярен, что некоторые
В те времена, как я уже говорил, существовали только две программы, имеющие право носить звание «браузера» — это Internet Explorer и Netscape Navigator. Их различия, часто, были настолько коренными (в разнице отображения, а то и названиях тегов), что изготавливались две версии сайта — под два браузера и пользователя автоматически (или предлагая выбор) перебрасывали на одну из них. В частности, такая особенность вёрстки позволяла задействовать мощности браузеров на полную силу.
Custom tag — технология в Internet Explorer, позволяющая (в определённых пределах) «придумывать» свои теги.
В Internet Explorer такой свободы нет, custom tag «работает» только в определённом пространстве имён, но есть и свои, очень существенные плюсы. Если вы не знаете, что такое пространство имён, не расстраивайтесь — на понимании сути это никак не сказывается. В следующем примере префикс «b:», с которого начинается тег и есть «пространство имён», а «xmlns:b» — его идентификатор.
Итак, в те далёкие времена я делал «растяжки» через специально придуманный custom tag «spacer», с появлением
<html xmlns:b="/">
<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».