• External Term Format

      Если какой-либо программе необходимо передать данные эрланговсому серверу, эти данные предварительно должны быть сериализованы. То есть преобразованы в бинарный вид, так, чтобы эрланг мог потом распаковать их обратно. Обычно это делают с помощью ASN.1, google protobuf, thrift и т.д. Все это без сомнения достойные продукты.

      В качестве альтернативного варианта можно рассмотреть использование эрланговского external term format. В исполняемой системе эрланга есть две функции - term_to_binary() и binary_to_term(), которые эффективно и быстро могут запаковать/распаковать любые значения в этот формат, а сам формат хорошо описан в документации — www.erlang.org/doc/apps/erts/erl_ext_dist.html

      Как это все работает.
      Читать дальше →
      • +31
      • 1,8k
      • 4
    • AsyncIO для практикующего python-разработчика

      • Перевод
      • Tutorial
      Я помню тот момент, когда подумал «Как же медленно всё работает, что если я распараллелю вызовы?», а спустя 3 дня, взглянув на код, ничего не мог понять в жуткой каше из потоков, синхронизаторов и функций обратного вызова.

      Тогда я познакомился с asyncio, и всё изменилось.
      Читать дальше →
      • +20
      • 38,2k
      • 9
    • Мультиплексированный ввод/вывод

      Preface


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


      Читать дальше →
    • Порядок разрешения методов в Python

        В этой заметке рассматривается алгоритм MRO С3 и некоторые специфические проблемы множественного наследования. Хотя и алгоритм и проблемы не ограничиваются рамками одного языка, я акцентировал своё внимание на Питоне. В конце приведён список полезных ссылок по данной теме.
        Читать дальше →
      • JSONB запросы в PostgreSQL

        • Перевод
        Ранее я писал, как включить поддержку jsonb в postgres/psycopg2. Сегодня экспериментировал с тем, как запрашивать данные в колонках типа JSON.
        На эту тему есть документация, но мне было не совсем понятно, как работают различные операции:

        CREATE TABLE json_test (
          id serial primary key,
          data jsonb
        );
        
        INSERT INTO json_test (data) VALUES 
          ('{}'),
          ('{"a": 1}'),
          ('{"a": 2, "b": ["c", "d"]}'),
          ('{"a": 1, "b": {"c": "d", "e": true}}'),
          ('{"b": 2}');
        

        Читать дальше →
      • RabbitMQ tutorial 2 — Очередь задач

        • Перевод
        • Tutorial


        В продолжение первого урока по изучению азов RabbitMQ публикую перевод второго урока с официального сайта. Все примеры, как и ранее, на python, но по-прежнему их можно реализовать на большинстве популярных ЯП.
        Читать дальше →
      • Работа с DSL: создание собственного анализатора с использованием библиотек Python



          В нашем блоге на Хабре мы пишем не только о темах, связанных с информационной безопасностью, но уделяем значительное внимание вопросам разработки софта — например, ведем цикл о создании и внедрении инструментов DevOps. Сегодня же речь пойдет об использовании предметно-ориентированных языков (Domain-specific language, DSL) для решения конкретных задач с помощью Python.

          Материал подготовлен на основе выступления разработчика Positive Technologies Ивана Цыганова на конференции PYCON Russia (слайды, видео).
          Читать дальше →
        • Пишем простой плагин для Sublime Text 2

          Введение

          Странно, но поискав на Хабре упоминания текстового редактора Sublime Text 2 я почти ничего не нашел. Спешу исправить положение и рассказать хабраюзерам об этом прекрасном инструменте. Вначале очень коротко расскажу о том чем же он так хорош, потом напишем простой но полезный плагин.
          Читать дальше →
        • Стильный код на Python, или учимся использовать Flake8

          • Tutorial

          Автор: Анатолий Соловей, developer

          Язык программирования Python очень востребован на современном рынке, он развивается изо дня в день, и вокруг него сложилось активное сообщество. Во избежание конфликтов между разработчиками-питонистами, создатели языка написали соглашение PEP 8, описывающее правила оформления кода, однако даже там отмечено, что:
          Many projects have their own coding style guidelines. In the event of any conflicts, such project-specific guides take precedence for that project.

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

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

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

          На помощь в этом случае приходят линтеры — инструменты, контролирующие оформление кода в проекте. Именно они помогают поддерживать его чистоту и, в нашем случае, предотвращать создание коммитов, которые могут содержать ошибки. Я для контроля качества использую Flake8 и сейчас постараюсь объяснить, почему выбрал именно его, и расскажу, как его настроить, чтобы получить максимальный результат. Заинтересовались? Добро пожаловать под кат.
          Читать дальше →
        • Опыт портирования проекта на Python 3

            Хочу поделиться опытом портирования проекта с Python 2.7 на Python 3.5. Необычными засадами и прочими интересными нюансами.

            Немного о проекте:

            • Браузерка: сайт + игровая логика (иерархические конечные автоматы + куча правил);
            • Возраст: 4 года (начат в 2012);
            • 64k loc логики + 57k loc тестов;
            • 2400 коммитов.

            Читать дальше →