Архив категории ‘Perl’

Perl: проверка TCP-сокета на удалённой машине

Thursday, August 23rd, 2012

В этой крохотной заметке я оставлю маленький сниппет Perl-кода, который позволяет проверить, открыт ли на удалённой машине определённый порт. Пригодиться это может в первую очередь для всяких мониторинговых целей, когда, например, нам нужно проверить, жив ли демон на удалённой машине (да и сама удалённая машина), и при этом нам для этого достаточно проверить, слушает ли этот демон свой порт.

CPAN как обычно предложил варианты решения задачи, и я для себя выбрал модуль IO::Socket. Вот сам сниппет:

(more…)

Метки:
Категория: Perl | Нет комментариев »


Отправка сообщений в Jabber через web

Tuesday, April 17th, 2012

— Мне сказали — умный человек.
— Ну мало ли что про человека болтают!

— «Тот самый Мюнхгаузен»


Эта краткая заметка посвящена отправке сообщений по протоколу XMPP с помощью Perl. В данном случае это будет не простой Perl-скрипт, а cgi-сценарий под веб-сервером, хотя суть и не меняется. Фактически и не заметка это будет, а просто набор рабочего кода, который может пригодиться в будущем. Если пригодится кому-то кроме меня самого, то вообще прекрасно.

(more…)

Метки: , ,
Категория: Perl, Web-dev | Нет комментариев »


Оквадрачивание всех картинок внутри директории

Friday, January 20th, 2012

Взгляни на его форму: квадрат, воплощение коварства!

— м/ф «SpongeBob SquarePants»

Возникла необходимость сделать все изображения в одной директории квадратными, причём таким образом, чтобы не нарушить центровку изображений. В моём случае это была директория с файлами изображений Drupal, поэтому задача разбивается на две части. Первая часть – универсальная – как автоматически отредактировать все изображения. Вторая часть – для Drupal – как обновить данные о новых изображениях в базе данных.

Пользоваться будем нашим любимым Perl и его модулем для работы с библиотекой ImageMagick.

(more…)

Метки: ,
Категория: Drupal, Perl | Нет комментариев »


Perl: работаем с XML и JSON

Monday, September 13th, 2010

— Поверь мне, не в пирогах счастье…
— Ты, что, с ума сошёл? А в чём же ещё?

— «Малыш и Карлсон»

It's not even XML!

Не буду производить тонну выкладок в стиле “Что лучше: XML или JSON?”. Дело это неблагодарное, более девяти тысяч раз обмусоленное в статьях. Стоит только разок  обратиться в Гугл с вопросом “JSON vs XML” и окунуться в разнообразие мнений. Тем более, что, как это обычно бывает, однозначного ответа здесь нет и не будет, так как разные бывают ситуации и разные задачи. Так, например, в информационно-ориентированных web-приложениях для AJAX-обмена наиболее оптимальным выбором видится JSON , а вот для хранения больших объемов формализованных иерархических данных или для использования в качестве конфигов, наверное, всё же лучше брать XML. Так или иначе столкнуться придётся с каждым из этих форматов, и с каждым из них надо будет работать. И вот на тот случай, если работать придётся на Perl, пишу эту статейку-напоминалку.

Когда я использую Perl, всегда держу в голове золотое правило “Есть задача – стопудово есть и модуль на CPAN”.  Срабатывает безотказно. Так и здесь: для работы с JSON и XML существует множество  модулей, из которых я для себя выбрал соответственно модули JSON и XML::Twig. Модули большие, навороченные, умеют всё, о чём можно пожелать. Ну, разве что не “грабят корованы”. Но опишу только основное.

(more…)

Категория: Perl | Нет комментариев »


Редирект после запроса HTTP POST

Thursday, July 15th, 2010

Протокол HTTP подразумевает выполнение редиректа на новую страницу после обработки данных, полученных от пользователя методом POST. Само собой, это не обязательно. А на страницах, где методом POST отправляется некоторый поисковый запрос, это вообще ни к чему. Нужен он лишь в случаях, когда отправленные данные где-то на сервере сохраняются – тогда редирект позволяет избежать двойной отправки данных при перезагрузке страницы по F5 или при возврате на неё.
Если следовать протоколу, то согласно RFC 2616 сервер на запрос POST должен отвечать статусом 303 See Other, так как обычный для редиректа статус 302 Found должен использоваться по стандарту только для запросов GET или HEAD. Единственным подводным камнем можно считать то, что существуют юзер-агенты, не понимающие стандарта HTTP/1.1 и, следовательно, не знающие статуса 303. Впрочем, я склонен думать, что это раритет и ориентироваться на него не стоит. Тем более, что получение статуса 302 в ответ на POST-запрос может заставить некоторые браузеры, свято блюдущие букву стандарта, выдать пользователю предупреждение.
Вот как реализую редирект я.
(more…)

Метки: ,
Категория: Perl, Web-dev | Нет комментариев »


Работа с сессиями в Perl

Monday, May 24th, 2010

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

В Perl работу с сессиями обеспечивает модуль CGI::Session. Он позволяет сохранять данные о сессиях в файлах или в базе данных. Подерживаются в том числе такие вещи, как DB2 или SQLite. Нас же интересует в основном MySQL (CGI::Session::Driver::mysql).

(more…)

Метки: ,
Категория: MySQL, Perl, Web-dev | 6 Комментариев »


Скрипт, умеющий авторизоваться на Web-странице

Wednesday, April 14th, 2010

В очередной раз столкнулся с очередной задачкой: необходимо написать скрипт, умеющий логиниться на Web-страницу и выполнять на ней некоторые действия от имени зарегистрированного пользователя. Задачка, естественно, решилась при помощи Perl, а также двух модулей – LWP::UserAgent и HTTP::Request::Common. Причём, второй совершенно необязателен, но для общего развития пусть будет. И чтобы в будущем не повторять заскоков на cpan.org и усердного чтения perldoc, приведу вариант такого скрипта здесь.

(more…)

Метки:
Категория: Perl | 1 Комментарий »


Ускоряем web-сценарии на Perl, или ещё раз про Perl vs PHP

Wednesday, February 17th, 2010

“Концепция единообразия жизни позволяет наслаждаться каждым моментом, не отвлекаясь на сопоставление и сравнение.”
— х/ф “Эквилибриум”

Two_fast_two_furious_ver5Идея этой статьи родилась совершенно случайно после пары бесед с адептами PHP, утверждавшими, что Perl для Web-программирования не подходит по причине своей тормознутости, сложности и отсутствию многих полезных фич. Про второй и третий фактор говорить не будем по причине их субъективности. А вот с “тормознутостью” можно поработать. Действительно, из коробки сценарии на PHP должны работать быстрее сценариев на Perl из-за принципиального отличия их базовых парадигм: интерпретатор PHP загружен как модуль в Apache и не требует постоянной загрузки в память на каждый новый HTTP-запрос, в то время как интерпретатор Perl как раз и запускается отдельным процессом, выполняет сценарий и выгружается из памяти. Однако же спор на этом заканчивать рано, потому как для Perl существуют такие замечательные вещи, как mod_perl и FastCGI, которые могут добавить очков в корзину этому языку. При этом mod_perl по аналогии с mod_php загружается в память при старте Apache и не тратит драгоценных мгновений на запуск и выгрузку из памяти (жертвуя, правда, ресурсами сервера при этом), а FastCGI позволяет запустить интерпретатор с зацикленным сценарием один раз и обращаться к нему при поступлении новых запросов (здесь стоит отметить необходимость внесения некоторых изменений в сам скрипт).
Так вот. Попробуем разобраться, как всё это заставить работать и насколько всё это улучшает производительность по сравнению с работой сценариев в стандартном режиме с модулем mod_cgi.

(more…)

Метки: , , ,
Категория: Apache, Perl, Web-dev | Нет комментариев »


Постепенный вывод в Web-страницу (tail -f для Web)

Tuesday, February 2nd, 2010

tailf-iframeПредыстория такова, что мне потребовалось сделать web-интерфейс, позволяющий запускать и останавливать на сервере определённый процесс. И при этом хотелось в режиме реального времени видеть отладочную информацию, которую процесс пишет в свой лог-файл, примерно так, как это делает tail -f в командной строке. В моём случае это был Tomcat и его лог catalina.out, но это не принципиально. С тем же успехом это мог быть, например, Postfix и mail.log. В процессе работы встретились кое-какие подводные камни и интересные решения. Но обо всём по порядку…

(more…)

Метки: ,
Категория: Apache, Perl, Web-dev | 5 Комментариев »


Sphinx, часть 2: Perl API

Thursday, December 31st, 2009

perlsphinxВ прошлой статье «Sphinx: начало» я описал процедуру установки Sphinx и показал, как создавать полнотекстовые индексы на примере базы данных с книгами. Теперь нам надо понять, как использовать эти индексы в Perl-приложении. Это может быть любое Perl-приложение, но в основном Sphinx Perl API находит применение в Web CGI. Почему именно в Perl? Да потому что про PHP и так написано везде и помногу, и, кроме того, Perl – это наше всё.
(more…)

Метки: , ,
Категория: MySQL, Perl, Web-dev | 4 Комментариев »