Нейронные сети на Эльбрусе

Мои эксперименты с нейронными сетями на Эльбрусе
В данной статье хочу поделиться своими наработками по теме нейронных сетей, запускаемых на Эльбрусе

Типизированный язык программирования

Мои эксперименты с нейронными сетями на Эльбрусе
В данной статье хочу поделиться своими наработками по теме нейронных сетей, запускаемых на Эльбрусе

Декодер изображений PNG из стандартной библиотеки языка программирования Wuffs работает в 1.22–2.75 раза быстрее, чем libpng (широко используемая реализация PNG декодера на C с открытым исходным кодом), C-библиотеки libspng, lodepng и stb_image, а также самые популярные библиотеки для работы с PNG на Go и Rust.
Статья рассказывает о том, как именно достигается такая производительность.

KPHP - компилятор для PHP. Он конвертирует PHP код в код на C++, компилируя который, ускоряет производительность в десятки раз. Это open-source проект, созданный ВКонтакте. Благодаря ему собирается огромный монолит ВКонтакте на 9 миллионов строк PHP кода в обычный бинарник, запуская который вы локально поднимаете полноценный ВКонтакте.
Наша задача - добавить в KPHP функции из PHP для работы с многобайтовыми строками. Добавляем фукнции мы в рантайм т.е. в С++ код, к которому имеет доступ код, транслированный из PHP.
Данная статья посвящена созданию и дальнейшим улучшениям джойстика (Joystick) на Arduino для управления ПК (имитации мыши).
В этой статье я хочу представить мой алгоритм оптимизации суммирования ряда чисел в массиве (на примере контейнера map).
Итак, дано задание
Есть некая электронная книга, которую одновременно читает неограниченное количество читателей. Нужно сделать так, чтобы любой читатель в любой момент мог проверить, сколько еще читателей читают ту же страницу, что и он. Предложена наивное решение хранить в map<int,int> в качестве ключа номера страниц, в качестве значения- количество прочитавших их пользователей. Конечно, при таком подходе программа медленно работает с большими тестами потому, что количество итераций по контейнеру map равняется числу прочитанных пользователем страниц. То есть, если пользователь прочел 1000 страниц из 1000 возможных, то в цикле нужно будет сделать 1000 итераций, и это сильно замедляет программу.
Чтобы уменьшить время работы программы, нужно упростить алгоритм подсчета пользователей. В этом алгоритме я отдельно считаю, сколько пользователей прочли столько же полных сотен страниц, как и искомый читатель, и затем уже постранично суммирую всех, кто прочел столько же страниц из той сотни, на которой сейчас находится читатель. Такой алгоритм позволяет вместо 999 итераций (если пользователь читает 999-ю страницу) сделать всего 108 (9 итераций сотням и 99 по единичным страницам).
Это вкратце, теперь перейдем к подробному описанию и для начала приведу код.

Я давний поклонник сити‑билдеров компании Impressions Games © и Саймона Бредбури, если кто не знает — его гений дал жизнь таким играм как Caesar 1/2/3, Space Colony и всей серии Stronghold, который по сей день трудится в студии Firefly Studios. Цезарь стал хитовым проектом и был продан более чем 400к копий на дисках за два года с 1998 по 2000. Но лучшей игрой серии считается Pharaoh + Cleopatra.
На Хабре есть две статьи, автор которых пишет виртуальную машину для исполнения простого байткода, а потом применяет различные оптимизации для ускорения этой виртуальной машины. Кроме того, есть и компилятор простого С‑подобного языка в этот самый байткод. Ознакмившись со статьями и этим компилятором, я подумал, что будет интересно изучить, как написать виртуальную машину этого языка, которая сможет делать JIT‑компиляцию байткода с помощью библиотеки libjit. Опыт этого я и описываю в настоящей статье. В интернете есть статьи, описывающие испльзование этой библитеки, но все, что я видел, описывают генерацию машинного кода с помощью libоit для конкретных программ, а не произвольного байткода: есть официальный tutorial, серия статей и ещё серия сравнений на Хабре.
Весь мой код приведён в моём репозитории.

Привет, Хабр!
В данной статье разобран алгоритм монотонной кубической интерполяции, предложенный Фритчем и Карлосоном в работе [1].
На рисунке красным обозначен результат обычной кубической интерполяции Эрмита, а синим - монотонной, кругами - опорные точки траектории.
Примеры кода написаны на C++, исходники всей библиотеки лежат здесь. Также написана копия библиотеки на Java, исходники лежат здесь.
Бьёрн Стрaуструп
Оригинал: Type‑and‑resource safety in modern C++
Предлагаю вашему вниманию перевод работы Бьерна Стрaуструпа про безопасность типов и ресурсов в современном С++. На данную работу Бьерн ссылается в т.ч. в своем ответе (A call to action: Think seriously about «safety»; then do something sensible about it) на нашумевшие рекомендации АНБ.
Перевод выполнен максимально близко к оригиналу, местами в ущерб читабельности. Большая просьба — неточности, а также улучшения по переводу в комментах оставлять.

SObjectizer — это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP), что упрощает разработку сложных многопоточных приложений. Если читатель в первый раз слышит о SObjectizer-е, то составить впечатление о нем можно ознакомившись вот с этой статьей.
Недавно состоялся релиз очередной мажорной версии, 5.8.0. Это хороший повод еще раз напомнить о проекте и сказать несколько слов о наиболее важном в очередном релизе, в том числе и о (частичном) сломе совместимости с предыдущей веткой 5.7.
Кому интересно, милости прошу под кат.

Для создания пользовательского интерфейса приложений придумано множество инструментов. Фреймворк Kirigami – как раз один из таких. Хотя он не отличается какой-то особой оригинальностью, Kirigami призван сделать создание приложений более простым и быстрым. С помощью этого инструмента можно создавать адаптивные и кроссплатформенные программы.

Рано или поздно у каждого программиста появляется желание вывести форматированный текст на экран. Немудрено, у пляшущих на экране буковок есть свой неповторимый шарм, а факт форматированности добавляет им еще и загадочности — мы можем даже не догадываться, что в точности будет напечатано.
Но как сделать это оптимально и кроссплатформенно? Читайте в нашей статье!

Порой хочется поностальгировать и поиграть в любимую старую игру, но некоторые вещи в таких играх могут показаться устаревшими. Для того чтобы вдохнуть новую жизнь в старый проект, некоторые энтузиасты ставят себе задачу воссоздать и улучшить его исходный код. Мы решили проверить с помощью статического анализатора PVS-Studio, насколько хорошо справляются с этой задачей разработчики VCMI.

Золотые времена подошли к концу, когда разработчикам можно было ничего не делать, а программное обеспечение работала с каждым годом все быстрее.
На дворе 2021 год, я занимаюсь ремонтом электроники уже на протяжении десяти лет. Свободное от работы время посвящаю изучению 3D-моделирования и печати. Для этих целей в 2018 году были куплены два самодельных FDM-принтера.
В один из дней приходит знакомый, держа в руках плату с большим количеством радиаторов. Предлагает посмотреть краем глаза, почему она не работает. В процессе небольшой дискуссии, соглашаюсь с одной оговоркой, что если за два выходных дня у меня получится погрузиться в проблему, изучить вопрос и выяснить, что это за плата, то я берусь.
Уже вечером этого дня я изучаю плату и узнаю такие слова, как "Asic", майнер, майнинг. Понимаю, что имею на руках плату одного такого устройства, а в данном случае — AntMiner S9.

Волновой алгоритм — алгоритм поиска пути, алгоритм поиска кратчайшего пути. Принадлежит к алгоритмам, основанным на методах поиска в ширину.

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

Меня зовут Савва Лебедев, я наставник и ревьюер курса «Разработчик C++», а до этого сам прошёл путь от обычного до старшего студента. На курсе есть задание на пир-ревью, и эта практика здорово прокачивает и хард-, и софтскилы. Именно поэтому хочу рассказать о пир-ревью и с позиции учащегося, и с позиции человека, который отвечает за качество обучения и профессиональное развитие студентов.
Спойлер: в конце статьи вы найдете код, на который можно дать пир-ревью для тренировки.


Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.
Под катом мы погрузимся в мир неопределённого поведения в C++ и рассмотрим некоторые примеры ситуаций, в которых оно может возникать.
P.S.: Часть приведённых в статье примеров вдохновлены материалами, которые можно посмотреть в разделе «Полезные ссылки».