Блог Обо мне Храню Читаю Ем 99  

страница № 97



Сирены «Титана»

Моё прежнее рабочее место (43.69KB)
На фотографии — моё предыдущее рабочее место, где я провёл три с лишним года на посту технического директора. В понедельник буду обживать новые место, в Москве, там уже купили какого-то четырёхпроцессорного монстра (!) мне в качестве рабочей машины. Так что, вероятно, кратковременно пропаду из интернета, не до того будет.
04.12 17:58
04.12 17:58


Spesta — винтажная система статистики

Выкинул гугловский «Урчин» и поставил смирновскую «Спесту». Все эти Flash-графики у «Гугла» — это очень красиво, но мне не нравится смотреть по нескольку минут на процесс загрузки, а время дорого. Тем более, что большинство инструментов, которые предоставляет эта статистика, мне не нужны, я туда даже не заглядываю.

Четыре совета, если будете ставить «Спесту».

Во-первых, Дима писал её в бородатые времена, так что для работы на нормальном хостинге она требует влюченного register_globals и выключенного error_reporting. В Apache, в файле .htaccess это делается так:
php_flag error_reporting off
php_flag register_globals on
Во-вторых, откройте файл index.php, найдите строку 162 (там выводится значение ТИЦ, в этой строке должно быть слово cycounter), после этой строки добавьте:
echo "<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-адреса:
$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. Если не умеете — ну оставьте как есть.

темы: spesta
04.12 16:31
04.12 16:31


ЖЖ попал в СУП

Многие уже знают, что российская компания «СУП» купила 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»), вариант нашего «ниасилил».
03.12 15:59
03.12 15:59


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

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


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

темы: windows
03.12 00:15
03.12 00: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».

темы: webdev, ie, html
02.12 23:06
02.12 23:06


Ошибка 80108351 в PSP

Если у вас возникает внутренняя ошибка 80108351 (internal error 80108351) при попытке установить PTF-тему в PSP, сделайте так (рецепт для custom-прошивок):
  • Отключаем плагин IR Shell (если он есть)
  • Вынимаем диск из UMD-дисковода (если он там есть)
  • в Recovery выбираем Advanced -> Format flash1 and reset settings
  • восстанавливаем стандартную конфигурацию PSP
У меня сработало. Наконец-то могу поставить что-то другое, кроме стандартного оформления. Рецент был найден на форуме PSPx.ru.

темы: gadget, psp
02.12 20:27
02.12 20:27


Упячка

Упячка (25.83KB)


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

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


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

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

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

У кого-нибудь есть предложения по этому вопросу?

темы: blok
01.12 14:56
01.12 14: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 — внутри по ссылке

темы: webdev, gif, png, jpeg
30.11 13:10
30.11 13: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-х мегабайтный.

темы: webdev, apache
29.11 21:29
29.11 21: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.

темы: webdev, gopher
29.11 00:29
29.11 00:29


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

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

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


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


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

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

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

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

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

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

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

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

Адвоката, вызвавшегося защищать девушку, не допустили в зал суда, а затем и вовсе лишили лицензии на адвокатскую деятельность.

28.11 14:23
28.11 14:23


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

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

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


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

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

темы: webdev, css
27.11 13:52
27.11 13:52



страница № 97

Евгений Степанищев (imbolk@gmail.com)
t=0.042