Как стать автором
Обновить
8
0

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

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

Фантомный double в прошивках для ядер Cortex-M*

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

В последнее время появилось много микроконтроллеров на ядрах ARM Cortex-M*, которые поддерживают аппаратную реализацию математики плавающей запятой (FPU). В основном FPU работают с одиночной точностью (float) и её вполне достаточно для работы с сигналами, полученными с АЦП. FPU позволяет забыть о проблемах дискретизации и проблемах переполнения целочисленных вычислений. FPU быстр - все математические операции с одиночными float, кроме деления и взятия корня, занимают на Cortex-M4F один такт. Поэтому после перехода на Cortex-M4F мы вздохнули свободно и стали писать математику на float. Как же мы удивились, найдя в скомпилированном коде математические операции над double с программной, очень медленной эмуляцией.

В статье рассказывается, как обнаружить и исправить присутствие double в прошивках, где ядро аппаратно поддерживает тип float, но не поддерживает double.

Работа ведётся в среде IAR Embedded Workbench на примере реального кода на языке Си.

Читать далее
Всего голосов 65: ↑63 и ↓2+82
Комментарии25

Трудности маскирования текстового поля

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

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

Хороший UI/UX помогает пользователю избежать большинства таких проблем. Инструментов контроля огромное количество, сегодня расскажу про один их них — создание маски для поля ввода силами Javascript.

Читать далее
Всего голосов 37: ↑37 и ↓0+37
Комментарии24

6.4 Устойчивость систем автоматического регулирования. Частотный критерий устойчивости Михайлова

Время на прочтение6 мин
Количество просмотров12K

Продолжаем лекции по управлению в технических устройствах (УТС). Данные лекции читаются в МГУТ им. Баумана. Автор лекций к.т.н. Козлов Олег Степанович, кафедра Ядерные Энергетические Установки, факультета машиностроения. За что ему огромное спасибо!

1. Введение в теорию автоматического управления.2. Математическое описание систем автоматического управления 2.1 — 2.32.3 — 2.82.9 — 2.13

3. ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ ЗВЕНЬЕВ И СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ РЕГУЛИРОВАНИЯ. 3.1. Амплитудно-фазовая частотная характеристика: годограф, АФЧХ, ЛАХ, ФЧХ3.2. Типовые звенья систем автоматического управления регулирования. Классификация типовых звеньев. Простейшие типовые звенья3.3. Апериодическое звено 1–го порядка инерционное звено. На примере входной камеры ядерного реактора3.4. Апериодическое звено 2-го порядка3.5. Колебательное звено3.6. Инерционно-дифференцирующее звено3.7. Форсирующее звено.  3.8. Инерционно-интегрирующее звено (интегрирующее звено с замедлением)3.9. Изодромное звено (изодром)3.10 Минимально-фазовые и не минимально-фазовые звенья3.11 Математическая модель кинетики нейтронов в «точечном» реакторе «нулевой» мощности

4. Структурные преобразования систем автоматического регулирования.

5. Передаточные функции и уравнения динамики замкнутых систем автоматического регулирования (САР).

6. Устойчивость систем автоматического регулирования. 6.1 Понятие об устойчивости САР. Теорема Ляпунова. 6.2 Необходимые условия устойчивости линейных и линеаризованных САР. 6.3 Алгебраический критерий устойчивости Гурвица.

Читать далее
Всего голосов 15: ↑14 и ↓1+17
Комментарии6

Сборка v4l-utils. Система сборки meson

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.7K

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

Читать далее
Всего голосов 6: ↑3 и ↓3+2
Комментарии4

Удивительное рядом. Как устроен буфер обмена в Windows и Linux

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров22K
Опенсорсная утилита CopyQ показывает содержимое буфера обмена на всех ОС и сохраняет историю

Буфер обмена — один из основных элементов GUI, но он сложен в реализации. Подводных камней настолько много, что вы больше никогда не сможете произнести слово «копипаст» с презрительным выражением. Есть тысячи приложений и форматов данных. Невозможно обеспечить полную конвертацию всего во всё.

В некоторых случаях данные вообще нигде не сохраняются по нажатию Ctrl+C. И по нажатию Ctrl+V будет возвращён NULL. Shit happens, как говорится…
Читать дальше →
Всего голосов 52: ↑51 и ↓1+69
Комментарии20

Промышленная автоматизация и создание своих производственных линий как перспективная сфера приложения усилий

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров11K
Картинка Jcomp, Freepik

Наблюдая за тем, как самодельщики разрабатывают 100500-й вариант NAS с резервным питанием, мне подумалось, что стоит поднять гораздо более интересную тему, которая позволяет раскрыть свои навыки, реализуя увлекательные проекты, и предоставляет поистине неисчерпаемый источник сложных инженерных вызовов. А ведь мы все любим такое, не так ли? ;-)

Речь в этой статье пойдёт о построении любительских систем автоматизации, ведь если оглянуться вокруг, то множество процессов могут быть легко автоматизированы людьми, имеющими даже минимальное знание программирования и чуть-чуть дружащих с руками. Второе в принципе под вопросом, так как можно всё требующееся смоделировать на компьютере в 3D, в инженерном CAD, после чего отдать на лазерную резку, сварку и т. д. Хотя, если вы это умеете, это весьма невредно для глубинного понимания процессов.
Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии24

«Магическая константа» 0x5f3759df

Время на прочтение9 мин
Количество просмотров124K
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Всего голосов 212: ↑210 и ↓2+208
Комментарии188

Маленькие китайские хитрости, или Чоппер, но не мотоцикл

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

Все мы уже давно в курсе, что на Алиэкспрессе процветает практика подделки чипов — под видом популярных микросхем продавцы выставляют что попало, часто даже не отбраковку, а просто какие-то абсолютно другие чипы, другого назначения, но в нужном корпусе, на котором сошлифовывают старую и наносят новую маркировку. Например, вместо микроконтроллера можно получить какой-нибудь шестифазный контроллер питания, последний раз широко использовавшийся в материнских платах для Pentium IV.

Однако сегодня я обнаружил более интересный кульбит: выпуск вполне себе крупным производителем (достаточно крупным, чтобы продукция его попала к основным дистрибьюторам, от LCSC до российских компаний) микросхемы, которая названием и частью функций мимикрирует под популярный чип Texas Instruments — в достаточной степени, чтобы во многих случаях «прокатило», а также чтобы не слишком опытный разработчик не заметил разницы.

Итак, встречайте: HGSEMI OPA376M, в девичестве — GS8591. К практически одноимённому (суффикса «M» у оригинала не бывает) и очень популярному TI OPA376 не имеющий никакого отношения, кроме цоколёвки и названия.

Читать далее
Всего голосов 72: ↑67 и ↓5+82
Комментарии12

Куда приводят поиски идеальной SCADA

Время на прочтение3 мин
Количество просмотров13K

Два года назад я написал статью “SCADA: в поисках идеала”. Идея была проста — превратить Qt Creator в среду для разработки SCADA. Теперь хочу рассказать, какой путь проделан и что получилось.



Удалось ли достигнуть идеального результата? — Разумеется, нет. На то он и идеал, что недостижим. Зато удалось заметно к нему приблизиться.

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии43

Упрощаем работу с базами данных в Qt с помощью QSqlRelationalTableModel

Время на прочтение5 мин
Количество просмотров15K
Доброго времени суток, Хабровчане! В этой статье я хочу рассказать о своем опыте упрощения взаимодействия с базами данных SQL при разработке десктопного приложения с помощью класса QSqlRelationalTableModel кроссплатформенной библиотеки Qt.

Пролог


С Qt я познакомился еще будучи студентом 1 курса, только начиная программировать на C++, тогда же и серьезно заинтересовался библиотекой и, с тех пор слежу за ее апдейтами. Несколько месяцев назад на работе мне дали ТЗ, в котором требовалось разработать приложение, взаимодействующее с БД SQLite. Структура базы фиксирована и заранее известна мне из ТЗ.

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

Далее я кратко опишу процесс разработки с приведением кусков кода и попытаюсь аргументированно объяснить, почему в данном случае был сделан выбор в пользу QSqlRelationalTableModel.
Все под кат!
Всего голосов 9: ↑7 и ↓2+5
Комментарии8

Создание модуля WebAssembly с помощью Emscripten, AssemblyScript и Rust

Уровень сложностиСредний
Время на прочтение57 мин
Количество просмотров5.9K

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

Emscripten для компиляции кода, написанного на С++

AssemblyScript для компиляции кода, написанного на, собственно, AssemblyScript

wasm-pack для компиляции кода, написанного на Rust

План такой:

Во введении мы обсудим постановку задачи и немножко поговорим о технологии WebAssembly

В программной части мы реализуем функциональность модуля на трёх языках: c++, AssemblyScript и Rust. Поговорим о том, какие при этом возникают сложности и как их можно обойти

Подведём небольшой итог. Станет видно, какая технология хорошая, а какая не очень

В конце планируется два бонуса. Первый бонус - это пример простого web-приложения, использующего один из скомпилированных нами модулей. Второй бонус - демонстрация того, как этот модуль можно использовать в программе на Python.

Читать далее
Всего голосов 36: ↑36 и ↓0+36
Комментарии10

Кодогенератор Waffle++ для C++

Время на прочтение17 мин
Количество просмотров8.9K

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

Я делаю расширяемый кодогенератор для C++, в котором можно реализовать много полезного. Примеры модулей: перевод значений enum в строку и обратно, перевод структуры в JSON и обратно, декларативный веб-сервер, система слотов и сигналов, свой динамический полиморфизм, генератор кода для тестов...

В этом обзоре будет showcase, сравнение с другими кодогенераторами, как работают модули, как сделать свой модуль, и как подключить кодогенератор в свои проекты.

Читать далее
Всего голосов 22: ↑22 и ↓0+22
Комментарии12

Как я написала веб-плеер с искусственным интеллектом

Время на прочтение10 мин
Количество просмотров5.3K


Идея создать собственный веб-плеер с музыкой лоу-фай пришла мне в голову однажды воскресным днём во время изучения глубоких генеративных моделей. Я занялась этим проектом и закончила его за время каникул. Веб-плеер имеет две опции: пользователи могут выбрать трек лоу-фай на основе реальной песни, преобразованной с помощью библиотеки Tone.js, или трек, сгенерированный искусственным интеллектом. В обоих случаях поверх накладываются барабанные ритмы, атмосферные звуки и цитаты, которые пользователь сам выбрал на предыдущем шаге. В этом посте речь пойдёт в основном о том, как использовать нейросети LSTM для генерации midi-треков, а в конце я кратко расскажу о том, как с помощью Tone.js создаются песни.

Читать дальше →
Всего голосов 9: ↑8 и ↓1+10
Комментарии5

Введение в диффузионные модели для генерации изображений – полное руководство

Время на прочтение22 мин
Количество просмотров33K

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

Читать далее
Всего голосов 27: ↑24 и ↓3+28
Комментарии1

Технология ABENICS: революция в области механики?

Время на прочтение5 мин
Количество просмотров36K

Прорыв в инженерии, о котором говорит весь интернет. Почему-то на Хабре нет, так что решил рассказать.

Итак, ABENICS — это Active Ball Joint Mechanism. Проект разработан Университетом Ямагата в Японии, и являет собой специальную сферическую механическую конструкцию для возможных новых сервоприводов с шаровым шарниром. По сути, это новая форма шестеренки, которая стала возможна благодаря развитию технологий и повышению точности производства.

Читать далее
Всего голосов 83: ↑81 и ↓2+104
Комментарии103

Linux на смартфоне: делаем экран погодной станции, используя Termux и Node-RED

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров18K

Всем привет!

Сейчас я покажу, как перенести на смартфон проект погодной станции, изначально сделанный под Raspberry Pi. Для этого мы установим программу Termux — эмулятор терминала Linux —, затем поставим на него среду визуального программирования Node-RED и за 5 минут реализуем готовый проект — погодную станцию, то есть экран, выводящий текущую погоду и прогноз. Использовать будем только Free/Open Source- инструменты.

Читать далее
Всего голосов 33: ↑33 и ↓0+33
Комментарии24

Как программисты дурят бизнес?

Время на прочтение15 мин
Количество просмотров52K

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

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

Предполагаемая аудитория: Бесстыжие программисты и наивные руководители. Одних пристыдим, другим раскроем глаза. И наоборот.

Ну, задай огонька!
Всего голосов 134: ↑65 и ↓69+9
Комментарии124

Выжимаем все соки: PGO Оптимизация ядра Linux

Время на прочтение9 мин
Количество просмотров12K

Сложность вычислительных задач и систем растёт с каждым днём. Для бизнеса ускорение кода даже на пару процентов даёт улучшение производительности, заметное снижение издержек и уменьшение задержки(latency). В первую очередь это касается мобильных и встраиваемых систем, высоконагруженных серверов, научных вычислений и 3D-графики. Так был разработан относительно перспективный и молодой метод оптимизации — Profile-Guided Optimization, далее просто PGO-оптимизация. Данный метод эффективно используют такие известные компании, как Google, Mozilla Foundation, Intel, Oracle, IBM и другие. Практически ни один современный веб-браузер не обходится без PGO-оптимизации.

Не так давно компанией Google был предложен набор патчей, включающий PGO-оптимизацию в ядре Linux. Мною был протестирован этот набор патчей в работе и доработан. Мне хотелось бы рассказать об этом методе оптимизации ядра Linux, о том, с какими трудностями можно столкнуться, и как их решить.

Если вас заинтересовала эта тема, вам интересно развитие технологий и тренды крупных компаний, то добро пожаловать под кат.
Читать дальше →
Всего голосов 49: ↑43 и ↓6+56
Комментарии29

Квантовое предсказание 70-летней давности сбылось: как ученые впервые создали что-то из ничего

Время на прочтение9 мин
Количество просмотров36K

Новые частицы возникают в графеновых трубках

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


Благодаря научному прогрессу, мы уже несколько лет как научились создавать даже саму материю, имитируя ситуацию через секунды после Большого взрыва. Для этого мы сталкиваем вместе два кванта в коллайдерах при настолько высоких энергиях, которые обеспечивают возникновение равных частей материи и антиматерии по формуле E = mc². А недавно человечеству впервые удалось создать реальные частицы материи вообще без столкновений и каких-то частиц-предшественников. С помощью сильных электромагнитных полей и эффекта Швингера впервые что-то возникло вообще из ничего.

Читать дальше →
Всего голосов 55: ↑51 и ↓4+60
Комментарии58

Стандарт C++20: обзор новых возможностей C++. Часть 3 «Концепты»

Время на прочтение11 мин
Количество просмотров42K


25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.

При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным и растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:

  1. Модули и краткая история C++.
  2. Операция «космический корабль».
  3. Концепты.
  4. Ranges.
  5. Корутины.
  6. Другие фичи ядра и стандартной библиотеки. Заключение.

Это третья часть, рассказывающая о концептах и ограничениях в современном C++.
Читать дальше →
Всего голосов 25: ↑23 и ↓2+32
Комментарии14

Информация

В рейтинге
4 845-й
Откуда
Йошкар-Ола, Марий Эл, Россия
Зарегистрирован
Активность