Direct 2D #12. Слои и эффекты
Здравствуйте! Продолжается серия статей по Direct 2D. В них были рассмотрены такие темы, как "Слои" и "Эффект", а также в конце приведён список всех тем по Direct 2D, которые я планирую рассмотреть

Типизированный язык программирования
Здравствуйте! Продолжается серия статей по Direct 2D. В них были рассмотрены такие темы, как "Слои" и "Эффект", а также в конце приведён список всех тем по Direct 2D, которые я планирую рассмотреть
Не так давно возникла задача в Qt QML проекте обработать вставку изображения в поле ввода. Понимаю, что не каждый день приходится писать кроссплатформенные клиенты для настольных и мобильных систем, но если у тебя была похожая задача, то данная статья может быть тебе интересна.

После написания статьи про NormIs-1 я решил углубиться в тему оптимизации модели. Архитектура была неплохой и показала адекватные результаты на метриках интеллекта, но скорость сильно проседала. Проблема была в Depthwise Conv, а именно - множестве обращений к памяти. Между блоком внимания и FFN стоял небольшой блок сверток и тормозил все вычисления. Именно его я и решил ускорить.
Делать целую языковую модель с полноценным вниманием возможности нет. Проблемы нестабильного обучения, взрывающийся лосс или сломавшийся DataLoader - это все не сегодня.
Нет, все будет 'проще' - мелкая CNN + кастомное MLX-ядро для инференса + бенчмарки скорости
Всех приветствую! Я неоднократно встречал разработчиков, которые говорили, что метапрограммирование — это моветон, а шаблоны только усложняют код. Я понимаю, откуда берётся такое мнение потому, что при неаккуратном использовании шаблоны действительно могут сделать код сложным и тяжёлым для чтения.
Но, на мой взгляд, проблема не в самом инструменте, а в том, как именно его применяют.
Шаблоны в C++ - это не только std::vector и универсальные функции. В серьёзном C++ они часто используются как архитектурный механизм, позволяют переносить часть решений из runtime в compile-time, задавать контракты на уровне типов, собирать поведение из политик и писать обобщённый код без лишней runtime-стоимости.

Приветствую!
Это обзорная статья на этот раз совсем простая. Используется уже написанный аллокатор. Я лишь ставлю в известность читателей о существовании в osdev-libstdc вполне стандартных функций aligned_alloc, malloc, calloc, realloc и free. Их реализация примитивна:
В этой статье разбираются способы реализации анимации, используя Direct2D, а также дальнейшие идеи для статей.

Представьте, что вы едете в ночном поезде. Чтобы гарантированно выйти на нужной станции, придется не спать всю ночь и внимательно отслеживать остановки. Свою станцию вы не пропустите, но сойдете с поезда уставшим. Другой способ: узнать из расписания предполагаемое время прибытия поезда, поставить будильник на нужное время с небольшим запасом и лечь спать. Этого вполне достаточно, чтобы не пропустить свою станцию, но, если поезд задержится, пробуждение окажется слишком ранним. Идеальным решением было бы лечь спать, положившись на то, что кто-нибудь или что-нибудь разбудит вас незадолго до реального прибытия поезда на нужную станцию...
Какое отношение этот пример имеет к работе с потоками в программировании? Дело в том, что решить задачу синхронизации конкурентных операций можно также несколькими способами, близкими к ситуации выше. Меня зовут Александр, я разработчик на С++ в YADRO, и в этой статье я разберу несколько вариантов эффективной организации ожидания потоков.

Статья о пет-проекте — попытке создать мини-библиотеку по линейной алгебре с небольшим функционалом для работы с матрицами.

Большинство ошибок с памятью в C++ не выглядят как ошибки. Код компилируется, тесты проходят, приложение работает неделями. А потом внезапно появляется Segmentation fault, повреждённая куча или утечка памяти, которую приходится искать часами.
Разберём пять типичных ловушек, в которые регулярно попадают начинающие разработчики.

Хотели избежать копирования данных, придумали свою служебную разметку, а потом обнаружили: она занимает почти столько же места, сколько сам исходный текст. Мы перестали гадать, посмотрели на реальные данные и применили простые, но эффективные подходы: числа переменной длины, отказ от double в пользу целых типов и умные if-else вместо switch.
Итог: мы сжали разметку в 2,5 раза и при этом даже немного выиграли в скорости. Рассказываем, как знание предметной области помогло нам не усложнять код, а сделать его быстрее и легче.

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

Ещё несколько лет назад рефлексия считалась нормой для.NET‑приложений. Сегодня Microsoft последовательно выносит всё больше работы из runtime в этап компиляции: JSON‑сериализация, логирование, регулярные выражения, конфигурация и даже тестовые фреймворки всё чаще опираются на source generators.
Разбираемся, почему рефлексия начала сдавать позиции, где кодогенерация уже стала стандартом и что это меняет для разработчиков.NET.

В C++ часть ошибок выглядит слишком безобидно, чтобы сразу насторожиться: std::move в return, emplace_back «для скорости», перемещение из const, move‑конструктор без noexcept. Код компилируется, тесты могут проходить, а потом внезапно появляются лишние копирования, просадки производительности и странное поведение объектов.
Разберём пять типичных ловушек move‑семантики на небольших задачах и посмотрим, где именно ожидания разработчика расходятся с тем, что реально делает язык.
Принято считать, что для анализа макроэкономики и прогнозирования ВВП необходимы мощные серверы. Обычно разработчики используют Python и тяжелые библиотеки вроде TensorFlow или PyTorch. Однако бывают случаи когда надо чтобы модель была доступна на обычно ноутбуке или мы хотим применить наработки модели и переложить их на платы ардуино с лимитом памяти 32 кб и ценой в розничном магазине 300 - 400 рублей за штуку?
Решением проблемы становится полный отказ от сторонних фреймворков. Вся математика нейронных слоев написана с нуля на чистом C++20, а для быстрого подбора весов на ПК применяется технология NVIDIA CUDA. Сама модель имитирует реальные циклы оборота капитала. Четыре скрытых слоя нелинейной сети сжимаются до шести проекционных нейронов по методологии Всемирного банка.
Вообще идея применять нейронные сети для предсказания экономических процессов зародилась в конце XX века. Ученые искали замену обычным линейным моделям. Одними из первых нелинейные свойства ИНС для макроэкономических рядов США исследовали N. R. Swanson и H. White [2]. Они доказали, что гибкие связи лучше находят скрытые циклы.C.-M. Kuan и T. Liu [4] выявили, что очистка данных перед подачей в сеть сильно снижает ошибку. В начале 2000-х годов началось активное сравнение нейронных сетей с классическими методами вроде ARIMA. M. Marcellino [5], K. Neusser и M. Wagner [9] доказали превосходство многослойных сетей при анализе ВВП европейских стран на длинных дистанциях, а переключение весов C.-M. Lin и P.-H. Chen [7] помогает предсказывать кризисные периоды. Современный этап связан с обработкой больших массивов информации. В Индии S. Ghosh [6], M. C. Medeiros с соавторами [8] успешно применили нейросети для поиска скрытых зависимостей в индийской экономике.Q. Zhang и Y. Bian [3] в 2024 году провели масштабные тесты по отслеживанию темпов роста китайского ВВП. Они подтвердили преимущество нелинейных функций активации.

Надеюсь, вам понравилась статья про работу с памятью на консолях, где каждый ездил на том велосипеде, который сам же и придумал, попробую рассказать про зоопарк теперь уже стандартных библиотек. Стандартных в отдельной студии или конторе, потому что у соседней будет свой стандартный стандарт. Забавно что любовь прикрутить очередную погремушку к своему велосипеду становится тем сильнее, чем становится крупнее контора, поэтому приходя в игровую студию есть очень немаленький шанс, что стандартный STL у неё нестандартный, обёрнут или вовсе запрещён религией кодстайлом.
EA, Facebook, Google, Adobe, LLVM и рядок компаний поменьше тратят человеко-десятилетия в поисках ответа на главый вопрос жизни, Вселенной и всего такого «почему std:: это медленно, непредсказуемо и жрёт память». По аналогии с прошлой статьей вам не потребуется знать стандарт наизусть, а будет достаточно понимать, что такое указатель, чем вектор отличается от дерева и почему промах в кеше это дорого, а дальше я пройдусь по разным стандартным библиотекам и про каждую немного расскажу, что это, зачем оно появилось и где об него можно больно удариться, потому что про вот этот последний пункт обычно забывают "продаваны" и прочие студийные еванглелисты, когда расказывают какое там всё красивое, легкое и с++двадцатое.

Лямбды в C++ выглядят безобидно, пока не начинают жить дольше переменных, которые захватили. Висячие ссылки, мёртвый this, копии состояния в потоках и ограничения std::function часто проходят компиляцию без шума, зато потом превращаются в undefined behavior.
Разбираем пять задач на захваты и время жизни, где ошибка прячется не в синтаксисе, а в неверном предположении о том, кому и сколько живёт объект.

Двоичный интерфейс приложений, чаще именуемый просто ABI — это концепция, которая кажется знакомой и незнакомой одновременно. В каком смысле знакомой? Об ABI часто говорят в контексте устранения неисправностей, упоминают в статьях. Иногда даже приходится решать проблемы с совместимостью, которые провоцирует этот интерфейс. А в каком смысле незнакомый? Дело в том, что, если кто-то попросит вас описать, что такое ABI — то вы обнаружите, что понимаете, о чём речь, но чётко сформулировать ответ на этот вопрос сложновато. В конце концов, можно ограничиться формулировкой, указанной в Википедии: «набор соглашений для доступа приложения к операционной системе и другим низкоуровневым сервисам, спроектированный для переносимости исполняемого кода между машинами, имеющими совместимые ABI». Возникает ли проблема с такой формулировкой? Нет, в качестве общего описания этого вполне достаточно. Но оно может казаться немного поверхностным.
На самом деле, в информатике такая ситуация встречается нередко. Информатика — это дисциплина, не стремящаяся к абсолютной строгости. У многих концепций нет чёткого определения, зачастую бывает достаточно, чтобы описываемый феномен был общепонятным. Итак, чтобы не увязнуть в определениях, давайте рассмотрим, что именно представляют собой такие двоичные интерфейсы, и какие факторы влияют на их стабильность.
13 июня закончилась встреча комитета по стандартизации C++ (также известного как WG21) в Брно (Чехия), на которой комитет работал над будущим стандартом C++, C++29. В этой статье кратко пересказаны все принятые в него нововведения с примерами их использования и ссылками на оригинальные пропозалы для тех, кто захочет познакомиться с ними детально.

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