Для многих валидная вёрстка — очень важная штука. На мой взгляд, валидность самоцелью быть не может и я знаю много ситуаций, где ей можно пожертвовать. Одна из этих ситуаций — использование тега NOINDEX. Для тех, кто не знает, поясню: этот тег показывает поисковой машине какую часть текста вашей страницы индексировать не нужно.
Т.е. присутсвие этого тега необходимо, но в стандарт HTML он не входит. Как быть, если требуется достичь валидности любой ценой? Обычное решение — выдавать отдельную копию страницы для поисковых машин. Изяществом оно не обладает, тем более есть способ, если не лучше, то проще. Автор утверждает, что способ был им протестирован. Я немного изменил код, потому что такое использование кажется мне более логичным:
<del class="inv"><![CDATA[<noindex>]]></del>
То, что запрещено к индексации
<del class="inv"><![CDATA[</noindex>]]></del>
В таблице стилей прописывается «display: none» для класса inv:
У меня мышь на рабочем месте лежит слева, дома — справа. Я амбидекстр и мне разницы особой нет, но людям, которые иногда садяться за мой компьютер, это доставляет неудобства. У меня была идея — сделать мышь, которая бы имела контакную полоску под большим пальцем, сама бы понимала какой рукой за неё берутся и меняла бы кнопки соотвествующим образом.
До реализации идеи в промышленных масштабах, думаю, не дойдёт, но у себя на рабочем месте я проблему решил. Оказалось, что мышь Microsoft Habu, которую я использую, имеет очень неплохой софт для настройки — Razer, который, в частности, позволяет назначить любым клавишам мыши довольно нетривиальные функции (там даже несложные макросы есть). Я создал два профиля — для левши и для правши, а функцию смена профиля назначил клавишам выбора DPI.
Теперь при нажатии на верхнюю у меня в руке мышь для левши, при нажатии на нижнюю — для правши.
Ребят, если вы сейчас едите, лучше не читайте дальше. Кто не спрятался, я не виноват. Я предупредил, да?
То, что вы видите на моём, по возможности осторожном обрезке снимка — живая корова. А в корове — дырка. В живой. Если вам кажется, что это фотошоп, то можете посмотреть видео на эту тему (ещё несколько можно найти на YouTube).
Для чего же это делают? Оказывается, в научных целях (мой вольный перевод):
В настоящее время учёные-аграрники изучают пищеварительную систему крупного рогатого скота через дыру в корове, причём коровы остаются живыми и здоровыми. Через эту дыру можно извлечь содержимое из середины желудочно-кишечного тракта.
«Прокомпостированных» коров используют для изучения усваямости различных продуктов питания крупнорогатого скота. Накормив корову, можно позднее посмотреть как усваивается съеденное. Другой путь — изучение внешних факторов для получения той же информации не является таким точным, как вышеописанный. Поскольку крупнорогатый скот является важной частью нашей жизни (точнее — молоко и говядина), важно, чтобы коровы получали хорошее питание.
Операция не причиняет корове боли и даже продлевает им жизнь. «Прокомпастированной» корове, которая заболела, можно ввести нужные вещества прямо в пищеварительный тракт и тем самым более эффективно ей помочь. Плюс, одна такая корова помогает скоту во всём мире
Кстати, я бы не сказал, что в ролике заметно, что корове совсем не больно, особенно когда эта заботливая учёная тварь достаёт канюлю из раны на боку.
Какое-то время назад я патчил (два раза) систему статистики «Спеста» Дмитрия Смирнова, правил дыры и ошибки. Сама система мне нравится — простая, понятная, после патчей даже работает неплохо. Но при работе генерирует кучу warnings и notices, что захламляет мой лог ошибок и настраивать её не слишком-то приятно.
Недавно я узнал, что существует клон это системы — Spesta 2, который написали в Analog Group. Приятно, что код написан с форматированием и почти не генерирует warnings и notices, но общее ощущение — что авторы двигались в правильном направлении, но заплутали по дороге.
Я было думал выпустить серию патчей, как это было со «Спестой», но патчей оказалось слишком много. В общем, выложил пропатченную версию у себя. Кому надо — забирайте. Оригинальная версия была 2.00a, эта называется 2.10a+b, потому что на «бету» она не тянет, а пачти обозначить как-то надо.
Итак, изменения, всё что успел увидеть и поправить за час работы:
нарисован favicon и дорисован логотип
выкинута реализация функции in_array (авторы плохо знают язык?)
работа с файлами заменена на более безопасную — с flock и append. Там где можно, используются file_get_contents и file_put_contents (это означает, что раньше эта система «теряла» часть данных)
патч для более точного подсчёта уников (с использованием данных браузера)
вычищены .htaccess от лишнего мусора
поправлены регулярные выражения в коде
переписан странный поиск с stristr
на странице хитов теперь выводятся тИЦ и Page Rank
сделан парольный вход, задаётся в конфиге (по умолчанию, логин — admin, пароль — test)
для совместимости со «Спестой» сделан файл click.php
исправлены ситуации, в которых генерировались notices и warnings (в основном — на пустых данных)
исправлена ошибка в работе с файлом sites.txt
ряд мелких улучшений кода, которые лень описывать
Важно: данные «Спесты» и «Спесты 2» между собой несовместимы, т.е. вы потеряете предыдущую статистику при замене одной версии на другую. Второе важное замечание — в «Спесте 2» нет статистики по кликам на ссылки и IP-адресам (лично мне она не нужна, так что вставлять в код я её не буду).
Инструкция по установке: распаковываете в нужную папку «Спесту 2», скрипт должен иметь возможность писать в папки data и reports. Если у вас была оригинальная «Спеста», удалите её, поверх ставить нельзя. Далее, вы должны подключить «Спесту» на каждой странице вашего сайта. Для PHP это будет выглядеть так: <?include 'каталог со спестой/counter.php'?>;
для HTML страниц можно попробовать сделать следующее: <!--#include virtual='/каталог со спестой/counter.php' -->
Удивительная избирательная слепота у людей. На «Хабре» опубликовали статью «Новые возможности HTML и CSS в Safari 3.1», где народ восторженно обсуждает возможности, появившиеся в браузере «Сафари». Этим возможностями сто лет в обед — те же яйца, только боком уже давным-давно реализованы в Internet Explorer, причём в версиях 4.xx—5.5.
Это вообще какое-то чудо — все стандарты от Internet Explorer называются «мировым злом» (например, «фильтры»), а стандарты от других производителей — охренительными фичами (вроде тех же «transforms» или CANVAS от Apple). При этом последние шесть лет целая куча функционала была скомуниҗҗена с IE, а сколько там ещё можно утащить (самый известный пример, конечно же, HttpRequest, который придумали в Microsoft и на котором работает AJAX)!
Я составил небольшую таблицу соответствий технологий IE и их реализаций в других браузерах:
Вышел браузер «Сафари» версии 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-графику самостоятельно, из-за чего игра на средних компьютерах заметно притормаживает.
Нашёл замечательную старую статью «Декоративная обфускация 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».
На «Воффке» увидел неплохую статью, описывающую довольно типичную для «троллей» тактику — приписать что-то оппоненту и обсудить эту ситуацию как свершившийся факт. Приведены несколько примеров и методы защиты.
Те, кто используют PSP для чтения книг, наверняка знают, что лучшая программа для чтения — Bookr, давно не обновляется. Но умельцы постепенно её дорабатывают, обратная сторона этого положительного явления — модификаций развелось такое количество, что ориентироваться в них стало уже очень сложно. Мне понравилась сборка, которую сделал пользователь SD6719 с форума сайта PSPx.
Она поддерживает форматы txt, fb2, pdf, djvu, кодировки UTF-8, UTF-16, KOI8-r, CP-1251, CP-866, поддерживает TTF-шрифты, сама загружает последний прочитанный файл, имеет функцию перехода к странице по номеру и так далее. У программы две версии — для прошивки 1.50 и для всех остальных. Так же можно скачать исходники, если интересно почему размер программы вырос почти в два раза.
Случайно обнаружил, что тИЦ можно измерить и для корневых доменов. Самые большие тИЦ (на данный момент) у России, доменов .com, Узбекистана, .localhost и Казахстана:
У верстальщиков до сих пор возникает задача — подключить стили только для определённого браузера. Для 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.
Когда росскийская компания «СУП» купила «Живой Журнал» некоторые, в том числе и я, стали потихоньку отползать на запасные аэродромы. Смирнов, в частности, полностью удалил свой ЖЖ. Я менее радикален — я просто перестал туда ходить. Нам было очевидно — добром это не кончится, главным образом из-за микроскандалов, которые возникали ещё в те времена, когда «суповцы» приобрели право на обслуживание кириллистической части ЖЖ.
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, по-видимому, не видит ценности в «иждивенцах», не просматривающих рекламу, не платящих, и боже, подождите… производящих бОльшую часть контента для всех остальных читателей, других пользователей ЖЖ, просматривающих рекламу и оплачивающих свои аккаунты.
В 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 можно использовать в любом статическом контексте, например так: