«Я хотел код, которым можно гордиться»: как я забросил Python, выучил Стивенса и написал демон-сервер на C с нуля

Это история не про очередной пет-проект для галочки. Это история про поиск «своего» уровня сложности.

Это история не про очередной пет-проект для галочки. Это история про поиск «своего» уровня сложности.

Всем привет!
Заранее прощу прощения, это мой первый пост на Хабре. Который возможно кому то будет полезен.
Однажды в известном китайском была хорошая цена на такое устройство с довольно мощным CPU (Intel Core Ultra 7 155H).
Каждый раз когда нужно реализовать многошаговую операцию, я сталкиваюсь с одной и той же проблемой. Если один из шагов падает, нужно откатить всё что успело выполниться до него.
Это выглядит примерно так:
Проснувся, голодненький, начал думать, что мне нужен алгоритм обхода двумерного дерева но без рекурсий, так как выполнять я его буду в while цикле на GPU, а многие GPU языки программирования, особенно графические, рекурсию не умеют, поэтому остаётся только придумать безрекурсивный алгоритм.
И придумал. Где-то за час. Не знаю, есть уже такой или нет, но на всякий случай назову его своим именем: "Безрекурсивный алгоритм обхода N-мерных деревьев Константина Тарасенкова".
Для простоты примера возьмём двумерное дерево, хоть и алгоритм может работать с любой мерностью деревьев.
Каждая нода дерева возвращает правду (t) или ложь (f) -- нужно ли продолжать обход ветвей этой ноды или нет.
Наша цель, которую мы хотим найти, это правда (t) в конечной ветви дерева, которая в данном примере находится только в ноде под индексом 3.
В данном примере, дерево и его ноды выглядят так:
........... 0t ..........
.... 1t ....... 2t .....
.. 3t 4f ... 5f 6f ..
Для вычисления алгоритма дополнительно требуется только одно число (итератор, далее будет выглядеть как i) и один массив чисел (далее массив будет выглядеть как [индекс ноды, индекс ноды, ...])
Алгоритм состоит из 5-ти условий, можете пропустить читать их, они будут более понятны чуть позже:
1. Если итератор равен нулю, и текущая нода массива под итератором имеет индекс -1, -- терминация всего алгоритма.
2. Если текущая нода массива под итератором имеет индекс -1, -- декремент итератора на 1.
3. Если текущая нода массива под итератором имеет индекс не -1 и возвращает ложь (f), -- замена индекса этой ноды в массиве на -1, декремент итератора на 1.
Проблемы которые можно решить этим паттерном:
1. Если сервис делает 1000 запросов в секунду к базе данных, а она выдерживает только 100, пул воркеров защитит БД от падения.
2. При внезапном всплеске трафика go func() на каждый запрос может создать 100500 горутин и съесть всю память. Пул ограничивает параллелизм.
3. Если у вас есть пул соединений к сокету или файловых дескрипторов, пул воркеров гарантирует, что вы не превысите лимит ОС.
Суть: Мы создаем фиксированное количество горутин, которые заранее запущены и ждут работы. Основная горутина (диспетчер) ставит задачи в канал (очередь задач). Воркеры конкурентно забирают эти задачи из канала и выполняют их. Результаты они могут отправлять обратно в другой канал.
Ключевая идея: Ограничение количества одновременно выполняемых операций и повторное использование горутин.
Как понять интерфейсы? Почему они повсюду встречаются и все о них говорят? Я собираюсь дать ответы на эти вопросы.

My Science App — это open-source low-code платформа, которую я разработал в 13 лет специально для упрощения сложных расчетов, преобразующая текстовые формулы в интерактивные веб-интерфейсы с поддержкой реактивного пересчета данных и динамической визуализации. Инструмент автоматизирует создание полей ввода (#input), расчетных модулей и графиков симуляций (#range, #inx, #outy), позволяя за 5 минут собрать полноценный научный стенд с экспортом результатов в CSV и генерацией ссылок на рабочие модели. Проект ориентирован на быструю проверку гипотез и образовательные задачи, исключая необходимость ручного написания JS-кода или работы в Excel-таблицах.

7 октября 2025 года команда React анонсировала стабильную версию React Compiler 1.0 — инструмент, о котором мечтали разработчики годами. Обещание простое и привлекательное: забудьте про useMemo, useCallback и React.memo. Компилятор всё сделает за вас.
Но действительно ли мы можем расслабиться и больше не думать о производительности? Давайте разберемся.

Привет, Хабр!
Довольно долгое время мы использовали в своём окружении Spinnaker. Очень удобный, правда старомодный, инструмент, который справлялся со своими задачами. Однако чем дольше пользовались, тем больше становилось очевидно, что Спиннакер малость избыточен, при этом очень прожорливый в плане потребления ресурсов, и тяжёлый в плане обслуживания и поддержки. Особенно когда перестали выходить новые версии CLI под Mac OS, и управление перешло в Докер контейнер. А уж когда после очередного обновления снова стали падать компоненты из-за нехватки памяти и отвалился SSO, пришло озарение...

С приходом контейнеров и оркестрации появилась проблема: где безопасно хранить секреты? На рынке достаточно решений - Sealed Secrets, Kubernetes Secrets, Infisical - но сейчас стандартом остаётся HashiCorp Vault. Vault - это не просто хранилище паролей. Это централизованное управление секретами с динамической выдачей секретов, гибкими политиками доступа и полным аудитом.
Но и у Vault есть свои проблемы: высокий порог входа, настройка политик доступа и самая большая боль - unseal. Дело в том, что Vault при запуске находится в sealed-состоянии и не отдаёт секреты, пока его не разблокируют. Перезагрузился под, упала VM - и все сервисы, зависящие от Vault, перестанут запускаться (уже запущенные, кстати, продолжат работать). Вопрос в том, как это решать правильно.
Самый простой способ хранить unseal-ключи - записать на листочек и спрятать в сейф. Но как передать ключи коллеге? Что если единственный носитель ключа уволился, ушёл в отпуск или просто недоступен в 3 часа ночи? Это классическая единая точка отказа - и строить на ней безопасность продакшена как минимум рискованно, а как максимум приведёт к потере секретов навечно.
Решение этой проблемы - auto-unseal через облачные KMS: AWS KMS, GCP Cloud KMS, Azure Key Vault. Сервисы берут на себя расшифровку мастер-ключа при старте Vault, и ручное вмешательство больше не нужно. Но что если вы работаете только в on-premise и отправлять даже ключи шифрования во внешние сервисы - не вариант?
Можно поднять второй Vault, который будет unseалить первый через Transit. Рабочая схема, но это дополнительная инфраструктура, которую тоже нужно обслуживать и мониторить. А если хочется полной отказоустойчивости, цепочка Vault'ов начинает расти.

Система авторизации по ролям обеспечивает управление доступом к ресурсам приложения в соответствии с ролью пользователя.
Сущность Role пишут отдельно от сущности User, вероятно, для того, чтобы разграничить роли и пользователей и упростить управление ими.
Обычно для хранения информации о пользователях и ролях создают две отдельные таблицы. Затем их связывают через промежуточную таблицу, чтобы реализовать связь «многие ко многим».
Такой подход часто используют в корпоративных системах, интернет-магазинах и других системах, где требуется гибкость в управлении пользователями.
Однако есть мнение, что если пользователь будет иметь только одну роль, то нет смысла создавать отдельную сущность для роли, а лучше поместить её в таблицу пользователя.

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

Представьте: у вас есть важная информация, которую нужно передать так, чтобы никто не догадался, что вы что-то передаёте.
Обычное шифрование выглядит подозрительно — "зачем этот файл зашифрован?". А стеганография прячет данные внутри обычной картинки или песни так, что визуально ничем не отличается от нормального файла.
ВКонтакте остаётся для многих основным рабочим и личным мессенджером, но у него есть одна неприятная особенность: медиаконтент живёт «где‑то в облаке», а нормального способа точечно забрать все фото из одного диалога до сих пор нет.
Да, можно запросить общий архив, подождать, пока он соберётся, скачать несколько гигабайт и вручную разбирать структуру файлов. Можно пытаться листать диалог, сохранять картинки по одной или с помощью скриптов в браузере. Но если в переписке десятки тысяч сообщений и сотни фотографий, это превращается в отдельный проект.
Я столкнулся с этой задачей несколько раз подряд — и в какой‑то момент решил, что проще написать отдельный инструмент.
Многие знают, что Windows 10 требовательна к железу. Официальные системные требования — 2 ГБ ОЗУ, 20 ГБ на диске, процессор не менее 1 ГГц . Raspberry Pi Zero 2W имеет 512 МБ ОЗУ, ARM-процессор Broadcom BCM2710A1, 4x Cortex-A53 с тактовой частотой 1 ГГц .
Я решил проверить возможно ли запустить windows 10 на Pi zero 2w.
Ubuntu System Updater — Интерактивное приложение на Bash для управления обновлениями в Ubuntu
Привет, сообщество r/linux, r/ubuntu и r/bash!
Хочу поделиться инструментом, над которым работал — Ubuntu Auto Updater — интерактивное приложение на Bash для возможности обновить сразу все установленнык компоненты в Ubuntu и Ubuntu Server. Приложение само сканирует ваши компоненты и ищет для них обновления если таковы есть и предложит обновить все либо либо одни конкретный.
Он создан для удобной работы в терминале: простота, наглядность и скорость.

Разбирая тему «вычитание сложением при помощи дополнения с потерей переноса разряда» я столкнулся с трудностями в понимании формулы x +(100000 — y) — 100000, может показаться парадоксальным, что для «вычитания сложением» мы используем формулу с вычитанием. Однако это лишь математическая запись физического процесса, но на данном этапе я этого не осознавал, что и послужило отправной точкой для углубленного анализа разбираемой темы, раскрывая микромеханику спрятанную за «искаженными» дисками арифмометра.

Многие владельцы сайтов на WordPress рано или поздно упираются в «стеклянный потолок» производительности. В этой статье я расскажу, как перевел проект с тяжеловесного конструктора Elementor на архитектуру Headless CMS с использованием SvelteKit, TypeScript и Node.js, и почему это лучшее решение для SEO в 2024 году.
Проблема: Elementor и «ожирение» веба
Типичный сайт на Elementor — это кладбище из 20+ плагинов, десятки неиспользуемых CSS-файлов и тонны JS, который блокирует основной поток.
Дано:

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

Сколько раз вы писали авторизацию с нуля для нового пет-проекта? Копировали старый код, собирали либы, наскоро делали /login и /refresh? А потом думали о безопасности, структуре, тестах... Давайте один раз сделаем это правильно, но минимально. Сегодня мы соберем сервис, который станет вашим надежным go-to решением для будущих проектов.
Коротко о том, что будем строить: REST API с 3 эндпоинтами (/register, /login, /refresh)