Обновить
@resetmeread⁠-⁠only

Скромный пастух нулей и единиц…

Отправить сообщение

Как победить CMake: отладка CMake-скриптов

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели12K

Отладка больших CMake-проектов часто превращается в боль. Уходит не один час на то, чтобы с помощью message() и бубна найти проблему. Но существуют более удобные и эффективные способы. Например, отладчик, который позволяет пошагово пройтись по CMake-скриптам и посмотреть значение переменных. Или профилировщик, показывающий последовательность вызовов и время их выполнения. Как их использовать? Читайте в статье.

Читать далее

235 м² DIY-умного дома: автополив, климат, котельная и соседи в шоке

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели25K

Меня зовут Антон, мне 46 лет. По образованию я экономист и юрист, всю жизнь занимался инновационным бизнесом — помогал доводить разработки молодых ученых до рынка. В «умный дом» я пришел случайно и совсем не по профессии.

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

Я начал звонить интеграторам. Стоимость — миллионы рублей за примитивные проекты: в основном только освещение, без котельной и климата. Я понял, что дешевле сделать самому. Так я оказался в мире автоматизации, где пришлось разбираться с контроллерами, датчиками, сценариями и кучей нюансов.

Сначала я построил баню — и поселился в ней. Она стала моим первым полигоном: именно там я начал собирать системы, тестировать конфигурации и сценарии, понимать, что такое умный дом на практике. А сам дом еще отделывается — в нем масштаб решений куда больше, все таки 230 м².

Читать далее

DIY Open Source принтер. Часть 1. Покоряем USB Printer Class и имитируем печать текста

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели11K

Привет, Хабровчане!

Это продолжение моего дневника разработки DIY струйного принтера предыдущая часть:

DIY Open Source принтер. Часть 0

В прошлый раз одной из поднятых проблем стал интерфейс между ПК и устройством. В данной статье я постараюсь решить вопрос подключения STM32 по USB и убедить Windows и Linux что это принтер.

Содержание


§1. Кратко о USB
§2. Поиск реализаций USB Printer Class для STM32
§3. Реализация USB Printer Class для STM32
§4. Тест на Windows
§5. Тест на Linux
§6. Как добавить поддержку печати изображений?

Читать далее

Топ-6 Python-библиотек для визуализации

Уровень сложностиПростой
Время на прочтение23 мин
Охват и читатели13K

Команда Python for Devs подготовила перевод статьи о шести библиотеках Python для визуализации данных. Matplotlib, seaborn, Plotly, Altair, Pygal и Bokeh — у каждой свои сильные и слабые стороны: от академических статичных графиков до интерактивных дашбордов для бизнеса. Выбираем самую подходящую для различных кейсов.

Читать далее

Что такое эмбеддинги и как с ними работать. Вводная для начинающих

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели15K

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

🔥 Начинаем? 🔥

Визуализация управления памятью в Python: что творится внутри?

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели12K

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

Идея сделать приложение-визуализатор пришла после чтения книги CPython Internals. Там подробно объясняется, как устроены арены, пулы и блоки. Но пока читаешь текст, всё это воспринимается слишком абстрактно. Захотелось увидеть механику своими глазами: как память выделяется, как освобождается и почему иногда остаётся занята. Так и появился MemoryMonitorApp, а вместе с ним — эта статья.

Читать далее

Антенны для вашего приёмника SDR

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели18K

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

Скорее всего, вы знаете, что работа передающей антенны основана на преобразовании переменного тока высокой частоты в электромагнитные волны, способные распространяться на большое расстояние. Приёмная антенна улавливает эти волны и преобразует их обратно в переменный ток, попадающий в приёмник. Такие преобразования основаны на законе Ампера.

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

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

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

Читать далее

Особенности Python, о которых вас точно спросят на техническом собеседовании

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели15K

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

Как автор курса «Python-разработчик» в Яндекс Практикуме, я часто разбираю подобные ситуации на своём YouTube-канале, где провожу открытые тестовые интервью с джунами. Всё, о чём я говорю, — это не абстрактные примеры, а реальные наблюдения и выводы, сделанные прямо в ходе этих собеседований. 

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

Читать далее

Мониторинг Celery. Pull-модель

Уровень сложностиСредний
Время на прочтение40 мин
Охват и читатели4.6K

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

Читать далее

Топ 5 возможностей Gin, которые должен знать каждый Go-разработчик

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6.7K

Команда Go for Devs подготовила перевод статьи о скрытых возможностях Gin-фреймворка. Даже если вы давно пишете API на Go, в арсенале Gin есть несколько приёмов, которые сделают ваш код быстрее, надёжнее и проще в сопровождении. От кастомных валидаторов до graceful shutdown — фишки, о которых знают не все.

Читать далее

Redis Stream — надёжность и масштабируемость ваших систем сообщений

Время на прочтение16 мин
Охват и читатели54K
image

Redis Stream — новый абстрактный тип данных, представленный в Redis с выходом версии 5.0
Концептуально Redis Stream — это List, в который вы можете добавлять записи. Каждая запись имеет уникальный идентификатор. По умолчанию идентификатор генерируется автоматически и включает в себя временную метку. Поэтому вы можете запрашивать диапазоны записей по времени или получать новые данные по мере их поступления в поток, как Unix команда «tail -f» читает лог-файл и замирает в ожидании новых данных. Обратите внимание, что поток могут слушать одновременно несколько клиентов, как многие «tail -f» процессы могут одновременно читать файл, не конфликтуя друг с другом.

Чтобы понять все преимущества нового типа данных, давайте бегло вспомним давно существующие структуры Redis, которые частично повторяют функциональность Redis Stream.
Читать дальше →

Apache Pulsar как основа для системы очередей

Время на прочтение13 мин
Охват и читатели29K

Меня зовут Агалецкий Павел, я старший инженер в команде Архитектуры. Эта статья про новую для нас в Авито технологию — Apache Pulsar и построение системы очередей, Queues as a Service, на её основе.

Читать далее

Соседняя очередь всегда движется быстрее

Время на прочтение13 мин
Охват и читатели29K

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

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

Читать далее

Эволюция ForeignKey в Django: от наивной модели до продакшена

Уровень сложностиПростой
Время на прочтение27 мин
Охват и читатели5.8K

Команда Python for Devs подготовила перевод статьи о том, как легко «сломать» внешние ключи в Django и что с этим делать. Если кратко, то unique_together больше не нужен, индексы на ForeignKey работают не так, как вы думаете, миграции могут блокировать продакшен, а правильный порядок операций и частичные индексы экономят гигабайты и спасают нервы.

Читать далее

Как работает DNS в Linux. Часть 3:  Разбираемся с resolv.conf, systemd-resolved, NetworkManager и другими

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели20K

Теоретическую основу кэширования DNS в Linux мы разбирали в первой части, где говорили про работу процесса разрешения имен — от вызова getaddrinfo() до получения IP-адреса. Вторая часть была посвящена различным уровням кэшей самой системы, приложений и языков программирования, контейнеров, прокси - а также их мониторингу и сбросу. Теперь самое время перейти к практике.

Если вы когда-либо запускали подряд команды ping, curl, dig и получали разные IP-адреса, вы не одиноки. Поведение DNS в Linux — не просто вызов getaddrinfo(). Это взаимодействие множества слоёв: от glibc и NSS до NetworkManager, systemd-resolved, dnsmasq и облачных конфигураций. В этой части разберем практические аспекты DNS:

почему одинаковые запросы дают разные IP

как реально контролируется разрешение имен: что вызывает кого и зачем

как проводить диагностику: strace, resolvectl, tcpdump

Читать далее

Почему SELECT FOR UPDATE считается в PostgreSQL вредным

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели24K

Разбирая взаимоблокировки, Лоренс вспомнил, насколько опасным может быть использование SELECT FOR UPDATE при конкурентном доступе. В этом нет ничего нового, но Лоренс заметил, что многие не знают о режимах блокировки строк в PostgreSQL. Лоренс решил подробно описать, когда следует избегать SELECT FOR UPDATE.

Читать далее

Скрытая жизнь радиоприемника: протокол S.A.M.E

Время на прочтение7 мин
Охват и читатели9.6K

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

В США этим занимается агентство National Weather Service (NWS), и именно их усилиями граждане своевременно получают оповещения об экстремальной погоде. В этой публикации мы коснемся одного из способов с помощью протокола S.A.M.E. Надевайте дождевики, запасайтесь фонариками и спичками — сегодня посмотрим, как выглядит предупреждение о торнадо, и даже сгенерируем радиосигнал об этом своими руками.

Читать далее

Proxy-войны: Кто быстрее, надежнее и масштабируемее в 2025? (HAProxy vs NGINX vs Envoy)

Уровень сложностиСредний
Время на прочтение28 мин
Охват и читатели9.5K

Когда я писал статью про HAProxy, у меня возникла идея сравнить его с другим популярным proxy-сервером, например с Envoy. Но тогда мне показалось, что простое сравнение в виде таблицы или пары абзацев будет неинформативным — и я решил сделать полноценный разбор в отдельной статье. Если вам интересно — добро пожаловать! Здесь рассмотрены не все возможности каждого решения, но ключевые — те, которые действительно важны на практике.

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

HAProxy 3.3, NGINX 1.29 и Envoy 1.35 — три open source-прокси с разной архитектурой и моделью управления. Enterprise-версии рассматривать не буду — капитализм делает свое дело: серьёзных отличий почти нет, а вот в OSS-вариантах есть что сравнить — в ряде моментов конкуренция пошла на пользу.

Читать далее

Архитектурный комитет: настраиваем работу с нуля. Часть 2. Приемка архитектурного документа и концепция ADR

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели5.4K

Привет! Это снова я, Паша Лукьянов. Я по-прежнему deputy CTO в AGIMA и по-прежнему рассказываю о принципах работы архкомитета у нас в компании. В первой части статьи я объяснил, из каких критериев состоят наши Definition of Ready (DoR) и Definition of Done (DoD), а также что представляет собой наша статусная модель. А теперь поговорим об этапах проработки архитектурных документов. Если вы внедряете архитектурный комитет в своей компании и прописываете процессы — вам сюда.

Читать далее

Когда машинное обучение не нужно: статистика для бизнеса

Время на прочтение6 мин
Охват и читатели7.1K

«Есть ложь, наглая ложь и статистика» — этот афоризм, по утверждению Марка Твена, принадлежит премьер‑министру Великобритании Бенджамину Дизраэли. А по мнению скептиков — самому Твену. Как бы там ни было, статистика не так уж и врёт, по крайней мере не больше, чем машинное обучение (ML). Более того — в некоторых случаях она может оказаться привлекательнее, надёжнее и значительно дешевле, чем обучение и внедрение ML‑моделей.

В этой статье я пропущу очевидные вещи вроде среднего, медианы и моды и сразу перейду к более интересным и полезным инструментам. Примеры и код — на Python, с использованием библиотек numpy, pandas.

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность