Про картинки

Некоторые картинки с моего сайта стали медленно расползаться по разнообразным форумам. Это все, конечно, здорово — но у меня ограничен трафик (5 Гб в месяц — это на самом деле очень немного при посещаемости выше 150-200 человек в день), а посетителей на сайт это все не привлекает. В результате «отдача» от «картиночного» трафика — практически нулевая.

Мне лично известно два метода борьбы с «bandwidth theft», как это называют на озабоченом трафиком Западе. Первый — выдача вместо картинок «левого» изображения при «неправильном» HTTP-Referer. Недостаток метода применительно к моему сайту — картинки не будут отображаться в ЖЖшных френдлентах — а это совершенно не нужно.

Второй метод — вставка во все картинки «клейма», или Watermark. Наглядный пример — всем известный фотоархив Life. Для защиты от копирования — очень здорово, а делая watermark на основе адреса сайта — получим еще и какой-то ПЕАР :) Проблема — навязчивый watermark на страницах собственного сайта видеть, честно говоря, не хочется.

Собираюсь совместить эти два метода. Для этого достаточно при проверке Referer перенаправлять не на «фиксированную» страницу, а на PHP-скрипт с параметром, соответствующим запрошенной картинке. Скрипт и будет вставлять заданную надпись, например, вот так:

Одновременно «убиваем двух зайцев» — и картинка видна, и ссылка на сайт есть. С использованием библиотеки GD такие вещи делаются на раз.

Единственная проблема, которую необходимо как-то решить — кеширование запрашиваемых картинок. А именно, обработка изображений — довольно ресурсоемкая задача (а для шаред хостинга — тем более). Если картинка запрашивается раз в год — то естественно, можно и «поработать». Но при ежеминутных запросах сервер быстренько «отрубится». Сохранять копии всех картинок с ватермарком — тем более бессмысленно, далеко не на все загруженные на мой сайт картинки кто-то ссылается. Видимо, поступать будем аналогично известному плагину для WordPress — сохранять «доработанные» картинки в отдельную директорию, запоминая время создания копии. При очередном запросе будем удалять «старые» сохраненные картинки.

В общем, еще одна простая, но интересная задача по программированию.

Standalone-френдлента

Похерил свою «френдленту», которую изготавливал плагин Feedwordpress. Плагин жутко глючный, не используйте ни в коем случае!

Придется писать свой практически с нуля.

Про OpenID-плагин

Продолжаю разбираться с OpenID-плагином Александра Никулина. Сегодня напишу свои измышления по поводу реализованных в этом плагине методов авторизации.

Итак, в «обычном» WordPress без плагинов можно «авторизоваться» двумя способами. Первый — оставить комментарий, тогда WordPress сбросит cookie с информацией о комментаторе. При последующих загрузках страницы с формой для комментариев будет происходить ее автозаполнение. Второй способ — авторизация на страничке wp-login, но у нее есть свои недостатки. Во-первых, не хотелось бы включать опцию «каждый может зарегистрироваться» и пускать пользователей в админскую панель, пусть даже и «сильно обрезанную». Во-вторых, регистрироваться на standalone-блоге лишь для того, чтобы оставить комментарий, будет далеко не каждый.

Плагин Александра Никулина добавляет «третью» возможность. Оставив OpenID-комментарий, пользователь получит cookie, по которому OpenID-плагин будет «узнавать» его. Это напоминает первый метод, но в cookie используются другие параметры.

Этот подход имеет огромное количество недостатков. Самый большой — незнание авторов других плагинов о том, что пользователь с определенными cookies считается «залогиненным». Эти cookies не опознаются, как принадлежащие WordPress. Конечно, можно добавить в OpenID-плагин фильтр, который, при наличии кеширующего плагина, будет оповещать тот, что пользователь уже зашел, но придется также править .htaccess, что уже не настолько тривиально.

В общем, плагин нуждается в серьезной переделке. И здесь снова есть два подхода — сделать авторизацию по специальным образом составленному «имени пользователя» в cookie или же использовать встроенную в WordPress систему «пользователей» и «ролей». Второй вариант мне представляется более интересным. Думаю, что подобным способом можно сделать даже некое подобие ЖЖшных «сообществ» на движке WordPress — а это уже очень заманчивая перспектива. Если удастся еще и «подружить» это с WordPress MU — то будет совсем здорово.

Кстати

Я поставил на сайте рекламу и меня абсолютно не волнует ничье мнение по этому поводу.

Если будете сильно просить — поставлю плагин NoAdsForFriends.

Кроме того, отрубил cookie для опенайдистов. Это временная мера, пока я переделываю авторизацию по OpenID, встроенную в плагин.

И как следствие последнего — врубил кеш, а то полторы сотни ошибок 503 за эти выходные — это многовато.

Про OpenID-плагин и кеш

[info]werwolf_lg заметил интересный баг в моей «сборке» WordPress, заключающийся в неправильной совместной работе кеша и OpenID-плагина Александра Никулина. А именно, если пользователь сначала оставлял комментарий по OpenID, а затем заходил на любую страницу, то в кеш отправлялась страница с неправильной формой добавления комментария (она генерировалась для пользователя с OpenID и на ней не показывались поля для ввода имени, e-mail и URL). Опенайдист затем не испытывал никаких затруднений, а остальным выдавалась страничка с надписью «Вы вошли как такой-то». При этом при отправке комментария WordPress, не найдя cookies OpenID-пользователя, начинал ругаться на неправильно заполненную форму.

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

http://shura.luberetsky.ru/wp-content/plugins/openid/openid-comments-post.php?openid_logout=1&post_id=581

Сейчас кеш временно отключен. Буду дорабатывать OpenID-плагин, когда все станет «хорошо» — включу кеш обратно. Надеюсь, [info]knutov не будет сильно ругаться.

Прошу помощи по usability

Интересует мнение публики по одному вопросу, связанному с удобством интерфейсов. Как известно, для WordPress существует два наиболее популярных плагина, позволяющих пользователям сервисов с OpenID оставлять свои комментарии. Формы комментариев в них далеки от идеала.

В плагине Александра Никулина:

Казалось бы, все хорошо — но лишний раз убеждаюсь в том, что для пользователей ЖЖ зачастую проблематично понять, как заполнять поля ввода. Нужно ли указывать имя, e-mail, адрес сайта и логин в ЖЖ одновременно, или по отдельности? Почему пользователю ЖЖ, для того, чтобы подписаться на комментарии, нужно вводить e-mail в верхней группе полей ввода? Наконец, что делать людям, пришедшим не из Livejournal или Deadjounal, а, к примеру, с lj.rossia.org или diary.ru (о наличии раскрывающегося списка многие не догадаются, да и сервисов этих там нет)?

В плагине Алана Кастонгвая:

Зачастую надпись «OpenID enabled» не показывается, в этом случае при попытке оставить комментарий пользователя «кинет» на его страницу, где ему будет предъявлен вопрос: «Доверяете ли вы сайту такому-то»? Так как никаких предупреждений не было — пользователь в непонятках падает со стула. Это, например, будет в том случае, сли пользователь ЖЖ попытается оставить комментарий, введя в поле URL http://username.livejournal.com.

В общем, для своего блога я рисую собственную форму OpenID-комментариев (дорабатывая плагин Александра Никулина). За прообраз взята форма из ЖЖ (или с тифаретника, или из другого LJ-клона). Конечно, это «промежуточный» вариант, будет добавлено еще некоторое количество популярных блогохостингов, но идея понятна. Думаю, что подобное решение не будет сбивать пользователей ЖЖ или других блогохостингов с толку.

В связи с принципиальными отличиями клонов ЖЖ и стендалончиков, вариант «анонимно» не очень вписывается в общую картину. Объявляется конкурс на лучшую идею, что написать вместо слов «как» и «анонимно».

Про кеширование

После «последнего китайского предупреждения» от [info]knutov и ссылки на меня от [info]lord_k пришлось задуматься об установке какого-нибудь плагина для кеширования. Выбор очевиден — WP Super Cache.

Если у кого-то наблюдаются глюки — пожалуйста, напишите в комменты.

RSS-трансляция восстановлена!

Внимание, внимание! Говорит Москва! Работают все радиостанции Советского Союза. Передаем экстренное сообщение ТАСС. Сегодня, 16 ноября 2007 года по просьбам трудящихся возобновлена работа RSS-трансляции блога Шуры Люберецкого!

А теперь — немного техники. Для того, чтобы записи из категории «Френдлента» не попадали в RSS-трансляцию, достаточно немного поправить плагин Front Page Excluded Categories — вместо

$wp_query->is_home

всюду написать

($wp_query->is_home || $wp_query->is_feed)

Раньше просто руки не доходили.

Про плагины, часть 2

Доработал OpenID-плагин так, что теперь имена опенайдистов из ЖЖ и с тифаретника отображаются «красиво» — со ссылкой на профиль и человечком слева.

Обращаюсь ко всем читающим меня пользователям ЖЖ — попробуйте оставить какой-нибудь комментарий к этой записи, если что-то пойдет неправильно или будет непонятно — напишите на мой е-мыл lamer5(сабака)mail.ru.

UPD Оставлять комментарии надо, используя OpenID — то есть заполнять форму для отпраки комментария вот таким образом:

В ближайшем будущем доработаю форму, чтобы работало примерно как в ЖЖ.

Про плагины

От нечего делать забодяжил плагин к WordPress, «красиво» отображающий некоторые юзернеймы.

Результаты работы плагина — в комментариях к этой записи.

Еще один глюк

Непонятно почему, но ссылки в виджете «Последние комментарии» при просмотре «френдленты» ведут совершенно не на те посты. Придется разбираться.

UPD Как показала экспресс-диагностика, «виноват» плагин, импортирующий записи из RSS-лент.

Френдлента

А вот с плагином, исключающим с главной страницы записи из определенной категории — получился очень интересный заменитель френдленты. Ткнул туда первые попавшиеся ЖЖ и пару блогов на WordPress.

Конечно, есть некоторое количество глюков. Самый неприятный — записи из «френдленты» выводятся в RSS, что ни мне, ни их авторам не нужно. Поэтому RSS отключен до восстановления статус-кво.

Еще один мелкий баг — записи включаются в архив, например, сегодня [info]denismajor написал несколько постов, а у меня они смешались с моими личными: http://shura.luberetsky.ru/2008/11/12/. Прочие глюки происходят по той же самой причине — например, в моей записи о новостях вордпрессоводства «предыдущая» и «следующая» записи — не мои: http://shura.luberetsky.ru/2008/11/12/novosti-vordpressovodstva/.

А в целом — получилось неплохое подобие френдленты:

http://shura.luberetsky.ru/category/friends/

Глюки можно поправить доработкой плагина, скрывающего категории от посторонних глаз. Он устроен очень просто — фактически, перехватываются SQL-запросы к базе данных и к ним добавляется требование «не обращать внимания на ненужные категории».

А вот плагинчик нашелся

Позволяет убрать какую-либо категорию (блин, РУБРИКУ) из вывода на главной странице:

http://wordpress.org/extend/plugins/front-page-excluded-categories/

Сейчас попробуем прикрутить и фильтровать импровизировнную френдленту.

Новости вордпрессоводства

Во-первых, сообщу отличное известие для всех без исключения нормальных пользователей Вордпресса. Алексей Новиков разработал плагин для WordPress, который блокирует «рекламные» комментарии (они же «говнокомменты»). Пока я занимался перепиской с Яндексом, Алексей, не дожидаясь, пока «проснутся» поисковые системы, реализовал собственный сервис по определению говнокомментеров. Плагин называется Parasite Eliminator и предназначен для быстрой и безболезненной ликвидации комментариев, содержащих рекламные ссылки. Прочитать подробнейшие инструкции по установке плагина и скачать его можно на официальном сайте:

http://parasite-eliminator.ru

Во-вторых, отчитаюсь о тестировании плагина FeedWordPress. К сожалению, в его нынешнем виде плагин непригоден для создания подобия френдленты. Сейчас — краткий расказ о том, что я делал.

1. Скачал и установил плагин. Затруднений не вызвало.
2. Для корректной работы трансляции в ЖЖ создал новую «рубрику» (по английски — category) в WordPress, назвал «Френдлента». В настройках плагина трансляции в ЖЖ запретил кросспостинг в ЖЖ этой рубрики.
3. Добавил рубрику ссылок «Друзья», куда занес пару RSS-трансляций — просто для проверки.
4. В настройках плагина указал, что записи из RSS-лент должны добавляться в рубрику «Френдлента».
5. Нажал «Update», плагин подумал…
6. …и вывалил чужие записи мне прямо на главную страницу.

Так и не смог найти в WordPress опцию, позволяющую отключить вывод записей из какой-то конкретной рубрики на главную страницу. В общем, больше он подходит для деятелей из первого пункта, которые делают «автозаполняемые» блоги. Но работает неплохо, будем доделывать.

Как мне кажется, очень важна «единообразность» отображения имен пользователей в комментариях и френдленте. Например, и там, и там юзернейм [info]brat_luber должен показываться именно так, как вы его видите здесь. Учитывая то, что RSS-аггрегатор создает новых «пользователей» для того, чтобы движок WordPress мог различать записи из разных источников, логично было бы отождествлять, к примеру, пользователя ЖЖ как OpenID-комментатора и пользователя ЖЖ как «виртуального» пользователя WordPress, виртуальным образом пишущего записи в рубрику «френдлента».

Поэтому подход Александра Никулина к OpenID-комментариям, когда «комментатор» — это «некто» с именем вида brat_luber@livejournal и сайтом http://brat-luber.livejournal.com, мне представляется не вполне верным. Правильнее поступить так, как сделано в плагине Alan J Castonguay (наверное, по-русски его имя звучит, как Алан Кастонгвай, но я не уверен) WordPress OpenID Plugin, в котором опенайдист, оставляя свой первый комментарий, еще и регистрируется.

После этого будет довольно легко сделать плагин, «красиво» отображающий пользователей с разных сайтов, а также rss-трансляции. Например, такое должно понравиться всем:

[info]shura.luberetsky.ru — это простой опенайдист
[info]brat_luber — это пользователь жежешечки
[info]brat_luber — так выглядел бы пользователь богомерзкого тифаретника
[info]oper.ru — а так надо показывать простые RSS-трансляции

Естественно, что за подобными красивыми картинками должны стоять записи в таблице пользователей WordPress, например, такого вида:

ext:shura.luberetsky.ru@openid:http://shura.luberetsky.ru
ext:brat_luber@lj
ext:brat_luber@ljr
ext:oper.ru@rss:http://oper.ru/rss

Думаю, ни один нормальный человек в жизни не додумается до такого «логина», так что проблем возникнуть не должно. Зато комменты и «френдлента» будут выглядеть красиво.

Борьба с говнокомментами

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

Итак, выглядит это примерно так: нанимаются студенты или школьники на должность «обезьян» (до написания ботов дело пока не дошло), которые спамят блоги «универсальными» комментариями типа:

А не пробовали контраст фона менять у блога? Ночью глаза режет, когда читаешь. Зайдите на мой, сравните для примера.

хорошая статья, как и все предыдущие. Подписалась и ожидаю вашего творчества.

Спасибо. Добавлено в закладки

Так себе… средненько… поднажми еще газу фантазии

Нууу… Написали так написали, я раз 7 пробовал сделать дневник, но всё не пишется, а тут полистал ваш дневник и каааак началось! И вот уже пару недель наполняю свой дневник. Спасибо за вдохновление! Пишите так и дальше!

Такие комментарии подходят к любой записи — кроме совсем специфических. Например, «Про Maus и википедию» не очень вяжется с комментариями типа таких:

Статья — отстой. Пойду — выпью лучше.

Моё мнение вопрос раскрыт с ног до головы, аффтор постарался, за что ему мой поклон!

Фантазия у комментаторов довольно бедна, кое-где составляется «общий список фраз». Для чего это используется? Естественно, для увеличения числа ссылок на сайт — это учитывается при определении места сайта при поиске.

С говнокомментами борятся по-разному. Учитывая, что добавляют их «обезьяны» вручную, каптча, за исключением Демидовича, помогает слабо. Также не спасает удаление или помещение комментариев в очередь на модерацию по их содержимому — тексты иногда меняются. Отключать вывод URL мне лично не хочется. Немного помогает помещение в очередь на модерацию тех комментариев, в которых встречаются URL, уже замеченные в использовании такой накрутки.

Видимо, наиболее сильным ударом по говнокомментам стало бы сообщение о попытках накрутки «куда следует» — то есть поисковым системам. Подобное поведение не одобряет Google:

Избегайте уловок для улучшения рейтинга в поисковых системах. Следуйте правилу: если вы смогли бы без труда объяснить владельцу конкурирующего сайта, в чем состоит ваше преимущество, значит вы на верном пути. Кроме того, полезно задаться вопросом: нужно ли это пользователям? Стали бы вы так поступать, если бы поисковых систем не существовало?

Яндекс солидарен:

Думайте о пользователях, а не поисковых системах. Стали бы вы создавать сайт, страницу или ее элемент, если бы не существовало поисковиков? Приходят ли пользователи на ваш сайт или интернет-магазин не только из поисковых систем?

К сожалению, сообщить о таком виде накрутки нельзя — он находится в узком пространстве между «спамом» и «поисковым спамом». Замечу, кстати, что если бы Яндекс (балуются этим в основном русскоязычные сайты) добавил форму для сообщения об этом виде спама, то довольно легко можно было бы автоматизировать процесс — не представляет сложности написать плагин для WordPress, который отправлял бы URL комментатора «Яндексу», когда комментарий помечается, как спам.

Написал в «Яндекс» по этому поводу, жду ответа.

Про дизайн

Тема Stylized несколько подзадолбала своей поганой работой с виджетами и слабочитаемым шрифтом. Поставил дизайн Fluid Blue, из отличий — резиновость, нормальный шрифт и приличное оформление панели виджетов справа. Мне понравилось.

Кроме того, тема будет дорабатываться — в Stylized меня привлекло прежде всего оформление записей — все эти звездочки и прочие приколы.

Сайтоводство XXI века

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

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

Можно представить себе, как будет выглядеть процесс «конструирования» сайта через несколько лет: запускаешь какой-нибудь Automated PHP Builder, «бросаешь» мышкой компоненты на какое-то «рабочее поле», соединяешь их стрелочками, возможно — пишешь пару строк на каком-нибудь высокоуровневом псевдокоде. Затем — жмешь кнопку Compile и получаешь на выходе набор готовых PHP и SQL скриптов, реализующих необходимую функциональность.

Зато — никаких препятствий для создания «мегапорталов» с возможностями коллективных блогов, или, например, социальных сетей с функциями интернет-магазина…

PS Перечитал последнюю фразу и удивился. В связи с чем — вопрос: как соединить интернет-магазин и социальную сеть? Варианты типа «сайт проституток» не предлагать.