Обновить

Установка Windows 11 на Raspberry Pi 5 (26100.2033, фикс UEFI)

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

Этот туториал для тех, кто не мог запустить Windows 11 на Pi 5, получая ошибку 0xc0000225, просто чёрный экран после запуска или вообще нерабочий UEFI. На протяжении 2-3 месяцев, ещё с ноября, я пытаюсь установить Windows, но UEFI никогда не мог загрузиться, а в troubleshooting люди говорят: "Зачем кому-то Windows без драйверов вообще, сиди лучше на линуксе". Честно, это меня огорчило, потому что иметь Windows всё-таки хотелось, даже просто так.

С этим туториалом вы получите 100% шанс запуска UEFI и Windows, ибо других актуальных вариантов попросту нет. Этот туториал годится и на старые версии Windows, но новейшая в приоритете.

Читать далее

Как я не нашёл нормальную альтернативу WinSSHTerm на macOS, психанул и написал свою

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

После перехода на macOS я не нашёл SSH-клиент, который закрывает мой ежедневный сценарий так же удобно, как WinSSHTerm.

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

Репозиторий

Читать далее

Около гипотезы Гольдбаха

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

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

Читать далее

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

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

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

Читать далее

Настройка iGPU (Arc graphics) Core Ultra 7 155H в Proxmox

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

Всем привет!

Заранее прощу прощения, это мой первый пост на Хабре. Который возможно кому то будет полезен.

Однажды в известном китайском была хорошая цена на такое устройство с довольно мощным CPU (Intel Core Ultra 7 155H).

Читать далее

kata — библиотека для оркестрации многошаговых операций в Go

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

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

Это выглядит примерно так:

Читать далее

Безрекурсивный алгоритм обхода N-мерных деревьев Константина Тарасенкова

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

Проснувся, голодненький, начал думать, что мне нужен алгоритм обхода двумерного дерева но без рекурсий, так как выполнять я его буду в 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.

Читать далее

Основные паттерны конкурентности в Go: Worker Pool

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

Проблемы которые можно решить этим паттерном:

1. Если сервис делает 1000 запросов в секунду к базе данных, а она выдерживает только 100, пул воркеров защитит БД от падения.

2. При внезапном всплеске трафика go func() на каждый запрос может создать 100500 горутин и съесть всю память. Пул ограничивает параллелизм.

3. Если у вас есть пул соединений к сокету или файловых дескрипторов, пул воркеров гарантирует, что вы не превысите лимит ОС.

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

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

Читать далее

My Science App: Как превратить расчеты в интерактивное научное приложение за 5 минут

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

Читать далее

React Compiler — конец эпохи useMemo?

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

Но действительно ли мы можем расслабиться и больше не думать о производительности? Давайте разберемся.

Читать далее

Как я устал от того, что локальные ИИ-агенты ломают мои планы, и написал CLI-инструмент для защиты структуры задач

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

HBT — production-grade CLI для управления иерархическими задачами с защитой от изменений. Идеальный инструмент для работы с LLM, автономными агентами и сложными проектами.

Читать далее

Зачем нам Spinnaker, если есть Python? Как мы написали свой «велосипед» для деплоя в K8s

Привет, Хабр!

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

Читать далее

Автоматически unseal Vault в продакшене

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

С приходом контейнеров и оркестрации появилась проблема: где безопасно хранить секреты? На рынке достаточно решений - 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'ов начинает расти.

Читать далее

Создание и настройка аудиторий в Google Analytics 4

Аудитории в Google Analytics - это глобальный фильтр, который настраивается в панели администратора. Он позволяет очень тонко сегментировать посетителей для любых целей: аналитики, настройки контекстной рекламы и тд.

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

Читать далее

Зачем сущность Role пишут отдельно, а не добавляют роль в сущность User

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

Система авторизации по ролям обеспечивает управление доступом к ресурсам приложения в соответствии с ролью пользователя.

Сущность Role пишут отдельно от сущности User, вероятно, для того, чтобы разграничить роли и пользователей и упростить управление ими.

Обычно для хранения информации о пользователях и ролях создают две отдельные таблицы. Затем их связывают через промежуточную таблицу, чтобы реализовать связь «многие ко многим».

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

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

Читать далее

Защита Linux-сервера с nftables: моя оборона

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

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

Читать далее

Скрывать данные невидимо: как я сделал программу, которая прячет секреты в картинках и музыке

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

Представьте: у вас есть важная информация, которую нужно передать так, чтобы никто не догадался, что вы что-то передаёте.

Обычное шифрование выглядит подозрительно — "зачем этот файл зашифрован?". А стеганография прячет данные внутри обычной картинки или песни так, что визуально ничем не отличается от нормального файла.

Читать далее

VK Dialog Photo Archiver: маленький десктоп‑инструмент, который решает большую проблему ВК‑диалогов

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

ВКонтакте остаётся для многих основным рабочим и личным мессенджером, но у него есть одна неприятная особенность: медиаконтент живёт «где‑то в облаке», а нормального способа точечно забрать все фото из одного диалога до сих пор нет.

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

Я столкнулся с этой задачей несколько раз подряд — и в какой‑то момент решил, что проще написать отдельный инструмент.

Читать далее

Как я запустил windows 10 на raspberry pi zero 2w

Многие знают, что Windows 10 требовательна к железу. Официальные системные требования — 2 ГБ ОЗУ, 20 ГБ на диске, процессор не менее 1 ГГц . Raspberry Pi Zero 2W имеет 512 МБ ОЗУ, ARM-процессор  Broadcom BCM2710A1, 4x Cortex-A53 с тактовой частотой 1 ГГц .

Я решил проверить возможно ли запустить windows 10 на Pi zero 2w.

Читать далее