• Ультимативный гайд по поиску утечек памяти в Python

    • Tutorial

    Практика показывает, что в современном мире Docker-контейнеров и оркестраторов (Kubernetes, Nomad, etc) проблема с утечкой памяти может быть обнаружена не при локальной разработке, а в ходе нагрузочного тестирования, или даже в production-среде. В этой статье рассмотрим причины появления утечек в Python-приложениях, доступные инструменты для отладки и мониторинга работающего приложения, а также общую методику поиска утечек памяти.

    Читать далее
    • +61
    • 9.5k
    • 4
  • Порядок разрешения методов в Python

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

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

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

        Тема может заинтересовать и продвинутых пользователей при настройке удаленного доступа и при реализации тонкого клиента. Часто встречаю вполне матерых линуксойдов с утверждениями «на сервере только командная строка, и графику подробнее изучать не планирую, так как это всё нужно для простых пользователей». Но даже знатоки Linux с большим удивлением и радостью открывают для себя опцию «-X» у команды ssh (а для этого полезно понимать работу и функции X-сервера).

        Источник
        Читать дальше →
      • Метаклассы в Python

        • Translation
        Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечательному ресурсу, на котором попадаются чрезвычайно подробные и понятные ответы на самые различные вопросы.

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

        Читать дальше →
      • О порядке поиска пакетов и модулей для импорта в Python

        Начать, видимо, следует с того, что речь пойдет об интерпретаторе CPython версии 2.7.x (примеры проверялись на версии 2.7.3).

        На официальном сайте имеются описания инструкции import и модулей в Python:

        Из них следует, что в Python имеются пакеты (package), модули (module) и имена, определенные в модулях (names). Также следует отметить, что в некоторых частях документации модули называются подмодулями (submodule), если они размещены внутри пакета.

        В языке Python инструкция import позволяет импортировать пакеты, модули и имена в пространство имен, в котором инструкция import выполняется. При это существует две интересные особенности:
        1. Из синтаксиса инструкции import не всегда явно следует, что именно должно быть импортированно: пакет, модуль или имя
        2. Синтаксисом инструкции import невозможно явно указать, что путь к модулю является абсолютным путем (хотя явно указать, что путь является относительным можно, а также возможно изменение семантики инструкции, в части использования абсолютного пути по умолчанию, см. www.python.org/dev/peps/pep-0328 )

        Из этих двух особенностей следуют такие неоднозначности для записи import abcd:
        1. Импортировать ПАКЕТ abcd, либо импортировать МОДУЛЬ abcd
        2. Импортировать пакет/модуль abcd из ТЕКУЩЕГО ПАКЕТА (из пакета того модуля, в котором исполняется import abcd), либо ИЗ ПАКЕТА в соответствии с перечнем каталогов, указанных в sys.path

        Еще примеры неоднозначностей:
        • from abcd import defg: (импортировать модуль defg из пакета abcd, либо импортировать пакет defg из пакета abcd, либо импортировать имя defg из пакета abcd, либо импортировать имя defg из модуля abcd) X (из того же пакета, либо из пакета в соответствии с sys.path)
        • import abcd.defg: (импортировать пакет defg из пакета abcd, импортировать модуль defg из пакета abcd) X (из того же пакета, либо из пакета в соответствии с sys.path)

        Для разрешения эти декларативных неоднозначностей должен существовать императивный алгоритм. Такой алгоритм в некотором виде описан в официальной документации Python.
        Читать дальше →
      • Топ-10 книг для разработчика

        • Translation

        Совершенствоваться в сфере разработки — это не только писать хороший код, но и читать о том, как его писать.




        Привет, хабр! Продолжаю делиться полезными подборками. Совсем недавно я опубликовал 2 поста с перечнем Github репозиториев: Часть1 и Часть2. На этот раз предлагаю вашему вниманию подборку полезных книг для разработчиков. Кому интересно — добро пожаловать под кат.
        Читать дальше →
      • Букварь по дизайну систем (Часть 1 с дополнениями по микросервисам)

        • Translation


        Несколько лет назад, для закрытия одного их предметов мне довелось перевести данный букварь. Де-факто этот вариант стал официальным переводом. Но развитию этого перевода мешает, тот факт, что он был написан в Google Drive и закрыт на редактирования. Сегодня я уделил время на переформатирования всего этого текста в MD формат с помощью редактора Хабра, с радостью публикую здесь и вскоре отдам текущим контрибьюторам.


        Словарь


        Node — нода — узел с каким либо ресурсом
        Content — контент — данныe
        Traffic — трафик — запрос/ответ, данные которые передаются от сервера клиенту и наоборот
        Hardware — железо — аппаратная часть
        Instance — инстанс — созданный объект какой либо сущности. Например инстанс сервера API
        Headers — хедеры — заголовки (как правило TCP пакета, но может быть и HTTP запроса)



        Читать дальше →
        • +29
        • 15.5k
        • 3
      • Практическое руководство по разработке бэкенд-сервиса на Python

        • Tutorial
        Привет, меня зовут Александр Васин, я бэкенд-разработчик в Едадиле. Идея этого материала началась с того, что я хотел разобрать вступительное задание (Я.Диск) в Школу бэкенд-разработки Яндекса. Я начал описывать все тонкости выбора тех или иных технологий, методику тестирования… Получался совсем не разбор, а очень подробный гайд по тому, как писать бэкенды на Python. От первоначальной идеи остались только требования к сервису, на примере которых удобно разбирать инструменты и технологии. В итоге я очнулся на сотне тысяч символов. Ровно столько потребовалось, чтобы рассмотреть всё в мельчайших подробностях. Итак, программа на следующие 100 килобайт: как строить бэкенд сервиса, начиная от выбора инструментов и заканчивая деплоем.



        TL;DR: Вот репка на GitHub с приложением, а кто любит (настоящие) лонгриды — прошу под кат.
        Читать дальше →
      • Вирус и антибиотики: нежный ликбез для паникующих


          Эта няшка — пушистый мимивирус с размером кода 2,5 Мегабазы (бит четвертичной системы)

          Мы тут мониторили каналы, чатики и форумы по поводу текущей обстановки в разных странах. Я просто офигевал от того, что люди могут придумать в панике и безграмотности. Поэтому ликбез. Не про коронавирус. Просто про вирусы. Маленьких «нанороботов». И антибиотики. Которые не надо кушать просто так.

          Ликбез мы подготовили вместе с инфекционистом Викторией Валиковой, руководящей клиниками в Гватемале и Никарагуа. Естественно, он полон грубых упрощений.

          Кто такие вирусы?


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

          1. Переработкой клеток на свои копии.
          2. Путешествиями в поиске новых клеток.

          Про «форму жизни» есть холивар, потому что вирион (транспортное состояние вируса, частица без клетки) — это просто кусок кода ДНК или РНК + оболочки + некий аналог порта-коннектора. В этом состоянии вирус почти ничем не напоминает жизнь, а, скорее, похож на набор инструкций. И ведёт себя именно, как распечатка инструкций: пока не найдётся кто-то, кто их выполнит, они неактивны.

          Если инструкция говорит вам, как использовать ксерокс, чтобы самоскопироваться, можно ли считать её живой?
          Читать дальше →
        • Устройство расширений для браузера Firefox (WebExtensions)

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


            Тому, кто разбирается в веб-разработке, будет несложно создать новое расширение для браузера. Сейчас большинство самых популярных браузеров поддерживает стандартную систему разработки, которая использует в основном только JavaScript, HTML и CSS, — WebExtensions.


            Человеку, который никогда раньше не создавал дополнение для браузера на основе WebExtensions, может быть тяжело сразу понять, из каких основных частей оно должно состоять и что может делать. В сети Интернет есть много информации об этой системе, но для того, чтобы создать для себя общую картину, придётся потратить много времени. Эта статья поможет быстро разобраться в устройстве системы WebExtensions и покажет, как лучше ориентироваться в документации к её API. Здесь описывается расширение для браузера Firefox, поэтому почти вся информация, используемая в статье, взята с сайта MDN. Но статья будет полезна и тем, кто хочет создать расширение для других браузеров, поддерживающих WebExtensions, — в первую очередь для Google Chrome и Chromium.


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


            Читать дальше →
            • +20
            • 8.5k
            • 2
          • Бесполезный REPL. Доклад Яндекса

              REPL (read-eval-print loop) бесполезен в Python, даже если это волшебный IPython. Сегодня я предложу одно из возможных решений этой проблемы. В первую очередь доклад и мое расширение TheREPL будет полезны тем, кого интересует более быстрая и эффективная разработка, а также тем, кто пишет stateful-системы.


              — Меня зовут Александр, я в Яндексе работаю программистом. Пишем мы в моей команде на Python, на Go пока не перешли. Но в свободное от работы время я, как ни странно, тоже программирую и делаю это на очень динамическом языке — Common Lisp. Он, пожалуй, даже более динамический, чем Python. Его особенность заключается в том, что сам процесс разработки устроен несколько иначе. Он более интерактивный и итеративный, потому что в REPL на Lisp вы можете делать всё: создавать новые и удалять старые модули, добавлять методы, классы и удалять их, переопределять классы и т. д.
              Читать дальше →
              • +29
              • 8.2k
              • 3
            • 70 вопросов по JavaScript для подготовки к собеседованию

              • Translation
              Доброго времени суток, друзья!

              Надеюсь, эта статья будет полезна как начинающим разработчикам, так и опытным.

              В вопросах, которые показались мне сложнее прочих, приведены ссылки на дополнительную литературу.

              Буду признателен за развернутые комментарии. Все замечания будут учтены при редактировании статьи.

              Итак, поехали.
              Читать дальше →
            • Подборка 143 переводов эссе Пола Грэма (из 184)

                image

                Пол Грэм — один из самых уважаемых людей среди ИТишников, основателей и инвесторов. Он первоклассный программист (написал два языка программирования), хакер, создатель дерзкого акселератора Y Combinator, философ. Своими помыслами и разумом Пол Грэм врывается в широкий спектр областей: от прогнозирования развития языков программирования на сто лет вперед до человеческих качеств и способов починить/хакнуть экономику. А ещё он осознает важность того, чтобы формулировать свои мысли в текст и делиться ими с окружающими.

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

                Первую подборку переводов эссе Пола Грэма меня вдохновили сделать коллеги из tceh.com (60 переводов из 176). Вторую — Edison Software (125 переводов). Третью — PhilTech-акселератор (134 перевода и еще несколько в процессе). Потом был период (2017, 2018 и 2019), когда Пол Грэм не писал эссе (а занимался с детьми), а только немного в Твиттер и дал одно видео-интервью для стартап-школы. Но в конце 2019 и начале 2020 года он вновь стал публиковать глубокие тексты об которые интересно подумать. Предлагаю вашему вниманию ссылки на новые переводы (upd с прошлой подборки) и полный список всех эссе.

                Novelty and Heresy (Да здравствует ересь!)
                The Lesson to Unlearn (Вредные уроки)
                The Bus Ticket Theory of Genius (Теория навязчивых идей)

                Five Questions about Language Design (Пять вопросов о проектировании языков программирования)
                What Made Lisp Different (Что сделало Lisp особенным)
                After the Ladder (На смену корпоративной лестнице)
                What I’ve Learned from Hacker News (Чему я научился у Hacker News)
                Snapshot: Viaweb, June 1998 (разбор полетов: Viaweb июня 1998 года)
                Some Heroes (Мои кумиры)
                The Equity Equation (Как делить доли в стартапе)

                Бонус - видео из стартап-школы 2018 с русскими субтитрами


                Читать дальше →
                • +27
                • 33.9k
                • 8
              • Security Week 30: приватность, технологии и общество

                  12 июля в прессе появились пока не подтвержденные официально сообщения о том, что Facebook пошел на соглашение с Федеральной Торговой Комиссией США по поводу утечки пользовательской информации. Основной темой расследования FTC стали действия компании Cambridge Analytica, еще в 2015 году получившей данные десятков миллионов пользователей Facebook. Facebook обвиняется в недостаточной защите приватности пользователей, и если сообщения подтвердятся, соцсеть заплатит американской госкомиссии крупнейший в истории штраф в размере 5 миллиардов долларов.

                  Скандал с Facebook и Cambridge Analytica — первый, но далеко не последний пример обсуждения технических проблем совершенно нетехническими методами. В этом дайджесте мы рассмотрим несколько свежих примеров таких дискуссий. Конкретнее — как вопросы приватности пользователей обсуждаются без оглядки на конкретные особенности работы сетевых сервисов.
                  Читать дальше →
                • Ответ психиатра на статью «Болен-здоров»



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

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

                    Щитовидная железа и ее гормоны (отчасти и гормоны гипофиза) отвечают за темп психической деятельности. То, что произошло с masterdak связано со стремительным увеличением темпа психической деятельности, который в психиатрии называют маниакальным состоянием, манией или гипоманией. Эти термины пациенту наверняка приходилось слышать, точно также как и понятие «наплыв мыслей».
                    Читать дальше →
                  • Советские мечты о будущем



                      Помните очаровательного котика, которые чихал в заставке советского мультфильма? Мы помним, и нашли его — вместе с ворохом другой рисованной фантастики. В детстве она пугала и обескураживала, поскольку поднимала серьезные, взрослые темы. Настала пора пересмотреть старые мультфильмы, чтобы узнать, о каком будущем мечтали в той стране.
                      Читать дальше →
                    • Управление логгированием в systemd

                      • Tutorial
                      Systemd Journal

                      Демон инициализации systemd де-факто уже стал стандартом в современных Linux-системах. На него перешли многие популярные дистрибутивы: Debian, RHEL/CentOS, Ubuntu (начиная с версии 15.04). В systemd используется принципиально иной (по сравнению с традиционным инструментом syslog) подход к логгированию.
                      В его основе лежит централизация: специализированный компонент journal cобирает все системные сообщения (сообщения ядра, различных служб и приложений). При этом специально настраивать отправку логов не нужно: приложения могут просто писать в stdout и stderr, a journal сохранит эти сообщения автоматически. Работа в таком режиме возможна и с Upstart, но он сохраняет все логи в отдельный файл, тогда как systemd сохраняет их в бинарной базе, что существенно упрощает  систематизацию и поиск.

                      Хранение логов в бинарных файлах также позволяет избежать сложностей с использованием парсеров для разных видов логов. При необходимости логи можно без проблем переконвертировать в другие форматы (более подробно об этом будет рассказано ниже).
                      Journal может работать как совместно с syslog, так и полностью заменить его.
                      Для просмотра логов используется утилита journalctl. Об особенностях и тонкостях работы с ней мы расскажем в этой статье.
                      Читать дальше →
                    • Первый интроверт в трясущемся мире

                        Каждый новый фильм о космосе — это шанс заинтересовать людей тем, чем прекрасна космонавтика. И, теоретически, у байопика «Первый на Луне» («First Man», КиноПоиск, IMDB), рассказывающем о жизни Нила Армстронга, были все шансы — единственная авторизованная биография в качестве источника, режиссер Дэмьен Шазелл, снявший «Ла-Ла Ленд», действительно интересная жизнь Армстронга, который, кроме «Аполлона-11», пилотировал «Джемини-8» (первая в истории стыковка) и летал на ракетном самолете X-15. Даже то, что фильм вышел больше, чем за полгода до полувекового юбилея высадки на Луну, давало надежду, что картину не снимали к круглой дате и могли сделать хорошей. Увы, на мой взгляд, получилось плохо.




                        Сложно назвать спойлерами биографию Армстронга, но, на всякий случай, вас предупредили.
                        Читать дальше →
                      • Разработка на скорости 450 слов в минуту

                        • Translation
                        «Чего-то здесь не хватает». Спорим, такая мысль первой придёт в вашу голову, если увидите моё рабочее место в офисе. Здесь нет монитора и мыши. Есть только парень, который молотит по клавиатуре, глядя словно в пустоту.



                        Это всего лишь я, и мои коллеги гарантируют вам, что я обычно не опасен. Я программист в офисе компании Vincit в Тампере (Финляндия). И ещё я слепой. В этой статье хочу немного рассказать, как я работаю.
                        Читать дальше →
                      • Диод. Светодиод. Стабилитрон

                        • Tutorial
                        Не влезай. Убьет! (с)

                        Постараюсь объяснить работу с диодами, светодиодами, а также стабилитронами на пальцах. Опытные электронщики могут пропустить статью, поскольку ничего нового для себя не обнаружат. Не буду вдаваться в теорию электронно-дырочной проводимости pn-перехода. Я считаю, что такой подход обучения только запутает начинающих. Это голая теория, почти не имеющая отношения к практике. Впрочем, интересующимся теорией предлагаю эту статью. Всем желающим добро пожаловать под кат.
                        Читать дальше →