Обновить
0
@cdarread⁠-⁠only

Пользователь

Отправить сообщение

Почему мы до сих пор неправильно пишем физические движки и 3D-графику

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

Стоит открыть исходники любого современного игрового движка – неважно, это C++-рендер, сделанный на коленке, или какая-нибудь гигантская экосистема вроде Unity или Unreal Engine – вы первым делом натыкаетесь на одни и те же знакомые сущности. Все вокруг живет в Vector3: координаты, направления движения, точки столкновений. Каждая частица указывает, куда она смотрит, с помощью Quaternion. А если требуется что-то покруче – переносить и одновременно крутить объект, то Matrix4x4. Это уже как стандарт де-факто: кто пробовал крутить объекты руками, тот точно переписывал код с этими структурами. Ещё конечно же отдельно существуют лучи, плоскости, сферы, bounding boxes, а между ними тянутся километры функций вроде dot()cross()normalize()lookAt()inverse()project() и бесконечных преобразований типов.

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

И самое интересное заключается в том, что так было не обязательно.

Читать далее

Галуа Ч.3: Конечные поля вида GF((p^n)^m). Изоморфизм конечных полей

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

В третьей и последней статье цикла о конечных полях мы завершаем путь от базовых понятий абстрактной алгебры к полям вида GF((p^n)^m). Разберёмся, как строить поля вида GF((p^n)^m) и изоморфизм между полями одинакового порядка на примере полей GF((2^2)^2) и GF(2^4). Для наглядности также построим поле GF(3^2). Заодно посмотрим, как автоматизировать вычисления и эксперименты в конечных полях с помощью SageMath.

Читать далее

Галуа Ч.2: Кольца и поля. Конечные поля вида GF(p^n)

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

Во второй статье цикла о конечных полях продолжаем путь от базовых понятий абстрактной алгебры к полям вида GF((p^n)^m). Разберёмся, чем отличаются кольца и поля, познакомимся с конечными полями и на практике построим поле GF(2^4). Заодно посмотрим, как автоматизировать такие вычисления и эксперименты с помощью SageMath.

Читать далее

Галуа Ч.1: Классы вычетов и группы

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

Первая статья из цикла о конечных полях: путь от базовых конструкций абстрактной алгебры до полей вида GF((p^n)^m) и их изоморфизма. Начнём с классов вычетов и групп, разберём фундаментальные идеи, на которых строится теория конечных полей, и параллельно освоим SageMath для автоматизации вычислений и экспериментов.

Читать далее

Месяц пишу язык программирования Nova с Claude Code. Где ломаются автономные агенты

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

Месяц назад начал делать собственный язык программирования Nova с Claude Code. За это время агенты автономно закрыли около трёхсот инженерных планов, написали около 120 тысяч строк Rust (компилятор, рантайм, кодоген), почти две тысячи проходящих тестов и собственную стандартную библиотеку на Nova. Один человек физически такой объём не вытянет — но и автономия даётся не бесплатно.

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

Читать далее

Структуры данных на практике. Глава 10: B-деревья и деревья, эффективно использующие кэш

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

Загадка базы данных

Вся наша база данных находилась в памяти, однако операции поиска по ней занимали 12 тысяч тактов. При миллионе показаний датчика IoT-устройства с 64 КБ кэша реализация красно-чёрного дерева оказалась слишком медленной для запросов в реальном времени.

«Давайте попробуем B-дерево», — предложил я.

«Разве они нужны не только для баз данных на дисках? — спросил лид, — У нас всё находится в памяти. Чем нам будет полезно B-дерево?»

Вопрос был вполне разумным. B-деревья были придуманы для доступа к диску; каждый узел в них — это блок диска. Однако паттерны промахов кэша выглядели подозрительно похожими на паттерны дискового ввода-вывода — всего в 100 раз, а не в 100000 раз быстрее.

В итоге мы реализовали B-дерево. Результаты удивили всех...

Читать далее

Как математика стала такой абстрактной?

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

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

Мне кажется это ироничным: тысячелетиями математика оставалась более-менее естественной наукой. У нас не было философского объяснения тому, почему 2 + 2 должно быть равно 4. Мы просто наблюдали происходящее вокруг нас и пытались вывести правила. Абстракции были важны, но они обязательно должны были обосновываться объективной реальностью. Согласованности аксиом было недостаточно: углы нашего гипотетического треугольника должны были соответствовать углам в реальном мире.

Читать далее

#[inline] в Rust — это не про инлайнинг. И вот почему вы расставляете его не там

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

Вы открываете горячую функцию в профилировщике, видите миллионы вызовов, добавляете #[inline(always)]. Бинарник распухает, время сборки подскакивает, а производительность не меняется. Или ваще падает. Проблема не в атрибуте. Проблема в том, что #[inline] делает совсем не то, что подсказывает интуиция.

Читать далее

sudo исполняется 45. Вашему контейнеру — всё равно

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

На почти каждой Linux-машине в мире живёт один маленький бинарник. Весит несколько мегабайт, несколько десятков тысяч строк кода, поставляется со своим собственным конфигурационным языком, и CVE-шек за ним накопилось столько, что хватит на хорошую таблицу с фильтрами. Большинство из нас запускает его по десятку раз в день, не задумываясь.

Этот бинарник — sudo.

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

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

Читать далее

Хроники Agent Driven Development трансформации .0: Как ускорить тесты проекта в 6 раз: от 10 минут к 101 секунде

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

Почти 800 тестов, 10 минут на прогон, каждый пуш — ожидание на CI. Знакомо? Рассказываю, как довёл время до 101 секунды: снижение таймаутов, параллелизм ScalaTest, shared Testcontainers и защита от регрессий. Scala, SBT, PostgreSQL, GraalVM — конкретные шаги и подводные камни.

Читать далее

Чёрное окошко Linux: погружение в подсистему TTY

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

Начав изучать тему терминалов в Linux, вы можете почувствовать, что по отдельности вроде бы всё понятно, но разница между понятиями и их суть всё равно ускользает. Консоль, терминал, TTY, виртуальная консоль, виртуальный терминал, эмулятор терминала, оболочка — это просто «вот то чёрное окошко, куда вводят команды Linux». На самом деле за этим окошком скрывается целая цепочка разных сущностей — от компонентов ядра до пользовательских программ. Цель данной статьи — объяснить подсистему TTY и избавить вас от этого неприятного ощущения.

Читать далее

Разбираемся в функциональных зависимостях БД

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

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

Пора раз и навсегда разобраться во всем этом. Тем не менее, я постараюсь не упускать детали и, где это уместно, углубиться в тему с головой. Без претензии на академичность, но с претензией на ясность. Начнем.

Читать далее

Прикладная эквилибристика и манулы: балансировка от L1 до L7

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

Привет, Хабр! Я Павел Михайлик, архитектор в центре сетевых решений «Инфосистемы Джет». Сегодня я расскажу о балансировке в сети и почему она важна при наблюдении за манулами. 

«Балансирование нагрузки», «ADC», «GSLB», anycast, ECMP, — много разных терминов и ещё больше разных сценариев реализации, как в постановке задачи, так и в методах и механике реализации. Итак, давайте попробуем для начала наметить основные критерии, по которым можно разделить разные типы балансирования нагрузки.

Подробнее о манулах

Решаем архитектурную проблему nginx с HTTP/3: опыт Angie и магия eBPF

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

Для пользователя может показаться, что переход с HTTP/2 на HTTP/3 — это просто замена TCP на UDP в конфиге. Но для серверного ПО с многопроцессной архитектурой этот шаг превращается в настоящую «головную боль». Классическая схема с accept(), на которой годами строилась работа с TCP‑соединениями, в мире QUIC попросту не существует. Пакеты летят в UDP‑порт, и ядро ОС больше не знает, какому именно рабочему процессу их отдать.

В оригинальном nginx это привело к тому, что поддержка HTTP/3 уже долгое время остается «экспериментальной» и ограниченной: она страдает от проблем с обрывами сессий и деградации сервиса при обновлении конфигурации. Для многих это стало стоп‑фактором для внедрения протокола в реальный продакшен.

В этой статье мы расскажем, как в Angie 1.11 нам удалось устранить эти фундаментальные недостатки. Мы не просто добавили поддержку протокола, а пересмотрели механику взаимодействия с ядром. Путь от простых хешей до создания полноценного аналога accept() для QUIC с помощью BPF‑программ позволил нам заявить: реализация HTTP/3 в Angie закончена, лишена «детских болезней» nginx и полностью готова к эксплуатации в высоконагруженных средах.

Добро пожаловать под капот современного транспорта данных.

Читать далее

Как ARC-кабели меняют дата-центры для ИИ

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

ЦОДы для ИИ уже несколько лет упираются в ограничения межсоединений. Ускорители становятся мощнее, кластеры разрастаются до сотен тысяч чипов, а передача данных между ними все чаще начинает тормозить масштабирование. Медь и оптика все еще работают, но по мере роста ИИ-кластеров становится ясно, что масштабировать такие решения все сложнее и дороже.

На этом фоне активные радиокабели (ARC) выглядят как более практичный вариант. Компании Point2 Technology и AttoTude предлагают передавать данные радиоволнами через пластиковые волноводы, а в отрасли все чаще говорят о copper cliff — моменте, когда медь перестает справляться с терабитными скоростями в плотных ИИ-стойках. Давайте разберемся, какие проблемы с межсоединениями накопились к 2026 году и почему радиочастотные решения на пластиковых волноводах начали привлекать внимание отрасли. 

Читать далее

Паттерны проектирования в Data Engineering, которые необходимо освоить в 2026 году

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

Настоящая устойчивость систем — в архитектуре. В новом переводе от команды Spring АйО — 8 фундаментальных паттернов проектирования, на которых держатся все современные data engineering-стеки. Освоив их, вы перестанете тушить пожары и начнёте проектировать платформы, которые выдерживают продакшен.

Читать далее

Zip-файлы: история, объяснение и реализация

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


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

В статье очень подробно объясняется, как работают Zip-файлы и схема сжатия: LZ77-сжатие, алгоритм Хаффмана, алгоритм Deflate и прочее. Вы узнаете историю развития технологии и посмотрите довольно эффективные примеры реализации, написанные с нуля на С. Исходный код лежит тут: hwzip-1.0.zip.
Читать дальше →

Нецифровая электроника для начинающих

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

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

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

Читать далее

Нейро сети для самых маленьких. Часть нулевая. Обзорная

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

Нейро сети для самых маленьких

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

Это первая статья из небольшого цикла, посвящённого сетям для AI/ML-кластеров и HPC.

В этой серии мы коснёмся принципов работы и обучения моделей, параллелизации, технологий DMA и RDMA, сетевых топологий, InfiniBand и RoCE, а ещё пофилософствуем на тему общих и специальных решений.

Конкретно в этой статье мы разберёмся, что представляет из себя нейросеть, как она работает, как происходит её обучение, а самое главное, почему для неё нужны сотни дорогущих GPU-карточек и какая-то особенная сеть.

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

Ныряем!

Царский путь к пониманию комплексных чисел. Часть I

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

Представьте, что вам сказали: «Этого не существует, просто запомни».

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

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

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

С помощью комплексных чисел работает  Wi-Fi, обрабатывается аудио и видео, описываются законы квантовой механики и даже обычные механические колебания.

В этом цикле из 7 статей мы пройдем полное путешествие от парадоксов Кардано до квантовой физики и современной инженерии — с философией, историей и практикой.

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

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность