Обновить

Нахождение коэффициентов линейной зависимости методом наименьших квадратов

Уровень сложностиСредний

Найдем алгоритм и напишем функцию для нахождение коэффициентов линейной зависимости. Без использования библиотек. И без матриц.

Читать далее

TCP-S: прозрачное шифрование TCP-сокетов на хосте через модуль ядра Linux

Уровень сложностиСложный

Я давно озадачивался вопросом: как избавить себя от трудозатрат на внедрение систем централизованного управления сертификатами и при этом дополнить существующий транспорт TCP/IP шифрованием? Представьте: весь маршрут анализируется враждебной средой, где каждый может просматривать содержимое трафика, и для каждой единицы нужны методы сокрытия. Хотелось получить прозрачный, автоматический TLS, но без возни с сертификатами, ALPN и модификацией приложений.

В итоге получилось решение в виде модуля ядра Linux — надстройки прямо над протоколом TCP. Он цепляется за netfilter-хуки LOCAL_OUT и PRE_ROUTING и прозрачно шифрует вообще все TCP-сокеты на хосте. Если модуль установлен на клиенте и сервере, весь трафик между ними автоматически идёт в криптованном виде. Это даёт колоссальный выигрыш по времени внедрения, когда нужно быстро скрыть содержимое соединений от систем анализа и демаскирования.

Читать далее

makc — кроссплатформенное управление мышью и клавиатурой на Go без cgo

Уровень сложностиСредний

makc — кроссплатформенная Go-библиотека для управления мышью и клавиатурой. Без cgo, без обёрток. Внутри статьи: как я переписал её с C на чистый Go и какие подводные камни нашёл на Win32, CoreGraphics и evdev/Wayland.

Читать далее

Запуск WebStorm из Git Bash: как открыть проект одной командой

Уровень сложностиПростой

Если вы работаете на Windows с веб-стеком, скорее всего, ваш терминал - это Git Bash. А если вы используете WebStorm как основную IDE, то наверняка ловили себя на мысли: «Почему я не могу просто написать webstorm . в терминале, как это делают коллеги на macOS и Linux?».

В этой статье разберём, как настроить чистый и быстрый запуск WebStorm из Git Bash.

Читать далее

Как я, программист-самоучка, написал CRM для своих двух шаурмичных, потерял деньги, но создал продукт, который продаётся

Уровень сложностиПростой

Привет. Я программист (со скидкой на самоучку), который в 2021 году решил, что открыть две шаурмичные — хорошая идея. Спойлер: идея была так себе. Но из этого вышла полезная CRM, которой сейчас пользуются 15+ заведений. Расскажу, как я её писал, на чём сломался и почему мой код до сих пор не идеален.

Если вам нужна только техническая часть — листайте к разделу «Архитектура». Если интересна драма с бумажками и комиссиями — читайте по порядку.

Читать далее

Паузы убивающие интерес

Уровень сложностиСредний

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

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

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

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

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

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

Как это выглядит на практике

Давайте сравним два варианта подачи одного и того же текста и отследим собственную реакцию при прочтении.

Читать далее

Секреты Вселенной в разрядах арифмометра. Часть 2

Уровень сложностиСредний

Продолжаем разбирать микромеханику Арифмометра Натурального. В этой части мы проведем проведем физико-математический анализ переноса разряда с точки зрения математической формулы и физического носителя.

Читать далее

Альтернативные сторы и платежи в iOS: что реально изменилось в ЕС и США

Уровень сложностиСредний

Apple формально открыла iOS для альтернативных сторов и сторонних платежей в Европе, но сделала это так, что без калькулятора и юриста разбираться уже больно. В ЕС появилась целая матрица режимов дистрибуции и монетизации, а в США по‑прежнему нельзя поднять свой стор, но можно честно поставить кнопку «оплатите на сайте» без отдельной комиссии за сам факт ссылки.

Ниже — разбор, когда всё началось, какие есть варианты дистрибуции и монетизации в ЕС, что поменялось с 1 января 2026 года и что именно разрешили (и не разрешили) в США.

Читать далее

Асинхронность vs синхронность и как Redis и Celery спасают бэкенд

Уровень сложностиСредний

Начнем с того, что асинхронность — это конкурентное выполнение задач (мультизадачность, как если бы человек готовил обед и переключался на прочтение книги в перерывах), а синхронность — это последовательное выполнение задач (человек сначала приготовил обед, а потом уже читал книгу). Эти понятия часто путают. Теперь к делу!

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

🧩 Здесь мы подключаем Celery и Redis. Теперь если бэкенду попадается сложный процесс, он не нагружает себя, а создает в Redis задачу (в данном случае мы Redis используем как брокера задач, но у него есть больше возможностей). Теперь бэкенд ставит задачу, отправленную Redis, в состояние ожидания. Celery видит невыполненную задачу в Redis, добавляет в свою очередь новую задачу, последовательно выполняя задачи из очереди и возвращая результат. После выполнения Celery отмечает в Redis задачу выполненной, а в бэкенде запрос снимается с режима ожидания и получает ответ. Теперь быстрые запросы сразу получают ответ, а сложные задачи через Redis и Celery решаются последовательно, и даже если будут тормозить мы сможем подключить больше модулей Celery.

Читать далее

ZDT-D: Android как гибкий сетевой шлюз с root-доступом

Уровень сложностиСредний

На Android есть привычная модель работы с VPN: приложение поднимает VpnService, создаёт виртуальный интерфейс, получает системную VPN-иконку и начинает пропускать через себя весь трафик устройства или выбранные приложения.

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

ZDT-D — это Android root-модуль для маршрутизации трафика, DPI-инструментов, локальных proxy/tun-пайплайнов, DNS-контроля и управления сетевыми правилами по приложениям.

Это не попытка сделать “ещё один VPN-клиент”. Скорее, это попытка превратить Android-устройство в небольшой настраиваемый сетевой узел, где разные приложения могут ходить через разные маршруты.

Читать далее

Codex. Sign-in failed. Login server error: Token exchange failed: error sending request for url

Уровень сложностиПростой

Пытался авторизоваться в Codex Desktop App несколько часов. Codex не пропускал дальше авторизации через Google, падая на этапе получения токена, и я нигде не мог найти решение проблемы.

Читать далее

Telegram Bot API 10.0: Как включить Bot-to-Bot Communication Mode и проверить работоспособность

Уровень сложностиПростой

Всем привет! 8 мая 2026 года вышло крупное обновление Telegram Bot API 10.0, которое принесло долгожданную фичу — возможность прямого взаимодействия ботов друг с другом (Bot-to-Bot communication). Официальную документацию можно почитать здесь.

Но есть нюанс. Telegram перенес расширенные настройки ботов в новый веб-интерфейс (Mini App) внутри @BotFather. Если вы привыкли к старому текстовому меню, найти заветный тумблер включения bot2bot сходу может быть неочевидно.

Ниже — короткий гайд о том, как активировать эту функцию и быстро проверить её статус.

Читать далее

Как я впервые полез в open source и не сломал проект

Уровень сложностиПростой

Я 10 лет писал энтерпрайз-код, пользовался open source и всё собирался “когда-нибудь” начать контрибьютить. В итоге сделал первый PR — и понял, что страшнее всего было не писать код, а нажать кнопку Create pull request.

Читать далее

Свой личный ИИ: зачем запускать нейросети локально и справиться ли ваш компьютер?

Уровень сложностиПростой

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

Люди, использующие облачные сервисы по типу ChatGPT, Claude и др., могут иметь риски потери конфиденциальности. Так еще платя за это приличные суммы.

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

Читать далее

Как я написал инструмент, который превращает мои сессии с Claude Code в сад бонсай

Уровень сложностиПростой

Привет всем!

Решил поделиться небольшим проектом, который изначально собирал под себя. Последнее время я много сижу в Claude Code. Со временем поймал себя на мысли, что мне не хватает наглядности. Вся история взаимодействия, контекст сессий и куча потраченного времени просто растворяются в консоли после закрытия терминала.

Вместо очередного дашборда со скучными графиками я решил превратить историю работы в своеобразный визуальный таймлайн, который наглядно показывает твой прогресс. Так получился Bonsai — локальный визуализатор для Claude Code.

Читать далее

OpenTelemetry за один день: traces, metrics, logs в одном pipeline

Уровень сложностиСредний

Когда нам прилетел баг «у пользователя не оформляется заказ», я открыл три вкладки: Datadog для трейсов, CloudWatch для логов и отдельный Grafana для метрик. Провёл двадцать минут, пытаясь склеить в голове события из разных систем по timestamp. Потом ещё десять — убеждая себя, что это нормально.

Это не нормально.

Проблема не в инструментах — каждый из них хорош. Проблема в том, что три источника данных не знают друг о друге. Трейс не знает, какой лог к нему относится. Лог не знает, в каком трейсе он возник. Метрики вообще живут своей жизнью.

OpenTelemetry решает именно это: единый стандарт для всех трёх сигналов — traces, metrics, logs — с автоматической корреляцией между ними. И самое важное: вы не привязаны ни к одному вендору. Сегодня Grafana, завтра Jaeger, послезавтра что угодно — код приложения не меняется.

В этой статье я покажу, как поднять полноценный observability-стек с нуля за один рабочий день. С реальным кодом, docker-compose, и результатом, которым можно пользоваться в production.

Читать далее

Как я починил себе YouTube и Discord на Windows, Linux и macOS

Уровень сложностиПростой

TL;DR: взял идеи из открытого DPI-инструментария (zapret, GoodbyeDPI, byedpi), выкинул C, переписал на Rust как один кросс-платформенный workspace под Windows + Linux + macOS, и в процессе обнаружил, что мой собственный «дефолтный» профиль не пробивает мой собственный провайдер. Пришлось писать sweep-харнес который перебирает 89 комбинаций (decoy × fooling × repeats × strategy) и тыкается curl-ом в discord.com и youtube.com. Один-единственный конфиг сработал. И это был не тот, который я закладывал по памяти из мануалов.

Предыстория

В январе у меня был UnblockPro — гибрид GoodbyeDPI и собственного шаперона, под Windows. Работало. Потом я портировал его на macOS — отдельный проект, отдельный код, отдельный набор багов. Когда захотел Linux, понял, что повторять третий раз пайплайн «парс TLS — modify — emit» это уже самонаказание.

Решил собрать всё заново. Один Rust-workspace, четыре крейта

Читать далее

Пользовательское Соглашение LiveLib под микроскопом: юридические коллизии

Уровень сложностиСредний

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

В основу этого разбора положены т.н. юридические коллизии Пользовательского Соглашения LiveLib (далее – ПС) с федеральным законодательством. Чтобы было понятно всем читателям объясняю, с точки зрения права юридические коллизии – это расхождение или противоречие между различными нормами права, регулирующими одни и те же отношения. То есть, это столкновение норм права, которые предлагают различные решения для одной ситуации. В нашем случае – это столкновение норм ПС и федерального законодательства. Обращаю Ваше внимание на важный нюанс. Подобные юридические коллизии разрешаются на основе иерархии права. Это значит, что если противоречат акты разной силы, то применяется акт с высшей юридической силой. В нашем случае – это Гражданский Кодекс Российской Федерации (далее – ГК РФ) и иные акты федерального законодательства, а не ПС.

Что это означает? Что те пункты ПС, который противоречат ГК РФ или иным актам федерального законодательства, в частности Закону Российской Федерации «О защите прав потребителей» (далее - Закону) признаются ничтожными, то есть не имеющими юридической силы. Поэтому, если в ПС написано, что ресурс имеет право на то, что противоречит федеральному законодательству, то в силу вступают нормы ГК РФ или иного акта федерального законодательства. 

И начинаем мы этот разбор с пункта 2.10 ПС в котором указаны права Администратора. 

2.10. Пользователь соглашается с тем, что Администратор имеет право удалить учетную запись Пользователя или приостановить доступ Пользователя к услугам Сервиса в случае, если (в том числе, но не ограничиваясь):

Читать далее

QA Helper Pro: как я написал свой первый софт для помощи в тестировании

Уровень сложностиСредний

Мой первый опыт в вайбкоде или универсальный инструмент для помощи в тестировании?

Давайте честно: каждый QA-инженер немного ленив в хорошем смысле слова. Нам не хочется тратить по 20 минут на рутину, которую можно автоматизировать. Мы постоянно ищем инструменты: один для Pairwise, второй для проверки MD5, третий для генерации данных.

В какой-то момент я понял, что мне нужно единое «окно», где будет всё. Так появился QA Helper Pro. Это мой первый серьезный опыт в разработке на Python. Весь проект написан на «вайбкоде» — когда ты просто хочешь, чтобы идея работала здесь и сейчас, а интерфейс был приятным и функциональным, я не говорю, что это идеальный инструмент, который правильно структурирован и реализован, но он работает и реально помогает в моей работе.

Подробнее

Захват домена через Shadow Credentials: подробный разбор Kill Chain

Уровень сложностиСложный

В этом посте разберем практический сценарий анализа защищенности в Active Directory. Также посмотрим на техники горизонтального перемещения и инструменты пентестеров.

Читать далее