Как стать автором
Обновить
27
Cherniaev Andrei @DungeonLordsread⁠-⁠only

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

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

QtWebApp — пошаговый разжёванный пример с подробными комментариями

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


В процессе разработки приложения на Qt, может понадобиться добавить в данное приложение веб-интерфейс, что особенно может быть актуально при разработке встраиваемых систем с использованием Qt. Для решения данной задачи можно либо написать собственное решение, либо воспользоваться готовыми решениями. Например, библиотекой QtWebApp, которая предоставляет необходимый функционал для создания web-интерфейса.

К достоинствам данной библиотеки можно отнести:
  1. формирование страниц с динамическим содержанием по шаблонам;
  2. формирование полностью динамических страниц;
  3. работу с Cookie, что позволит добавить авторизацию на приложении;
  4. работу со статическими файлами, например, style.css или изображения;
  5. реализацию загрузки файлов.

Предлагаю подробно рассмотреть один из вариантов запуска небольшого приложения на Qt, которое будет иметь несколько web-страниц, работающих с применением библиотеки QtWebApp.

На момент написания статьи изначально использовалась библиотека QtWebApp 1.6.3 и Qt 5.6. Проект успешно был запущен с комплектами сборки MSVC2013 и MinGW. В процессе отладки был замечен баг в классе Template библиотеки QtWebApp. После исправления бага и связи с разработчиком версия библиотеки была повышена до 1.6.4. Исходя из этого, можно отметить также плюс библиотеки, что разработчик ответил в течение суток на информацию о баге, и в тот же день версия библиотеки была повышена. Окончательный вариант примера приложения был подготовлен на версии 1.6.4.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии7

Каламбуры типизации функций в C

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

У C репутация негибкого языка. Но вы знаете, что вы можете изменить порядок аргументов функции в C, если он вам не нравится?


#include <math.h>
#include <stdio.h>

double  DoubleToTheInt(double base, int power) {
    return pow(base, power);
}

int main() {
    // приводим к указателю на функуцию с обратным порядком аргументов
    double (*IntPowerOfDouble)(int, double) =
        (double (*)(int, double))&DoubleToTheInt;

    printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
    printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}

Этот код на самом деле никогда не определяет функцию IntPowerOfDouble — потому что функции IntPowerOfDouble не существует. Это переменная, указывающая на DoubleToTheInt, но с типом, который говорит, что ему хочется, чтобы аргумент типа int шел перед аргументом типа double.


Вы могли бы ожидать, что IntPowerOfDouble примет аргументы в том же порядке, что и DoubleToTheInt, но приведет аргументы к другим типам, или что-то типа того. Но это не то, что происходит.


Попробуйте — вы увидите одинаковый результат в обоих строчках.


emiller@gibbon ~> clang something.c 
emiller@gibbon ~> ./a.out 
(0.99)^100: 0.366032 
(0.99)^100: 0.366032 
Читать дальше →
Всего голосов 78: ↑74 и ↓4+70
Комментарии38

8 мифов о микропроцессорах RISC-V — ответ критикам

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

Для начала хочу пояснить, почему я решил перевести этот текст Эрика Энгейма. На волне изменений в мире актуальным становится вопрос открытости программного и аппаратного обеспечения. И если с ПО ситуация относительно понятная — open source цветет, то в аппаратном обеспечении по-прежнему доминируют закрытые архитектуры CPU — x86, ARM, PowerPC и другие. Исходя из этого особенно интересно следить за одной из немногих открытых (и главное — живых) архитектур RISC-V.

В этой статье автор рассказывает, почему критика архитектуры RISC-V не очень оправдана. Он развинчивает 8 мифов вокруг нее и приходит к выводу в духе «хейтеры просто не умеют ее готовить». Если интересно, перевод классного текста под катом.

Похоливарить на тему RISC-V
Всего голосов 73: ↑70 и ↓3+87
Комментарии47

С++ без классов?

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

(на картинке изображён С++ среди других функциональных языков)

Классы - это скорее всего первое, что добавил Страуструп в далёких 1980х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов, то косвенным подтверждением этого факта для нас будет this, который по прежнему в С++ является указателем, а значит, скорее всего, он был добавлен до "изобретения" ссылок!

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

В конце(СПОЙЛЕР) мы попытаемся превратить С++ в функциональный язык за несколько простых действий.

Для начала рассмотрим базовое применение классов:

Начать погружение
Всего голосов 12: ↑11 и ↓1+14
Комментарии47

RTOS или не RTOS вот в чем вопрос

Время на прочтение10 мин
Количество просмотров30K
image На написание данной статьи меня побудила длинная ветка комментариев (дискуссией это я назвать, к сожалению, не могу) к моей недавней статье “Многообразный мир embedded systems и место Embox в нем”. Меня в нескольких местах упрекнули в том, что я путаю RTOS и Embedded OS, что я назвал LynxOS, QNX и VxWorks не RTOS, хотя на мой взгляд, я такого, конечно, не делал. Автору данных комментариев я несколько раз предложил написать статью, в которой бы он изложил свое видение понятия “операционная система реального времени”, но он по каким-то причинам отказался. Ну что же, я изложу свое видение данного термина, и давайте обсудим, что же может называться RTOS, а что не может. В конце концов, этот вопрос часто задают применительно к Embox.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии71

Дистанционная работа из-за границы, Проблемы с налогами

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

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

Статья для всех кто прожил или планирует прожить за пределами РФ более 183 дней в течение календарного года.

Читать далее
Всего голосов 24: ↑17 и ↓7+12
Комментарии66

Самодельный сканирующий лазерный дальномер

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

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

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

[КЕЙС] SLA 3D-печать на заводе судовой электроники

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


Мы поставили 3D принтер iSLA-450 Pro на «Завод имени А.А.Кулакова», который специализируется на выпуске слаботочного оборудования и систем автоматизации, управления и защиты информации для кораблей и судов разных классов.

Продукция завода обеспечивает безопасное и эффективное судовождение всех типов судов по всем морям планеты.
Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии4

В чем набрать и чем собрать C++ проект

Время на прочтение14 мин
Количество просмотров81K
Задавшись этим вопросом я, в первую очередь, сформулировал требования: жесткие и опциональные (но желательные) для системы сборки и графической среды разработки.
Сразу хочу отметить что речь идет о написании C++ кода не под какую-то специфичную платформу типа Android или фреймворка, например Qt, — где все уже готово, как с построением так и с редактированием кода, а об generic коде не привязанному к конкретной платформе или фреймворку.
Читать дальше →
Всего голосов 57: ↑39 и ↓18+21
Комментарии111

STM32. Про синус

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

В статье алгоритмическая оптимизация функции sin() для бюджетных микроконтроллеров stm32, повышающая производительность в 10 и более раз.

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

Читать далее
Всего голосов 46: ↑45 и ↓1+59
Комментарии100

Операционные усилители. Часть 3: Вычисление суммы, разности, интеграла и производной на ОУ

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров28K

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

В данной публикации цикла мы научимся с помощью ОУ производить операции сложения и вычитания. Кроме того, мы разберём работу интегрирующих и дифференцирующих звеньев, а также схемы выборки-хранения.
Читать дальше →
Всего голосов 44: ↑43 и ↓1+63
Комментарии33

Кратко об указателях в Си: присваивание, разыменование и перемещение по массивам

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

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

Читать полностью
Всего голосов 17: ↑4 и ↓13-9
Комментарии12

Управление манипулятором meArm через web-интерфейс

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

Прошлый учебный год я вёл занятия в школе робототехники. Класс состоял из подростков 12-13 лет, способных и дисциплинированных. В моих подопечных меня устраивало всё, кроме одного маленького нюанса поведения: они растворялись в своих смартфонах, стоило мне отвернуться к доске.

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

Надо было каким-то образом включить смартфоны в учебный процесс. И это удалось. У одного из учащихся была сломанная «роборука» meArm. Решено было её отремонтировать, а затем написать для неё web-интерфейс.
Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии8

STM32 LTDC и 7-дюймовый дисплей: часть 1

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

Речь пойдёт подключении дисплея AT070TN94 с параллельным интерфейсом к контроллеру STM32H743, начиная от выбора электронных компонентов, заканчивая настройкой блока LTDC. И хотя в сети достаточно много информации по данной теме, при создании своего устройства у меня периодически возникали те или иные вопросы, ответов на которых найти не удавалось. Пишу в первую очередь для новичков, а профи приглашаю почитать ради советов и аргументированной критики (первая статья как-никак). Приступим.

Заинтересовало
Всего голосов 21: ↑20 и ↓1+33
Комментарии16

Задачка о функции-обертке, принимающей аргументы в произвольном порядке, и ее решение на C++17

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

Недавно на Хабре проскакивала новость о Magnit Tech++ Meet Up, и в ней упоминалась задачка, которая меня заинтересовала. В оригинале задачка формулируется так:

Определена функция с сигнатурой:

void do_something(bool a, int b, std::string_view c)

Определить функцию, принимающую в произвольном порядке аргументы типов boolintstd::string_view и вызывающую функцию do_something с переданными параметрами в качестве аргументов.

Я придумал несколько решений этой задачки, а здесь предлагаю два варианта ее решения - сначала банальный (и плохой), а затем самый с моей точки зрения оптимальный.

Итак, поехали...
Всего голосов 24: ↑23 и ↓1+33
Комментарии53

Модные видео гличи на C++

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

В этой статье рассказывается о способах создания видео фильтров на C++ для разных программ, а так же тут рекламируется моя опенсорс программа SEZE II с интересными эффектами на подобии пиксельной сортировки, эмулятора аналогового ТВ, случайного 3-битного дизеринга и прочим

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

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 3.1 из 6

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

Содержание основного курса


Улучшение кода



Общение вне хабра

Если у вас есть вопросы, и вы не хотите задавать их в комментариях, или просто не имеете возможности писать в комментарии, присоединяйтесь к jabber-конференции 3d@conference.sudouser.ru

Данная статья написана в тесном сотрудничестве (спасибо создателям XMPP) с haqreu, автором данного курса.Мы начали масштабный рефакторинг кода, направленный на достижение максимальной компактности и читаемости. Мы сознательно пошли на отказ от ряда возможных и даже очевидных оптимизаций для получения максимально доступного для понимания кода учебных примеров.
P. S haqreu буквально на днях выложит статью о шейдерах!
Познавательного чтения!
Всего голосов 51: ↑43 и ↓8+35
Комментарии41

Регрессия гауссовского процесса с самого начала

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

К старту курса о машинном и глубоком обучении мы перевели статью о регрессии гауссовского процесса (далее GPR) — удивительно мощном классе алгоритмов машинного обучения, который, в отличие от многих современных моделей машинного обучения, в составлении прогнозов опирается на небольшое количество параметров. Поскольку GPR является (почти) непараметрической, она, даже при небольшом количестве данных, может эффективно применяться в решении широкого спектра задач обучения с учителем. С помощью передовых фреймворков автоматического дифференцирования, таких как PyTorch и TensorFlow, изучить и применить GPR для решения множества сложных задач в области обучения с учителем, стало проще, чем когда-либо. В статье вы найдёте не только математические выкладки, но и ссылки на соответствующие учебники.

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

Как я делаю цифровую минигитару

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

В этой статье я постараюсь в общих чертах описать путь создания девайса от идеи до реализации юзабельного прототипа.

Меня зовут Дмитрий Дударев. Я занимаюсь разработкой электроники и очень люблю создавать различные портативные девайсы. Еще я люблю музыку. Полгода назад я взял у друга акустическую гитару чтобы попытаться научиться на ней играть по урокам из ютуба и табулатурам. Было тяжело. То ли я неправильно что-то делал, то ли плохо старался, то ли в обществе моих предков мелкая моторика вредила размножению. В любом случае, ничего кроме звуков дребезжащих струн у меня не выходило. Мое негодование усиливала постоянная расстройка струн. Да и окружающим тысячный раз слушать мою кривую Nothing else matters удовольствия не доставляло.

Но в этих муках про главное правило электронщика я не забыл. Если что-то существует, значит туда можно вставить микроконтроллер. Или, хотя бы, сделать портативную электронную модификацию.
Читать дальше →
Всего голосов 142: ↑142 и ↓0+142
Комментарии79

Создание модели электронного компонента для Proteus на Lua

Время на прочтение10 мин
Количество просмотров35K
Есть у меня несколько проектов-долгостроев, один из которых — создание компьютера на базе CDP1802. Основную плату моделировал на бумаге и в Proteus.
Довольно скоро встал ребром вопрос: как быть с элементами, которые отсутствуют в Proteus?
На многих ресурсах подробно описано, как создать свою модель на С++ в Visual Studio.
К сожалению, при сборке под линуксом этот вариант не очень удобен. Да и как быть, если не знаешь С++ или нужно редактировать модель на лету для отладки?
Да и просто хочется сосредоточиться на моделировании, максимально упростив все остальное.
Так появилась идея делать симуляторные модели с помощью скриптов — на Lua.
Заинтересовавшихся прошу под кат (гифки на 2Мб).


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

Информация

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