Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 306,89
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Как потерять спутник за 125 млн$: инструкция от NASA

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

NASA, 23 сентября 1999 года. К тому моменту аппарат Mars Climate Orbiter уже девять месяцев летел к Марсу. Вот-вот он должен был выйти на орбиту планеты. Но что-то пошло не так: связь со спутником пропала. А вместе с ней — несколько лет кропотливой работы и около 125 миллионов долларов. Что же там произошло и кто оказался виноват в ошибке?  

Читать далее

Новости

4.6-битные сети: от теории к практике. Причём здесь HardTanh?

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

Уже прошло два года с тех пор, как мы предложили схему 4.6-битного квантования и рассказали про нее, в том числе и на Хабре: раз и два. Вспомним, что при 4.6-битном квантовании веса и входы слоя принимают такие целые значения, что их попарные произведения помещаются в знаковый 8-битный тип данных. Такая схема позволила нам вычислять нейронные сети на процессорах мобильных устройств быстрее, чем в 8-битном формате, и точнее, чем в 4-битном, потому что уровней квантования больше.

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

Читать далее

Доступ к VirtualBox и Hyper-V без агента в гостевой ОС — на примере клиента EvertyDesk Lite

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели3.3K

Как дать админу доступ к виртуальным машинам на удалённом хосте без агента внутри гостевой ОС — на примере VirtualBox и Hyper-V. Один RDP-движок на оба гипервизора, три бага VirtualBox по дороге и таймаут, который переписал всю архитектуру.

Читать далее

Тёмная сторона Prometheus: разбираем сравнение векторов на пяти примерах

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

Если вы работаете техническим инженером в отделе эксплуатации, то с вероятностью 99,9% вы знакомы с Prometheus и прекрасно разбираетесь в языке запросов promQL. Но даже в «родной и знакомой» сфере есть области, которые остаются вопросительными пятнами. Например, «Сравнение векторов»/«Сопоставление векторов». Это механизмы promQL, которые применяются не так часто, плохо документированы и неочевидны для понимания. Привет, Хабр! На связи Александр, руководитель кластера надёжности в компании ecom.tech, кластер надёжности занимается SRE, проводит тестирование нагрузкой и обеспечивает стек Observability. Этой статьей я постараюсь сделать вашу жизнь чуточку проще, на примерах объяснив нюансы непростой механики сопоставления.

Читать далее

Кирилл, моя задница и 4 правила леса

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

Продакшен. 23:52. Пятница. Восстанавливаем схему БД. Нет, не случайная авария. Просто я удалил поле, потому что Кирилл был уверен, что оно не нужно и не затронет всех внешних потребителей нашего API. Эх, подумал я. Опять было нарушено первое правило леса. Сколько раз я уже на этом попадался, и вот опять. Неужели так сложно было проверить? Нет, не сложно. Но зачем? Кирилл на проекте уже 5 лет. Он реально гений, ещё и суперответственный, мне до него далеко. Он уж точно должен был знать, насколько сильно заафектит систему это изменение, он же сам писал этот модуль, черт побери! Ладно, это был последний раз. В следующий раз я точно не проигнорирую правила леса!

Вы спросите меня, а что за правила леса? Ооо, это постулаты, написанные кровью, мой друг. Универсальная серебряная пуля, которую можно использовать как справочник и в обычной жизни, и для выживания в корпоративной среде. Присаживайся поудобнее.

Читать далее

Луковичная архитектура: канон и где от него осознанно отступать

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

Луковичную (onion) архитектуру обычно продают аргументом «легко поменять БД или фреймворк». Только базу в проде меняют раз в пятилетку, а чаще вообще не меняют — ради этого городить слои не выгодно.

Реальная ценность в другом, и она ежедневная: глядя на правку, ты заранее видишь её радиус. Поменял формат ответа одной ручки — изменение осталось в одном handler'е, соседние ручки и cron не задеты. Тронул бизнес-правило в сервисе — и сразу понятно, что эффект расходится на всё, что выше.

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

Читать далее

Java против Go в 2026: бенчмарк через шесть лет показал другую картину

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

Java на бенчмарках обогнала Go при росте нагрузки: повтор эксперимента 2020 года в котором Mark Nelson и Peter Nagy сравнивали микросервисы на Go и Java на одном железе.

На маленьких нагрузках результаты совпадали.

В 2026-м повторили тест на актуальных версиях: Go 1.26, Oracle JDK 26, JDK с AOT-кэшем Leyden, Helidon SE 4.4 на virtual threads.

При лёгкой нагрузке Go и Java идут вровень.

При высокой нагрузке Java с Leyden AOT обгоняет Go почти вдвое.

Go не выиграл ни одного теста 2020 года. Leyden AOT — почти все.

Авторы подчёркивают: дело не в языке, а в том, что рантайм, фреймворк и настройки сети влияют сильнее, чем выбор языка.

Читать далее

Следим за релизами Codex: последние обновления

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

Если вы работаете с Codex, то наверняка замечали  следующее - нажимаешь кнопку “Обновить”, Codex перезапускается, но визуально ничего не меняется.

На самом деле изменения есть - просто чаще всего это не что-то глобальное, а внутреннее: скорость, MCP-инструменты, работа с Git и т.д.

Я посмотрел свежие релизы Codex за последние сутки: 0.142.2, 0.142.1 и несколько 0.143.0-alpha.*. В статье разберём, что уже вышло в свет, а что пока тестируется и возможно выйдет в ближайших обновлениях.

Спойлер: возможно скоро будет новый режим модели Ultra!

Читать далее

Одна DRC-дека, три техпроцесса и двенадцать неверных гипотез

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

Мы были уверены, что наш DRC-движок универсален.

На SKY130 он совпадал с эталонным KLayout до последнего нарушения: тесты зелёные, расхождения нулевые, поведение стабильное от прогона к прогону. Из этого казалось очевидным, что движок применим к любому техпроцессу. Он же просто исполняет правила из деки и ничего не знает про конкретную фабрику.

Мы эту мысль не проверили. Мы в неё поверили. И это разные вещи, как выяснилось.

Читать далее

Loop Engineering: 14 шагов от промптера до архитектора систем

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

Два года работа c AI-агентами для написания кода выглядели одинаково: написать промпт, передать контекст, прочитать дифф, написать следующий промпт. Агент был инструментом, человек держал его за руку от начала до конца. Эта схема устаревает.

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

Материал собран из инженерной документации Anthropic, эссе Эдди Османи (Addy Osmani) о loop engineering и недавних замеров продуктивности.

Читать далее

Довели — снова. Поднимаем корпоративный Forgejo локально. Пошаговый гайд

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

Привет, это снова Марк. В прошлой статье я разбирался, как небольшой компании получить собственный корпоративный мессенджер: рассказал немножко про варианты, выбрал Matrix/Element и развернул его в облаке, спрятав за WireGuard VPN. 

Сегодня решил продолжить строить компактную self-hosted-инфраструктуру и добавить поверх того же контура следующий обязательный сервис — собственный Git.

Читать далее

Большая сила маленьких PR-ов в эру AI

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

Всем привет, меня зовут Михаил Поливаха, я являюсь техническим лидером проекта Axelix.

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

У нас есть собственный GitHub Action, который блокирует PR в том случае, если суммарное количество измененных строк кода превышает 500.

Читать далее

Безопасное хранение паролей: соли, перцы и выбор алгоритма

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

Выбираете алгоритм хеширования паролей — берёте bcrypt, потому что все берут bcrypt, ставите rounds=10, потому что так в туториале, и идёте дальше. Разбираем, почему это может быть ошибкой, чем отличаются Argon2, scrypt и PBKDF2, и как правильно настроить каждый из них.

Читать далее

Ближайшие события

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

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

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

Разберемся какие модели лучше других подходят для кодирования слов. Параллельно с этим разберём принципы, на которые нужно опираться при выборе эмбеддинг-модели, пощупаем русские BERT-модели и внесём ясность про системные требования, контекстное окно и размер батча.

Читать далее

File-based apps в .NET 10

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

Для небольших скриптов на C# долгое время приходилось создавать полноценный проект даже ради нескольких строк кода. В.NET 10 появилась поддержка file‑based apps — теперь приложение можно запускать и публиковать прямо из одного.cs‑файла. Разбираемся, как это работает и где новый подход действительно полезен.

Читать далее

Средовой подход вместо системного: как проектировать ИТ-продукты, которые растят сами себя

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

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

Я отношусь к написанному ниже как к гипотезе, которую надо проверять об практику и об другие умы. Собственно этим я и занимаюсь, и продолжу заниматься.

Для начала вспомним что такое средовой подход и чем он отличается от системного

Читать далее

Как я решил проблему ввода спецсимволов без запоминания кучи клавиатурных сокращений

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

Ввод специальных символов с клавиатуры начинает вызывать боль, как только вы пытаетесь выйти за рамки предустановок в системе. В итоге степень числа проще написать как ^2, а градус заменить словом не потому что так правильно, а потому что иначе приходится вспоминать Alt-коды, переключать раскладки, копировать символы из интернета или держать в голове комбинации клавиш.

По большому счету проблема не в самих символах, а в способе доступа к ним.

Типографские раскладки решают эту задачу через клавиатуру: добавляют новые комбинации и позволяют вводить символы напрямую. Подход рабочий, но не всегда удобный. Горячие клавиши могут конфликтовать с программами или системными сочетаниями. Раскладки зависят от языка ввода. Установка и перенос настроек тоже добавляют лишний слой сложности.

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

Читать далее

Трансформация интерфейса приложений: сначала консоль, потом GUI, потом скажи, что нужно, и ИИ сделает?

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

Всем привет.

Программировать я очень давно начал. Помню, как мне папа, прочитав журнал, вытравил плату и купил микросхемы, и, используя два больших калькулятора для бухгалтеров, разрезав их и склеив, собрал мне ZX Spectrum. У меня отец работал в Толмачёво инженером, который обслуживал большие ЭВМ и тренажёры для лётчиков "Аэрофлота".

В общем, я был, наверное, первый счастливчик в Новосибирске, у кого был персональный компьютер дома. Тогда ещё бизнесмены не успели продавать ZX Spectrum и кассеты к нему с играми, а у меня уже всё было. Я помню, как первые программы я не на кассетный магнитофон записывал, а на большой катушечный, сорри, не помню, как называется, но явно не магнитола и явно не магнитофон.

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

Когда моего отца спросили, мол, как отблагодарить ребёнка, или можно бесплатно, отец сказал: "Ни в коем случае. Его спросите, что он хочет за проделанную работу". И я тогда, помню, запросил 10 рублей! И мне их оплатили! Вот было счастье при зарплате обычного работяги 100- 200 или инженера 200-300 рублей в месяц.

В общем, технологии шли вперёд, и у меня появился дисковод. Это было бомба! Не надо ждать 5 минут, когда с кассеты или с катушек загрузится программа. Программа грузилась за секунды!

Читать далее

Каталог из 83 форматов с плавающей точкой, который сам себя проверяет

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

Если вы ловили расхождение точности между двумя реализациями одной сети, то знаете это чувство: один matmul на двух устройствах даёт разные числа, и непонятно — это баг, bf16 округлил или формат не тот. Две команды меряют один результат разными линейками.

Я сделал одну линейку с точными насечками: машинно-проверяемый каталог из 83 числовых форматов в 13 кластерах. Для каждого — разрядка битов, смещение, кодирование inf/NaN/субнормалей и общий якорь проверки 0x47C0. Из одного источника истины генерируются Markdown, JSON, Python, Rust, C и RTL для кремния.

У каждого формата стоит метка зрелости: 51 Verified, 12 Historical, 11 Experimental, 9 Open. И отдельная ось — граница RTL: где правило e = round((N−1)/φ²) ещё работающее железо (GF16 доведён до кремния), а где уже гипотеза (GF512/GF1024 — экстраполяция без строки Verilog). Внутри — лестница зрелости форматов, связь с IEEE P3109 и реальный баг в умножителе, который нашли только потому, что под форматом есть железо.

Как устроена линейка

HyperLogLog: как найти уникальные значения в терабайте данных, не храня их

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

Представим задачу: хайлоад-сервис гонит поток данных — логи, IP-адреса, ID пользователей, миллиарды записей в сутки. Ваша задача — посчитать количество уникальных посетителей за неделю.

Первым решением может показаться завести HashSet и кидать туда ключи, а в конце посмотреть размер. Решение неплохое, но когда речь заходит о миллиардах записей — память будет слабым местом. Один IP-адрес (4 байта) как ключ в HashSet потянет за собой накладные расходы на ноды, указатели и хеши. На практике один элемент сжирает не меньше 50–100 байт. Поток в миллиард уникальных записей потребует под сотню гигабайт оперативной памяти. Это дорого, а если инстансов десять — то просто нереально.

Но существует алгоритм, который способен решить эту задачу примерно в 1.5 килобайта памяти с погрешностью около 2%? Без хранения самих данных и гигантских кластеров. Достаточно одного прохода по потоку и пары битовых трюков — именно так и работает HyperLogLog, алгоритм родом из математической статистики, который перевернул подход к подсчёту уникальности в Big Data.

HyperLogLog используют в Redis, BigQuery, ClickHouse, Presto. В этой статье мы разберем и реализуем этот алгоритм на C, а также узнаем его предысторию.

Читать далее