Все потоки
Поиск
Написать публикацию
Обновить
189.46

C++ *

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

Сначала показывать
Порог рейтинга
Уровень сложности

О чём расскажут на C++ Russia 2023 в онлайне и офлайне

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

В доковидные времена (помните такие?) мы проводили C++ Russia два дня в офлайне. Когда в 2020-м конференция перешла в онлайн, один участник решил отложить поход на конференцию до возвращения полноценного офлайна. И вот теперь, в 2023-м, наконец снова проведём два дня в Москве. Получается, человек хотел сходить в год нового стандарта C++ и действительно сходит в год нового стандарта, но есть нюанс!

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

Поскольку мероприятие на целых четыре дня, докладов получилось особенно много. И теперь, когда программа готова, рассказываем Хабру, о чём они будут.

Читать далее

«Прозрачный промоушн выгоден и разработчику, и его тимлиду». Нюансы карьеры разработчика на С++

Время на прочтение3 мин
Количество просмотров4K
На прошлой неделе мы в «Лаборатории Касперского» провели онлайновый митап «Нюансы карьеры разработчика на С++». Представители разных команд С++ посмотрели на карьерный трек «плюсера» как со стороны менеджеров, так со стороны самих разработчиков.



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

Реализация алгоритма SHA-256

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

SHA(Алгоритмы безопасного хеширования) – это семейство криптографических хэш-функций, способных принимать сообщения произвольной длины и вычислять уникальный хэш-код фиксированной длины. Хэш-код SHA может быть использован для проверки целостности сообщения, а также для генерации цифровой подписи сообщения. На данный момент существует несколько стандартов безопасного алгоритма, каждый последующий включает более надёжные хэш-функции:

Читать далее

Telegram бот на ESP32 для удаленного мониторинга и управления насосной станцией

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

Делаем дешево и сердито!

История создания данного девайса следующая: есть очистная станция, в которой шкафы управления насосами и компрессорами на ПЛК Schneider Electric. При отключении городской электросети и переходе на дизель генератор и обратно оборудование уходит в ошибку, для квинтирования которой необходимо на месте нажать кнопки сброса аварии и запуска компрессоров. В случаи не работы компрессоров бактерии в емкостях умирают. И если рабочий день окончен некому произвести данную процедуру.

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

читать далее...

Анонимные пространства имен vs. static в пространстве имен

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

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

Читать далее

Ошибка квадратных скобок в хедерах UnityFramework в Xcode

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

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

Бегу судорожно откатывать последние изменения в проекте Unity.... Тщетно.
Переключаюсь с текущей ветки на ветку main, собираю сборку, понимаю что битва только начинается.

Читать далее

«Чистый» код, ужасная производительность

Время на прочтение16 мин
Количество просмотров67K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →

Как выжать 1,5 терафлопса производительности для 32-битных чисел с плавающей точкой на одном процессоре M1

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

Если вы занимаетесь обучением крупных современных нейросетей, эта статья будет вам не совсем в тему, ведь у A100 скорость в сто раз выше (156 терафлопсов).


Так что же интересного в этих полутора терафлопсах?


  • работа на одном ядре MacBook Air 2020 года с питанием от батареи;
  • выполнение с задержкой ~0,5 наносекунды на инструкцию.

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

Читать дальше →

Тетрис, разработка игр на SFML C++

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

Предыдущая тема

"Тетрис" - легендарная игра, которую знает каждый. Она была создана в 1984 году российским программистом Алексеем Пажитновым и с тех пор завоевала сердца миллионов игроков по всему миру.

Игровой процесс заключается в заполнении горизонтального ряда в нижней части экрана фигурами из различных геометрических форм, известных как тетрамино. Довольно сложно описать, какие именно фигуры есть в игре, поэтому проще показать пример: это могут быть фигуры, состоящие из четырех квадратов (квадрат, "буква T", "буква L", "буква S", "буква Z" и "буква J").

Читать далее

GPT-3 нашёл 213 Security Vulnerabilities… Или не нашёл

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

GPT-3 нашёл 213 Security Vulnerabilities... Или не нашёл
Этот текст является развёрнутым комментарием к статье "Я нашёл 213 уязвимостей безопасности в кодовой базе при помощи GPT-3".

Читать дальше →

Дорожная карта навыков разработчика на C++

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

Джеймс Гослинг как-то сказал, что Java — это C++, из которого убрали все пистолеты, ножи и дубинки, однако практика показывает, что «ножи и дубинки» становятся классным инструментом в руках опытных разработчиков. В общем, немалая часть проклятий в адрес C++ объясняется элементарным «вы просто не умеете его готовить». Мы в «Лаборатории Касперского» умеем готовить «плюсы» и поэтому любим их. C++ — низкоуровневый язык, который позволяет работать с железом и писать быстрый код и при этом содержит массу возможностей. В экосистеме «плюсов» куча проработанных паттернов, best practices и готовых библиотек под разные задачи. Язык динамично развивается — но сохраняет обратную совместимость. 

В этом посте мы с помощью карты покажем, какие навыки и знания нужны разработчику на C++. Естественно, разбирать путь развития «плюсистов» будем на собственном примере — тем более что у нас в «Лаборатории Касперского» много очень разных проектов с отличающимися задачами. Однако наша карта по большей части универсальна и будет полезна всем, кто хочет развиваться в С++-разработке.

Отправляемся

Делаем Ambient Light на Raspberry Pico. Контрибьютим в OpenRgb

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

Ambient Light помогает работать ночью. Когда вокруг темно и светит только монитор, то глаза сильно напрягаются. Лично мне приятно работать без верхнего света и данное решение помогает мне это делать.

Читать далее

Манипуляции с байт-кодом Java

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

В этой статье мы разберём, как добавить к файлу класса публичный атрибут. Когда загрузчик классов завершит загрузку модифицированного файла класса, мы увидим то поле, которое добавили вручную.
Читать дальше →

Ближайшие события

Скоростной серфинг по библиотеке с помощью ChatGPT

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

В прошлой статье в теории были рассмотрены некоторые аспекты использования ChatGPT в узконаправленной области изучения библиотеки Bullet Physics library. Теперь попробую привести практический пример.

Серфим далее

Приглашаем на онлайновый митап про карьерный трек C++ разработчика

Время на прочтение1 мин
Количество просмотров1.7K
В среду, 12 апреля, в 16 часов (МСК) мы проведем онлайновый митап под названием «7+ нюансов карьеры С++ разработчика» с участием наших коллег – менеджеров, тимлидов, а также senior- и middle-разработчиков из разных команд «Лаборатории Касперского».



Спикеры расскажут про важные элементы карьерного развития С++ разработчика с учетом изменений в индустрии (от новых стандартов языка до количества представленных в России компаний) и обсудят, что обычно для этого развития не хватает.
Читать дальше →

Опыт портирования Eclipse 4diac на KasperskyOS CE

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

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

Автоматизация производственных процессов помимо очевидных преимуществ имеет и ряд сложностей. Одной из проблем является риск подвергнуться кибератакам. Возможным решением является разработка защищенной реализации для среды исполнения IEC 61499 для KasperskyOS. Для этого требуется реализовать киберимунную систему управления путем портирования среды исполнения IEC 61499 Eclipse 4diac forte на операционную систему KasperskyOS.

Читать далее

Как ChatGPT помогла мне исправить баг в far2l, turbo и wxWidgets

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

Работая над проектом far2l (порта Far Manager) для Linux, я наткнулся на один очень красивый баг, который в итоге удалось починить только с помощью нейросети ChatGPT. Причём баг оказался не столько в самом far2l, сколько в проекте кроссплатформенной UI библиотеки wxWidgets. Бесплатная версия ChatGPT (3.5) с задачей справиться не смогла, а вот платная (4) таки справилась. Сегодня поделюсь с вами рассказом о том, как это было.

Читать далее

Меньше багов богу разработки: плюсы, минусы и нюансы имплементации подхода Secure by design

Время на прочтение16 мин
Количество просмотров6.6K
По дефолту разработчики, стремясь достичь безопасности приложения, идут операционным путем: пишут тесты и делают ревью, чтобы устранять уязвимости уже по факту их выявления. Однако существует подход, в рамках которого классический комплекс мер становится не нужен, — все эти требования будут неявно выполнены за счет использования правильного дизайна и архитектуры системы.

image

Меня зовут Сергей Талантов, я — архитектор и Security Champion в команде KasperskyOS «Лаборатории Касперского» и занимаюсь разработкой продуктов, к которым предъявляются самые жесткие требования в плане безопасности. В этой статье расскажу про подход Secure by design: от теории (что это такое и какие виды этого подхода существуют, а также как и почему мы его применяем) к практике (паттерны безопасного дизайна и примеры их использования на С++).
Читать дальше →

Мышиные гонки: что делать со скоростью скролла PC-мыши на MacOS

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


Привет, Хабр! Меня зовут Евгений Гудков. Я работаю в компании VK, где мы дружной командой делаем VK Teams — классный (не реклама) корпоративный мессенджер.

Но сегодня не об этом. Сегодня я хочу сыграть с тобой в одну игру…

Представим, что вышла новая популярная игра Scroll Master. Ее суть — проскроллить как можно больше контента за отведенное время. Разработчики сделали игру при помощи Qt и раздали на все основные Desktop-платформы. Правила игры не запрещают использовать тачпады, Magic Mouse и тому подобное. Также правилами не запрещается менять системную скорость прокрутки. Используй все, что можешь, чтобы стать лучшим! 
Читать дальше →

Книга «Красивый C++: 30 главных правил чистого, безопасного и быстрого кода»

Время на прочтение16 мин
Количество просмотров12K
image Привет, Хаброжители!

Написание качественного кода на C++ не должно быть трудной задачей. Если разработчик будет следовать рекомендациям, приведенным в C++ Core Guidelines, то он будет писать исключительно надежные, эффективные и прекрасно работающие программы на C++. Но руководство настолько переполнено советами, что порой трудно понять, с чего начать. Начните с «Красивого C++»!

Опытные программисты Гай Дэвидсон и Кейт Грегори выбрали 30 основных рекомендаций, которые посчитали особенно ценными, и дают подробные практические советы, которые помогут улучшить ваш стиль разработки на C++.

Для удобства книга структурирована в точном соответствии с официальным веб-сайтом C++ Core Guidelines.
Читать дальше →

Вклад авторов