Pull to refresh
1
0
Send message

Macroni: рецепт поступательного улучшения языка программирования

Level of difficultyHard
Reading time12 min
Views4.1K


Хотя, Clang и используется в качестве инструмента для рефакторинга и статического анализа, у него есть серьёзный недостаток: в абстрактном синтаксическом дереве не предоставляется информации о происхождении конкретных расширений-макросов на CPP, за счёт которых может надстраиваться конкретный узел AST. Кроме того, Clang не понижает расширения-макросы на уровень LLVM, то есть, до кода в формате промежуточного представления (IR). Из-за этого оказывается запредельно сложно конструировать такие схемы статического анализа, при которых учитывались бы макросы. Сейчас эта тема активно исследуется. Но ситуация налаживается, поскольку прошлым летом был создан инструмент Macroni, упрощающий статический анализ именно такого рода.

В Macroni разработчики могут определять синтаксис новых языковых конструкций на C с применением макросов, а также предоставлять семантику для этих конструкций при помощи MLIR (многоуровневого промежуточного представления). В Macroni используется инструмент VAST, понижающий код C до MLIR. В свою очередь, инструмент PASTA позволяет выяснить, откуда те или иные макросы попали в AST, и на основании этой информации макросы также удаётся понизить до MLIR. После этого разработчики могут определять собственные MLIR-конвертеры для преобразования вывода Macroni в предметно-ориентированные диалекты MLIR, чтобы анализировать предмет с учётом многочисленных нюансов. В этой статье будет на нескольких примерах показано, как Macroni позволяет дополнять C более безопасными языковыми конструкциями и организовать анализ безопасности C.
Читать дальше →
Total votes 15: ↑15 and ↓0+26
Comments1

Метрики оценки качества моделей и анализ ошибок в машинном обучении. Подробное руководство

Level of difficultyMedium
Reading time32 min
Views5.1K

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

В данном туториале будут рассмотрены популярные метрики для задач классификации, регрессии и кластеризации, а также инструмент для анализа ошибки модели, известный как bias-variance decomposition. Помимо этого, для большей части метрик будут представлены ручные расчёты и реализация с нуля на Python, а в конце вы сможете найти дополнительные источники для более глубокого ознакомления.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments5

Делаю игрулю на Playdate на чистом C. Глава 4

Level of difficultyMedium
Reading time13 min
Views3.3K

Я пишу игру на игровую консоль Playdate на чистом C. Игра в жанре "выживальщик" наподобие Vampire Survivors. Так как в чистом C отсутствуют многие современные объектно-ориентированные удобства мне приходится по-всякому изворачиваться чтобы адаптировать свои идеи в код. В этих заметках ты узнаешь из первых уст как создаётся игруля с нуля от идеи до публикации.

Если ты не читал предыдущие главы, то лучше начать с них.

Глава 1 - создание аналога объекта динамического массива для будущих нужд на чистом С;

Глава 2 - программирование внедорожника и объектов пустыни, инициализация и очистка ресурсов игры;

Глава 3 - описание процессинга тика, в частности, обработка пользовательского ввода, а также обновление модели данных.

====================

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

Итак, большинство людей в мире визуалы. Это значит, что им привычнее всего воспринимать информацию глазами. В прошлых главах я создал целый мир, но какой в этом смысл если это невозможно увидеть? Нет, конечно можно в баре рассказывать про то, какой невероятный код я написал, но собеседник не сможет его увидеть так как у него нет Playdate (ты же помнишь, что я живу в Казахстане? У нас на всю страну три человека имеют Playdate), ну и потому что собеседник бухой в щи, пьяный в зюзю, надрался, под мухой, на рогах, зелёный как снег.

В общем, в чему это я... Наша заветная функция GameDraw... Она рисует игру (внезапно). Напомню, у нас есть машинка (внедорожник или "джип"), перекати-поле, кактусы, насыпи песка и на этом всё.

Читать далее
Total votes 12: ↑12 and ↓0+15
Comments2

Управление напряжением PWM сигналом (PWM+RC=DAC)

Level of difficultyEasy
Reading time8 min
Views7.7K

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

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

В этом тексте я написал как мне это удалось.

Читать далее
Total votes 15: ↑13 and ↓2+18
Comments169

Хранение данных на ДНК/РНК: возможности и перспективы

Level of difficultyMedium
Reading time14 min
Views3.2K

Приветствую всех айтишников и технарей. Выпустив очередную часть саги про ЯМР, я словил катарсис и почувствовал за собой моральное право опять пографоманить на отвлеченные темы. И сегодня мы с двух ног ворвемся в тему хранения данных на ДНК/РНК. Тема интересная, и намного ближе к айтишечке, чем все предыдущие опусы, поэтому погнали!

Добро пожаловать под кат
Total votes 11: ↑10 and ↓1+14
Comments21

TransformerFam от Google и другие попытки улучить память LLM

Level of difficultyMedium
Reading time4 min
Views1.4K

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

Читать далее
Total votes 3: ↑3 and ↓0+6
Comments1

Предпочитайте Rust вместо C/C++ для нового кода

Reading time8 min
Views22K

2019-02-07


  • Когда использовать Rust
  • Когда не использовать Rust
  • Когда использовать C/C++
  • Ложные причины использования C/C++
  • Приложение: моя история с C/C++
  • Приложение: хор
Читать дальше →
Total votes 59: ↑23 and ↓36-5
Comments254

Rust в деталях, часть 2

Reading time27 min
Views15K

Часть 2: Отправка и получение сообщений


В этой серии статей мы рассматриваем процесс создания масштабируемого сервера для чата в реальном времени, во всех деталях. Цель статьи — показать пример практического применения языка Rust на фоне изучения концепций системного программирования и системных API, шаг за шагом.

Вторая часть является прямым продолжением первой, поэтому если вы ее пропустили (или забыли контекст), то рекомендую сначала ознакомиться с ней. В этой части мы продолжаем реализацию протокола WebSocket.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments12

Альтернативные технологии производства печатных плат

Level of difficultyEasy
Reading time8 min
Views11K
Картинка WangXiNa, Freepik

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

Читать дальше →
Total votes 42: ↑41 and ↓1+60
Comments53

Как составить функцию инициализации микроконтроллера (Топологическая сортировка графов утилитой Make)

Level of difficultyEasy
Reading time14 min
Views5.2K

В программировании микроконтроллеров приходится определять порядок инициализации прошивки. Порядок тут всегда имеет значение.

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

Чтобы всё это работало надо соблюдать правильный порядок инициализации.

В этом тексте я представил формальный алгоритм определения этого порядка.

По сути это топологическая сортировка ориентированного графа зависимостей программных компонентов.

Читать далее
Total votes 14: ↑13 and ↓1+19
Comments49

Упрощенное объяснение новой сети Колмогорова-Арнольда (KAN) из MIT

Reading time2 min
Views12K

В стремительно развивающейся области искусственного интеллекта новая архитектура обещает произвести революцию в понимании и создании нейронных сетей. Названная сетью Колмогорова-Арнольда (KAN), инновационная структура от MIT готова трансформировать традиционные модели своим уникальным подходом.

Читать далее
Total votes 10: ↑7 and ↓3+6
Comments8

Учим нейронную сеть генерировать текст

Level of difficultyEasy
Reading time13 min
Views4.4K

Всем привет! 

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

Например, мы хотим научить нейронную сеть отличать кошек от собак или может яблоко от апельсина. Тогда мы просто говорим ей, что есть что, и на основе представленных данных, такая нейронная сеть особенным образом находит закономерности и строит самое обычное уравнение, которое в зависимости от подаваемого ей набора данных, пытается классифицировать изображение. Если мы хотим научить сеть предсказывать какие-то значения (погода, курс валют, отток клиентов банка), то мы понимаем, что ей надо предоставить выборку прошлых лет на основе которой она сможет найти закономерности, также сформировать уравнение и спрогнозировать результат. 

С генерацией текста фактически тоже самое. Только здесь нейронная сеть учиться предсказывать всего лишь одно слово на основе представленного ей текста.

Читать далее
Total votes 12: ↑11 and ↓1+12
Comments3

Расшифровка startup файла Arm Cortex-M

Level of difficultyHard
Reading time7 min
Views3.2K

В статье предпринята попытка разобраться в содержимое startup файла микроконтроллера STM32F4, построенного на базе ядра Arm Cortex M4. Для запуска ядра используется ассемблерный код, который и предстоит изучить. Для лучшего понимания материала необходимо иметь представление об архитектуре ядра Cortex M4. Сразу отмечу, что замечания и уточнения приветствуются, т. к. они позволят дополнить представленную информацию.

Читать далее
Total votes 9: ↑6 and ↓3+6
Comments19

Как мы готовим RL для Alignment в больших языковых моделях: опыт команды YandexGPT

Reading time28 min
Views11K

Сегодня через API стала доступна новая модель YandexGPT 3 Lite. Одним из ключевых этапов её обучения, как и в случае с другими недавними моделями, стал этап выравнивания (Alignment), включающий в том числе стадию обучения с подкреплением (RL). Пожалуй, без этого этапа мы бы не смогли добиться такого роста в качестве, который был необходим для запуска новых возможностей и сервисов (например, Нейро). Поэтому эту статью мы полностью посвятим особенностям выравнивания моделей. 

На тему Alignment и RL было написано уже немало статей. Кажется, любой ML-инженер уже, так или иначе, сталкивался или читал о них. Поэтому мы хоть и напомним базовую информацию, но всё же сфокусируемся на тех деталях реализации, которые не на слуху. 

Читать далее
Total votes 43: ↑43 and ↓0+60
Comments10

Контроль популяции: генетика в борьбе с насекомыми-вредителями

Reading time12 min
Views963


Большинство живых организмов на планете в той или иной степени взаимосвязаны и участвуют в формировании пищевой цепи. Удаление какого-либо вида из этой цепи может привести к дисбалансу экосистемы с ее последующем увяданием. При этом существуют организмы, польза от которых весьма сомнительна. Речь, конечно же, о паразитах, многие из которых оказывают негативное влияние на определенные сферы деятельности человека. В попытках избавится от вредителей, мы используем разного рода химические вещества, которые могут нести потенциальный вред не только сельхоз культурам, но и здоровью человека. Ученые из университета Джонса Хопкинса (США) нашли более безопасный метод в борьбе с паразитическими насекомыми, основанный на контроле их популяции. Как именно ученым удалось получить контроль над рождаемостью насекомых, и насколько эффективен их метод? Ответы на эти вопросы мы найдем в докладе ученых.
Читать дальше →
Total votes 9: ↑9 and ↓0+14
Comments2

Туториал по Tokio. 2/2

Level of difficultyMedium
Reading time38 min
Views2.7K



Hello world!


Представляю вашему вниманию вторую часть туториала по Tokio.



Tokio — это асинхронная среда выполнения (runtime) кода Rust. Она предоставляет строительные блоки, необходимые для разработки сетевых приложений любого размера.

Читать дальше →
Total votes 19: ↑19 and ↓0+26
Comments0

Какие ошибки есть в коде LLVM?

Level of difficultyMedium
Reading time10 min
Views5K

LLVM — open-source проект с огромной кодовой базой. Лучший из лучших, если говорить о качестве кода, учитывая его размеры и открытость. Ведь кому, как не разработчикам инструментов для компиляторов, лучше знать о возможностях языка и правильном их использовании. Их код всегда на высоте, а найти ошибки в нём всегда вызов для нашего анализатора, который мы принимаем.

Читать далее
Total votes 13: ↑12 and ↓1+18
Comments14

Как в ИТМО разрабатывают подвижный экзоскелет из титана для серийного производства

Reading time8 min
Views5.1K

В одной из лабораторий факультета систем управления и робототехники ИТМО разрабатывают экзоскелет из титана, который можно будет производить серийно. Пока проект на стадии 3D-печатного макета, но уже сейчас он выделяется на фоне аналогичных разработок своей подвижностью ― почти не сковывает движения. А будущий прототип из титана не потеряет в подвижности, зато ― по прочностному расчету ― поможет работать с весом до 80 кг. В этой статье рассказываем, откуда появился и как развивается проект.

Читать далее
Total votes 17: ↑14 and ↓3+12
Comments4

Реализация глобальных индексов в распределённой системе

Level of difficultyMedium
Reading time17 min
Views4.4K

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

Читать далее
Total votes 23: ↑23 and ↓0+27
Comments3

Information

Rating
Does not participate
Registered
Activity