Оптимизация GUI на Qt
Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали!
https://habr.com/ru/post/672962/
#cpp #programming
👉 @cpp_lib
🎯 Вперед к улучшенной организации кода с машиной состояний в Qt!
4 июля в 20:00 мск — откройте для себя мир работы с Qt на открытом практическом вебинаре.
На уроке вы освоите:
- основы работы с машиной состояний в Qt: создание состояний, определение переходов и управление сигналами;
- сложные логические условия для эффективных переходов и повышения производительности приложения;
- использование машины состояний для улучшения организации кода и создания более совершенного приложения.
Кому подходит урок:
- программистам, использующим Qt и стремящимся к оптимизации своего кода;
- любознательным разработчикам, желающим погрузиться в мир машин состояний и их применения.
Спикер — ведущий разработчик в одной из крупнейших компаний и опытный преподаватель.
Встречаемся в преддверии старта курса «Разработка прикладного ПО на Qt и ОС «Аврора». Все участники вебинара получат специальную цену на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cxYb7oРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Курс по ООП в С++: шаблоны и метапрограммирование
00:00 - Введение
02:12 - Внутреннее устройство шаблонов
03:55 - Явная специализация
06:25 - Частичная специализация
08:04 - Перегрузка и шаблоны
09:02 - Статический полиморфизм (CRTP)
12:40 - Шиблонный синглтон (CRTP)
17:57 - Основы метапрограммирования
22:17 - Заключение
источник
#cpp #programming
👉 @cpp_lib
Создание игры Пазлы на языке C++
Ссылка на картинки
Ссылка на код
источник
#cpp #programming
👉 @cpp_lib
Эффективное использование памяти во встраиваемых системах
Алексей Алешкин (ИнфоТеКС)
Отличительная особенность разработки ПО для встраиваемых систем — ограниченность доступной памяти. Применение С++ значительно повышает скорость разработки, однако ухудшает прозрачность управления памятью и нефункциональные характеристики кода. Эти побочные эффекты зачастую приводят к понижению потребительских качеств продукта, ухудшению стабильности его работы или даже к невозможности реализации проекта на заданной платформе.
В процессе разработки проекта SIES Core команда Алексея столкнулась со всеми перечисленными побочными эффектами, что потребовало глубоких долгих исследований, результатами которых он поделился с аудиторией.
Доклад будет интересен разработчикам backend и embedded, создающим ПО с использованием С++ на недорогих платформах с ограниченным объемом памяти и отсутствием MMU.
Технологии: аллокаторы, MMU, Semihosting FS, GCC, GDB, OpenOCD.
источник
#cpp #programming
👉 @cpp_lib
.💡 Разрабатываешь на C++? Освой кроссплатформенную разработку на QT и ОС Аврора
❗️ Вкладывай в перспективу - вкладывай в себя!
Пройди тест из 20 вопросов и проверь, насколько хорошо nы знаешь язык C++ и готов освоить QT и ОС Аврора .
Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработка прикладного ПО на Qt и ОС Аврора" от OTUS.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cxKBIx
🎁 Успей на курс! Только до 23 июня скидка 10%, подробности у наших менеджеров - после прохождения теста они свяжутся с вами.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сборка мусора: как это делается в системном программировании
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
https://bitbashing.io/gc-for-systems-programmers.html
#cpp #programming
👉 @cpp_lib
Разбор кода игры Super Mario на языке C++
00:00 Начало
00:17 Шаг 1: Создание игрока
01:48 Шаг 2: Создание платформера
07:03 Шаг 3: Создание флажка
08:26 Шаг 4: Поставить изображение frend
08:57 Шаг 5: Добавления надписей для уровня
11:25 Шаг 6: Добавления врагов
16:45 Шаг 7: Добавление урона и возрождение игрока
19:13 Шаг 8: Добавление меню
23:31 Шаг 9: Добавление музыки и звуки
26:43 Игра готова
Ссылки на картинки и звуки https://disk.yandex.ru/d/V03815gsktfqUw
Ссылка на код https://gist.github.com/Andrey-byte/0a8834600a241eda303e293498c664fb
#cpp #programming
👉 @cpp_lib
50 веб сайтов по изучению C/C++
В этой статье я расскажу о 50 сайтах, которые, по моему мнению, должен знать и добавить в закладки каждый разработчик на Си или Си++. В этом списке представлены прямые ссылки на исходные коды программ вместе с их описанием.
https://www.mycplus.com/featured-articles/50-c-cpp-source-code-websites/
#cpp #programming
👉 @cpp_lib
Идея по улучшению многопоточного кода
Александр Корнилов
Александр описывает подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации. Демонстрация идеи проходит на живых примерах кода на современном C++.
источник
#cpp #programming
👉 @cpp_lib
Идеальная передача и универсальные ссылки в C++
https://eli.thegreenplace.net/2014/perfect-forwarding-and-universal-references-in-c
#cpp #programming
👉 @cpp_lib
👩💻 Шпаргалка по C++
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
Краткое сравнение популярных функций измерения времени
Решил обновить свою старую крохотную библиотечку для тайминга кода. Измерение коротких временнЫх интервалов в ней выполнялось с помощью: инструкции RDTSC при компиляции MSC для x86 и gettimeofday при сборке GCC под Linux. IMHO, на сегодняшний день это не самые правильные методы, и захотелось объективно выбрать что-то более точное и лёгкое. Для этого были измерены несколько параметров наиболее популярных функций измерения времени. Результатами этих измерений и делюсь с вами (вдруг кому тоже интересно).
https://habr.com/ru/articles/818965/
#cpp #programming
👉 @cpp_lib
📕Pro Cryptography and Cryptanalysis with C++23: Creating and Programming Advanced Algorithms, 2nd Edition
Автор: Marius Iulian Mihailescu (2023)
Сформировать прочные навыки написания криптографических алгоритмов и схем/модулей безопасности с использованием языка C++23 и его новых возможностей. Эта книга научит вас правильным методам написания продвинутых криптографических алгоритмов, таких как алгоритмы криптографии на основе эллиптических кривых, криптографии на основе решетки, шифрования с поиском и гомоморфного шифрования. Вы также рассмотрите внутренние криптографические механизмы и узнаете общие способы реализации и правильного использования алгоритмов на практике.
#cpp #programming
👉 @cpp_lib
Личный блог Барта Филиппеĸа про C++
Барт выпусĸал свои ĸниги, получил награду Microsoft MVP (Most Valuable Professional), частый гость подкаста CppCast.
https://www.fluentcpp.com/posts/
#cpp #programming
👉 @cpp_lib
📕API Design for C++, 2nd Edition
Martin Reddy (2024)
В этой книге всесторонне рассматривается разработка API, начиная с первоначального проектирования и заканчивая реализацией, тестированием, документированием, выпуском, версионированием, сопровождением и уничтожением. В ней представлены паттерны и практики, которые приносят реальную пользу как отдельным разработчикам, так и организациям. Второе издание включает все новые материалы, полностью обновленные для последних версий C++, в том числе новую главу о параллелизме и многопоточности, а также новую главу о том, как могут сосуществовать код Objective C++ и C++ и как можно получить доступ к API C++ из программ на Swift. Кроме того, в книге рассматриваются часто упускаемые из виду вопросы, как технические, так и нетехнические, способствующие принятию успешных проектных решений, которые приводят к созданию высококачественных, надежных и долговечных API.
#cpp #programming
👉 @cpp_lib
Промпт-инженеринг — новый хайп или перспективная профессия? 🤔
Рассказываем про направление с большим потенциалом и маленькой конкуренцией на рынке на нашей бесплатной лекции.
По итогам эфира вы узнаете:
— Кто такой промт-инженер и чем он занимается;
— Как интегрировать скиллы промт-инжинеринга в работу, если вы работаете в IT;
— Кому в действительности нужны его услуги и какие результаты это даст;
— Сколько платят промт-инженеру в России и мире;
— Кто может стать промт-инженером и какой порог входа;
Кликай на ссылку и забирай подробную информацию вместе с классными бонусами 👈🏼
erid: LjN8JzLER
ООО Зерокодер, ИНН 9715401631
С++ и безопасность: правда ли все так плохо?
Сергей проанализировал недавний отчет NSA и рассказал, так ли плохо обстоят дела с безопасностью в С++ на самом деле и что современная индустрия предлагает для решения этого вопроса.
Он разобрал проблемы с безопасностью в С++ на открытых примерах из Chromium, среди которых:
— работа с памятью;
— UB;
— C legacy, строки, арифметика, преобразования типов.
Спикер также показал различные подходы к митигации описанных проблем, в частности:
— статический анализ;
— динамический анализ;
— фаззинг-тестирование;
— харденинг;
— выделение безопасных подмножеств языка: Misra, AUTOSAR, стандарт Google;
— методология SDL как комплексное решение;
— (бонус) подход KasperskyOS по определению недоверенных компонентов, допускающих наличие уязвимостей, но без возможности их проэксплуатировать и развить атаку.
источник
#cpp #programming
👉 @cpp_lib
🚀Хочешь выжать максимум из своих проектов? Прокачай свои навыки и окунись в мир кроссплатформенной разработки на C++!
Включай свой мозг на полную мощность и присоединяйся к нам 24 июня в 20:00 мск на вебинаре от тимлида одного из крупнейших российских банков.
- узнаем, как решить проблему поиска зависимостей;
- напишем conan-файл;
- организуем свой сервер пакетов в своей экосистеме CI/CD.
👉 Не упусти возможность обойти конкурентов, регистрируйся прямо сейчас: РЕГИСТРАЦИЯ
C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M
Сегодня я хотел бы обсудить тему, с которой так или иначе сталкивался почти каждый программист встраиваемых устройств без использования настоящих операционных систем, а именно прямое управление периферийными узлами микроконтроллера. A конкретнее, я хотел бы обсудить повышение безопасности при управлении периферийными модулями без потери эффективности, гибкости и читаемости.
Кто-то может подумать, что данная тема уже рассказана вдоль и поперек в многочисленных мануалах по проектам для STM32 (например, хабр). Те же, кто уже понял о чем будет идти речь, может подумать что это полное повторение уже существующих подобных идей (например эта и другие статьи автора зародили во мне интерес к этой теме несколько лет назад, а вот в языке программирования Rust большинство ящиков/крейтов Cortex-M/PAC уже используют проверками безопасности при манипулировании регистрами). Однако, не нужно спешить с выводами. Я полагаю, что могу дать интересную и полезную информацию для обоих вышеперечисленных категорий читателей.
Перед началом, тему того 'Зачем вообще лезть на уровень регистров, если каждый производитель дает HAL/BSP?' я оставлю вне рамок данной статьи. Я предполагаю, что если читатель открыл статью, то ему уже интересна данная тема, и мне не столь важно почему.
https://habr.com/ru/articles/819499/
#cpp #programming
👉 @cpp_lib
Как сравнить целые числа со знаком и без знака в C++20?
Сравнение двух чисел должно быть простым, верно? Может быть, и должно, но в языке C++ это не так, даже если ограничить сравнение областью целых чисел.
Если попытаться сравнить знаковое и беззнаковое целое число, то возможны несколько вариантов развития событий. Возможно, это действительно сработает, и вы никогда не узнаете, чем рисковали. Возможно, все будет не так, как вы ожидали, и вы потратите немало времени, ломая голову над тем, что же произошло. Возможно также, что он не сработает в соответствии с вашими ожиданиями, но это останется незамеченным.
https://www.sandordargo.com/blog/2023/10/11/cpp20-intcmp-utilities
#cpp #programming
👉 @cpp_lib
🟢 Практический вебинар для начинающих С++-разработчиков — почему утекает динамически выделенная память и как с этим бороться?
Ждем вас на открытом уроке, где мы разберем:
- зачем нужна динамическая память и сложности работы с ней в C++;
- основные ошибки, которые возникают при работе с динамической памятью;
- инструментарий диагностики ошибок, такой как valgrind и sanitizers;
- идиому RAII в контексте динамической памяти.
👨🎓 Спикер — опытный разработчик и руководитель команд, преподаватель и эксперт конференций C++ Russia, escar Europe.
⏰ Встречаемся 20 июня в 20:00 мск в преддверии старта курса «Специализация C++ Developer». Все участники вебинара получат специальную цену на обучение!
➡ Регистрируйтесь прямо сейчас, чтобы занять место на открытом уроке и получить запись: РЕГИСТРАЦИЯ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Я сделал C++ версию функции Python print()
Мне нравится функция Python print(obj...)
, поскольку она может выводить переменные любого типа: числа, строки, массивы и объекты, а также полезна для отладки.
В последнее время я занимаюсь соревновательным программированием, но эта функция помогает мне отлаживать и там.
https://dev.to/philip82148/i-made-a-c-version-of-consolelog-o88
#cpp #programming
👉 @cpp_lib
🎓👨💻 Магистратура ФИТ НГУ «Интернет вещей»: готовим IoT-разработчиков с широким технологическим стэком, способных решать задачи на стыке науки и прорывных IT-технологий для разных сфер жизни.
Магистерская программа Новосибирского госуниверситета направлена на подготовку IoT-инженеров, разрабатывающих низкоуровневые решения для встроенных управляющих и сенсорных систем с учетом их специфики и ресурсных ограничений. 🤖 Выпускники программы получают комплексные знания, благодаря чему могут решать широкий спектр IoT-задач для любых сфер жизни – от медицины и энергетики до кибербезопасности и автомобилестроения.
✨ Программа «Интернет вещей» – это современные технологии, актуальные навыки и мощный старт IT-карьеры:
✅ Стажировки в высокотехнологичных компаниях и решение реальных задач для технологических партнеров НГУ.
✅ Участие в прорывных проектах, таких как Smart City, Smart Hospital, СКИФ и других проектах в сфере цифровой медицины, биологии, сельского хозяйства, автомобилестроения.
✅ Практика на передовом оборудовании с самыми современными технологиями.
✅ Гибкий график, позволяющий совмещать учебу с работой.
✅ Много бюджетных мест.
✅ Преподаватели-эксперты — реальные практики из ведущих компаний-высокотехов и научно-исследовательских центров.
✅ Современный кампус в Академгородке с новыми общежитиями, удобной инфраструктурой, ручными белками и чистым лесным воздухом.
👀 Для кого?
Программа подойдет выпускникам бакалавриата и специалитета в области IT, математики, физики и смежных инженерных направлений.
❗️ Успей подать заявку до 5 августа!
👉 Подробнее о программе: https://education.nsu.ru/promo/iot/
Input parser - библиотека для парсинга командной строки
https://github.com/gianluisdiana/InputParser
#cpp #programming
👉 @cpp_lib
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
⚡️ Учись программировать на Solidity и создавать инновационные блокчейн-решения!
Пройди короткий тест и проверь, можешь ли ты осилить программирование на Solidity.
Ответишь успешно на все вопросы — сможешь попасть на продвинутый курс "Solidity Developer" от OTUS по специальной цене!
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cxshlM
🎁 Бонусом за прохождение теста, получишь бесплатный доступ к записям открытых вебинаров курса уже сейчас!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что такое Uniform initialization? Aggregate initialization?
Uniform initialization, введенная в C++11, позволяет использовать единый синтаксис для инициализации переменных и объектов, начиная от примитивных типов до агрегатов¹. Другими словами, она вводит инициализацию скобками, которая использует фигурные скобки {} для заключения значений инициализатора. Синтаксис выглядит следующим образом: type var_name {arg1, arg2, ....arg n}
.
Aggregate initialization - это форма инициализации списком для массивов или типов класса (часто структур или объединений), которые имеют: нет приватных или защищенных членов, нет пользовательских конструкторов, кроме явно заданных или удаленных конструкторов . Это позволяет напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми.
Например, если у вас есть структура с несколькими членами:struct Employee {
int id {};
int age {};
double wage {};
};
Когда мы определяем объект с типом структуры, нам нужен способ инициализации нескольких членов во время инициализации:Employee joe; // как мы инициализируем joe.id, joe.age и joe.wage?
Агрегаты используют форму инициализации, называемую агрегатной инициализацией, которая позволяет нам напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми. Так же как обычные переменные могут быть скопированы, напрямую инициализированы или списком инициализированы, есть 3 формы агрегатной инициализации.
#cpp #programming
👉 @cpp_lib
🟡 Как прокачать свои скиллы в разработке на С++?
Прийти на бесплатный практический урок «Условные переменные в С++» от OTUS, где мы разберем:
— что такое std::condition_variable и какие задачи он решает;
— типовые ошибки при его использовании;
— что такое spurious wakeup.
А также напишем несколько concurrency-примитивов на основе condition_variable.
🙋♂️Спикер — ведущий программист с большим международным опытом.
⏰ Встречаемся 11 июня в 20:00 мск в преддверии старта курса «C++ Developer. Professional». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.