• 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,9k
      • 4
    • AsyncIO для практикующего python-разработчика

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

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

      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 (слайды, видео).
          Читать дальше →
          • +35
          • 8,4k
          • 9
        • Пишем простой плагин для 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 коммитов.

            Читать дальше →
          • Релиз Python 3.6 — да, теперь он с нами



              Прошло 15 месяцев, и наконец-то мир увидел релиз языка программирования Python 3.6. Нового довольно много, ведь не зря разработчики ждали целых 15 месяцев. В релизе добавлены новые модули, обновлены стандартные библиотеки, улучшены наборы различных настроек. В целом, Python 3.6 получил много улучшений, что можно считать отличным подарком к Новому Году. Давайте посмотрим подробнее, что принес нам Дед Мороз новый релиз.
              Читать дальше →
            • Особенности Jupyter Notebook, о которых вы (может быть) не слышали

              • Перевод
              Jupyter Notebook – это крайне удобный инструмент для создания красивых аналитических отчетов, так как он позволяет хранить вместе код, изображения, комментарии, формулы и графики:



              Ниже мы расскажем о некоторых фишках, которые делают Jupyter очень крутым. О них можно прочитать и в других местах, но если специально не задаваться этим вопросом, то никогда и не прочитаешь.
              Читать дальше →
            • Как жить с Docker, или почему лучше с ним, чем без него?



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

                Итак, возможно вы прошли docker tutorial, докер кажется простым и полезным, но вы пока не знаете, как он может вам помочь с вашими проектами.

                Обычно с деплоем возникает три проблемы:
                1. Как мне доставить код на сервера?
                2. Как мне запустить код на серверах?
                3. Как мне обеспечить одинаковость окружения, в котором запускается и работает мой код?


                Как с этим поможет Docker под катом.
                Читать дальше →
              • Сделай сам веб-сервис с асинхронными очередями и параллельным исполнением

                • Tutorial

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


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

                Читать дальше →
              • Peewee – лёгкая, гибкая и очень быстрая ORM на Python

                • Tutorial
                image

                Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.


                Установка
                С pip:
                pip install peewee
                


                Из репозитория:
                git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install
                


                Тесты:
                python setup.py test
                


                Есть обвязка для flask:
                pip install flask-peewee
                



                Определение моделей или «попахивает джангой»


                Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.

                from peewee import *
                
                db = SqliteDatabase('people.db')
                
                class Person(Model):
                    name = CharField()
                    birthday = DateField()
                    is_relative = BooleanField()
                
                    class Meta:
                        database = db  # модель будет использовать базу данных 'people.db'
                


                Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
                Читать дальше →
              • Скрапинг бесконечно прокручивающейся страницы

                • Перевод

                Скрапинг бесконечно прокручивающейся страницы


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



                В эру одностраничных приложений и тонн AJAX-запросов на одной странице множество веб-сайтов заменили кнопку навигации "вперёд/назад" на причудливый механизм бесконечной прокрутки страницы. Веб-сайты использующие этот механизм загружают новую сущность каждый раз, когда пользователь достигает конца страницы при вертикальной прокрутке(вспомните Twitter, Facebook, Google Images). Даже несмотря на то, что UX-эксперты утверждают что механизм бесконечной прокрутки предоставляет чрезмерное количество данных для пользователей, мы видим увеличивающееся количество веб-страниц прибегающих к предоставлению бесконечного списка результатов.

                Читать дальше →
                • +4
                • 11,6k
                • 2
              • Python-шпаргалка. Часть 1 — Язык и Типы объектов

                image

                Данная статья представляет собой очень краткую, но емкую выжимку всего, что должен знать начинающий разработчик или QA-инженер о языке Python. Надеюсь, что усердие, приложенное при написании данной статьи, поможет многим подготовиться к собеседованиям на соответствующие вакансии и расширить свой IT-кругозор.

                Статью стоит воспринимать не как учебник, а как удобную шпаргалку или «опорный сигнал» (так моя учительница истории называла подобное «творчество» в школе). Здесь не будет подробных определений, объяснений в целую главу, а лишь четкие термины, списки, краткие выжимки кода. Статья основана на замечательной книге Марка Лутца «Изучаем Python (5-е издание)», так что за её корректность и достоверность можете не переживать. Итак, начнем.
                Читать дальше →
              • Обработка голосовых запросов в Telegram с помощью Yandex SpeechKit Cloud

                Как все начиналось


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

                Читать дальше →
                • +11
                • 12,9k
                • 3
              • Пользовательские атрибуты в Python

                Вы когда нибудь задумывались о том, что происходит, когда вы ставите точку в python? Что скрывает за собой символ str(“\u002E”)? Какие тайны он хранит? Если без мистики, вы знаете как происходит поиск и установка значений пользовательских атрибутов в python? Хотели бы узнать? Тогда… добро пожаловать!
                Читать дальше →