• Введение в ASGI: становление асинхронной веб-экосистемы Python

    Привет, Хабр! Представляю вашему вниманию перевод статьи "Introduction to ASGI: Emergence of an Async Python Web Ecosystem" автора Florimond Manca.



    "Черепахи рядом с водоемом", Ricard Baraham на unsplash.com


    Python не замыкается только на Data Science, веб-разработка на Python вернулась с новым асинхронным витком в развитии языка!


    Сейчас происходит много важных событий в экосистеме веб-разработки на Python. Одним из основных драйверов этих изменений является ASGI — Asynchronous Standard Gateway Interface.


    Я уже несколько раз упоминал ASGI в моем блоге, в частности, когда анонсировал Bocadillo (асинхронный open-source веб-фреймворк на Python — прим.пер.) и tartiflette-starlette (библиотека для построения GraphQL API поверх HTTP через ASGI — прим.пер.), но я никогда не писал подробное введение о нем. Теперь я это сделаю.


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


    Прежде чем мы начнем, я хотел бы рассказать, что недавно создал awesome-asgi — отличный список для отслеживания постоянно расширяющейся экосистемы ASGI.

    Читать дальше →
    • +26
    • 9,2k
    • 5
  • 56 проектов на Python с открытым исходным кодом

    • Перевод
    image

    1. Flask


    Это микро-фреймворк, написанный на Python. Он не имеет валидаций для форм и уровня абстракции базы данных, но позволяет вам использовать сторонние библиотеки для общих функций. И именно поэтому это микро-фреймворк. Flask предназначен для простого и быстрого создания приложений, а также является масштабируемым и легким. Он основан на проектах Werkzeug и Jinja2. Вы можете узнать больше о нем в последней статье DataFlair о Python Flask.

    2. Keras


    Keras — нейросетевая библиотека с открытым исходным кодом, написанная на Python. Она удобна для пользователя, модульная и расширяемая, а так же может работать поверх TensorFlow, Theano, PlaidML или Microsoft Cognitive Toolkit (CNTK). В Keras есть все: шаблоны, целевые и передаточные функции, оптимизаторы и многое другое. Он также поддерживает сверточные и рекуррентные нейронные сети.

    Работа над последним проектом с открытым исходным кодом на основе Keras — Классификация рака молочной железы.
    Читать дальше →
  • Что не так с Copy-on-Write под Linux при копировании



      Предупреждение: эта статья относится ко всем CoW файловым системам в Linux, поддерживающим reflink при копировании. В данный момент это: BTRFS, XFS и OCFS2.

      Прошу воздержаться от холиваров о том, какая ФС лучше: Btrfs, XFS, Reiser4, NILFS2, ZFS или какая-то неупомянутая.

      Читать дальше →
    • 6 практических историй из наших SRE-будней



        Современная веб-инфраструктура состоит из множества компонентов разного назначения, имеющих очевидные и не очень взаимосвязи. Это становится особенно хорошо видно при эксплуатации приложений, использующих разные программные стеки, что с приходом микросервисов стало встречаться буквально на каждом шагу. Ко всеобщему «веселью» добавляются и внешние факторы (сторонние API, сервисы и т.п.), что усложняют и без того непростую картину.

        В общем, даже если эти приложения и будут объединены общими архитектурными идеями и решениями, для устранения необычных проблем в них зачастую приходится пробираться через очередные незнакомые дебри. Случатся ли такие проблемы — лишь вопрос времени. Вот таким примерам из нашей последней практики и посвящена эта статья. В ролях: Golang, Sentry, RabbitMQ, nginx, PostgreSQL и другие.
        Читать дальше →
        • +45
        • 6,4k
        • 1
      • bear_hug: игры в ASCII-арте на Python3.6+

        • Tutorial


        Для своих игр в ASCII-арте я написал библиотеку bear_hug с очередью событий, коллекцией виджетов, поддержкой ECS и прочими полезными мелочами. В этой статье мы посмотрим, как с её помощью сделать минимальную работающую игру.
        Читать дальше →
        • +30
        • 4,4k
        • 5
      • Простое шифрование БД SQlite

          Так получилось, что я очень люблю использовать SQLite СУБД.


          Программируя на ассемблере, я иногда нуждаюсь в полноценной СУБД. Мои программы редко превышают в размере несколько сотен килобайт. Понятно, что использовать с ним СУБД в несколько сотен мегабайт по меньшей мере просто смешно, а в конце концов, очень неудобно – сразу возрастают требования к оборудованию и сложности установки и настройки, а в итоге уменьшается надежность всей системы.


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


          К примеру, я использовал SQLite в моем движке форума AsmBB о котором уже писал на Хабре. (Кстати, после этого он так и не упал).


          С того времени проект медленно, но уверенно развивается. Появились новые функции, повысились безопасность и быстродействие.


          И вот однажды я задумался как повысить и так неплохую безопасность проекта. И сразу подумал, что неплохо было бы сделать шифрование БД форума. Ведь если даже база и утечёт, то доступ к личным данным пользователей никто не получит.


          Быстрый поиск по Интернету показал, что есть несколько расширений SQLite для шифрования БД. К сожалению, официальное расширение SEE несвободно и вообще продается за деньги.


          Но, конечно, свято место пусто не бывает и я сразу наткнулся на расширение SQLeet. И в нем мне понравилось буквально все.

          Читать дальше →
          • +22
          • 6,1k
          • 4
        • 3 необычных кейса о сетевой подсистеме Linux


            В этой статье представлены три небольшие истории, которые произошли в нашей практике: в разное время и в разных проектах. Объединяет их то, что они связаны с сетевой подсистемой Linux (Reverse Path Filter, TIME_WAIT, multicast) и иллюстрируют, как глубоко зачастую приходится анализировать инцидент, с которым сталкиваешься впервые, чтобы решить возникшую проблему… и, конечно, какую радость можно испытать в результате полученного решения.
            Читать дальше →
          • Ускоряем логин через SSH в Ubuntu в 100 раз

              Долгое время я мучился ужасно медленным удаленным логином на свои Ubuntu сервера (все 2 ). Ужасно медленно в данном случае — 2-3 секунды. Не то чтобы это было совсем фатально, но когда логин через ключ — хочется чтобы все работало мгновенно — в конце концов, у нас не 486SX.

              Длительное гугление приводило только к стандартным решениям:
              1. UseDNS no в /etc/ssh/sshd_config — ускоряет логин в случае тормозного DNS. В моём случае стоял локальный кеширующий DNS, потому и так все было быстро.
              2. Принудительное указание IPv4 в SSH клиенте — особо не помогло, видимо не у всех тормозит
              И на askubuntu.com вопрос c bounty уныло провисел долгие недели без ответа…

              Читать дальше →
            • Как мы пробивали Великий Китайский Фаервол (ч.3)

                Привет!
                Любые хорошие истории заканчиваются. И наша история про то, как мы придумывали решение быстрого прохода Китайского Фаервола, не исключение. Поэтому спешу поделиться с вами последней, завершающей частью на эту тему.


                В предыдущей части было рассказано про множество тестовых стендов, придуманных нами, и какие результаты они дали. И мы остановились на том, что неплохо было бы добавить CDN! для вязкости в нашу схему.


                Я расскажу вам, как мы тестировали Alibaba Cloud CDN, Tencent Cloud CDN и Akamai, и на чем в итоге остановились. Ну и конечно, подведем итог.


                Читать дальше →
              • Как мы пробивали Великий Китайский Фаервол (ч.1)

                  Всем привет!


                  На связи Никита — системный инженер из компании SЕMrush. Сегодня я расскажу вам о том, как перед нами встала задача обеспечить стабильность работы нашего сервиса semrush.com в Китае, и с какими проблемами мы столкнулись в ходе ее выполнения (учитывая местонахождение нашего дата-центра на восточном побережье США).


                  Это будет большая история, разбитая на несколько статей. Расскажу, как все это было у нас: от полностью неработающего сервиса из Китая, до показателей работы сервиса на уровне его американской версии для американцев. Обещаю, будет интересно и полезно. Итак, поехали.



                  Проблемы китайского интернета


                  Даже самый далекий человек от специфики сетевого администрирования хотя бы раз, да слышал о Великом Китайском Фаерволе. Ууу, звучит круто, да? Но что это такое, как оно работает на самом деле — вопрос довольно сложный. В интернете можно найти много статей, посвященных этому, но с технической точки зрения устройство этого фаервола нигде не описано. Что, впрочем, неудивительно. Признаюсь сразу, по итогам года работы я не смогу сказать точно, как он работает, но смогу рассказать о своих замечаниях и практических выводах. И начнем мы со слухов об этом фаерволе.

                  Читать дальше →
                • Как мы пробивали Великий Китайский Фаервол (ч.2)

                    Привет!


                    С вами снова Никита — системный инженер из компании SЕMrush. И этой статьей я продолжаю историю про то, как мы придумывали решение обхода Китайского Фаервола для нашего сервиса semrush.com.


                    В предыдущей части я рассказал:


                    • какие появляются проблемы после того, как принимается решение «Нам нужно сделать так, чтобы наш сервис работал в Китае»
                    • какие проблемы есть у китайского интернета
                    • зачем нужна ICP-лицензия
                    • как и почему мы решили тестировать наши тестовые стенды с помощью Catchpoint
                    • какой результат дал наш первый вариант решения, базирующийся на Cloudflare China Network
                    • как мы нашли баг в DNS Cloudflare


                    Эта часть — самая итересная, на мой взгляд, потому что сосредоточена на конкретных технических реализациях стейджингов. И начнем мы, а точнее продолжим, с Alibaba Cloud.

                    Читать дальше →
                    • +28
                    • 10,8k
                    • 3
                  • HiDPI в Linux, в частности в KDE

                    Мониторы разрешением в 4K перестали считаться уделом буржуев и понемногу входят в жизнь простого люда. Равно как и мониторы других высоких разрешений. Ещё пару лет назад я про поддержку таких мониторов в Linux говорил, что «скорее нет, чем да». Поддержка вроде была, но количество глюков с ней делало весь процесс бессмысленным, и очень хотелось переключить монитор на разрешение поменьше. Чего некоторые 4K мониторы не позволяют в Линуксе делать до сих пор. Дело в том, что драйвера NVidia при подключении по DisplayPort наивно верят EDID монитора, и если там прописано только одно максимальное разрешение — не позволяют ставить никакое другое. Надо либо откатываться на Nouveau, либо настраивать HiDPI. Будем настраивать! (Статья рассчитана на человека, знающего основы Linux и что такое X сервер).
                    Читать дальше →
                  • Sampler. Консольная утилита для визуализации результата любых shell команд

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


                      Sampler


                      Наблюдение за изменением состояния в базе данных, мониторинг размера очередей, телеметрия с удаленных серверов, запуск деплой скриптов и получение нотификации по завершению — конфигурируется за минуту простым YAML файлом.


                      Код доступен на гитхабе. Инструкции по установке — для Linux, macOS и (экспериментально) Windows.

                      Читать дальше →
                    • Разбираемся с rtorrent всерьёз

                      • Tutorial
                      Об установке и базовой настройке rtorrent на хабре хватает статей, как и споров о том, стоит ли вообще связываться с хардкорным rtorrent или лучше обойтись чем-нибудь более дружественным к пользователю. Лично я много лет назад пересмотрел все качалки и в результате rtorrent оказался самым стабильным и эффективным. Интерфейс у него не самый удобный, но достаточно понятный и юзабельный чтобы это не стало серьёзной проблемой. Альтернативные интерфейсы вроде rutorrent у меня как-то не прижились - ставить php только ради rutorrent неохота, а остальные варианты выглядят совсем слабо (и ни одного кроме rutorrent даже нет в портаж Gentoo).

                        

                      Одно из основных преимуществ rtorrent — очень гибкие возможности по его настройке и автоматизации. К сожалению, синтаксис ~/.rtorrent.rc достаточно нестандартный, нормальная документация отсутствует, поэтому обычно настройка сводится к поиску и копированию (попытка что-то в них изменить кроме констант/путей к каталогам обычно проваливается) готовых рецептов или вообще ограничивается редактированием констант в базовой конфигурации.

                      На днях я решил, что так дальше продолжаться не может — мы очень много лет знакомы, он для меня столько хорошего выкачал, а я всё никак не познакомлюсь с ним поближе! Не скажу, что досконально с ним разобрался, но по крайней мере я смог реализовать все свои идеи по автоматизации rtorrent, и сделал это понимая, что и почему я делаю, без шаманства с чужими рецептами.

                      Читать дальше →
                    • Л – логика

                        Однажды мне в голову пришла идея новой игры-головоломки с очень простой, но, в то же время, интересной механикой: игроку дается набор из 5–7 картинок – нужно определить логическую цепочку, по которой эти картинки можно выстроить в ряд, и, собственно, выделить их по порядку. Если в процессе выделения картинок игрок допустит ошибку, попытавшись выделить картинку не в свою очередь, то всё построение сбрасывается, а картинки перемешиваются. В качестве логики объединения могут выступать абсолютно любые темы, которые только способны связать разные и не очень объекты.

                        image

                        Идея игры мне понравилась, и я решил воплотить её в мобильном приложении.
                        Читать дальше →
                      • Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2012 на Рутокене

                        • Tutorial


                        Простые пароли не защищают, а сложные невозможно запомнить. Поэтому они так часто оказываются на стикере под клавиатурой или на мониторе. Чтобы пароли оставались в головах “забывчивых” пользователей и надёжность защиты не терялась – есть двухфакторная аутентификация (2ФА).
                        Читать дальше →
                      • Получение root на роутере Tenda Nova MW6

                          Началось всё с того, что польстившись на распродажу и новые buzz words — я приобрел wifi mesh систему, дабы покрыть все уголки загородного дома и прилегающего участка. Все бы ничего, но одна проблема раздражала. А с учетом того, что я сел на больничный на несколько дней — довела меня до root доступа к данному роутеру.


                          КДПВ

                          Читать дальше →
                        • Kubernetes Operator на Python без фреймворков и SDK

                          • Tutorial


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

                          1. Существует мощнейший фреймворк для разработки операторов на Go — Operator SDK.
                          2. На Go написаны такие «перевернувшие игру» приложения, как Docker и Kubernetes. Писать свой оператор на Go — говорить с экосистемой на одном языке.
                          3. Высокая производительность приложений на Go и простые инструменты для работы с concurrency «из коробки».

                          NB: Кстати, как написать свой оператор на Go, мы уже описывали в одном из наших переводов зарубежных авторов.

                          Но что, если изучать Go вам мешает отсутствие времени или, банально, мотивации? В статье приведен пример того, как можно написать добротный оператор, используя один из самых популярных языков, который знает практически каждый DevOps-инженер, — Python.
                          Читать дальше →
                          • +36
                          • 5,5k
                          • 2
                        • Как онлайн-турнир может отбить желание «доделать на следующей неделе»

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

                            Краткое изложение статьи для тех, кому некогда: Pioneer — это онлайн-турнир похожий на хакатон, который никогда не кончается; вы пилите свой проект, каждую неделю пишете отчет размером в 280 символов, голосуете за других участников, получаете фидбек и заряд мотивации, общаетесь с другими игроками со всего мира в тематических чатах. Финалистов награждают различными бонусами и потенциальными инвесторами.

                            image
                            Читать дальше →
                            • +13
                            • 3,5k
                            • 4
                          • Поделки из нерабочих HDD — мини-помпа



                              Понадобилась мне как-то для будущих самоделок водяная помпа. Да не простая — с ограничениями по габаритам — толщина до 25мм, ширина до 50мм (длина — уже можно варьировать). Из желаемых характеристик — напор 1м и расход 100л/ч. Не найдя в продажах желаемого (в основном — по габаритам), по своей упоротойупорной натуре приступил к реализации своего решения данного вопроса!

                              Внимание — много фото!
                              Читать дальше →