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

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

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

Тип топологии – шина

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

Кажется, что топология «звезда» правит в современном мире. Из-за тотальной популярности технологии Ethernet она окружает нас везде: в квартире, в офисе, в доме все выстроено как центральная точка-коммутатор и множество ответвлений на абонентские устройства.

Но. Смотрите, что произойдет, как только вы выйдете из квартиры.

Вы прикладываете к домофону ключ-«таблетку» — и в этот момент, возможно, пользуетесь шиной 1-Wire, которая по своей топологии буквально шина. 

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

Вечером вы идете на концерт — и вся светотехника над сценой, сотни приборов, управляется по DMX512, который бегает поверх шинного интерфейса RS-485. 

Даже показания квартирного теплосчетчика снимаются по M-Bus — специализированной шине для счетчиков.

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

Как же так вышло, в наш век современной и быстрой связи?

Читать далее

Компилятор, который галлюцинирует

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

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

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

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

Читать далее

Полезайте в песочницу, мистер Claude: изолируем агента

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

У меня в ~/.config/secretkeys/ лежит очень важный OAuth-токен. У вас на машине, скорее всего, тоже есть аналогичные штуки: ключи от облака, GitHub PAT в ~/.config/gh/, SSH-ключи в ~/.ssh/. И когда ИИ-агент запущен от имени моего пользователя, он видит все это по тем же путям, что и я. Не гипотетически может увидеть, а буквально читает и может распорядиться властью, данной ему, не самым лучшим образом, о чем я рассказывал в предыдущей статье. Поэтому я долго не пользовался агентами всерьез.

Больше всего меня пугали не риски промпт-инъекции или намеренной атаки. Давила постоянная тревожность: запущу агент не в той директории — он перепутает токены и сходит туда, куда не надо, либо снесет диск одной командой. Я делал отдельные виртуалки под каждый проект и они работали, но ели время и ресурсы. Хотелось иметь инструмент, которому можно доверять и который не потребует ставить дома серверную стойку под вычислительные ресурсы для виртуальных машин.

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Для пользователя может показаться, что переход с 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 мин
Охват и читатели125K


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

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

Информация

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