Рубрика «perl» - 17

Друзья!

Представляю вам второй выпуск русскоязычного журнала о Perl
pragmaticperl.com

Читать полностью »

Общие сведения

Это вторая часть статьи, иллюстрирующие возможности использования OS Mikrotik, в качестве HotSpot точки. В первой части я рассказывал как настроить HotSpot, а так же познакомил с возможностью выдачи и покупки карт доступа. Ознакомиться с первой частью вы можете здесь.

Читать полностью »

Думаю, всем вам известен такой программный продукт, как 1С: Предприятие 8.2. И, наверное, многим из вас известен тот факт, что к 1С: Предприятию можно подключиться, используя OLE/COM-соединение. А многие ли из вас знают, что с помощью OLE/COM-соединения можно не только выполнять программный код 1С, но и “управлять” сервером 1С: Предпрития? К примеру, можно подключиться к Агенту кластера серверов 1С: Предприятия, получить список открытых клиентских сессий, прочитать информацию о выданных им лицензиях… К тому же, наличие варианта подключения посредством OLE/COM-соединения расширяет в арсенале программиста добавляет возможность выбора языка программирования, отличного от встроенного языка 1С: Предприятия. Можно выбрать любой язык, который способен работать с OLE/COM-компонентами: будь то VB.Net, C#.Net, или Java, или даже… Perl. Да, вы не ослышались. Именно Perl.

Итак…

Задача.

Необходимо реализовать автоматический рестарт службы Агент сервера 1С: Предприятия 8.2 с помощью планировщика задач Windows. Но перед рестартом необходимо проверить, не работает ли кто-нибудь в базе Base, расположенной на сервере 1С: Предприятия. Если кто-нибудь работает, то перезапуск службы недопустим.

Читать полностью »

Добрый день, уважаемые читатели.

Хочу поделиться своим примером создания голосового меню для Asterisk при помощи Perl AGI.

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

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

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

Остальное опишу в приведённом примере.
Читать полностью »

Друзья!

Позвольте представить вам первый выпуск русскоязычного журнала о Perl pragmaticperl.com.
Который появился благодаря стараниям идейного вдохновителя и организатора vti и, пока немногочисленным, авторам статей crux и Андрею Шитову.

В этом номере:
Читать полностью »

Привет,
в этом посте я расскажу рецепт добавления функциональности в Перл.

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

f(0) = 1
f(n) = n * f(n-1)

Функциональные языки программирования позволяют определять такие функции достаточно просто, в Erlang это делается следующим образом:

factorial(0) ->
    1;
factorial(N) ->
    N * factorial(N-1).

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

#!/usr/bin/perl -I./lib
use strict;
use bigint;
 
use Recurrent;
 
recurrent fib => {
    arg(0) => lambda { my($n) = @_; return 0 },
    arg(1) => lambda { my($n) = @_; return 1 },
    arg(n) => lambda { my($n) = @_; return fib($n-1) + fib($n-2) },
};
 
print fib(1000);

Из примера видно, что у нас появились новые функции recurrent, arg, n и lambda. На самом деле, практическая польза есть только у recurrent, все остальные нужны лишь для получения более «красивого» кода.

Давайте напишем модуль Recurrent.pm
Читать полностью »

Посмотрим на код:

use strict;
use warnings;

sub mysub($$)
{
    my ($a, $b) = @_;
    print "$an";
    print "$bn";
}
my $x = undef;
mysub($x && $x->[0] =~ /abc/, $x = []);

Может ли mysub в качестве первого аргумента получить нечто, что в boolean контексте является истинной?
Читать полностью »

История реверс инжиниринга одного пушистого зверька

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

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

Система мониторинга: зачем?

Многие из вас, кому довелось отвечать за небольшую подсеть, сталкивались с проблемой учёта работоспособности пары десятков машин. Либо Вам просто захотелось иметь возможность в любой момент времени из любой точки планеты узнать как себя чувствует ваша торрент-качалка, оставленная включенной дома.

Лично я разрабатывал эту систему для решения проблемы скрытого удаленного наблюдения за вверенными мне компами. На этапе реализации мне предложили получить некоторый профит с этого проекта и сделать все на BASH как проект для некоторой конференции.

… и вот, разгребая хлам, я нашел исходники. Время работы веб-программистом не прошло даром, было решено полностью переверстать и расширить функционал. Собственно, начнем…

Описание платформы, зависимости

Не так давно я обновился до 12.10й версии всеми любимой Kubuntu (Ubuntu с KDE в качестве WM, GNOME не переношу). Система девственно чиста, никаких манипуляций с ней не производилось, так что в ней не будет пакетов, которых нет у Вас.
Ядро 3.5.0-21, KDE. Для работы самой системы нам понадобятся дополнительные пакеты, которые можно найти в стандартном репозитории. Набираем следующее:

sudo -s
apt-get install perl
apt-get install libnotify-bin
apt-get install lm-sensors
apt-get install sysstat
apt-get install apache2
exit

Перл нам будет нужен для выполнения скрипта-обработчика строк, libnotify — для вывода уведомления, lm-sensors — для снятия температуры, sysstat — для сбора статистики по I/O, apache2 — вебсервер для отображения. Ну, само-собой нужен любой текстовый редактор с подсветкой синтаксиса.

Реализация

Сначала я сверстал шаблон на дивах, в ряде случаев получился тизер фильма «Начало», но в целом структура дерева DOM корректна. Дальше спроектируем систему, которая будет заполнять этот шаблон. Для этого напишем скрипт на BASH. Для этого следует знать, что для нашего (Ubuntu) дистрибутива дефолтной директорией для вебсервера апач будет /var/www. Следовательно, если кроме нашей системы ничего не будет в открытом доступе, вывод реализуем сразу в index.html.

Сам скрипт предельно простой: команда echo выводит в stdout входной параметр, мы этот выхлоп перенаправляем в файл. Так мы сможем передать в html из BASH шаблон. С точки зрения теории алгоритмов, мы получаем уже специализированный код.
Читать полностью »

В языках с автоматическим управлением памятью сборщик мусора удаляет объекты, когда они перестают быть доступными по ссылкам. Обычно это именно то, что нужно: объект существует, пока есть возможность к нему обратиться.
Иногда такое поведение не подходит. Например, программе понадобилось хранить некоторую вспомогательную информацию об экземплярах некоторого класса, но у вас нет возможности добавить в этот класс своё поле. В этом случае можно создать отображение, в котором ключом будет объект, а значением — вспомогательная информация.
Вот тут-то и начинаются проблемы. Поскольку отображение хранит ссылки на ключи, те объекты, к которым была привязана вспомогательная информация, перестают освобождаться из памяти. Если программа в процессе своей работы создаёт много объектов, память рано или поздно заканчивается.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js