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

    • Tutorial

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

    Читать далее
    • +61
    • 7.6k
    • 4
  • PyTrace — Time Travel Debugger для Python

      Мне часто приходится сталкиваться с отладкой.

      Иногда я ставлю точку останова, но понимаю что уже слишком поздно, и надо начинать все сначала.

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

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

      Возможно ли лучше понимать запутанный код? А что, если мы сможем понимать такой код, быстрее чем тот, кто его написал?

      Встречайте,

      PyTrace — это трейсер с возможностями Time-Travel Debugging-а

      image
      Читать дальше →
    • Как устроено A/B-тестирование в Авито

        Всем привет. Меня зовут Данила, я работаю в команде, которая развивает аналитическую инфраструктуру в Авито. Центральное место в этой инфраструктуре занимает А/B-тестирование.


        А/B эксперименты — ключевой инструмент принятия решений в Авито. В нашем цикле продуктовой разработки А/B-тест является обязательным этапом. Мы проверяем каждую гипотезу и выкатываем только позитивные изменения.


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


        Читать дальше →
      • Я так хотел попасть в программный комитет конференции, и вот я здесь, и что мы будем делать?



          На разных конференциях обязанности участников программного комитета отличаются. Бывает так, что «программный комитет» и «организаторы» — в точности одни и те же люди, и каждый из них и швец, и жнец, и на дуде игрец. Тогда в круг их обязанностей внезапно попадает и выбор площадки, и аренда оборудования, и закупка еды, и маркетинг. Это очень интересные темы, но я не разбираюсь ни в одной из них. Поэтому сегодня мы сосредоточимся на том, что у программного комитета отнять невозможно: на работе с докладчиками.

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

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

          • Tutorial

          Регулярные выражения в Python от простого к сложному




          Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
          Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

          Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
          Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

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

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


            Читать дальше →
          • Популяризация науки: лекции российских ученых

              image


              В мире растет число фейковых новостей и все сложнее найти источник правдивой информации. Спрос на достоверность, качество и фактчекинг не пропал, но сложно подружить методологии проверки данных с новостями мейнстрима в эпоху, когда даже серьезные издания гонятся за кликбейтом. Изъеденные недочетами новости политики, экономики, спорта и других сфер начинают раздражать, а не привлекать внимание. Образуется информационный вакуум, заполнить который могут новости науки. Манипулировать научными данными не так интересно, как фактами в экономике и политике. Наука поддерживается прекрасной репутацией источников — например, не вызывает сомнений авторитетность журнала «Nature» или достоверность базы данных биотехнологической информации PubMed.


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

              Читать дальше →
            • Установка OpenStreetMap Nominatim для нахождения широты и долготы по введенному адресу

              image

              Хотел бы поведать свою историю об установке геокодера Nominatim на выделенный сервер. Изначально предполагалось, что эта задача займёт у меня около 5-7 часов, но не тут то было… Поэтому было решено написать статью c описанием разворачивания Nominatim на сервер до полной работоспособности сайта. Но обо всём по порядку.
              Читать дальше
            • Методы оптимизации нейронных сетей

                В подавляющем большинстве источников информации о нейронных сетях под «а теперь давайте обучим нашу сеть» понимается «скормим целевую функцию оптимизатору» лишь с минимальной настройкой скорости обучения. Иногда говорится, что обновлять веса сети можно не только стохастическим градиентным спуском, но безо всякого объяснения, чем же примечательны другие алгоритмы и что означают загадочные \inline \beta и \inline \gamma в их параметрах. Даже преподаватели на курсах машинного обучения зачастую не заостряют на этом внимание. Я бы хотел исправить недостаток информации в рунете о различных оптимизаторах, которые могут встретиться вам в современных пакетах машинного обучения. Надеюсь, моя статья будет полезна людям, которые хотят углубить своё понимание машинного обучения или даже изобрести что-то своё.


                image


                Под катом много картинок, в том числе анимированных gif.

                Читать дальше →
              • Определяем пользователей VPN (и их настройки!) и прокси со стороны сайта

                  W.I.T.C.H.
                  We can save the day from dark, from bad
                  There's no one we need


                  Многие из вас используют VPN или прокси в повседневной жизни. Кто-то использует его постоянно, получая доступ к заблокированным на государственном или корпоративном уровне ресурсам, многие используют его изредка, для обхода ограничений по географическому положению. Как вы можете знать, крупные интернет-игроки в сфере стриминга видео, музыки и продажи игр никогда не любили пользователей, которые легко обходят географические ограничения, разблокируя недоступный в их стране контент, или совершая покупки заметно дешевле. За примерами не нужно далеко ходить: Netflix изменил свое соглашение об использовании, добавив пункт о блокировке VPN, всего 2 месяца назад; Hulu тоже грешил блокировкой пользователей, а Steam вообще подозрительно смотрит на не-русскоязычных пользователей из России. В последнее время, компании пытаются блокировать уже не конкретных пользователей, а сами IP-адреса VPN-сервисов, создавая определенные неудобства уже самому VPN-сервису и его пользователям. Похоже, они не используют никаких спецсредств, а блокируют выборочно и вручную. Хоть я и не поддерживаю какие-либо блокировки вообще, меня заинтересовала техническая часть вопроса: можно ли как-то определить использование прокси-серверов и VPN со стороны сервера, не прикладывая особых усилий?
                  Можно, при определенных условиях. И достаточно точно.
                  Читать дальше →
                • Как попасть в топ на Kaggle, или Матрикснет в домашних условиях

                  Хочу поделиться опытом участия в конкурсе Kaggle и алгоритмами машинного обучения, с помощью которых добрался до 18-го места из 1604 в конкурсе Avazu по прогнозированию CTR (click-through rate) мобильной рекламы. В процессе работы попытался воссоздать оригинальный алгоритм Мактрикснета, тестировал несколько вариантов логистической регрессии и работал с характеристиками. Обо всём этом ниже, плюс прикладываю полный код, чтобы можно было посмотреть, как всё работает.

                  Рассказ делю на следующие разделы:
                  1. Условия конкурса;
                  2. Создание новых характеристик;
                  3. Логистическая регрессия – прелести адаптивного градиента;
                  4. Матрикснет – воссоздание полного алгоритма;
                  5. Ускорение машинного обучения в Python.
                  Читать дальше →
                • Нет – взломам серверов! Советы по проверке и защите

                  • Translation
                  Подозреваете, что Linux-сервер взломан? Уверены, что всё в порядке, но на всякий случай хотите повысить уровень безопасности? Если так – вот несколько простых советов, которые помогут проверить систему на предмет взлома и лучше её защитить.

                  image

                  Читать дальше →
                • Особенности продвижения приложений в СНГ, на западных рынках и в Азии

                    Предыдущая статья про 15 нестандартных инструментов продвижения мобильного приложения неожиданно хорошо зашла на Хабре. Это говорит о том что тема для сообщества актуальна.

                    В данной статье вас ожидает большой текст (TLD:DR!) о продвижении приложения в СНГ, на западных рынках и в Азии, с подробным разбором каждого из рынков и большим количеством полезных ссылок.

                    Запасайтесь чаем и добро пожаловать под кат.

                    image
                    Читать дальше →
                    • +24
                    • 12.5k
                    • 7
                  • FizzBuzz на TensorFlow

                    • Translation

                    интервьюер: Приветствую, хотите кофе или что-нибудь еще? Нужен перерыв?


                    я: Нет, кажется я уже выпил достаточно кофе!


                    интервьюер: Отлично, отлично. Как вы относитесь к написанию кода на доске?


                    я: Я только так код и пишу!


                    интервьюер: ...


                    я: Это была шутка.


                    интервьюер: OK, итак, вам знакома задача "fizz buzz"?


                    я: ...


                    интервьюер: Это было да или нет?


                    я: Это что-то вроде "Не могу поверить, что вы меня об этом спрашиваете."


                    интервьюер: OK, значит, нужно напечатать числа от 1 до 100, только если число делится нацело на 3, напечатать слово "fizz", если на 5 — "buzz", а если делится на 15, то — "fizzbuzz".


                    я: Я знаю эту задачу.


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


                    я: ...


                    интервьюер: Вот маркер и губка.


                    я: [задумался на пару минут]


                    интервьюер: Вам нужна помощь, чтобы начать?


                    я: Нет, нет, все в порядке. Итак, начнем с пары стандартных импортов:


                    import numpy as np
                    import tensorflow as tf

                    интервьюер: Эм, вы же правильно поняли проблему в fizzbuzz, верно?


                    я: Так точно. Давайте обсудим модели. Я думаю тут подойдет простой многослойный перцептрон с одним скрытым слоем.

                    Читать дальше →
                  • MCMC-сэмплинг для тех, кто учился, но ничего не понял

                    • Translation
                    Рассказывая о вероятностном программировании и Байесовской статистике, я обычно не уделяю особого внимания тому, как, на самом деле, выполняется вероятностный вывод, рассматривая его как некий «чёрный ящик». Вся прелесть вероятностного программирования заключается в том, что, на самом деле, для того, чтобы строить модели, не обязательно понимать, как именно делается вывод. Но это знание, безусловно, весьма полезно.


                    Как-то раз я рассказывал о новой Байесовской модели человеку, который не особенно разбирался в предмете, но очень хотел всё понять. Он-то и спросил меня о том, чего я обычно не касаюсь. «Томас, — сказал он, — а как, на самом деле, выполняется вероятностный вывод? Как получаются эти таинственные сэмплы из апостериорной вероятности?».
                    Читать дальше →
                  • Тестируем aiohttp с помощью простого чата

                    • Tutorial
                    Оглавление
                    • Введение
                    • Структура
                    • Routes
                    • Handlers, Request and Response
                    • Настройки конфигурации
                    • Middlewares
                    • Базы данных
                    • Шаблоны
                    • Сессии, авторизация
                    • Static
                    • WebSocket
                    • Выгрузка на Heroku



                    Введение


                    Прошлой осенью мне удалось побывать на нескольких python meetups в Киеве.
                    На одном из них выступал Николай Новик и рассказывал о новом асинхронном фреймворке aiohttp, работающем на библиотеке для асинхронных вызовов asyncio в 3 версии интерпретатора питона. Данный фреймворк заинтересовал меня тем, что он создавался core python разработчиками и позиционировался как концепт python фреймворка для веба.


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

                    Читать дальше →
                  • Кейс NGINX: Как противостоять DDoS-атакам

                      Основная цель нашей работы состоит в том, чтобы сделать IaaS простым и понятным даже для тех, кто не сталкивался с ИТ-сферой. Поэтому мы проводим постоянную оптимизацию всех систем и рассказываем о том, что нам удалось сделать, в нашем блоге на Хабре.

                      Пара примеров:


                      Сегодня мы решили взглянуть на западный опыт и кратко проанализировать тему балансировки нагрузки. Нас привлекла заметка на тему работы с DDoS-атаками.

                      Читать дальше →
                      • +14
                      • 25.3k
                      • 5
                    • Как честно работать фрилансеру в Беларуси?

                        Всвязи с приходом PayPal в Беларусь, появился ещё один способ привязаться к международному рынку и выводить заработанные на фрилансе деньги. Разумеется, есть желание работать честно и платить налоги, дабы избежать всяческих трудностей с законом. Однако, после недолгого обсуждения со знакомыми айтишниками, я понял, что полной картиной не обладает ни один из них. Кто-то говорит, что нужно заключать акты на каждый факт работы и чуть ли не высылать чеки по почте заказчикам из-за границы, кто-то говорит, что это называется «доход из-за рубежа» и это вообще отдельный компот, кто-то просто забил и выводит всё вчёрную.

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

                        Читать дальше →
                      • Как я победил в конкурсе BigData от Beeline

                        image

                        Все уже много раз слышали про конкурс по машинному обучению от Билайн и даже читали статьи (раз, два). Теперь конкурс закончился, и так вышло, что первое место досталось мне. И хотя от предыдущих участников меня и отделяли всего сотые доли процента, я все же хотел бы рассказать, что же такого особенного сделал. На самом деле — ничего невероятного.
                        Читать дальше →