Pull to refresh
40
0
Евгений Блинов @pomponchik

Python-разработчик

Send message

Создаем свой диалект змеиного, или DSL на Python

Level of difficultyEasy
Reading time5 min
Views3.1K

Допустим, у нас есть некоторое исполнительное ядро и множество пользователей, владеющих Python на уровне «изучи его полностью за неделю», которые хотят решать задачи своей предметной области, с минимальными усилиями используя сервисы ядра. Мы, как разработчики ядра, хотим, с одной стороны, спрятать всё «грязное белье» за неким интерфейсом, с другой максимально упростить взаимодействие пользователей с ядром.

Как один из вариантов решения предлагаю посмотреть создание своего диалекта Python-скриптов, предназначенного для конкретной предметной области. Этакий DSL «для бедных», с синтаксисом Python, но со средой выполнения, заточенной под выполняемые задачи.

Читать далее
Total votes 16: ↑14 and ↓2+17
Comments5

Логи из docker compose / docker swarm в Grafana / Loki быстро и просто

Level of difficultyMedium
Reading time19 min
Views24K

Хочу показать как развернуть готовый и полностью работающий стек мониторинга Grafana + Loki + Prometheus + Pushgateway + Promtail за пару минут (в прямом смысле этого слова), без необходимости устанавливать на машину дополнительное ПО (плагины docker и плагины логирования) и собирать логи со всех контейнеров машины (или сразу со всех нод, в случае с swarm).

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments21

Сколько ядер CPU можно использовать параллельно в Python?

Level of difficultyMedium
Reading time6 min
Views21K

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

Как же проверить, сколько ядер есть у компьютера? И действительно ли это хороший совет?

Оказывается, на удивление сложно определить, сколько потоков выполнять:

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

- Хуже того, из-за таких функций CPU, как параллельность на уровне команд и одновременной многопоточности (Hyper-threading в CPU Intel), количество ядер, которое можно эффективно использовать, зависит от того кода, который напишете вы!

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

Читать далее
Total votes 17: ↑14 and ↓3+18
Comments33

Конкурентный отказ

Reading time11 min
Views4K
Любая задача может быть завершена несколькими способами:
  1. Нормальное завершение, после которого мы получаем результат (например, Ничего/Единица).
  2. Сообщение об ошибке.
  3. Принудительное завершение, после которого программа может остаться в неопределённом состоянии.

В корутинах Python есть известные точки для безопасной приостановки выполнения. Пользуясь ими, можно автоматически подводить программу к результатам #1 и #2. Поскольку приостановка потоков происходит по принципу вытеснения, именно программист, реализующий потоки, отвечает за достижение результатов #1 и #2. При работе с потоками всегда сохраняется вероятность исхода #3 – поток может быть уничтожен извне, а задача этого даже не заметит, и не получит ни одного шанса осуществить очистку после выполнения и аккуратно завершиться. С потоками существуют две фундаментальные проблемы: (A) невозможно узнать, когда их работа может быть прервана из-за переключения контекста в операционной системе и (B) никогда не угадаешь, когда поток может быть принудительно завершён. Поэтому при работе с потоками принято писать код так, чтобы A и B не имели значения. При конкурентной обработке это неприемлемо, поэтому, если речь идёт о конкурентности, то вариант #3 мы должны полностью исключить.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments3

Эмбарго на A-GPS или почему смартфоны стали плохо определять местоположение

Reading time5 min
Views143K

Ориентировочно с мая 2022 года в разных темах на форуме 4PDA и других интернет-площадках начали появляться сообщения вида "Что-то смартфон стал плохо ловить спутники GPS и показывать точное местоположение". Многие связывали это с обновлениями прошивок, пробовали откатываться, использовать различные приложения, дергающие различные API Android...

Объединяло все эти жалобы два момента: все смартфоны на чипах Qualcomm Snapdragon различных поколений, и все пользователи были из РФ.

Читать далее
Total votes 290: ↑290 and ↓0+290
Comments341

Цветные функции: ищем плохие архитектурные паттерны

Reading time6 min
Views16K

Когда у языка нет цветовой дифференциации функций… то у языка нет цели?

Я уже много лет занимаюсь компиляторами и языками в целом. Хочу поделиться интересной мыслью, которая когда-то пришла мне в голову. Почему-то такого я нигде не видел.

Если немного расширить понятие функции (ввести атрибут «цвет»), можно описывать паттерны вида «вызывать логгер из performance-critical мест — это плохо» или «ходить в базу при рендеринге шаблонов запрещено».

Идея абсолютно не зависит от языка и применима к любому: хоть JS, хоть Go. Разберу её подробно в статье, и это будет интересно больше с теоретической точки зрения. Хотя мы даже сделали практическую реализацию для PHP, чтобы использовать у себя. Ссылки на GitHub и видео приложу в конце, а пока обо всём по порядку.

Читать далее
Total votes 54: ↑54 and ↓0+54
Comments28

Python микросервисы с Kafka без боли

Reading time10 min
Views32K

В этой статье я бы хотел поделиться способом написания асинхронных микросервисов на Python, в основе которых библиотека Faust. А в качестве брокера сообщений Kafka. Ну и немного мониторинга с Prometheus и Grafana.

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments7

Как мы делали свой поиск в Ozon: эволюция архитектуры от SQL до O2

Reading time16 min
Views27K

Привет, Хабр! Меня зовут Сергей, я руководитель команды поиска в Ozon. Сегодня я расскажу об эволюции наших поисковых систем: как всё начиналось более 20 лет назад с обычных SQL-запросов, как мы осваивали Sphinx и Elasticsearch и как сейчас наш собственный поисковый движок O2 на базе Apache Lucene выдерживает нагрузку в десятки тысяч RPS в сезон распродаж. Исторические хроники восстанавливались по воспоминаниям современников и представлены для полноты картины. Новейшая история описана на основе собственного опыта, поэтому подробностей будет на порядок больше. Поехали!

Читать далее
Total votes 56: ↑56 and ↓0+56
Comments25

CRDT: Conflict-free Replicated Data Types

Reading time10 min
Views45K

Как считать хиты страницы google.com? А как хранить счётчик лайков очень популярных пользователей? В этой статье предлагается рассмотреть решение этих задач с помощью CRDT (Conflict-free Replicated Data Types, что по-русски переводится примерно как Бесконфликтные реплицированные типы данных), а в более общем случае — задачи синхронизации реплик в распределённой системе с несколькими ведущими узлами.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments14

Relex SMILE или как не получить стопроцентное зрение

Reading time3 min
Views19K

Здравствуйте.

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

Благо, в городе есть приём для иногородних, где за сутки тебя сначала осматривают, а потом, к вечеру, уже делают операцию. Записался я на приём, мне сказали, что нужно сделать кучу тестов - на толщину роговицы, сдать кровь и т.д. Сдал все анализы, отправил на почту - в итоге меня допустили к операции.

Настал день Х. Приезжаю утром в поликлинику, где мне должны делать операцию, повторно прохожу тесты, где вновь все показывает на то, что мне эту операцию делать можно.

Читать про Relex SMILE
Total votes 27: ↑13 and ↓14+8
Comments37

Разработчики встраиваемых систем не умеют программировать

Reading time9 min
Views58K

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

Редко когда речь заходит об обратной проблеме, имеющей место в куда более узких кругах разработчиков встраиваемых систем, включая системы повышенной отказоустойчивости. Есть основания полагать, что ранний опыт использования MCS51/AVR/PIC оказывается настолько психически травмирующим, что многие страдальцы затем продолжают считать байты на протяжении всей карьеры, даже когда объективных причин для этого не осталось. Это, конечно, не относится к случаям, где жёсткие ценовые ограничения задают потолок ресурсов вычислительной платформы (микроконтроллера). Но это справедливо в случаях, где цена вычислительной платформы в серии незначительна по сравнению со стоимостью изделия в целом и стоимостью разработки и верификации его нетривиального ПО, как это бывает на транспорте и сложной промышленной автоматизации. Именно о последней категории систем этот пост.

Читать далее
Total votes 100: ↑81 and ↓19+92
Comments239

Литьё по моделям напечатанным на 3D-принтере

Reading time3 min
Views264K

Jeshua Lacock пишет:
Эта страница описывает мою первую и успешную попытку отлить алюминиевые детали напрямую с моделей напечатанных PLA на 3D-принтере. Процесс практически идентичен литью с восковой модели, но вместо выжигания воска я выжигал пластик PLA (био-пластик)
Читать дальше →
Total votes 160: ↑158 and ↓2+156
Comments88

Плавка металлов за 9 минут в микроволновке и другие интересные штуки: обзор ТОП7 самоделок + еще одна

Reading time10 min
Views48K

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

Однако, многие даже не догадываются, что их обычный бытовой аппарат — способен на гораздо большие «подвиги», чем принято считать. Вот об этом мы и поговорим ниже.
На что способна обычная микроволновка?
Total votes 66: ↑54 and ↓12+66
Comments26

Выходит первый Python 3.11. Что нового?

Reading time10 min
Views47K

Делимся переводом документации альфы Python 3.11, которая выходит 4 октября, о разнице в сравнении с версией 3.10. Изменения касаются трассировки исключений, модулей math, sqlite, threading, unittest и других. Удалена ощутимая часть устаревшей функциональности.

Подробности читайте под катом, пока у нас начинается курс по Fullstack-разработке на Python.

Читать далее
Total votes 37: ↑22 and ↓15+15
Comments13

С чего начать постройку дрона-дирижабля

Reading time4 min
Views12K

Начинать следует с проектирования. Проектирования внутренней оболочки. Вернее сначала внешней, допустим мы её уже спроектировали и она выглядит так...

Читать далее
Total votes 18: ↑17 and ↓1+23
Comments15

Делаем поиск в веб-приложении с нуля

Reading time26 min
Views18K
В статье «Делаем современное веб-приложение с нуля» я рассказал в общих чертах, как выглядит архитектура современных высоконагруженных веб-приложений, и собрал для демонстрации простейшую реализацию такой архитектуры на стеке из нескольких предельно популярных и простых технологий и фреймворков. Мы построили single page application с server side rendering, поддерживающее просмотр неких «карточек», набранных в Markdown, и навигацию между ними.

В этой статье я затрону чуть более сложную и интересную (как минимум мне, разработчику команды поиска) тему: полнотекстовый поиск. Мы добавим в наш контейнерный рай ноду Elasticsearch, научимся строить индекс и делать поиск по контенту, взяв в качестве тестовых данных описания пяти тысяч фильмов из TMDB 5000 Movie Dataset. Также мы научимся делать поисковые фильтры и копнём совсем немножко в сторону ранжирования.

Читать дальше →
Total votes 22: ↑20 and ↓2+23
Comments1

Централизованное логирование в Docker с применением ELK Stack

Reading time10 min
Views34K

По мере роста вашей инфраструктуры наличие роботов и надежная централизованная система логирования становится критически важными составляющими. Централизация логирования становится ключевым аспектом множества IT-задач и дает вам хороший обзор всей вашей системы.

Лучшее решение — агрегировать логи с метаданными из всех контейнеров. Это предоставит вам лучшие варианты отслеживания и возможность получить хорошую поддержку от сообщества. Здесь на сцену выходит ELK Stack. ELK, также известный как Elastic stack, представляет собой комбинацию современных инструментов с открытым исходным кодом, таких как ElasticSearch, Logstash и Kibana. Это полное решение для сквозного анализа журналов, которое вы можете использовать в своей системе.

Каждому компоненту отведена определенная роль: ElasticSearch лучше всего хранит необработанные логи, Logstash помогает собирать и преобразовывать логи в согласованный формат, а Kibana добавляет отличный уровень визуализации и помогает вам управлять вашей системой в удобной для пользователя манере.

В этом руководстве вы узнаете, как развернуть ELK и наладить агрегирование контейнерных логов. Мы собираемся объединить ELK с Filebeat, чтобы агрегировать контейнерные логи. Для этого мы собираемся создать собственный образ Docker.

Читать далее
Total votes 13: ↑10 and ↓3+11
Comments4

Твой первый шаг в Data Science. Титаник

Reading time5 min
Views12K

Небольшое вступительное слово


Я считаю, что бОльшее количество дел мы бы могли совершать, если бы нам предоставляли пошаговые инструкции, которые скажут что и как делать. Сам же вспоминаю в своей жизни такие моменты, когда не мог начаться какое-то дело из-за того, что было просто сложно понять, с чего нужно начинать. Быть может, когда-то давно в интернете ты увидел слова «Data Science» и решил, что тебе до этого далеко, а люди, которые этим занимаются где-то там, в другом мире. Так нет же, они прямо здесь. И, возможно, благодаря людям из этой сферы тебе в ленту попала статья. Существует полно курсов, которые помогут тебе освоится с этим ремеслом, здесь же я помогу тебе сделать первый шаг.
Читать дальше →
Total votes 11: ↑7 and ↓4+9
Comments4
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity