четверг, 31 января 2008 г.

доступ к комментариям по xml-rpc в wordpress: проблемы с преобразовании дат

Сегодня трудился над реализацией и отладкой интерфейса для доступа к комментариям по xml-rpc в wordpress. Относительно несложно оказалось написать и отладить - все работает, вот только возникли проблемы с форматом даты. Проблема в следующем: в базе mysql даты хранятся в своем формате - на выдачи текстовая строка, которую надо переводить в формат datetime = float как принято в php, а затем отдавать в каком то iso стандарте для передачи в xml. Это на стороне сервера отправляю дату. Когда получаю дату - ее тоже надо сконвертировать. Возможно что и сам xml-rpc клиент конвертит автоматом даты - не знаю точно. Где то в этой цепочке у меня закралась ошибка - выискивать ее полнейшее занудство и отнимает много энергии: ничего не создаю, а тупо проверять каждый элементарный шаг…

Меня до сих пор удивляет как это все работает: я для теста написал небольшой скрипт xml-rpc клиентом, который вызывает функции на сервере. Все работает как запланировано: передается список комментариев, забирается комментарий, удаление, смена статуса, создание нового и редактирование. Дополнительно реализовал пару удаленных функций - get_blog_info и getpermalink - для последующей работы с комментариями и записями в блоге пригодятся, ну например получить урл таблицы стилей, чтобы его применить во время редактирования записи или комментария - по идеи должно отображаться как и на сайте, но эту тему предстоит еще исследовать .

Я в каждом новом посте всегда стараюсь вставить ссылку на свой блог, завернув ее в контекст повествования, ну например вспомнив про предыдущие посты. С каждым новым постом замечаю, что это делать каждый раз становиться трудней.

Здесь можно оставить свои комментарии. Выпуск подготовленплагином wordpress для subscribe.ru

среда, 30 января 2008 г.

интервью с генеральным директором яндекс на радио “Эхо Москвы”

Только что прослушал по радио “Эхо Москвы” часовое интервью с гендиректором яндекса. Кратко - зря я это делал, лучше бы расписывал интерфейс xml-rpc доступа к комментариям в wordpress. Журналистки тупили или на самом деле дуры - интервью получилось невнятным и малоинтересным. Приколол факт, что какой то руководитель по финансам в яндексе индус с американским паспортом. Еще я сделал вывод из интервью, что руководство яндекса реально озабочено падением доли яндекса по поисковым запросам - такого в явном виде в интервью не было и быть не могло, но на то и голова чтобы думать, а что ею еще можно делать? Жрать и разговаривать более утомительные занятия.

Мой сайт arhivperipiski.ru полностью вылетел из индекса еще в воскресенье, достигнув количества страниц в индексе 2200. Я написал письмо в яндекс - пока что ответа нет. Хорошо подойдет слово “нервозность” к яндексу, как и к погоде последние несколько лет - температура скачет мало предсказуемым образом. В этом отношении гугл более предсказуем и устойчив. Хоть гендиректор и говорил про то, что в алгоритмах яндекса много математики. Но на мой взгляд явно математика не та что у гугла. Мне не жалко яндекс - выдача у него хуже чем у гугла.

Сейчас пишу на php реализацию доступа по xml-rpc к комментариям wordpress. Неожиданно много возни с безопасностью и правами доступа разным юзерам: чтобы злодеи спамеры не могли повредить. Выбрал пространство имен для этого апи - “wp.extension.functionname”.

Пока не забыл - обязательно в конце месяца запишите очередную болванку CD/DVD с теми материалами, с которыми работаете: очень болезненно потерять текущий проект. Я одно время регулярно это делал, пока мне это не надоело. И зря - на одном из жестких дисков повредилась разбивка диска, потом пришлось долго выкручиваться, восстанавливая разделы. В конце концов текущий проект был восстановлен, но черт побери лучше бы была записанная на болванке копия. Регулярно делайте бэкапы и закатывайте болванки.

Здесь можно оставить свои комментарии. Выпуск подготовленплагином wordpress для subscribe.ru

вторник, 29 января 2008 г.

плагин wordpress to blogger.com (blogspot.com) - кроспостинг в блоггер

Сделал отдельный плагин, который добавляет новые статьи на blogger.com (blogspot.com). До этого у меня был один универсальный скрипт для кроспостинга в subscribe.ru и в blogger .com (blogspot.com). Новую версию для перекрестного постинга можно найти в предыдущей статье.

Плагин остался прежним - простым и работающим. Зато сейчас есть возможность выбирать галочку - постить анонс или полностью. Также сократил размер подписи.

Для установки плагина просто скопируйте его и активируйте, при этом настройки останутся. Скачать плагин wordpress to blogger.com (blogspot.com) - wp2bloggercom.zip.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

плагин Wordpress to subscribe.ru - из блога в рассылку

По просьбам блогеров сделал новую версию плагина для кроспостинга в subscribe.ru.

    Внесенные изменения

  • Добавлена галочка, выбирающая постить только анонс или полностью
  • Перемещен в отдельный плагин кросспостинг в blogger.com (blogspot.com)
  • Поменял название плагина - предыдущее было слишком длинным
  • Сократил подпись в конце поста

Для установки плагина деактивируйте старый плагин, и активируйте новый, при этом настройки останутся. Скачать Wordpress to subscribe.ru cross poster - wp2subscriberu.zip.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

понедельник, 28 января 2008 г.

плагин wordpress пропускающий комментарии только на русском

За вчерашнюю ночь мне пришло более полусотни комментариев - спама на английском языке. Акисмед, конечно, пометил их как спам и не пропустил, но мне от этого не легче: перед удалением я то их просматривал. Я задался написать простой плагин для wordpress - если текст комментария не содержит русского текста, то его не пропускать. Какого же было мое удивление, что в wordpress не существует корректного механизма, не пропускающего нежелательные комментарии. Ну если очень хочется, то можно: посмотрев исходник wordpress файл wp-comments-post.php, на который отправляются комментарии из формы, я увидел, что если комментарий не соответствует каким то условиям, то его обработка завершается просто окончанием работы скрипта - функция wp_die. А я то, привыкший к системному мышлению, не мог помыслить, чтобы плагин по своей инициативе самостоятельно прервал бы цепочку выполняющихся скриптов. По моим убеждениям плагин не должен иметь никакой возможности нарушить выполнение других частей движка: движок должен сам решать, когда завершить работу скриптов. В программирование на дельфи, такая парадигма является безусловно правильной, но вот это не так для движка wordpress. Еще на один бал упал в моих глазах wordpress.

Итак
.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

xml rpc в delphi

Я пишу приложения для Windows на дельфи. В стандартных пакетах к дельфи нет поддержки протокола xml-rpc. Есть поддержка SOAP, но соап более навороченный стандарт вызова удаленных функций, чем xml-rpc. Если взглянуть на библиотеку на php реализующую xml-rpc, то это будет всего один файл class-IXR.php (820 строк) - он находится в каталоге wp-includes wordpress’а.

Для дельфи такого простого модуля я не нашел. Нашел бесплатную библиотеку на sourceforge.com, но вот сейчас ссылку на эту библиотеку никак не могу найти, в исходниках встретил ссылку на один из сайтов разработчиков: The Delphi Inspiration [Delphi Inspiration]. Библиотека не развивалась с 2001 года и для INDY 10 версии необходимо немного поработать напильником. Библиотека старая и по большому счету нуждается в причесывании под дельфи 6/7 - строки передаются по значению, во всех строковых функциях следовало бы добавить const. В этой библиотеке есть свой собственный xml парсер - не используется ДОМ. Проверял - работает как надо, для всех http запросах используется INDY, что дает определенную гибкость и управляемость, и если потребуется то и поддержку https. Чем плох стандарт xml-rpc так это тем, что все функции придется расписывать вручную - те кто импортировал wsdl интерфейс в SOAP поймет, какой же это отстой…

Будет ли когда нибудь wordpress поддерживать соап я не знаю, скорее всего никогда. начав разбираться с wordpress я начал понимать, что этот движок достаточно плох. Очень бросается то, что нынешние версии выросли из плохого кода, ориентированного на программирование функций. Более естественным было бы построить движок используя идеологию объектно ориентированного программирования. Увы этого нет. Если движок не будет переписан с учетом простых требований организации логики работы движка, то перспектив для развития у него мало. Тут еще проблема самого php, как языка плохо приспособленного для объектно ориентированного программирования и слабой типизации данных. Хотя в пятой версии php улучшена работа с объектами, ему безумно далеко до стройности дельфи. Что уж загадывать далеко на будущее, поживем - увидим, какая судьба ждет wordpress.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

Клиент для комментариев wordpress

Начав разбираться с комментариями в wordpress и спамом родилась у меня идея написать еще клиента для комментариев в wordpress. Стандартное api предоставляемое через xml-rpc wordpress (смотрите файл xmlrpc.php в корне блога) не имеет функций по управлению комментариями. Значит такое апи надо написать самому. На вскидку там должны быть функции аналоги как и для управления постами: получить список, получить, удалить, создать, отредактировать, изменить статус (между спамом, подтвержден, не поддвержден). Да и все, а большего и не надо. Комментарии можно будет организовать подобно письмам в почтовых клиентах - соответствующие стандартные папки: входящие, ожидают модерации, спам, архив - там будут все комментарии. Остается открытым вопрос об аккаунтах - программа сможет обслуживать сразу несколько блогов, то как лучше: одни и теже папки для всех блогов или для каждого блога набор стандартных папок. Полная аналогия этой ситуации - ящики POP3 и IMAP в Outlook Express. Все письма из POP3 ящиков по умолчанию кладутся в папку входящие, а для каждого ящика IMAP создается дерево папок, точнее загружается с сервера. У комментариев в wordpress нет никаких папок, хотя сейчас возникла мысль - создать дерево папок из постов, а в каждой такой папке-посте находится только комментарии для этого поста. Думаю такая придумка будет отлично рулить на блогах с большим количеством комментариев на каждый пост. Если же комментариев у блога мало, то такая организация только безосновательно затруднит использование программы. Отсюда вытекает, что надо делать две версии программы - pro и обычную. Версию pro скорее всего за деньги - если у блога на каждый пост более полусотни комментариев, то должны быть деньги. В про версии каждый аккаунт будет иметь собственное дерево папок и папки с постами. В обычной версии будут по одной папке новые, ожидают модерации, спам, а также для каждого блога отдельная папка, где будут все комментарии одного блога. Папка архив оказывается неудачная идея.

При первом запуске программы все комментарии не будут загружаться ни в одной версии: будет получен список ID комментариев, а потом каждый комментарий будет подгружаться по требованию - аналогия с письмами IMAP, когда загружаются только заголовки писем, а письмо загружается при наведении на него.

Менеджер аккаунтов будет один для всей линейки программ: блог клиент, клиент для комментариев (comment client?) обычной и про версий. Планирую также включить в настройки возможность использования прокси, и дополнительно gzip компрессию - кто как, а я вот через мобильник выхожу в интернет, и мне лишний трафик ни к чему.

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

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

суббота, 26 января 2008 г.

Мифы и реальность интернет протоолов http, ftp, mail

Когда я не знал как работают интернет протоколы http, ftp, mail, я представлял себе, что это похоже на работу телефонных станций или токарный станок. Ну то есть все, конечно, в цифровых каналах, но по принципу неизвестных мне технических сигналов. Ведь никто не рождается сразу с пониманием интернетовских протоколов. Мне казалось, что это узкоспециальная скучная тема, которая доступна профильным инженерам. У меня было понимание канала передачи данных, по которому передаются оговоренные протоколом бинарные данные, и чтобы их понять нужны специальные средства и вообще это слишком сложно разбираться в технологических дебрях. Ну примерно я сейчас также отношусь к сетям мобильной связи стандартов GSM, CDMA.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

как устроен комментарий в wordpress

В каталоге wordpress в папке wp-includes есть файл comment.php, в котором находятся функции управления комментариями. Из чего же состоит комментарий? Перечислю: индификаторы - комментария, записи и пользователя; время и время по Гринвичу, E-Mail, IP адрес, агент, имя, адрес сайта, текст комментария, статус подтверждения (а также спам), тип комментария. Я все таки нашел файл schema.php в каталоге wp-admin/includes, в котором создаются все таблицы wordpress, вот как создается таблица с комментариями:

CREATE TABLE $wpdb->comments (
comment_ID bigint(20) unsigned NOT NULL auto_increment,
comment_post_ID int(11) NOT NULL default ‘0′,
comment_author tinytext NOT NULL,
comment_author_email varchar(100) NOT NULL default ”,
comment_author_url varchar(200) NOT NULL default ”,
comment_author_IP varchar(100) NOT NULL default ”,
comment_date datetime NOT NULL default ‘0000-00-00 00:00:00′,
comment_date_gmt datetime NOT NULL default ‘0000-00-00 00:00:00′,
comment_content text NOT NULL,
comment_karma int(11) NOT NULL default ‘0′,
comment_approved enum(’0′,’1′,’spam’) NOT NULL default ‘1′,
comment_agent varchar(255) NOT NULL default ”,
comment_type varchar(20) NOT NULL default ”,
comment_parent bigint(20) NOT NULL default ‘0′,
user_id bigint(20) NOT NULL default ‘0′,

Да уж упустил - поле карма, есть и такое в wordpress. Получается, что мне некуда поместить сессионный ключ доступа к комментарию. А если можно было это сделать, то все получалось бы очень красиво: сессионный ключ был бы аналогом ID, только для глобального использования (вспоминаю openid) - например md5 строка. Тогда можно обойтись парой - ключ (пароль) домена и ID в wordpress.

Что же касается ссылок, то такая таблица в wordpress уже есть, но вот дополнительного поля в ней не предусмотрено. Очевидно, придется создавать для работы плагина таблицу. Я бы этого не хотел делать, но такая практика уже существует - ну например плагин download counter или maxsite ushki.

Что же должно быть в этой таблице кроме адресов блогов и их ключей доступа и статуса (типа друг, оппонент, спамер)? например адрес xml-rpc сервера, если он какой то не такой как у всех: зарезервирую я это поле, по умолчанию будет пустой строкой. Статус блога может быть еще не проверен (или по другому не подтвержден), предлагает дружбу, отказано в дружбе, поссорились. Какие еще можно придумать фичи для блогов?

Так что кроме разделенных комментариев можно будет еще дружить блогами, по примеру того как это сделано в livejournal.com и ya.ru.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

пятница, 25 января 2008 г.

Socialize Me плагин wordpress для буржуйских социальных сетей

Сейчас прочитал на Goodluck » Плагины Wordpress релиз на 1/25. про плагин Socialize Me. Вот цитата:

Socialize Me — это плагин, который позволяет показывать собственные сообщения для пользователей посещающих сайт с Социальных сетей, таких как StumbleUpon,Facebook, Digg, Delicious, Pownce, Twitter, Bebo и другие. Вы можете настроить каждое сообщение, которое будет показано пользователю.

По началу , прочитав только несколько слов я было уже расстроился - ну вот, изобретаю велосипед. По большому счету - да, безусловно я изобретаю велосипед, но такого велосипеда как мой, ни у кого нет. Мой велосипед будет ездить между блогами на wordpress. Разделяемые комментарии это всего лишь часть социализации блога - ах какое некрасивое слово социализация - причина фиксации точки сборки, а я вот хочу чтобы моя точка сборки была подвижной и яркой, но это уже слова из другой песни.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

сценарий поддверждения удаленных вызовов через xml-rpc

Написать плагин социальной сети не составляет большого труда. В который раз повторю старую истину: написать исполняемый код (исходник) можно за один - три дня. Я этого пока не делаю по следующим причинам: пока что нет детального представления работы плагина и протокола обмена данными. Есть уже точное понимание как будет работать плагин на каждом участке. Я писал про уведомление о новом комментарии. Как это я описал раньше есть лазейка для спамеров. Когда вы оставляете комментарий на блоге у друга, этот блог должен уведомить вас о новом вашем комментарии: ваш блог должен ответить либо отказом, либо согласием, либо ожидает модерации. Предположим, что спамер послал вам уведомление о якобы вашем комментарии - тогда вы будете завалены спамом. Вывод: вызов всех удаленных функций (rpc - remote procedure call) должен иметь еще один параметр - типа сессионный ключ/пароль доступа для обратного подтверждающего вызова (callback). Получается масло масленое - подтверждение подтверждения. Продемонстрирую как оно будет работать:

1. Клиент уведомляет блог автора комментария
2. Блог автора получает уведомление
3. Блог автора проверяет урлы и запрашивает у вызвавшего клиента, что это именно он уведомляет
4. у клиента запускается сервер, который получает запрос на подтверждение - он сравнивает полученные данные с имеющимся в базе (сессионный ключ) и дает отмашку
5. Блог автора получает от клиента подтверждение и после этого наконец таки дает ответ клиенту и соответственно может забрать комментарий к себе.

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

Почему же такие сложности? Да очень просто - любой спамер может вызвать эти функции, а такой протокол гарантирует что два домена обменяются данными: на каждом этапе будет резолвиться имя, а ведь нет гарантированного способа что ты это ты не прибегая к сертификатам и https. Решение должно работать на любом хостинге, в том числе и на бесплатном. Можно было бы обойтись без обратных вызовов, если использовать зарегистрированный логин и пароль на одной из сторон. Возможным бы решением этого мог бы быть рассмотренный мной openid, но вот возиться с ним не хочется - ведь мое решение будет работать без привлечения дополнительных сущностей. Использование openid значительно увеличивает цену разработки плагина: время и усилия по разбору документации по openid, тестирование, наличие ошибок в сторонних библиотеках и изучение этих библиотек, увеличение нагрузки на сервер (об этом явно написано в плагине openid для wordpress). Для установки плагина тогда потребуется таскать с собой библиотеку openid и следить за ее обновлениями. Когда как мое решение ничего подобного не требует и будет физически находится всего водном файле php. У кого есть какие соображения?

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

openid - что это такое

Сегодня в комментариях оставил записи mvkozyrev, ведущий свой блог о многопользовательском wordpress. У нас развернулась небольшая дискуссия про open_id в wordpress. Я про этот самый openid знаю только то, что он позволяет авторизоваться на сайтах поддерживающих этот стандарт. Несколько лет назад я слышал информацию о том, как разработчики получили грант $5000 на развитие своего проекта. mvkozyrev подкинул ссылку на плагин openid для wordpress. Я его скачал, распаковал, а там, мать божья - 59 файлов! Я в них не разберусь быстро. Этот плагин позволяет добавить на форму комментариев еще одно поле - урл openid комментатора, если комментатор (его блог) поддерживает этот стандарт. Пока что для меня ничего не проясняется, а наоборот настораживает - простые вещи должны быть просто объяснены, а сложные не имеют право на жизнь. Я за всю свою жизнь встретил только одну сложную вещь - теорему о единственности представления матрицы с точностью до перестановки жордановых клеток. Теорема на самом деле тоже простая, просто доказательства с матрицами занимают несколько страниц, а доказательство в той теореме сводилось к одному: если запустить процесс жордановых преобразований, то мы получим матрицу из жордановых клеток, а что до точности - просто нет доказательства, в каком они будут порядке. Например в оригинальной документации по пингованию все было легко объяснено на пальцах, где же такое описание про openid? на сайте openid.net обычная рекламная распальцовка. Нахожу ссылку Specifications, перехожу по ней, уже предчувствуя треп о мега супер крутости стандарта. Ну и что же на той странице? Ну конечно же ссылка на другую страницу со спецификацией - ну что им мешало дать с главной страницы сразу туда ссылку? Чтобы меньше людей прочитало? Но моим надеждам и на той странице не суждено сбыться - стоит толпа ссылок на текстовые файлы. О боже! Ну почему у них не хватает ума кроме названия документа в двух словах написать, зачем он вообще нужен - я ведь глуп и ленив чтобы скачивать и читать все подряд. Никогда не делайте столь бесчеловечных сайтов! На странице для разработчиков есть ссылка на руководство для старта openid ссылка ведет на другой сайт: зачем тогда официальный сайт? Либо это карма всех opensource? Думаю нет - отличный пример организации и документирования это wordpress.org - может быть именно в этом успех этого движка? Скорее одна из составляющих.

Что же, я перешел на A Recipe for OpenID-Enabling Your Site, где на человеческом английском наконец таки начинается объяснение сущности опенида. Я сейчас одновременно буду читать и писать этот пост - именно так я делал до сих пор.

Вступление - openid пригодится там, где на сайте есть профиль пользователя(ей) и они авторизуются при помощи логина и пароля, а внутри используется его ID - ну это то есть везде. Если у вашего сайта нет этих характерных признаков, то и оставайтесь дальше в одиночестве. Замечу для тех, кто смог прочитать до сюда - wordpress имеет все что надо.

Первое, что надо поиметь - это таблицу преобразования между внутренним ID и внешним ID.

Далее автор руководства советует заиметь поддержку для регистрации новых пользователей при помощи ИД любого openid провайдера, а также предоставить этот индификатор старым юзверям. И чтобы была специальная страница для редактирования анкетных данных.

Следом идут рассуждения о базе данных и редеректе урлов - тут мне стало совсем грустно: я то уже и xml-rpc считаю устаревшим форматом, по сравнению с soap. Сразу вспомнил подтверждение своего дневника на ya.ru через livejournal при помощи этого самого openid: ya.ru меня перебросил на livejournal.com, где я авторизовался и нажал кнопочку подтвердить для ya.ru что я это я и никто другой, после этого меня обратно редеректирили на ya.ru. Мне совсем грустно и не хочется читать дальше про openid - ну что за отстой с этими редеректами. Ну может быть для конечного пользователя это и позволить разделить свой профиль между сервисами, но вот до построения масштабируемых распределенных приложений наверняка этот стандарт не тянет. Может быть я ошибаюсь? Заставлю себя почитать дальше.

А дальше ничего нет - это и все! Ну еще заявление о 120 миллионах пользователей готовых через openid воспользоваться вашими сервисами. Мне бы сотую долю процента от них - сейчас прикинул, это будет 12000 - маловато будет, но если это будут покупатели, то да, а так мне ничего не светит.

Мой предварительный вывод - openid не стоит затраченного на него времени и я могу реализовывать плагин для социальной сети без его использования.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

четверг, 24 января 2008 г.

Миф о дублированном контенте

Сегодня в очередной раз убедился в мифе про дублированный контент: якобы за него банят и понижают и вообще не любят. Задал я запрос яндексу запрос социальная сеть блог wordpress. И что мы видим в результатах выдачи? Куча блогов с одной и той же статьей про добавления букмарок. И что и где же автор у которого все содрали эту статью? А черт его знает и яндекс никак никого не банит. Так что если воровать и перемешивать и поставить это дело на автомат, то можно и бабла срубить: тысячи честных юзверей в livejournal.com, liveinternet.ru и других местах не подозревают, что на их незатейливых откровениях можно погреться. Контента для всех хватит.

Вспоминаю, что когда я зарегался на liveinternet.ru и открыл там дневник для трансляции моего rss туда, мне назначили типа куратора - школьницу со своим дневником. Из любопытства я зашел проведать своего куратора, чтобы почитать ее дневник. Прочитал только одну запись, про то как ее мамаша запустила в нее мобильником, рассердившись, что она не учит уроки, но она увернулась и мобильник разлетелся, а она горевала о потери вещи и доставучих родителях. Ах бедная школьница, мне совсем не интересно читать твои горести, но зато возникла мысль найти полсотни таких как ты и запустить сайт с отпарсиными rss ваших дневников - и наверняка вам же было бы интересно это читать. Одна беда в том дневнике была - мат перемат, а я уже слишком старый чтобы читать матюги - привет Давыдову,чтоб его блог загнулся.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

хостинг, sql, а также капчи - будь они не ладны

Блогеры оживились и стали много всякого писать - может быть новогодний алкоголь уже отпустил.Я почитываю и иногда хочется вставить свои пару копеек в комментариях. Ну вот Например дама жалуется на хостинг. Но блин засада! Капча с картинкой! Поубивал бы! Также бы я убил бы webmoney с их сверхдурацкой паранойей и картинкой подтверждения перевода денег - из за этого я им на новый год матерное письмо написал. Вообще webmoney гадкая и убогая программа - образец того, как не надо делать софт. Думаю денег на программистов в webmoney хватает, но отчего же они пишут такое говно. Вот интересно я в этом посте поставил ссылку на статью - движок wordpress должен отпинговать ее: будет прикол, если там появиться комментарий вырезанный из моего поста, а меня, доброго и честного человека не пустили писать комментарий, тыча в нос картинкой, которые у меня отключены. Лучше бы картинки бы заменили бы другим, более интересным плагином Math Comment Spam Protection. Меня пока не сильно спамят, поэтому я не поставил себе подобную защиту. Реально блоги с защитой с картинкой теряют комментаторов. Возвращаясь к хостингу, надеюсь меня хостер не читает, я как то год назад по собственной глупости подвесил шаред сервер на полчаса. История банальна - я решил внести изменения в свою базу mysql. Чтобы этого добиться я придумал сложный sql запрос, и чтобы гарантировать полное его выполнение в скрипте на php снял ограничение в 30 секунд, установив лимит где то 20 минут. Запрос бы выполнился бы максимум и минуты за две, но я решил перестраховаться. Все бы ничего, только я в своем sql запросе допустил какую то ошибку, в результате запрос не мог быть выполнен - то ли рекурсия, то ли еще какая хрень мне тогда в голову пришла. в Общем ни один сайт на этом сервере не был доступен все это время - 20 минут или более (может быть все 50 минут были выставлены). Время жизни php скрипта истекло и все заработало. А я потом несколько дней боялся, что меня хостер попросит убраться от них с такими экспериментами. Ну ничего - ко мне никто не обратился по этому инциденту. С тех пор зарекся запускать сложные непроверенные sql запросы - теперь если что, предварительно проверяю на домашнем компьютере. Получилась даже в чем то романтическая история.
А хотел я у девочки оставить комментарий о переносе базы mysql от одного хостера к другому. Сам я это еще ни разу не делал, но зато знаю точно как это сделать.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

плагин “социальная сеть” для wordpress - дальнейшее проектирование

Начинают прорисовываться точные контуры будущего плагина социальной сети. Как я писал о страницах (Page) в wordpress (не могу удержаться когда пишу - чудо как хороша моя придумка PrevPostUrl из предыдущего поста, а это уже был LastPostUrl - сейчас заметил что не очень охота набирать буквы в нужном регистре - ошибаюсь с буквой U, может быть стоит сделать все в нижнем или игнорировать), со страницей “Мои комментарии” оказывается все не совсем так, как я описал ранее. Во первых в плагине можно установить хук на фильтр и нужная страница не будет показываться в меню блога: в плагине будет соответствующая галочка для этого. Далее: вариант с шаблоном для этой страницы отпадает. В документации и сам движок wordpress позволяет комментировать страницы, куда можно будет помещать ваши внешние комментарии. Но здесь тоже засада: оказывается, что просмотренные мной шаблоны страниц (page.php в вашей теме) не содержать php кода для показа комментариев! Я этим фактом был огорошен: в теме по умолчанию и в других темах нет всего одной строки, которая добавляет комментарии к странице. Придется это делать через плагин, а я было бы уже надеялся часть забот свалить на плечи движка wordpress. Выводить через плагин комментарии мне кажется не совсем кошерным, потому что после текста поста идут соответствующие закрывающие </div>, а у самих комментариев свои собственные дивы со соответствующим стилем, а из меня web дизайнер как из говна пуля. Как то эту ситуацию придется разруливать - для меня это пока самое узкое место. Остается открытым вопрос о многостраничном просмотре - ее решение оставлю на потом, на первое время блоги спокойно потянут страницу из сотни комментариев, если таковые вообще наберутся. Неясно пока что каким образом хранить адреса проверенных блогеров и спамеров: то ли заводить новую таблицу в базе или всунуть хранилище опций самого wordpress -у него есть соответствующие функции. Я склоняюсь к отдельной таблице: легче будет осуществлять выборку и проверку домена. А может быть для списка спамеров сделать у себя на сайте соответствующий сервис доступный по xml-rpc, в котором бы содержался глобальный список всех замеченных в спаме. Путь решения через мой сервис очевиден, но его вряд ли можно назвать надежным - зачем мне неокупаемая нагрузка на сервер и вообще мой сайт может лежать, ведь у всех бывают проблемы с хостингом. Либо организовать сетевую модель выявления спамера: если в локальной таблице не обнаружен спамер, то проходим по списку друзей, опрашивая их сервисы на предмет наличия у них этого спамера. То есть получается механизм кэширования запросов, то тогда можно будет и собственный xml-rpc сервис сделать открытым.
Кстати об окупаемости - я думал об этом. Пока что придумал на странице “Мои комментарии” поставить ссылку на блог плагина, а убирать ее оттуда за символическую плату, типа 49 рублей - получается прямо шаровара из плагина.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

среда, 23 января 2008 г.

плагин для wordpress фильтрующий базар

Как только я открыл свой первый блог, меня стал доставать wordpress тем, что когда я в новом посте хотел упомянуть и поставить ссылку на свой предыдущий пост,мне приходилось заходить на свой собственный блог только затем, чтобы скопировать в клипборд адрес своего последнего поста. Бред. Я надеялся, что wordpress предусмотрено что то типа спецтегов вида <!– spectag –>, или еще какой абвеатуры. Но не тут то было - ничего подобного в своем стандарте wordpress не предлагает. А всего лишь мне надо было заменить ключевой текст на соответствующий линк. Могу даже предположить, что такое решение существует, например один из вариантов использовать код php внутри поста. Для такого решения нужно установить один из плагинов позволяющих исполнять код php, находящийся в тексте записи. Но оно мне и нафик не надо: всего лишь в момент создания (или редактирования) заменить ключевой текст на искомые урлы. Я за час написал плагин это делающий. Правда все это время ушло на поиск функции возвращающей ID последнего поста: такой функции в контексте выполнения плагина я в wordpress не нашел. Пришлось воспользоваться функцией возвращающей массив последних постов. Остался только выбор за спецтегом, который бы заменялся урлами. Использовать угловые скобки или как выше текст внутри html комментария я не захотел из за большого количества не значащих символов - увеличивается вероятность неправильного набора просто из за элементарной невнимательности. Я остановил свой выбор на фигурных скобках { и } внутри которых без пробелов идет ключевое слово. Я пока что остановился на двух словах: LastPostUrl и PrevPostUrl, и о чудо! Сейчас я в этом посте напишу эти два слова в фигурных скобках, а на блоге этот текст навсегда будет заменен. Итак каждое слово с новой строки:
http://blogclient.ru/stranicy-page-v-wordpress-i-isklyuchenie-stranicy-iz-spiska.htm
http://blogclient.ru/proektirovanie-xml-rpc-interfejsa-dlya-plagina-socialnoj-seti-wordpress.htm
а чтобы это был полновесный кликабельный урл заключу его в соответствующий html: <a href=”{ LastPosturl}”>Предыдущий пост</a>, только конечно я вставил пробел после левой фигурной, чтобы не сработал мой плагин. Итого получается: Предыдущий пост. Вуаля! Работает! Можно добавить до кучи еще всяких полезностей, но я в их необходимости пока что не ощутил потребности. Скачать это чудо света нужно здесь: internal_links.zip. На этом на сегодня пожалуй все.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

страницы (Page) в wordpress и исключение страницы из списка

Надо где то показывать свои комментарии с чужих блогов. Поскольку эти комментарии не относятся к комментариям постов, то они нигде не будут показаны по умолчанию. Wordpress предоставляет возможность создания собственных страниц (Page) - понятие/термин в wordpress. Создать страницу не сложно - это легко делается из панели управления. Страница wordpress не является постом - у нее нет даты и рубрики 9(категории), и по умолчанию в шапке блога на нее стоит ссылка. Чтобы ссылку оттуда убрать надо предпринимать специальные действия: в шаблоне темы (header.php), подправить строку с вызовом функции wp_list_pages. В моей текущей теме стоит следующий вызов:
$pages = wp_list_pages(’sort_column=menu_order&depth=1&title_li=&echo=0′);
документация по wordpressсоветует следующее для исключения страницы:
wp_list_pages(’exclude=17,38′ );
следовательно, для моего случая изменение должно быть таким:
$pages = wp_list_pages(’sort_column=menu_order&depth=1&title_li=&echo=0&exclude=’.$MyCommentsPageId);
где соответственно $MyCommentsPageId = ID созданной страницы для внешних комментариев - упаси бог запоминать еще и порядковые номера страниц. Очевидно, что этот индификатор должен храниться в настройках плагина и следовательно должен быть извлечен перед вызовом получения списка страниц. Вручную страницу создавать для плагина - это моветон, многие просто не справятся со столь “не тривиальной” задачей. Значит надо во время установки плагина создать страницу и запомнить ее индификатор.
Но это еще не все. Необходимо чтобы на этой странице все таки были отображены внешние комментарии. Для этого нужно использовать функции php, которые разработчики wordpress стыдливо называют тегами wordpress. Из той же документации по страницам wordpress предлагается использовать новые файлы для темы, которые подключаются для конкретной страницы в настройках контрольной панели. Но этот путь мне кажется мало применимым, так как речь идет о плагине, который должен работать на всех блогах wordpress. Другой путь - это соответствующий хук в плагине, который бы генерировал бы контент для страницы - точно знаю что это несложно, но пока сам такой хук еще не писал, но не думаю, что это будет сколь нибудь сложно. Вырисовывается следующая проблема: когда внешних комментариев будет слишком много и их потребуется выводить на нескольких страницах. С точки зрения php это не сложная задача, но вот как ее разрулить для корректной работы wordpress, я пока не знаю: просто не решал подобную задачу.
Из простой идеи социального блоггинга вырастает не маленький плагин. Может быть я слишком перемудрил? Может быть я не вижу более оптимального пути решения? Черт с ней со ссылкой в шапке на страницу - пусть опытные ее оттуда убирают вручную, как я описал выше, основной массе потребителей пойдет по умолчанию. Следующей терра инкогнита для меня является локализация плагина - создание языковых модулей и их формат хранения, и как с ними вообще возиться. Очевидно, что этот плагин может хорошо продвинуться в буржунете - для этого создам специальный блог под плагин на одном своем англоязычном сайте.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

проектирование xml rpc интерфейса для плагина социальной сети wordpress

Продолжая тему своего предыдущего поста о новом плагине к wordpress начну проектирование. Наиболее простым и требующим фиксации является описание удаленных функций, вызываемых через xml-rpc: без их описания дальше двигаться сложно.
1. Вы оставили комментарий на каком то блоге. Этот блог должен уведомить ваш блог о вашем же комментарии. Если все Ок, ваш блог получает комментарий. Итого две функции: уведомить и получить.
2. Вы на своем блоге прокомментировали статью другого блога. Ваш блог уведомляет о вашем комментарии. Блог, для которого комментарий, если все Ок забирает у вас для себя ваш комментарий. Итого тоже две функции: уведомить и получить.
Все вместе - две пары похожих функций. Возможно даже, что функция забора комментария может быть одна и та же для обоих случаев. Но есть коллизия: если кто то от вашего имени оставил комментарий - в нынешнем состоянии любой может под вашим именем оставить комментарий, то что делать? Если оба блога поддерживают мой плагин/протокол, то можно будет автоматизировать удаление ложных комментариев, или их не апрувить. Для этого скорее всего придется добавить еще одну функцию для 1 случая - уведомить о подтверждении или удалении комментария. Но тогда протокол слишком усложняется и все равно остается лазейка для спама от вашего лица на других сайтах. Ну тогда можно ввести еще дополнительную опцию/функцию - запретить принимать комментарии на других блогах от вашего имени: тогда только вы один сможете оставлять комментарии от своего лица и больше никто. Для этого, конечно, необходимо, чтобы все эти блоги поддерживали мой протокол. Для этого надо будет предусмотреть соответствующий ответ для случая 1 в функции уведомления: запрет на комментирование не со своего родного блога, в зависимости от установленных опций.

С главными функциями xml-rpc определился, остается придумать им имена и список аргументов. С именем не так уж и просто: это будут названия которые передаются в запросе xml rpc. Например можно было бы взять такое: pingback.extensions.myfunction, но может быть взять собственный префикс, например socialnet.pingcomment, socialnet.getcomment и прочее. Это не принципиально, но хотелось бы выбрать названия, которые не пришлось бы менять в будущем и к которым можно было бы добавить новые.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

вторник, 22 января 2008 г.

Социальная сеть из блогов на wordpress

Я придумал!!! Плагин wordpress реализующий социальную сеть.

Предисловие

Походив по блогам и оставив там свои комментарии, мне стало жаль, что тексты моих комментариев находятся только на блоге, где я его оставил и его , родного моего комментария, нет у меня, автора. Комментарии мои злобные и добрые, пустые и со смыслом - я хочу чтобы вы были на моем блоге. Можно было бы уповать на pingback создавая новую запись - комментарий, чтобы движок wordpress самостоятельно отпинговал комментируемую ссылку, а движок на той стороне добавил бы комментарий. Но: из за спама пинги часто отключены, движок wordpress выцепляет окружающий текст, заключая его в квадратные скобки - у вас нет однозначного способа повлиять на автоматический комментарий. К тому же формат новой записи - то бишь новый урл, не подходит для пары строк контента.

Предлагаю

Если на двух блогах установлен плагин Social Networking (или как еще его назвать?), то вы сможете оставить комментарий как обычно на блоге вашего друга и ваш же комментарий будет также и на вашем блоге. Также можно будет писать комментарий и в своем собственном блоге, и ваш комментарий появиться на блоге, куда он был адресован. Эти комментарии на вашем блоге будут находиться в рубрике (категории) “Мои комментарии”. Нравиться?

Про спамеров

Пингбеки и комментарии отлично и сейчас работали бы, если бы не спамеры. Приходится защищаться разными способами: плагины защищающие от спама, капчи. Описанная выше модель комментирования может быть реализована таким образом, что она будет полностью защищена от спама. Как же спросите вы? Да очень просто: callback функциями через xml-rpc: комментарий будет не отправляться, а забираться с блога автора - если по аналогии с E-Mail. Если кто то захочет оставить комментарий у вас на блоге через интерфейс плагина: если это будет первый комментарий от этого блогера, то его блог ставиться на модерацию. Если это спам, то вы просто добавите этот домен к базе спамеров - и уже никогда с этого домена к вам не придет спам. Если комментарий нормальный, то вы можете добавить автора в друзья или оппоненты, или еще какую категорию. Почему же от спамерского домена больше не придет спама спросите вы? Да очень просто - плагин будет работать следующим образом: блог комментатора посылает уведомление вашему блогу о новом комментарии, в котором указывается ссылка на ваш комментарий. Ваш блог проверяет адрес комментатора и если все Ок, то соединяется с блогом комментатора и забирает оттуда комментарий к вам на блог. Новый комментарий будет красив: и текст и имя, и адрес блога комментатора. Нравиться? Мне да. И ничего сложного в реализации этого нет. Хотите принять участие в разработке и развитии этого плагина - пишите в комментариях об этом: вместе будет легче и веселее.

Бонусы

Предполагаю, что первое время, каждый установивший плагин Social networking (или как его еще назвать?) сможет автоматически себя добавить в каталог блогов, использующих этот плагин:надо лучше знать друг друга и иметь возможность найти блоги схожей тематики. Также можно будет организовать комментаторов в группы: друзья, оппоненты (ну не враги же). Подобное уже давно существует на livejournal - friends, или в сервисе ya.ru - подружиться, поссориться.

З.Ы. Сегодня посмотрел, что arhivperipiski.ru в яндексе имеет уже 2200 страниц и по статистике с яндекса идет нехилый поток посетителей - может быть уже сейчас поставить какую нибудь контекстную рекламу, может зря жду индексации всего сайта - более 63000 страниц?

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

понедельник, 21 января 2008 г.

Каким должен быть блог клиент?

Домен blogclient.ru я выбрал с тем прицелом, что я хочу написать свой собственный блог клиент. Для этого уже все есть. Пару месяцев назад я начал это писать, но по семейным обстоятельствам заморозил развитие. На сегодняшний день есть: простой и эффективный html редактор - с двумя закладками исходный html текст и wysiwyg редактор, основанный на обычном internet explorer - оказывается у него есть такой режим, который легко включается программным путем. Для редактора надо добавить кучу кнопочек - у меня проблема: нет подходящего набора иконок для этого, помогите! И тогда хоть сегодня можно будет постить в блог. Но: надо расписать систему управления аккаунтами - прога рассчитана на обслуживание сразу нескольких блогов. Диалог выбора рубрики поста, чтобы в нем можно было добавлять новые рубрики - к этому вообще не приступал. Также прикрутить проверку правописания - для английского у меня есть автономный, вместе со словарем, спел-чекер, для русского нет словаря. Остается интегрироваться с ms-word, но с этим тоже нужно разбираться и учитывать, как всегда, дурацкие особенности мелкомягких.

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

.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

воскресенье, 20 января 2008 г.

свободная сеть: беспроводной без провайдера доступ в интернет

Хочу написать цикл статей о будущем Интернета. Мне понравилась шумиха вокруг web 2.0 - ничего принципиально нового, но люди жаждали получить фетиш и они его получили. Что дальше? Никто не знает. Вспоминаю серию киберпанковских романов Тюрина “Падение с земли “. В одной из книг китайские игрушки образовали вычислительную сеть, мощностей которой хватило чтобы осмыслено атаковать главгероя. В этой серии романов много примечательных эпизодов, и читая их десять лет назад удивлялся изобретательности автора. Время движется, мощность процессоров растет, полная телефонизация мобильной связью, приходит 3G. Вероятно следующим этапом станет появление дешевых устройств способных к радио коммуникации. Уж что там будет использоваться - bluetooth, wi-fi или новый протокол неизвестно, но вот ширина каналов должна быть на порядки больше чем дает 3G. Мобильные устройства часть своих ресурсов будут делать доступными для коллективного доступа, ну например для бесплатного широкополосного доступа в интернет. Представьте себе, вы проходите мимо кафешки у которого имеется радиоточка коллективного доступа в интернет (экс wi-fi), ваш мобильник соединяется с этой точкой. Проходя мимо, с падением качества сигнала мобильник начинает искать другую точку или мост к той же точке - позади вас тоже кто то идет с мобильником, вот через него и пытается переключить трафик. Должна получиться сеть передачи данных, которая будет не зависеть от центрального провайдера, который может контролировать трафик или отказать в доступе в мировую сеть. Итак зафиксирую первую мысль: интернет никто не сможет контролировать. Продолжение развития этой темы в следующих постах на блоге Беспплатные программы для блогов - речь пойдет о dns и американском правительстве, которое сейчас является владельцем Интернета.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

суббота, 19 января 2008 г.

ping, pingback, trackback в wordpress- взгляд изнутри: что это такое и как оно работает

Наконец таки, после нескольких дней настройки wordpress и плагинов к нему, я могу приступить к вкусному - xml-rpc и удаленный вызов процедур в Интернете. В первую очередь хотелось разобраться с пингами и трекбэками. До знакомства с wordpress я не подозревал о их существовании. Когда я настраивал свой первый блог на wordpress Лавка снов, я как сомнамбула делал необходимые настройки в панели управления - добавил pings.txt - список сайтов для пинга (74 сайта в текстовом файле для скачивания)
в панели управления / настройки / написание. Я тогда доверился утверждению, что это очень хорошо для блога.
Так что же такое ping? Запрос в гугле дает такие ссылки как: Что такое ping и traсkbaсk? - на сайте уважаемого макса, чьей русификацией wordpress я пользуюсь. Прочитав статью в голове немного прояснилось, но вот полного понимания не наступило. Такое понимание у меня может наступить только при детальном ознакомлении оригинальной документации или исходников, реализующих это. Ничтоже сумнятеже я полез в исходник wordpress - файл xmlrpc.php, ссылку на который, кстати говоря, wordpress вставляет в заголовок серверного ответа всех страниц блога. Пролистав до секции функций с пингами (PingBack functions), в комментариях обнаруживаю ссылку на www.hixie.ch/specs/pingback/pingback. естественно иду по ссылке, где оказывается, что существует куча версий этих самых пингбеков - но мне то все они зачем? Хватит самой последней версии 1.0
И первым делом читаю в абстрактном предисловии, что такое ping и pingback:
pingback это метод для вэбмастера уведомить его о новых ссылках на его страницы. Обычно это делают программы на web серверах - в вольном переводе, ну скажите как перевести “web publishing software”? Что собственно не проясняет ситуацию. Авторы документации это понимают и поэтому сразу приводят пример работы пингов. Перескажу его своими словами:
Алиса написала в свой блог, Боб прочитал ее статью и написал у себя заметку про ее статью, указав ссылку на статью Алисы. Движок блога у Боба автоматически информирует блог Алисы о ссылке на ее статью на блоге Боба. Движок блога Алисы может поместить в комментариях ссылку на заметку у Боба. в Общем получается круговая порука. Стоит сразу заметить, что такая система открыта для спама, как впрочем и помогает поисковым роботам найти на вашем блоге новую статью.
Итак перейду к техническим подробностям. Механизм пингбеков использует http заголовок или элемент <link> в одиночных xml-rpc вызовах для информирования. Ресурсы, которые поддерживают механизм pingback должны отдавать в заголовках X-Pingback с полным адресом сервера или (можно и оба) в самом html документе элемент <link>. Пример в секции head html документа: <link rel=”pingback” href=”pingback server” />. Понятно, что урлы должны совпадать в обоих случаях и проще использовать серверный ответ, так как парсить html документ еще та задача. xml-rpc клиент, если находит X-Pingback в ответе, то он должен его использовать, иначе искать среди html документа адрес для пинга. В документации указано регулярное выражение для поиска необходимого урла в html:
<link rel=”pingback” href=”([^”]+)” ?/?>
После того как найден урл xml-rpc сервера для пинга, клиент вызывает на сервере функцию с названием “pingback.pin” с двумя параметрами -абсолютные адреса страницы, на которой находится ссылка и адрес самой ссылки. Функция с сервера возвращает строку в случае успеха. Конкретно xml-rpc сервер wordpress возвращает следующее:
sprintf(__(’Pingback from %1$s to %2$s registered. Keep the web talking! :-)’), $pagelinkedfrom, $pagelinkedto);
в случае ошибки - соответствующий fault код и комментарий к нему. xml-rpc клиент может что угодно делать с ответом xml-rpc сервера, например использовать ответ для отладки. Естественно xml-rpc сервер проверяет урлы - а туда ли они попали. Wordpress также выцепляет участок текста возле пингуемого урла и вставляет выцепленный текст в виде комментария.
Одно непонятно мне осталось - а где же trackback? В оригинальной документации используется слово pingback, а слова trackback отсутствует. Стал копать исходники и ддоку wordpress и относительно быстро нарыл следующее: pingback и trackback имеют мало общего, кроме слова back. Если ping, pingback - это одно и тоже, что выполняют xml-rpc клиент и сервер, то trackback это всего лишь одиночный html запрос, в котором методом post передаются данные о новой записи в wordpress. Пинг - он интеллектуален: проверяет кучу всего, запрашивает и получает ответы. Трекбэк прост и груб как обыкновенный запрос методом пост - трекбэк не интересует ответ, он всего лишь информирует, а уж что там будет с запросом его вовсе не интересует. Одним словом забейте на трекбэки - ничего интересного в нем нет.
Wordpress имеет еще одну интересную функцию доступную по протоколу xml-rpc - “pingback.extensions.getPingbacks”. Эта функция возвращает список всех удачно пропингованных урлов - их wordpress сам вставил в виде комментариев. Есть и еще одна xml-rpc функция - “mt.getTrackbackPings”. Она возвращает список трекбэков к записи, думаю не актуальна из за самого трекбэка.

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

пятница, 18 января 2008 г.

плагин для wordpress создающий новые выпуски нвашей рассылки на subscribe.ru и создает новую запись на зеркале blogspot.com

Созрел сегодня для написания новой версии плагина для wordpress делающий новые выпуски рассылки на
subscribe.ru
. Плагин уже был написан мной ранее и использовался с успехом для моей Лавки снов. Мой сегодняшний план уже однажды был нарушен - дома не было света несколько часов, а ради плагина садить аккумулятор на ноутбуке было жалко - проще было потрепаться с кем нибудь по мобильнику. Главное - плагин работал, были в нем ошибки и мало опций, но ради чего он был написан - он делал. Прошло время, ошибки были устранены, я чуть ближе познакомился с wordpress и настало время для новой версии плагина - 2.0 - зачем мелочиться и после цифры 1 после точки приписывать сотые доли, когда ведь неизвестно будет ли вообще следующая версия? У меня есть работающий скрипт на php, который на лету может генерировать zip файлы для скачивания: то есть скрипт берет текущую работающую тут же на сайте версию плагина и в памяти генерирует файл для скачивания - таким образом бы снималась бы проблема обновления архива с плагином, но при этом движок wordpress не мог бы считать статистику скачивания и еще какие то дополнительные плюшки самого движка. Поэтому принимаю трудное для меня решение - сразу запакую и выложу этот файл как есть.
И так, сделанные изменения: устранена ошибка обнуления настроек при повторном открытии страницы настроек. Если запись состоит из двух частей - анонса и продолжения, будет публиковаться только анонс. Если хотите полной публикации уберите два слеша комментариев со строки:
$Body .= apply_filters(’the_content’, $content[1]);
Если вы повторно будете редактировать старую запись, то она не будет повторно отправлена в виде новой рассылки. Думаю вполне достаточно для второй версии? Есть планы на следующие версии, среди которых: добавить больше опций на странице настроек, добавить в конец нового выпуска рассылки случайную ссылку из заранее приготовленного списка - дополнительная возможность получить еще одну внешнюю ссылку на один из своих сайтов. Как бонус к этой статье приведу php код, который можно вставить в ваш шаблон блога для подписки на вашу рассылку:

if (($Subscriberru = stripslashes(get_option(”SubscriberuCode”))) && !empty($Subscriberru)) {
echo “

  • Подписка на рассылку на subscribe.ru
  • \n”;
    }

    Я лично не люблю формы и где то однажды читал, что поисковики не любят сайты с большим количеством форм. Считаю, что вполне достаточно ссылки на адрес рассылки на subscribe.ru.
    А где же файл для скачивания спросити вы? Вот, скачивайте на здоровье:
    subscriberu-crosspost.zip
    и друзьям рекомендуйте!

    Сегодня встретил ленту seo, в которой автор объединил блоги сеошной тематики, я вот думаю, что меня тоже можно смело назвать специалистом по seo и прочая, прочая… Ну ничего в seo сложного нет чего бы я не знал и не умел. Кстати мой сайт arhivperipiski.ru еще вчера показывал в индексе яндекса более 1700 страниц - потерплю до февраля, чтобы яндекс побольше проиндексировал, тогда начну потихоньку приторговывать ссылками оттуда - дешево и много.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    четверг, 17 января 2008 г.

    ссылка на подписку на rss2email.ru одним кликом

    Наконец таки я победил движок wordpress - смог пристроить ссылку - подписка через rss2email.ru, где в параметрах ссылки указан адрес моего rss фида. Сегодня на меня низошло озарение - фильтр wordpress скорее всего реагирует на символы ? и =, а если их заменить насоответствующие в html мнемоники то может и получиться. Сказано - сделано. Проверил - работает! Тогда я за пару минут прикрутил ссылку на feedburner.com, если она имеется соответствующий плагин и его данные. Таким образом получилось вот что:

    href=”http://www.rss2email.ru/?rss= if (!(($feedburnersettings = get_option('feedburner_settings')) &&
    ($Myfeed = $feedburnersettings['feedburner_url']))) {
    $Myfeed = get_feed_link('rss2');
    }
    echo urlencode('http://feeds.feedburner.com/blogclientru');
    ?>“>Подписка на RSS через www.rss2email.ru

    не забываем про начало тега a. Этот участок кода генерирует следующую ссылку:
    • Подписка на RSS через www.rss2email.ru
    Ценность такого рода ссылки ссостоит в том, что если ваш посетитель уже имеет подписки на ww.rss2email.ru то ему вообще не придется вводить свой E-Mail адрес, а это очень важно, потому что не секрет что мсайты теряют своих посителей из за того, что приходится заполнять формы. С такого вида ссылкой посетителю не нужно будет вообще вводит в очередной раз свои данные - необходимые поля будут уже автоматически заполнены и вы не потеряете своего подписчика.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    создание резервной копии базы mysql и ее импорт в денвер

    Есть простой и надежный способ делать резервные копии баз mysql. Для этого достаточно написать пару команд, которые будут выполняться кроном по расписанию. Выбранная вами база mysql будет полностью сохранена в виде одного файла .sql -для этого вам не придется заходить в phpmyadmin, чтобы много раз щелкать для экспорта базы. Если вы используете wordpress, то вам не нужен плагин экспорта базы wordpress. Все у вас уже есть и было. Итак: создаете файл, ну например с именем mysqlbackup.sh и следующим содержанием:

    #!/bin/sh
    date=`date ‘+%m-%d-%y’`
    mysqldump -uлогин_пользователя -pпароль имя_базы>/home/логин/backup/имя_базы.$date.sql
    gzip /home/логин/backup/имя_базы.$date.sql

    Конечно, если вы точно в таком виде сохраните файл, то работать ничего не будет: вместо русских слов (имя_пользователя и прочее) пропишите данные для вашей базы. То есть требуется Имя и пароль пользователя базы, имя самой базы. Также пропишите пути, куда будет сохранен файл - путь должен быть абсолютным - замените слово “логин” на ваш логин у хостера. Залейте файл mysqlbackup.sh в созданную вами папку на сервере (в моем конкретно примере backup) и установите атрибуты 777 на этот файл. Следующим шагом добавьте задание крону через панель управления, установив периодичность раз в неделю. После этого в вашей папке backup на сервере еженедельно будет появляться полная копия вашей базы mysql. Надо заметить, что база будет заархивирована gzip’ом - если не хотите этого то удалите строчку gzip /home/логин/backup/имя_базы.$date.sql , но тогда вам придется скачивать в пять раз дольше файл и он соответственно будет занимать дисковое пространство вашего хостинга. Чтобы экономно использовать собственный трафик и дисковое пространство на хостинге я и архивирую копию базы mysql. Сгенерированный файл в своем имени будет содержать дату его создания - это для того, чтобы вы не путались в каком конкретно состоянии находилась база - ведь база постоянно растет с публикацией новых статей на блоге.
    Итак, что вы можете делать с полученной копией? Ну конечно, скачать к себе на домашний компьютер и импортировать ее в денвер! Вы получаете у себя дома абсолютную копию вашего блога в Интернете со всеми паролями, комментариями и настройками! Остается дело за малым - в денвере создаете базу mysql с таким же именем и пользователем, как на сервере у хостера. Для импорта в базу mysql денвера создайте например файл mysqlrestore.bat в котором напишите одну строку:

    mysql -uлогин_пользователя -pпароль -Dимя_базы<имя_разархивированного_файла.sql

    и поместите mysqlrestore.bat и разархивированный файл sql папку с бинарниками mysql, например
    C:\WEBSERVERS\USR\LOCAL\MYSQL4\BIN\

    запустите этот bat файл и тогда абсолютная копия базы wordpress будет на вашем домашнем компьютере. Если вдруг сломается ваш хостер, то у вас всегда будет копия вашего блога, и вы его легко сможете восстановить у хостера или перенести блог к другому хостеру. Чтобы поддерживать актуальную базу mysql на домашнем компьютере не забывайте раз в неделю скачивать свежую копию своей базы у хостера.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    среда, 16 января 2008 г.

    индексирование сайта yandex

    У меня есть сайт simplygate.com у которого имеется более 63000 страниц уникального контента - это архив почтовых форумов. На сегодняшний день яндекс проиндексировал всего 12 (двенадцать) страниц. Гул показывает около 30000 страниц, но для гугля у меня скрипт ежедневно генерирует sitemap.xml в котором находятся все ссылки на страницы сайта. Для яндекса я открыл блог simplygatenews.ya.ru, для которого написал специальный скрипт, который генерирует rss.xml дайджест последних писем в архиве. Робот моего архива ежечасно проверяет почту и добавляет новые письма. Прошло более месяца с тех пор - в яндексе все по прежнему - может быть надо опять писать в яндекс, чтобы они решили вопрос с индексированием сайта. Но надежд на это мало. Я прикупил два домена в зоне ru arhivperipiski.ru и arhivperepiski.ru/”> - первый из них купил по ошибке: ошибся одной буквой. С ошибочной буквой (и вместо е) я сделал почти полную копию simplygate.com, но без адсенса. Второй домен пока не наполняю - будет еще там сайт на той же базе писем, но с другой структурой ссылок и названиями урлов. Пока что в яндексе по одной странице. Чтобы помочь яндексу индексировать страницы arhivperipiski.ru я по аналогии открыл блог на ya.ru arhperepeski.ya.ru, но не тут то было! Если для предыдущего блога хватило rss ленты, то сейчас rss в качестве источника уже невозможно стало добавить. Что же делать? Из предлагаемых для выбора источников первым идет дневник на livejournal.com, а для wordpress есть плагин, позволяющий постить новые записи из wordpress в дневник на livejournal.com. Во первых я полез посмотреть исходник этого плагина и на его основе написал arhperepiski.livejournal.com. И написал скрипт генерирующий дайджест новых и старых писем. Ну я рассчитывал что блог на яндексе начнет вставлять новые записи из дневника на livejournal.com, но этого не происходит. Думаю надо придумать еще какой то способ автоматизировать индексацию новых страниц для большого сайта. Есть ли у кого какие идеи?

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    вторник, 15 января 2008 г.

    создание нового поста в дневнике на livejournal на php

    Оказалось, что создавать новые записи в дневнике на livejournal.com из php очень просто. Я вообще не читал документации по api livejournal, когда приступал к написанию этой функции единственное, что я знал, так это то, что как и все блогерские апи используется протокол xml-rpc. У меня есть готовый работающий пример - это livejournal cross poster - это плагин к wordpress, который я использую. Итак немного покопавшись в исходнике этого плагина, я написал свою функцию. Для работы этой функции требуется модуль wp-includes/class-IXR.php, который реализует протокол xml-rpc. Выяснил как происходить авторизация (отправка логина и пароля) в livejournal через xml-rpc: получаем значение md5 пароля складываем его со строкой отклика, полученной специально для этого и получившейся строке снова применяем md5, которая и отправляется. Подробности в исходнике: md5($challenge . md5($pass)); что называется просто и со вкусом. Далее в софт для блогов я привожу исходный текст моей функции, которая возвращает ID новой записи в дневнике на livejournal.com.

    function PostToLivejournal($user, $pass, $Subj, $Content) {
    $host = ‘www.livejournal.com’;
    $client = new IXR_Client($host, ‘/interface/xmlrpc’);
    // получить отклик для пароля
    if (!$client->query(’LJ.XMLRPC.getchallenge’)) {
    echo ‘livejournal error: ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage();
    return false;
    }
    $response = $client->getResponse();
    $challenge = $response[’challenge’];

    $args = array();
    $args[’username’] = $user;
    $args[’auth_method’] = ‘challenge’;
    $args[’auth_challenge’] = $challenge;
    $args[’auth_response’] = md5($challenge . md5($pass));

    // Makes LJ expect UTF-8 text instead of ISO-8859-1
    $args[’ver’] = “1″;

    $args[’event’] = $Content;
    $args[’subject’] = $Subject;

    $date = time();
    // All of the relevent dates and times
    $args[’year’] = date(’Y', $date);
    $args[’mon’] = date(’n', $date);
    $args[’day’] = date(’j', $date);
    $args[’hour’] = date(’G', $date);
    $args[’min’] = date(’i', $date);

    //запрещаю комментарии
    $args[’props’] = array(
    “opt_nocomments” => true,
    “opt_preformatted” => true,
    “opt_backdated” => !false,
    ‘taglist’ => ‘message’
    );
    $args[’security’] = “public”;

    // только теперь делаю вызов
    if (!$client->query(’LJ.XMLRPC.postevent’, $args)) {
    echo ‘Something went wrong - ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage();
    return false;
    }
    $response = $client->getResponse();
    return $response[’itemid’];
    }

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    ккопирование строки на php в кодировке utf-8

    Озадачился я как то на php вырезанием части строки из русского текста в кодировке utf-8, но так чтобы слова не обрезались. Просто так это сделать не получиться: русские буквы занимают два символа, а остальные по одному. Идея проста - найти первый разделитель слов, а такими разделителями являются пробелы, точки, запятые, переносы строк. В результате вызов функции выглядит сейчас следующим образом:
    $Text = CutStr($Text, ” ,.;\n\r”,140);
    а вот сам отлаженный исходник этой функции, написанный мной лично:

    function CutStr($S, $Chars, $FromPos = 0) {
    if (strlen($S) <= $FromPos) return $S;
    $p = 0;
    for ($i = 0; $i < strlen($Chars); $i++) {
    $pos = strpos($S, $Chars[$i], $FromPos);
    if (is_int($pos)) {
    $p = $i == 0 ? $pos : min($p, $pos);
    }
    }
    return substr($S, 0, max($p, $FromPos) );
    }

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    воскресенье, 13 января 2008 г.

    один каталог с файлами wordpress для нескольких блогов

    У меня сейчас 4 блога на движке wordpress и я сегодня заливал новые плагины для wordpress на сервер. Занятие мне это показалось утомительным - одно и тоже четыре раза заливать, а если плагин обновиться то его еще раз по столько загружать на каждый сайт. Весьма не оптимально. Но стоп! Мой предыдущий пост как раз касался именно этого -
    одна папка на сервере, которую каждый сайт видит как свою собственную. Решил я воспользоваться символической ссылкой (бывают еще и жесткие, но я не знаю чем они отличаются - не задавался этим вопросом). Сказано сделано: удалил каталоги wp-admin, wp-includes, wp-content/plagins. Создал символические ссылки, зашел проверить сайт - блоги работают. Зашел в админскую панель - панель меня перебрасывает в админскую панель того блога, где находятся реальные файлы. Пришлось удалять символические ссылки на wp-admin (на php функция unlink) и копировать реальные файлы. Для этого я воспользовался мной модифицированным скриптом ftp-move. Все остальное пока нормально работает - очередная загадка wordpress почему он редиектит админскую панель и зачем это сделано, либо это еще не обнаруженный очередной баг популярного движка wordpress..

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    пятница, 11 января 2008 г.

    подписка на rss feed черз rss2email.ru

    Wordpress меня доканает: решил в шаблон на blogclient.ru - софт для блогов добавить ссылку на подписку через www.rss2email.ru, где адрес на мой http://blogclient.ru/feed передается в качестве параметра get, строка получается следующая:
    http://www.rss2email.ru/?rss=http://blogclient.ru/feed
    но чертовый движок wordpres конретно глумиться над этим урлом. Не могу сообразить что и где происходит и как это исправить.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    четверг, 10 января 2008 г.

    подстановка файлов из каталого другого сайта на одном шаред хостинге

    Пару дней назад озадачился следующей проблемой: имеются два сайта, у первого имеется каталог с файлами, хочется чтобы у второго был точно такой же каталог с файлами доступными для скачивания. Вначале попытался по привычке повертеть .htaccess, но безуспешно - урл преобразования здесь ни к чему не приводят. Нашлось однозначное простое решение: средствами файловой системы сервера - создать символическую ссылку на нужный каталог в домашнем каталоге второго сайта. Это делается без проблем если имеется доступ к шелу, а на шаред хостинге такого нет. Выход нашелся - использовать функцию php symlink. Попытка вызвать из php exec команду ln ни к чему не привели. Так что всем однозначно рекомендую symlink. Этим постом как раз и проверю новую рассылку на subscribe.ru для моего сайта blogclient.ru - софт для блогов.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

    Зеркала блогов

    Наконец таки можно писать в блог - много возни с инициализацией нового блога: уж сколько раз прощелкал на зеркале блога на ya.ru, чтобы выяснить, что сейчас ya.ru не апрувит rss блогов, но все же место лакомое - близко к индексации яндексом, поэтому пришлось извратиться и сделать кроспостинг через зеркало блога на livejournal.com - посмотрю как это будет работать. Традиционно для себя добавил зеркало на blogger.com - владелец сервиса гугл. Также открыл рассылку на subscribe.ru/a> - как выяснилось наиболее просто из всего ранее перечисленного. Для двух последних используется написанный мной лично плагин, чуть позже я его выложу и на blogclient.ru.

    Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster