Обновить

Geometry > Scale: Как 40М параметров на решетке E8 обходят классические трансформеры

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

Ребята, кажется, мы уперлись в стену. Пока гиганты наращивают параметры и жгут тераватты, пытаясь выжать каплю разума из статистики, я решил пересмотреть сам фундамент. Проблема не в данных, проблема в «вязкости» стандартного Attention.

Читать далее

Настройка 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. Если у вас есть пул соединений к сокету или файловых дескрипторов, пул воркеров гарантирует, что вы не превысите лимит ОС.

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

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

Читать далее

Ну это полный мэтч! Как мы сделали бота для знакомств в чатах

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

Всем привет! Меня зовут Иван, я руковожу компанией НИИ Крокодил.

Как и многие в IT, я состою в куче рабочих чатов, суммарно там, наверное, пару сотен человек. И каждый такой чат живёт одинаково: миллион сообщений, обсуждения сменяются одно за другим, а любая важная информация улетает вверх и теряется.

Особенно заметно, когда в чат приходят новички и пишут интро. Человек рассказывает, кто он и чем занимается, а через пару минут этот текст уже никто не увидит: его просто смывает потоком сообщений.

В какой-то момент мне стало интересно: а можно ли сделать так, чтобы люди находили друг друга не случайно, а по интересам и задачам? Так и появилась идея бота, который помогает знакомиться и «мэтчить» людей внутри сообщества. Спойлер: у нас получилось.

В этой статье расскажу, как мы с командой его сделали.

Читать далее

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 - это глобальный фильтр, который настраивается в панели администратора. Он позволяет очень тонко сегментировать посетителей для любых целей: аналитики, настройки контекстной рекламы и тд.

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

Читать далее

Навигация по длинным AI-диалогам: расширение для браузера

Часто использую ChatGPT и другие нейросети для работы: обсуждаю идеи, пишу код, прошу объяснить сложные темы. В итоге в чате накапливаются сотни сообщений. И тут начинается хаос:

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

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

В голове крутилась идея, как это исправить. Минутный поиск готовых решений не дал, поэтому сделал собственное расширение.

Читать далее

Зачем сущность 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.

Читать далее

Автоматизация обновлений Ubuntu: создание интерактивного меню на bash

Ubuntu System Updater — Интерактивное приложение на Bash для управления обновлениями в Ubuntu

Привет, сообщество r/linuxr/ubuntu и r/bash!

Хочу поделиться инструментом, над которым работал — Ubuntu Auto Updater — интерактивное приложение на Bash для возможности обновить сразу все установленнык компоненты в Ubuntu и Ubuntu Server. Приложение само сканирует ваши компоненты и ищет для них обновления если таковы есть и предложит обновить все либо либо одни конкретный.

Он создан для удобной работы в терминале: простота, наглядность и скорость.

Читать далее
1
23 ...