Обновить
1024K+

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

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

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

Проектирование системы отложенных уведомлений со склейкой: от требований до продакшена

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

Всем привет! Меня зовут Евгений Федосеев, я инженер-программист в компании iSpring.

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

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

Читать далее

Нестандартные фичи Rust, которые вы полюбите

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

Привет, Хабр! В Rust есть тип, у которого нет ни одного возможного значения. Звучит необычно. Но я однажды столкнулся с этим самым никогда‑типом и понял — без него жить в Rust уже не хочется! Что это такое и зачем нужно — разберём подробно. По ходу дела упомянем и связанные фичи: Infallible, новоявленные макросы вроде matches!, разные фишки для оптимизации кода и FFI, про которые часто не догадываешься.

Читать далее

«Sandtrix»: как фильм вдохновил на переосмысление легенды

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

Думаю, что в каждом из нас живёт воспоминание о первой видеоигре, для кого-то это были «Герои 3», для кого-то — гонки на приставке из 90-х, а для миллионов людей по всему миру первой любовью стали падающие кирпичики, которые нужно было складывать в ровные ряды. Тетрис не требовал перевода, не нуждался в инструкции и не спрашивал, сколько тебе лет — он просто затягивал.

Недавно я посмотрел фильм «Тетрис» (2023) и поймал себя на мысли, что история создания — не менее увлекательна, чем сама игра. А ещё она вдохновила меня на идею, взять классическую механику и добавить в неё щепотку… песка.

Читать далее

Книга «Game++. Устройство и оптимизация игрового движка»

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

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

С радостью и чувством выполненного долга издательство «БХВ» представляет вам одну из флагманских новинок наступившего года. Мы получили из типографии книгу «Game++. Устройство и оптимизация игрового движка».

Как известно, высококлассные AAA-игры — это та территория, на которой сходятся проверенные и экспериментальные алгоритмы, высокая производительность, графика на уровне произведений искусства и проектирование распределённых систем. Главный язык программирования для аса в разработке игр — это C++.

Поскольку сложно объять необъятное, да и участие в разработке The Sims и Age of Empires смотрелось бы в резюме как опыт участия в гонках «Формулы-1», автор, самоотверженно поработав, создал фундаментальную книгу о наилучших практиках высокопроизводительного программирования как в элитном продакшне, так и на очень ограниченных ресурсах. Для автора игры — это полигон, на котором он набрал свой уникальный профессиональный опыт, а C++ — это инструмент, при помощи которого решается любая задача. Отдельно отметим, что в книге уделено внимание не только различным структурам данных и их реализациям, но и стандартной библиотеке шаблонов (STL); этот материал серьёзно повысит профессиональный уровень любого C++-разработчика.  

Далее - от автора, Сергея Кушниренко @dalerank.

Читать далее

Андрей Карпаты только что создал полноценный GPT на 240 строках Python

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

Никакого PyTorch. Никакого TensorFlow. Только чистый Python и базовая математика.

За время работы над докторской я перечитал множество реализаций трансформеров. Плотные кодовые базы. Тысячи файлов. Зависимости, нагроможденные на зависимости. Открываешь репозиторий, запускаешь pip install -r requirements.txt и смотришь, как скачиваются 400 пакетов, прежде чем ты вообще увидишь, как твоя модель тренируется (а потом ошибки, проблемы с версиями... и так далее).

А потом, 11 февраля 2026 года, Андрей Карпаты выложил один-единственный файл на Python, который обучает и запускает GPT с нуля. 240 строк. Ноль зависимостей.

Читать далее

Prompt injection для смелых духом: от zero-click атаки на 1.4B устройств до философского джейлбрейка

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

SQL-инъекцию мы лечили 20 лет и вылечили. Prompt injection — фундаментально нерешаема. Это не я придумал. OWASP ставит её на первое место второй год подряд. Найдена в 73% продакшн AI-систем при аудитах.

Вы не за статистикой сюда пришли. Вы пришли за мясом. Ниже — 10 кейсов, которые не попали в типичный пересказ про Chevrolet за доллар. Тут пострашнее.

Что происходит?

Охота за красным fps

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

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

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

Это очень отличает игры от большинства других типов программного обеспечения, где небольшая задержка в несколько миллисекунд не так незаметна или вообще не критична для пользовательского опыта. Вот вы открыли эту статью и ваш браузер грузил эту страницу на секунду дольше чем мог бы, потому что я как обычно вставил большую КДПВ, но вы как пользователь этого, скорее всего, даже не заметили. Или редактор Хабра, в котором я сейчас пишу эту статью и который сохраняет документ на секунду медленнее чем мог бы, это абсолютно не влияет на работу и вы об этом вообще никогда не задумывались.

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

Оптимизируй это...

Python mmap: Улучшенный I/O файлов с помощью отображения файлов в память

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

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

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

Читать далее

Автоматическая модернизация кода на Go при помощи go fix

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

В релизе 1.26 языка Go, выпущенном в этом месяце, есть полностью переписанная подкоманда go fix. Go fix использует набор алгоритмов для обнаружения возможностей улучшения кода; часто для этого применяются более новые фичи языка или библиотеки. В этом посте мы сначала покажем, как использовать go fix для модернизации кодовой базы на Go. Во второй части статьи мы расскажем о лежащей в основе этой подкоманды инфраструктуре и её эволюции. В третьей части мы познакомим вас с тематикой инструментов анализа с «самообслуживанием», которые помогают мейнтейнерам модулей и организациям кодироовать собственные правила и рекомендации.

Читать далее

Линтеры вне кода: как HTML, Markdown и YAML становятся предсказуемыми

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

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

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

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

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

Читать далее

Секретное оружие физиков: почему спинтроника убьет современную электронику

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

Спинтроника использует спин электрона вместо заряда, снижает энергопотребление на 90%, а память MRAM уже вошла в коммерческий оборот.

Сегодня дата-центры пожирают более 4% всей электроэнергии США. К 2030 году эта цифра может утроиться. И пока технологические гиганты выделяют колоссальные суммы на строительство атомных электростанций исключительно для своих ИИ-серверов, технология, существующая уже десятилетия, может превратить эти инвестиции в пыль.

Имя ей - спинтроника. И она вот-вот окажется у вас в кармане.

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

Читать далее

Руководство по ArchUnit — как модульно тестировать архитектуру

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

Соблюдение определённой структуры пакетов или архитектуры крайне важно. Особенно в Java, где для корректной работы некоторые элементы должны быть public или действительно доступны за пределами своего пакета.

В новом переводе от команды Spring АйО рассмотрим библиотеку с открытым исходным кодом ArchUnit, которая помогает в тех случаях, когда одного компилятора недостаточно.

Читать далее

6 инструментов для параллельного Claude Code: тестирую всё, чтобы вам не пришлось

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

Conductor, Crystal, Auto-Claude, Claude Squad, CCManager и Cursor 2.0 — честное сравнение с плюсами, минусами и рекомендациями по сценариям.

Читать далее

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

Почему я стал ИТ-волонтером & Датасет новостей о противоречиях современного общества

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

Примерно 6 лет назад мой мир ограничивался работой, личной жизнью и компьютерными играми. Всё шло своим чередом, но в моей голове всё-таки вертелись 2 вопроса: обывательский и профессиональный. Почему цены растут быстрее зарплат? И почему наука в нашей стране «стагнирует», хотя в недавнем прошлом было огромное количество научно-технических достижений? Попытка разобраться через популярные источники привела к когнитивному диссонансу...

Читать далее

12 бит против 8 бит в камере для проведения металлографических исследований при помощи оптического микроскопа

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

В лаборатории к инвертированному оптическому микроскопу Zeiss Axio Observer 3 подключена промышленная камера The Imaging Source DFK 33UX265 для выполнения металлографических задач: анализ зерна, неметаллических включений, поиска дефектов структуры. Мне стало интересно, как она устроена и что есть у нее "под капотом". Когда мы проводим анализ, то не задумываемся о постобработки, а под "капотом" любой камеры есть много интересных режимов. Я ухватился за 12-битный монохромный Bayer-формат (часто обозначаемый как 12-bit Bayer Packed) — это формат RAW-данных, при котором с сенсора с фильтром Байера считывается 12 бит информации на пиксель без цветовой интерполяции. Это обеспечивает более высокий динамический диапазон (4096 уровней яркости) по сравнению с 8-битным форматом (256 уровней), сохраняя «сырые» данные.

Большинство программ, связанных с металловедением принимают картинку в 8 бит. И я хотел бы разобраться в вопросе, а так ли нужен при оценке и автоматизации режим 12 бит.

Читать далее

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 13. Общий сбор

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

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

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

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

В следующий раз мы продолжим возвращением к тайловым мирам. Мне вменяли в вину, что в начале цикла я обещал не совсем то, что сделал по итогу, так что я собрал чистовую версию вот такой песочницы спецом под Хабр:

<Картинка не влезла в превью.>

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

Читать далее

Шесть мыслей о генерации кода на C

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

Я занимаюсь разработкой компиляторов, то есть, пишу программы, преобразующие программы в программы. Иногда требуется нацелиться на более высокоуровневый язык, чем, скажем, простой ассемблер, и зачастую именно в таком качестве удобно взять язык C. Генерировать C не так страшно как писать от руки — в частности, потому, что генератор умеет не попадать в ловушки, связанные с неопределённым поведением. А когда пишешь на C вручную, именно неопределённого поведения следует особенно остерегаться. Здесь я опишу некоторые паттерны, которые обнаружил сам, и которые помогают мне результативно работать.

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

Читать далее

Yttri vs Альтернативы — без религиозных войн

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

Yttri часто сравнивают с Notion, Obsidian, ChatGPT и облачными сервисами транскрипции - и это логично. В этой статье я разбираю, где эти инструменты реально выигрывают, а где упираются в ограничения: интернет, приватность, стоимость, разрозненность данных и «проект по настройке плагинов».

Сравнение без холиваров: облачные workspace (Notion/Coda/Confluence), локальные конструкторы (Obsidian/Logseq/Joplin), standalone AI-чаты (ChatGPT/Claude/Gemini) и транскрипция как сервис (Otter/Whisper API/Trint). Плюс - почему Yttri решает другой класс задач: единый локальный контур (заметки + почта + календарь + задачи + финансы + встречи), офлайн-режим и AI внутри пространства (RAG + tool calling + локальные модели).

Если вы выбираете «что взять под конкретный сценарий» — эта статья сэкономит время.

Читать далее

ИИ не уничтожит вашу работу. Ее уничтожит стагнация — и вот почему

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

Почему Марк Андриссен верит, что мы стоим перед лицом экономической «Мексиканской дуэли», и как стать тем, кто выживет в этой перестрелке.

Этот нарратив повсюду: «Роботы идут. Твоей работе конец. Алгоритм заменит тебя».

Это главная тревога 2020-х. Но Марк Андриссен, человек, написавший код, породивший современный интернет (Netscape), и венчурный капиталист, стоящий за почти каждым технологическим гигантом последнего десятилетия (a16z), считает, что мы все поняли наоборот.

В недавней публикации Андриссен сделал заявление, идущее вразрез с общим мнением:

Читать далее

Как устроен Codex

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

Подробный разбор того, как команда OpenAI Codex создаёт своего кодового агента, как его используют другие команды, как он влияет на инженерные практики создателей ChatGPT и что это может значить для будущего разработки ПО.

Чтобы в этом разобраться, я поговорил с тремя сотрудниками OpenAI:

Тибо Соттио (Thibault Sottiaux) — руководитель Codex.

Шао-Цянь Ма (Shao-Qian (SQ) Mah) — исследователь в команде Codex, обучающий модели, на которых тот работает.

Эмма Тан (Emma Tang) — руководитель data-инфраструктуры; она не входит в команду Codex, но её команда активно им пользуется.

В этом разборе:

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

Технологические и архитектурные решения. Почему Rust и open source? Подробно о том, как работает агентный цикл.

Как Codex создаёт сам себя. По оценкам команды, более 90% кода приложения написано самим агентом. А ещё: интересные инженерные практики — как проводят код-ревью, самотестирование Codex и онбординг новых инженеров.

Исследования. Обучение следующей модели с помощью текущей и параллели с разработкой ПО. Запуск eval'ов, A/B-тестирование и внутренний догфудинг (использование сотрудниками собственных наработок в повседневной работе — прим перев.).

Использование Codex в OpenAI. Количество PR стало таким, что традиционный процесс ревью начинает трещать по швам. Мысли команды про то, что с этим делать.

Как меняется разработка ПО в OpenAI. «Правило 30/70», возвращение некоторых инженеров к tab completion и значение «инженерного вкуса».

Читать далее