rsync – отличная замена scp!

Довольно смешно, но впервые воспользовался rsync только три недели назад. До этого пытался один раз, не разобрался с ключами и забросил. Зря, как оказалось!
Главное достоинство rsync по сравнению с scp – показывает прогресс загрузки. Также рекурсивно загружает директории. Немаловажно – поддерживает докачку в обе стороны.

Попользовался и сделал себе для bash алиас в bashrc [cc lang=”bash” inline=”true”]rsync=”rsync -P”[/cc], теперь всё время его использую для загрузки на хостинг. Авторизацию по ключам тоже настроил, так что можно делать бэкапы.
Основной синтаксис вызова: [cc inline=”true”]rsync логин@хост:/откуда/что логин@хост:/куда/что[/cc]. В случае локальной машины логин и хост указывать естественно не нужно, достаточно только пути.
Основные опции, которыми пользуюсь: -P – выводит прогресс-бар, -r – рекурсивная загрузка.

Если кто ещё тоже до сих пор не знаком с rsync и пользуется scp/sftp – самое время попробовать!

Mojolicious – знакомство с “вебом из коробки”

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

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

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

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

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

Настройка Rxvt через Xdefaults

Настройки Rxvt черезе Xdefaults

С некоторых пор стал пользоваться эмулятором терминала urxvt (unicode-версия rxvt) вместо gnome-terminal. Причина простая – на старом ноуте разница в скорости заметна и эта разница – в пользу urxvt (особенно если запускать его при старте GUI в режиме демона).

В остальном отличий в общем-то нет, urxvt тоже поддерживает именованные вкладки (табы), обработку гиперссылок, копирование и вставку мышью. Кроме того, он имеет поиск по выводимым в терминал данным (по Alt+S – очень удобно) и поддерживает цветной вывод man-страниц. Также urxvt существует и для cygwin.

На этом вводную часть закончу и ниже просто на память, чтобы не перечитывать ман при необходимости настроить терминал, выложу конфиг для urxvt, выполненный в виде отдельного файла, подключаемого из .Xdefaults.

Читать далее Настройка Rxvt через Xdefaults

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, например после строки 241if($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 кода очевидна – это полная свобода действий с содержимым блога, помноженная на простоту выполнения этих действий!

Замена стандартной Windows-консоли. Вкладки-табы и выбор оболочки

Стандартная консоль Windows XP (та, что вызывается командой cmd) – весьма бедна возможностями. Основное, от чего я страдал, пользуясь ей или консолью из состава cygwin – отсутствие вкладок (табов), без которых приходится открывать несколько окон, занимающих место на рабочем столе. После gnome-terminal, rxvt дома или screen на хостинге – очень неудобно. Впрочем, такие “мелочи”, как невозможность изменить ширину окна растягиванием (надо лезть в настройки окна) тоже не добавляют удовольствия от работы с консолью.

Console

И вот случайно наткнулся в интернете на замечательный проект с незамысловатым названием Console (домашняя страница) – альтернативную консоль для Windows. Она мне понравилась, так что решил поделиться с читателями.
Перечислю основные достоинства:

  • лаконичный интерфейс
  • сохраняются настройки геометрии окна после выхода из программы
  • поддержка табов
  • для каждого таба можно настроить внешний вид, иконку и главное – задать оболочку (shell), с которой будет открываться данная вкладка (например – тот же bash из состава cygwin)
  • для таба/консоли задаётся каталог запуска по умолчанию
  • удобный скроллинг

Альтернативная консоль для Windows

В общем Console не требует долгого и подробного описания – это приятная глазу альтернативная консоль для Windows с поддержкой табов (вкладок) и оболочек. Рекомендую просто попробовать и сравнить со следующим эмулятором консоли – ConEmu.

ConEmu

В комментариях к этой заметке подсказали еще один эмулятор консоли для Windows под названием ConEmu. Она точно также поддерживает вкладки, выбор оболочки командной строки, имеет возможность задавать умолчальный каталог для запуска новой оболочки.

Что мне понравилось в ConEmu по сравнению с Console – во-первых, это скорость работы – ConEmu работает заметно быстрее. Во-вторых – наличие хорошего моноширинного консольного шрифта прямо из коробки. В-третьих – корректная поддержка кириллицы, как в консоли windows, так и в bash – везде русские буквы отображаются как надо. И в-четвёртых – нормально реализованная псевдографика, файловый менеджер MidnightCommander в ConEmu, в отличае от Console, работает правильно.

Из минусов ConEmu можно отметить пожалуй только отсутствие возможности свернуть её в трей, что можно сделать в Console. В остальном на мой взгляд ConEmu у Console выигрывает, я перешел на неё, а вам предлагаю сравнить самостоятельно и выбрать подходящий для вас многовкладочный эмулятор консоли для Windows.

Эмулятор Windows-консоли ConEmu

Дополнение из комментариев:
> Единственное, чего не хватило – возможности прятать в трей не нашел
Два способа для сворачивания ConEmu в трей:
а) Правый клик на крестике (“закрыть окно”) в заголовке;
б) Опция “Auto minimize to TSA” (Setup tasks -> Features);

> Как указать автосоздаваемые при старте табы с нужными оболочками:
Создать именованый “Task” на одноименной вкладке (Setup tasks -> Tasks, путь к нужной оболочке (или нескольким оболочкам) выбрать через кнопку Add application), выбрать этот Task на вкладке Startup. Причем конкретные табы можно запускать с конкретными параметрами – AsAdmin, Working dir, и т.п. смотреть в сторону -cur_console

Дистанционное управление для автомобильного компрессора Беркут

общий вид компрессора до модернизации
Решил в рамках подготовки к сезону поменять автокомпрессор на более мощный (с Беркут R15 на Беркут R17), чтобы не испытывать проблем с подкачкой колес после травления. Однако не обратил внимания в магазине на тот факт, что производитель не предусмотрел возможности включать компрессор дистанционно, не смотря на то, что он укомплектован шлангом длиной 7,5 м. Шланг в данном случае получается бесполезным – всё равно нужно компрессор таскать с собой (не выключив его невозможно точно померить давление в колесе). Также не особо удобным оказалась конструкция наконечника шланга – его нужно наворачивать на ниппель, хотя R15 был оборудован быстросъемным наконечником. Соответственно перечисленные минусы нужно было устранять. С наконечником всё понятно – его можно только заменить на более удобный (я использовал пневмопистолет с манометром), а вот для использования потенциала длинного шланга есть несколько путей:

  • Установить ресивер (аккумулятор давления) с реле давления, компрессор будет по необходимости давление нагнетать. Плюсы установки ресивера – можно подключать пневмноинструмент, легко забортировать колесо, есть возможность смонтировать пневматический ревун, пневмоблокировки, при большом объеме ресивера – быстро накачивать объемных потребителей типа надувной лодки. Минусы – необходимость тянуть пневмосистему, ресивер объемом менее 10 л полезен только для пневмоблокировок, а под большой объем ресивера нужно место, которого у меня не так много.
  • Врезать в шланг возле манометра трехходовй кран, который после переключения будет выпускать воздух в окружающую среду. Плюсы – дёшево и сердито. Минусы – компрессор работает вхолостую, расходует ток, греется и изнашивается.
  • Смонтировать на компрессор дистанционное управление, чтобы не бегать к нему каждый раз, как будет нужно его включить или выключить. Плюсы – простота исполнения, минимум материальных затрат, не нужно искать дополнительное место, поставленные задачи решаются в полном объеме. Минусы – для решения возможных доп. задач (ревун, инструмент, блокировки) компрессор (мой Беркут R17) без ресивера в силу малой мощности не подойдет.

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

Читать далее Дистанционное управление для автомобильного компрессора Беркут

BASH [born again shell] – оболочка командной строки

Краткая история Bash

bash, bashrc, настройка bash linux

bash представляет собой модернизированную и усовершенствованную версию оболочки командной строки Bourne shell. В системах семейства *NIX bash на данный момент является одной из наиболее популярных и распространённых оболочек, на многих таких ОС (и например в эмуляторе unix-подобного окружения Cygwin) эта оболочка предустановлена.

Корнями bash уходит к оболочке sh за авторством Стивена Борна, разработанной им в 1978 г. и усовершенствованной в 1987 году Брайаном Фоксом. Дословно Bash можно расшифровать как Biurne-again-shell или “Ещё одна оболочка Борна”. Также фамилия Борн созвучна со словом born (родившийся), что порождает альтернативное название: “вновь рождённая оболочка”.

Порядок запуска Bash

При запуске bash, во-первых, считывает и исполняет команды из основного файла профиля /etc/profile (при условии существования такого файла). Затем происходит чтение файлов из домашней директории пользователя: $HOME/.bash_profile, $HOME/.bash_login, и $HOME/.profile и исполнение записанных в них команд. В момент завершения работы при выходе из оболочки вызываются команды из файла $HOME/.bash_logout.

Помимо перечисленных выше файлов, bash также распознаёт команды, описанные в так называемом дот-файле (или .rc-файле) $HOME/.bashrc (примеры – файлы .vimrc и .wgetrc) Обычно здесь содержатся пользовательские настройки внешнего вида оболочки, переопределения пользовательских команд и т.п. Пользовательские функции для bash в целях удобства восприятия полезно выносить в отдельный файл (например $HOME/.bash_function), который затем подключать из .bashrc командой source (source $HOME/.bash_function).

Примеры файлов настроек для bash

bashrc – основной файл настроек

Мой файл bashrc (открыть на новой странице) содержит основные настройки оболочки – алиасы, сохранение истории команд, вид приглашения командной строки, настройки вывода некоторых команд и т.п. Все пользовательские функции вынесены в отдельный файл .bash_functions, подгружаемый из .bashrc. Локальные настройки для разных машин (переменные окружения, цвета приглашения командной строки) также подгружаются из отдельных внешних файлов .bash_local.

bash_functions – функции оболочки

bash_functions (открыть на новой странице) – содержит определения пользовательских функций и подгружается по вызову из .bashrc.

bash_usage – справка по использованию bash

А небольшая справка по использованию самописных функций и некоторых, не слишком часто нужных, программ, у меня вынесена в отдельный файл bash_usage, который также подгружается из .bashrc:
.bash_usage (открыть на новой странице) – содержит справку по пользовательским функцям и подгружается по вызову из .bashrc.

Остальные настройки оболочки, подключаемые в bashrc

Больше конфигов? Легко!

Примеры моих конфигурационных файлов для других программ можно найти на странице Конфиги / dotfiles

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

Гос. органы идут в массы, постоянно вводят новые, удобные для граждан (по крайней мере на первый взгляд), формы взаимодействия.
К такому нововведению можно отнести и сервис проверки готовности загран. паспорта на сайте УФМС, расположенный по адресу 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 “Ваш заграничный”

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

Perl, Linux, программирование, настройка и что-нибудь ещё…