Архив рубрики: Интернет

Mojolicious — знакомство с «вебом из коробки»

Mojolicious - веб из коробки

Что такое Mojolicious. Введение

Благодаря заметке на Хабре (в кэшэ Google) наконец-то решил познакомиться с набирающим популярность фреймворком для веб-разработки на Perl под названием Mojolicious. В общем-то я взял пример скрипта из этой заметки и сделал его чуть более интересным для себя, чтобы охватить немного больше документации по фреймворку (результат вполне работоспособен, его можно посмотреть здесь, а код и скриншот выложены в конце заметки). Сразу отмечу, что ни пример с Хабра, ни мой практически не отражают возможностей фреймворка, а только лишь иллюстрируют простоту его использования.

Итак, Mojolicious — фреймворк для разработки веб-приложений, основанный на «фреймворке для разработки фреймворков» Mojo, написанный на языке Perl человеком по имени Sebastian Riedel, одним из авторов Perl-веб-фреймворка Catalyst, фактически для его замены.

Чем мне показался особенно интересен Mojolicious? Во-первых тем, что он имеет встроенный веб-сервер, что в перспективе позволяет не только удобно разрабатывать и проверять приложение, но и распространять его для локального использования. При этом приложение получается универсальным и будет одинаково работоспособным как на локальной машине, так и на сервере. Во-вторых — Mojolicious зависит только от Perl, что также говорит в пользу «во-первых». В-третьих — наличием модуля Mojolicious::Lite, позволяющего создать лёгкие, маленькие, но полноценные приложения. И в-четвёртых — автоматической поддержкой разных режимов запуска (CGI, FastCGI, mod_perl, встроенный сервер и т.д.).
Читать далее Mojolicious — знакомство с «вебом из коробки»

RC Link Redirector и ссылки в текстовом виджете

На правах мини-совета для тех, кто тоже использует плагин RC Link Redirector для закрывания от индексации посторонных ссылок. Изначально плагин умеет оборачивать ссылки в записях, на страницах, в цитатх, в комментарих и текстах комментариев и т.д., но не умеет обрабатывать текстовые виджеты, в которые удобно ставить свои кнопки, баннеры и прочие подобные штуки.

Чтобы плагин научился закрывать ссылки в виджетах, надо добавить в него две строки (можно через Плагины->Редактор, если нет специального редактора для PHP).

Первую — внутрь функции rcr_adminpage, например после 187 строки «&nbsp;"Оборачивать" ссылки в <strong>блогролле</strong></label></td></tr>» добавить строку:

   <tr><td><label><input name='rcr_txt_widgets' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_txt_widgets'] ? 'checked' : '') ?> />
    &nbsp;"Оборачивать" ссылки в <strong>виджетах</strong></label></td></tr>

Вторую — внутри rcr_redirector_hook, например после строки 241 «if($rcr_opt['rcr_comment']) add_filter('comment_text', 'rcr_encode');» вставить строку:

if($rcr_opt['rcr_txt_widgets']) add_filter('widget_text', 'rcr_encode');

Теперь осталось в админке плагина поставить галку на опции «Оборачивать» ссылки в виджетах и наслаждаться результатом :)
P.S. Кому лень редактировать файл плагина — можно скачать обновлённый и просто заменить старый в папке /wp-content/plugins/rc_redirector

Сравнение производительности сетевых библиотек в Perl

Когда задумал сделать парсер тИЦ для LJ Add/Remove Fiends — решил для начала проверить, какой способ загрузки страниц с показателями тИЦ из скрипта окажется быстрее, поскольку это в любом случае окажется самым узким местом в производительности парсера (любая обработка уже полученных данных, если она сделана без грубых ошибок типа бесконечного цикла, происходит гораздо быстрее загрузки этих данных по сети).

Для начала проверил на локальной машине (первый тест), затем на сервере (второй тест). Воспользовался модулем Benchmark::Timer, по сути он ставит метки начала и конца, после чего вычисляет разницу между ними (то же самое несложно получить с использованием Time::HiRes). У Benchmark::Timer правда есть дополнительная возможность — он может гонять тест до получения результата с заданной обеспеченностью и заданным процентом ошибки.

Третьим тестом, уже из чистого любопытства (поскольку результат был предсказуем) был тест многопоточной загрузки. Естественно этот вариант оказался быстрее любого из однопоточных, в среднем в два раза (при 15 потоках).

Выводы — библиотеки Perl не только выгодней с точки зрения безопасности, но и работают стабильно быстрее вызовов системных утилит. Самую медленную загрузку показал Wget, основывать парсер на нём — явно плохая идея. Многопточность естественно вне конкуренции. Подробности ниже.

Читать далее Сравнение производительности сетевых библиотек в Perl

Вставка PHP кода в WordPress записи и виджеты

Давно подумывал над тем, чтобы вставлять исполняемый код в посты, страницы и виджеты WordPress. Поскольку сам движок написан на PHP — логично вставлять именно его, хотя можно попробовать встроить например Perl, воспользовавшись CPAN-модулем PHP::Interpreter или PECL-модулем PHP под названием perl. Но PHP вставить естественно проще :).

Итак, как же вставить в WordPress PHP? Как и в большинстве других случаев, когда надо модифицировать движок — просто воспользоваться подходящим плагином.
Плагинов находится множество, я попробовал 4 штуки и остановился на Exec-PHP.
Он умеет всё, что мне было надо:

  • Вставлять исполняемый PHP код в посты (и соответственно — в страницы)
  • Втавлять код в виджеты

Прейдём к настройке плаина.

Настройка может оказаться не совсем очевидной — с административной страницы плагина всё сделать не получится. Чтобы исполнение PHP-кода в WordPress заработало, нужно убедиться в следующем:

  • Что пункт "WordPress должен исправлять некорректный XHTML код автоматически" в меню Настройки->Написание неактивен
  • Что выключен «графический» редактор в меню Пользователи->Ваш профиль (стоит галка на "Отключить «визуальное редактирование» при написании")
  • Что нужной группе пользователей (в WordPress это называется «ролью») разрешено исполнение PHP-кода (для роли «Administrator» должно быть разрешено по умолчанию)

При выполнении вышеперечисленных условий втавленный в записи, страницы и виджеты код должен успешно исполняться. Например мой скрипт для массового добавления друзей в ЖЖ, будучи вставленным в страницу WordPress, успешно работает!

Считаю не лишним напомнить про опасность исполнения неочищенного кода. Не знаю, поддерживает ли PHP какую-то аналогичую perl -T опцию, поэтому нужно просто помнить про очистку пользовательского ввода (использование недопустимых символов, размеры аргументов опций и т.п.), экранирование всех передаваемых в shell команд и их аргументов и так далее.

В остальном польза от встроенного в WordPress PHP кода очевидна — это полная свобода действий с содержимым блога, помноженная на простоту выполнения этих действий!

Автоматическая проверка готовности загранпаспорта

Гос. органы идут в массы, постоянно вводят новые, удобные для граждан (по крайней мере на первый взгляд), формы взаимодействия.
К такому нововведению можно отнести и сервис проверки готовности загран. паспорта на сайте УФМС, расположенный по адресу http://www.ufms.spb.ru/checkzp.php. С помощью сервиса можно быстро узнать, готов ли загран. паспорт или еще находится в процессе оформления, введя в поля формы данные своего гражданского паспорта (также доступна проверка по данным из свидетельства о рождении).

Всё в принципе хорошо и удобно кроме одной мелочи — чтобы воспользоваться проверкой готовности — нужно периодически вспоминать о ней и заходить на сайт. По-моему, приделай УФМС автоматическое оповещение о готовности паспорта по электронной почте — сервис выглядел бы законченным и действительно удобным в использовании.

Но раз УФМС не идет на встречу гражданину, значит гражданин должен сам облегчить себе жизнь. Я решил сделать это используя три простых и доступных инструмента: консольный браузер lynx (для отправки данных формы POST-запросом), планировщик заданий cron (для периодической проверки готовности загран. паспорта) и утилиту поиска по тексту grep (для поиска нужной строки в дампе страницы), для чего написал простенький скрипт, который закинул в cron. Скрипт с указанным в кроне периодом проверяет готовность моего паспорта и присылает мне отчет на электронную почту (которая указана в настройках крона).

#!/bin/sh
echo "checkser=p&seriap=XXXX&numberp=YYYYYY&submit=%CF%F0%EE%E2%E5%F0%E8%F2%FC" | lynx -post_data -dump http://www.ufms.spb.ru:80/checkzp.php | grep 'Ваш заграничный'

Вместо ХХХХ нужно подставить серию своего гражданского паспорта (макс. 7 символов, что, как я понимаю, позволяет использовать серии старых паспортов, с римскими цифрами), а YYYYYY заменить соотв. на его номер (макс. 6 символов). Если запускать скрипт из-под английской локали, то шаблон для grep надо изменить с ‘Ваш заграничный’ на ‘Vash zagranichnyj’, поскольку скрипт отдаст страницу в латинице.

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

Дополнение:
Если сайт проверки готовности загранника постоянно «радует» сообщением о превышении числа запросов, можно пропустить их через tor. В этом случае удобно будет воспользоваться другим способом отправки форм POST-методом из lynx — записать автоматический скрипт, который и будет осуществлять проверку.

Посутпаем следующим образом:

  1. вызываем lynx с ключем cmd_log=имя_файла_куда_сохранить_скрипт:
    lynx -cmd_log=script_name http://www.ufms.spb.ru:80/checkzp.php,
    вводим серию и номер паспорта, отправляем запрос, дожидаемся загрузки страницы с ответом и закрываем браузер.
  2. в дополнение к tor устанавливаем torsocks — утилита несколько сырая, но дело своё делает исправно, перенаправляя траффик на tor (можно естественно использовать любой понравившийся прокси, указав его в качестве умолчального export http_proxy="address:port").
  3. вызываем lynx через torsocks или выбранный прокси с указанием использовать для автоматизации отправки данных формы записанный ранее файл скрипта с передачей результатов работы на разбор в grip:
    torsocks lynx -cmd_script=script_name http://www.ufms.spb.ru:80/checkzp.php | grep «Ваш заграничный»

Всё, автоматизация проверки готовности заграничного паспорта успешно проведена! Пока скрипт работает за человека, человек может расположиться у телевизора и спокойно отдохнуть :)

Анонимайзер как замена прокси. Проверка анонимайзеров на валидность

Скрипт для составления и проверки списка веб-прокси

Наткнулся на любопытную заметку под названием «И еще немного про Google Hack«, в которой автор описывает использование анонимайзеров (пример анонимайзера — сайт Anonymouse) вместо публичных прокси для обхода капчи в Google.
Такой способ использования анонимайзеров мне тоже приглянулся и я решил написать свой скрипт для сбора и проверки на валидность списка публичных веб-прокси.

Читать далее Анонимайзер как замена прокси. Проверка анонимайзеров на валидность

Обмен ссылками от WestSEO — три ссылки за одну

Как получить бесплатные тематические ссылки

Принял участие ещё в одной любопытной акции по обмену ссылками. Любопытна она своей «нетрадиционностью» — это не просто линкообмен, подобный тем, что проводятся в ЖЖ.

Алексей Московский предлагает бесплатно разместить написанную вами статью с тремя тематическими в своём блоге WestSEO. Таким образом, мы имеем некий сплав гостевого поста и статьи формата «википедии», где написавший получит три постоянных тематических ссылки с ресурса ТИЦ 50, а разместивший — качественный контент и ссылку с вашего блога на вашу статью.

Процитирую требования к статьям:

1. Объем от 2000 знаков без пробелов;
2. Интересный, уникальный текст вашего авторства. Давайте обойдемся без рерайта Википедии;
3. Соответствие статьи шаблону и стилю, предложенным ниже;
4. Не более 3-х внешних ссылок на ваши проекты или статьи. С точки зрения естественности, получается идеально если на каждые 1000 символов текста приходиться по одной внешней ссылке.;
5. Внешние ссылки должны быть хотя бы приблизительно тематичными моему блогу или теме статьи. Пластиковых окон и ипотеки не надо, умоляю вас;
6. На эту статью вы должны будете поставить ссылку у себя в блоге (можно постовой, можно использовать в контексте вашего будущего поста — как вам будет удобно). Всего одну ссылку, в обмен на три с моего блога — думаю, это справедливо;

Я уже поучаствовал в акции и написал статью про язык Perl, на котором создаю свои бесплатные SEO-скрипты. Написание заняло у меня всего пол-часа времени, а польза, на мой взгляд, очевидна — три бесплатных тематических ссылки и самосовершенствование в придачу. Так что предлагаю всем своим читателям рассмотреть предложение WestSEO, а возможно — и принять участие в акции.

А для все, кто, как и я, принимает участие в Марафоне молодых блогов, есть приятная новость — участник марафона invite4you предлагает всем марафонцам бесплатный прогон блогов! Спешите воспользваться!

Марафон молодых блогов — бесплатно раскручиваем свой блог!

Завтра, первого мая, стартует новая интересная акция по продвижению блога — «Майский марафон — забег молодых блогов«! Я со своим блогом «СетевойГибитобой» тоже решил принять в ней участие.

Информация по марафону — участники и спонсоры, официальные объявления. Не забываем читать блоги других участников!

Для начала озвучу официальные цели и задачи марафонцев:

Цель максимально увеличить количество посетителей блога, исправить недочеты, ошибки и получить навыки активного продвижения. Срок 1 месяц.
Я буду писать посты, посвященные развитию блога. Все основано только на моем личном опыте и эффективность проверенна. Будут рассмотрены следующие темы:
* Форумы
* Социальные сети
* Оптимизация, настройка блога
* ПС
* Подписчики
* ТИЦ и PR

Что же может получить молодой блоггер, помимо увеличения рейтингов блога, роста числа посетителей и улучшения своих позиций в поисковой выдаче? Безусловно — опыт работы по продвижению (путём изучения рекомендаций опытных блоггеров), опыт работы в команде (выполняя «задания» создателей марафона) и знакомство с коллегами по цеху (за счёт публикации взаимных обзоров блогов).

Логичным шагом будет записать основные показатели своего блога перед началом марафона, у меня они таковы:

Возраст: ~8 месяцев
Посещаемость: ~100 чел/сутки (по счётчику LiveInternet)
Прямых RSS-подписчиков: 50

Стать участником марафона проще простого — достаточно написать письмо организатору на адрес volandmail@gmail.com, в котором нужно представиться, указать адрес своего блога и оставить координаты для связи. Всё, вы в игре!

Биржа ссылок SetLinks сделала ещё шаг навстречу оптимизаторам

Биржа ссылок SetLinks снова улучшает интерфейс и заработки

Биржа по продаже ссылок и статей SetLinks, известная своим лояльным отношением к веб-мастерам (биржа принимает площадки на многих бесплатных хостингах), в очередной раз повысила удобство собственного интерфейса. Основное и самое ожидаемое нововведение заключается в создании API для управления аккаунтом (покупка и продажа ссылок/статей, статистика компаний и т. д.) — что позволяет автоматизировать работу с биржей или же создать инструментарий для неё на свой вкус.

Итак, заявлены следующие улучшения и дополнения в работе SetLinks:

  • Отбор площадок по возрасту сайта — теперь оптимизаторам будет проще размещать ссылки на молодых сайтах.
  • Отбор площадок по количеству страниц в индексе Yandex и Google— что ещё раз показывает необходимость постоянной работы над количеством контента на сайте.
  • Фильтры поиска, которые помогали оптимизаторам быстрее искать нужные площадки, теперь можно привязывать и к кампаниям (для каждой кампании можно создавать свои фильтры).
  • Дополнительная проверка параметров площадок в режиме реального времени перед покупкой – актуальней данных быть не может.
  • Реализован API(XML-RPC) интерфейс для оптимизаторов/seo-компаний и веб-мастеров — для имеющих большое число компаний/площадок появилась возможность использовать собственную обработку статистики и отчётность.

Подобное развитие биржи можно только поприветствовать и начать пользоваться ей с ещё большей отдачей!

Оптимизация AdSense для блога — пошаговое руководство от Google

Размещение рекламных блоков Google AdSense для лучшей отдачи
Самые выгодные места размещения блоков AdSense

Google постоянно выпускает различные обучающие материалы для работы со своей системой контекстной рекламы — AdSense (вывод в указанных местах сайта коротких текстовых объявлений). Мне на глаза попалась презентация с одного из их онлайн-семинаров под названием «Оптимизируем AdSense на блогах» (автор — Павел Киливник).

Из презентации можно узнать следующие полезные вещи:

  1. в каких местах блога лучше всего размещать рекламные блоки AdSense для максимальной отдачи от объявлений (а значит — и максимального заработка веб-мастера) при различных форматах его компоновки (одна/две/три колонки, объемные текстовые блоки и т. п.)
  2. как привлечь на свой ресурс рекламодателей (путём показа не только текстовых, но и графических объявлений — баннеров, увеличением размеров рекламных блоков, целеориентация объявлений)
  3. какой формат рекламных блоков (размеры блока, начертание и размеры шрифта объявлений) наилучшим образом подходит для работы и заработка с AdSense
  4. как ещё можно повысить доходы от работы с AdSense (размещение рекламы в результатах поиска и т. п.)

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