• Логирование чего угодно в Perl

    • Tutorial
    Проблема выбора

    Для логирования сообщений Перл предлагает несколько готовых решений. Все они, как водится, размещены на CPAN'е. По запросу «log» можно найти кучу модулей на все случаи жизни.

    Однако, среди всех этих модулей есть один особенный, называется он Log::Any.

    Особенность этого модуля для логирования заключается в том, что он не занимается, собственно, логированием. Модуль Log::Any предоставляет программе (и программисту) универсальное API для обращений к другим модулям, которые занимаются непосредственно логированием.

    Если вас мучает проблема выбора способа логирования в Перле — эта статья для вас.
    Читать дальше →
  • Как я стал мейнтейнером одного из модулей Perl на CPAN

      image

      У меня на работе, в одном из проектов, используется модуль XML::WBXML. Это модуль для работы с бинарным XML — WAP Binary XML.

      К сожалению, модуль обновлялся последний раз в 2006 году, т.е. 9 лет назад. С тех пор от Дэвида Глессера (David Glasser), автора модуля, не было ни слуху, ни духу, багрепорты висели неотвеченными, баги, соответственно, неисправленными. Модуль был забыт и заброшен.

      Нужно было что-то с этим делать. Ниже я хочу поделиться своим опытом получения контроля над заброшенным модулем Perl.
      Читать дальше →
      • +43
      • 9,5k
      • 9
    • Руководство по оформлению кода на Перле

      • Перевод
      image

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

      Главная фишка заключается в том, что ваши программы всегда должны запускаться с флагом -w. При необходимости, вы можете целенаправленно отключить это действие для конкретных участков кода через прагмы no warnings или переменную $^W. Так же, вы должны всегда запускать программы с использованием use strict, либо же четко понимать, почему вы этого не делаете. Прагмы use sigtrap и use diagnostics так же могут быть полезными.

      Что касается эстетики оформления кода, то единственная вещь, о которой всерьез заботится Ларри, это то, что закрывающая фигурная скобка многострочного блока должна быть выровнена по вертикали с ключевым словом, начинающим всю конструкцию. Кроме того, у него есть другие предпочтения, которые не так серьезны:
      Читать дальше →
    • RabbitMQ — Отложенные сообщения, часть 2

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

        В связи с этим хочу привести более универсальное (но чуть более сложное) решение, позволяющее организовать отложенные сообщения с произвольным временем задержки.
        Читать дальше →
      • RabbitMQ — отложенные сообщения

          image

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

          Примеры кода будут на Перле, но никаких специфических для Перла деталей в коде не будет, поэтому примеры могут быть сравнительно легко адаптированы для любого другого языка.
          Читать дальше →
        • Блокировка запуска второго экземпляра программы на Perl

            image

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

            Нужно проверить — является ли запускаемый процесс единственным, запущенным в данный момент, экземпляром программы, или уже есть другой, запущенный экземпляр?

            Есть несколько методов такой проверки, отличающихся надежностью.
            Читать дальше →
          • Асинхронный многопоточный пул воркеров на Perl

            image

            В работе веб-сервиса, да и вообще многих других систем, часто встречается необходимость выполнения различных фоновых задач. Для этого пишут скрипты — воркеры — которые берут список имеющихся задач и начинают их выполнять — с какой-то скоростью и в какой-то последовательности.

            Понятное дело, хорошо, когда все задачи выполняются быстро и без проволочек.

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

            • Научить воркер не ждать выполнения каждого отдельного этапа задачи (асинхронность)
            • Научить воркер выполнять одновременно несколько задач (многопоточность) (disclaimer: на самом деле термин «многопоточность» тут используется в значении «многопроцессность»)

            В этой статье мы рассмотрим вариант реализации воркера, который будет одновременно асинхронным и многопоточным.
            Читать дальше →
            • +17
            • 9,5k
            • 9
          • Репл — крохотный открытый плеер для Мака

            image

            Некоторое время назад я перешел на Мак и стал подбирать себе софт для повседневного использования. Проблема возникла с аудиоплеером. Я перепробовал множество плееров, но ни один меня не устраивал. Поэтому я решил написать свой собственный. Заодно мне было интересно попробовать разработку на Objеctive-C под Мак.

            В результате, у меня получился плеер Репл, что означает "резидентный плеер":
            Читать дальше →
          • Командная работа в Git

              Во всем множестве статей по git'у, которые я смог найти в сети, не хватает одного существенного момента — описания командной работы. То, что обычно описывают как командную работу, на самом деле является просто работой с удаленным репозиторием.

              Ниже я хочу описать свой опыт командной работы над проектом с использованием git'а.
              Читать дальше →
            • FastCGI-приложение на Perl. Часть третья.

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

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

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

                А как создавать копии?
                Читать дальше →