Коллега делает новую диагностику для PVS-Studio, касающуюся некорректного использования dynamic_cast для COM-интерфейсов, где нужен вызов QueryInterface.
Читаю документацию на диагностику и чувствую, что что-то не так. Но я так давно работал с COM, что уже всё забыл и затрудняюсь сформулировать замечания. Потом я вспоминаю про свои "COM-конспект" и о чудо, тетрадка находится. Через 15 минут листания я осознаю, что мне не нравится в описании.
Однако, пост побудила написать другая мысль. А сейчас так изучают программирование? Конспектируют, зарисовывают? Или всё подменил условный ютуб, дающий информацию быстро, но не дающий остановиться, обдумать услышанное, записать. Конечно, это возможно. Однако, я видел, как люди что-то выписывают, читая книги про программирования. И сам так делал. Но я не вижу такое при просмотре докладов, обучающих видео, лекций. Да и вообще кажется я сейчас не вижу, что кто-то конспектирует. Что вы думаете?
Читаю документацию на диагностику и чувствую, что что-то не так. Но я так давно работал с COM, что уже всё забыл и затрудняюсь сформулировать замечания. Потом я вспоминаю про свои "COM-конспект" и о чудо, тетрадка находится. Через 15 минут листания я осознаю, что мне не нравится в описании.
Однако, пост побудила написать другая мысль. А сейчас так изучают программирование? Конспектируют, зарисовывают? Или всё подменил условный ютуб, дающий информацию быстро, но не дающий остановиться, обдумать услышанное, записать. Конечно, это возможно. Однако, я видел, как люди что-то выписывают, читая книги про программирования. И сам так делал. Но я не вижу такое при просмотре докладов, обучающих видео, лекций. Да и вообще кажется я сейчас не вижу, что кто-то конспектирует. Что вы думаете?
👍5
Прошли экватор, выложив 6 из 11 частей книги "Путеводитель C++ программиста по неопределённому поведению". Очень много букв, так что не стоит ждать все части. Приглашаю читать первые шесть :)
Часть 1, Часть 2, Часть 3, Часть 4, Часть 5, Часть 6.
Часть 1, Часть 2, Часть 3, Часть 4, Часть 5, Часть 6.
PVS-Studio
Путеводитель C++ программиста по неопределённому поведению: часть 1 из 11
Вашему вниманию предлагается первая часть электронной книги, которая посвящена неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с...
❤2
Пока под рукой тетрадка с конспектами, хочется похвалиться как у нас в компании построен процесс адаптации новых сотрудников. Сейчас поймёте взаимосвязь :)
К сожалению, у многих компаний нет плана как обучать новых людей и понимая какую информацию давать. Сам проходил через подобное. Спрашиваешь: с чего начать, что почитать, куда и что посмотреть? Ой. Ну вот по коду можешь пока побродить. Ах да, у нас же поверхности в CAD-системе и нужно знать математику, связанную с ними – читай про NURBS. Сижу, читаю про NURBS (неоднородные рациональные B-сплайны для представления кривых и поверхностей). Конспектирую, что-то перевожу... На фотке как раз мои потуги осознать...
Далее в работе действительно была математика, но в основном пришлось вспоминать матрицы поворота и трансформации. С NURBS напрямую я не столкнулся ни разу! Так что экскурс в сплайны потренировал мозги, но абсолютно потом не пригодился. Это как раз тот случай, что нет процесса адаптации, подборки с чем знакомиться.
У нас в PVS-Studio есть план (чеклист) введения человека в должность, который создаёт HR для себя и руководителя. Там начиная от знакомства с пожарной безопасностью и оформления в отделе кадров, и закачивания решением по итогам испытательного срока. Человек порционно получает информацию в специальной рассылки из 10 писем: структура компании, что такое один-на-один и так далее.
Выдаётся методическое руководство – что и где почитать, какие записи докладов посмотреть. По итогам изучения разных разделов нужно ответить на список контрольных вопросов и обсудить ответы с лидом. У программистов есть продолжение в виде практического задания по знакомству с PVS-Studio, проверке проекта, написанию пробной статьи. Для человека, взятого, например, в маркетинг, появляется список первых практических задач, который заранее подготавливается руководителем.
Возможно, от всего этого пухнет голова, зато человек не чувствует себя "бросили в воду и плыви" и получает именно ту информацию, которая ему понадобится в работе.
Далее он будет развиваться на основании матрицы компетенции, но это уже другая отдельная большая тема.
P.S. Здорово, что получилось всё так организовать. Надо не забыть текстом с HR командой поделиться :) Думаю им приятно будет.
К сожалению, у многих компаний нет плана как обучать новых людей и понимая какую информацию давать. Сам проходил через подобное. Спрашиваешь: с чего начать, что почитать, куда и что посмотреть? Ой. Ну вот по коду можешь пока побродить. Ах да, у нас же поверхности в CAD-системе и нужно знать математику, связанную с ними – читай про NURBS. Сижу, читаю про NURBS (неоднородные рациональные B-сплайны для представления кривых и поверхностей). Конспектирую, что-то перевожу... На фотке как раз мои потуги осознать...
Далее в работе действительно была математика, но в основном пришлось вспоминать матрицы поворота и трансформации. С NURBS напрямую я не столкнулся ни разу! Так что экскурс в сплайны потренировал мозги, но абсолютно потом не пригодился. Это как раз тот случай, что нет процесса адаптации, подборки с чем знакомиться.
У нас в PVS-Studio есть план (чеклист) введения человека в должность, который создаёт HR для себя и руководителя. Там начиная от знакомства с пожарной безопасностью и оформления в отделе кадров, и закачивания решением по итогам испытательного срока. Человек порционно получает информацию в специальной рассылки из 10 писем: структура компании, что такое один-на-один и так далее.
Выдаётся методическое руководство – что и где почитать, какие записи докладов посмотреть. По итогам изучения разных разделов нужно ответить на список контрольных вопросов и обсудить ответы с лидом. У программистов есть продолжение в виде практического задания по знакомству с PVS-Studio, проверке проекта, написанию пробной статьи. Для человека, взятого, например, в маркетинг, появляется список первых практических задач, который заранее подготавливается руководителем.
Возможно, от всего этого пухнет голова, зато человек не чувствует себя "бросили в воду и плыви" и получает именно ту информацию, которая ему понадобится в работе.
Далее он будет развиваться на основании матрицы компетенции, но это уже другая отдельная большая тема.
P.S. Здорово, что получилось всё так организовать. Надо не забыть текстом с HR командой поделиться :) Думаю им приятно будет.
❤4👀1
Коллега профессионально набросил на тему, медленнее ли С++ std::array классических C массивов или нет. Читайте, изучайте графики, рассказывайте автору в комментариях почему он не прав и что не ту линейку прикладывал :)
Хабр
std::array в С++ не медленнее массива в С
Или почему не нужно бояться того, что удобно работает. Стойте! Уберите руки от клавиатуры, дайте человеку сказать! У этой статьи есть обоснованные причины и благая цель! В прошлой моей статье о...
👍2
Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям.
Мартин Фаулер (Martin Fowler)
Мартин Фаулер (Martin Fowler)
❤3
Юбилейный баг. Он станет 16000-ым в коллекции багов, которую мы пополняем в процессе проверки открытых проектов для написания статей. Найден в проекте DPDK, про который я скоро напишу пару публикаций.
Ещё это значит, что благодаря нашей команде, в открытых проектах станет на 16000 ошибок меньше.
Сработала диагностика V523. Независимо от условия, выполняются одни и те-же действия. Скорее всего здесь есть опечатка. Ну или код просто избыточный.
Ещё это значит, что благодаря нашей команде, в открытых проектах станет на 16000 ошибок меньше.
Сработала диагностика V523. Независимо от условия, выполняются одни и те-же действия. Скорее всего здесь есть опечатка. Ну или код просто избыточный.
🔥1
Что такое неведомый хтонические неописуемый ужас? Это структура bnx2x_softc в DPDK 😰
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
dpdk/drivers/net/bnx2x/bnx2x.h at bf0ff8df59c7e32f95c0b542cc4a7918f8a3da84 · DPDK/dpdk
Data Plane Development Kit. Contribute to DPDK/dpdk development by creating an account on GitHub.
Неделю ничего не писал – отдыхал перед началом сезона конференций и вебинаров и т.д. И раз уж речь зашла про мероприятия, предлагаю вниманию мою сегодняшнюю заметку: SafeCode – конференция, которой мне не хватало.
Хабр
SafeCode – конференция, которой мне не хватало
Помню 100500 лет назад (ну ладно, всего 12), я писал на Хабре , что мне не хватает в России хардкорной C++ конференции. Затем появилась C++Russia . Навизуализировал. Пару лет назад я начал грустить,...
И заодно недавно опубликованный подкаст с мои участием.
VK Видео
Как айтишнику развить бизнес | Алиса и тестирование
Андрей и Алиса говорят о разработке, методах выявления ошибок в коде на ранних этапах, важности использования статического анализа для повышения качества ПО и внедрении современных методологий, таких как TDD и код-ревью, в повседневную работу. Ссылка на Бусти:…
👍9
Неформальные процедуры обзоров передавались от человека человеку в общей культуре программирования задолго до того, как информация об этом стала появляться в печатных материалах. Необходимость обзоров была настолько очевидна лучшим программистам, что они редко упоминали об этом в статьях и книгах, тогда как худшие программисты считали, что они настолько хороши, что их работа не нуждается в обзорах.
Дениел Фридмен и Джеральд Вайнеберг (Daniel Freedman and Gerald Weinberg)
Дениел Фридмен и Джеральд Вайнеберг (Daniel Freedman and Gerald Weinberg)
Никто не застрахован от простейших ошибок. Перед вами фрагмент кода из одного из самых качественных проектов – LLVM. А ошибка дурацкая: если дошло до вычисления правого операнда ИЛИ, то указатель равен nullptr и он смело разыменовывается. Кстати, наверное в среду как раз проект LLVM возьму для демонстрации работы PVS-Studio на вебинаре УЦ Маском.
👍2
Люди, описывающие проектирования ПО как дисциплинированный процесс, тратят много энергии, заставляя всех нас почувствовать себя виноватыми. Мы никогда не станем достаточно структурированными или объектно-ориентированными для достижения нирваны при жизни. Все мы расплачиваемся за первородный грех – изучение Basic в особо впечатлительном возрасте. Но я готов спорить, что большинство из нас проектируют программы лучше, чем кажется пуристам.
Ф. Дж. Плоджер (P. J. Plauger)
Ф. Дж. Плоджер (P. J. Plauger)
🔥3
Антипаттерн: неправильный способ определения переполнения, которое может возникать при сложении переменных типов unsigned short или переменных типов unsigned char.
При сложении двух переменных типов unsigned short, обе переменные приводятся к типу int. Результат сложения также будет иметь тип int. Поэтому, независимо от того, какие значения будут в переменных x и y, в результате их сложения переполнения никогда не возникнет.
Раньше была диагностика для C++, теперь добавили для C#: V3204.
При сложении двух переменных типов unsigned short, обе переменные приводятся к типу int. Результат сложения также будет иметь тип int. Поэтому, независимо от того, какие значения будут в переменных x и y, в результате их сложения переполнения никогда не возникнет.
Раньше была диагностика для C++, теперь добавили для C#: V3204.
🔥4
Во имя эффективности – причём достигается она далеко не всегда – совершается больше компьютерных грехов, чем по любой другой причине, включая банальную глупость.
У.А. Вульф (W.A. Wulf)
Баг, найденный нами в своё время в MySQL. Программист для оптимизации вручную развернул цикл и допустил опечатку. Стоило ли оно того? С этой задачей вполне может справиться оптимизирующий компилятор.
Когда обсуждали эту ошибку в комментариях, помню кто-то сказал, что такой код однозначно лучше, так ка он уже гарантированно развёрнут и разработчик правильно всё сделано. Как-же правильно, если неправильно :) По-прежнему считаю: правильно работающий код лучше, чем вроде более быстрый неработающий :)
У.А. Вульф (W.A. Wulf)
Баг, найденный нами в своё время в MySQL. Программист для оптимизации вручную развернул цикл и допустил опечатку. Стоило ли оно того? С этой задачей вполне может справиться оптимизирующий компилятор.
Когда обсуждали эту ошибку в комментариях, помню кто-то сказал, что такой код однозначно лучше, так ка он уже гарантированно развёрнут и разработчик правильно всё сделано. Как-же правильно, если неправильно :) По-прежнему считаю: правильно работающий код лучше, чем вроде более быстрый неработающий :)
Когда кто-то сказал "статистический анализ кода", то в 99% случаев он просто спутал название со "статический" :) Однако, понятие статистический анализ кода действительно есть и оно является одной из технологий, используемых статическими анализаторами кода.
Например, очень странно если в массиве все числа десятичные, но вот одно захотелось восьмеричным сделать. Ноль, делающий литерал восьмеричным, почти наверняка лишний и вписан для выравнивания столбика чисел.
Например, очень странно если в массиве все числа десятичные, но вот одно захотелось восьмеричным сделать. Ноль, делающий литерал восьмеричным, почти наверняка лишний и вписан для выравнивания столбика чисел.
🔥1🤯1
Никто не умеет писать/проверять функции сравнения :) Даже разработчики LLVM. Сейчас полез с помощью PVS-Studio в код новой версии, а там: V501 There are identical sub-expressions to the left and to the right of the '&&' operator: bits2.is_nan() && bits2.is_nan() Compare.h 23
Парсим С++. 25 октября 12:00.
Приглашаю на бесплатный вебинар на тему разбору C++ кода. Коллега порассуждает о разных видах парсеров и о том, почему в случае С++ всё сложно.
Приглашаю на бесплатный вебинар на тему разбору C++ кода. Коллега порассуждает о разных видах парсеров и о том, почему в случае С++ всё сложно.
PVS-Studio
Вебинар не проводится
На данный момент вебинары не проводятся. Следите за обновлениями — возможно, в скором времени мы запустим новые мероприятия.Вы можете посмотреть записи прошедших вебинаров по ссылке.
👍1🔥1
Из свежих интересных багов. В проекте LLVM встретился (А) вот такой вызов функции isStoreUsed. Всё хорошо. Но в другом месте рука программиста дрогнула, и он поставил закрывающуюся скобку не там (Б). Результат – условие всегда ложно.
Почему код скомпилировался? Ответ прост – последний аргумент функции является опциональным (В).
Заметить такую ошибку глазами весьма непросто. Хорошо, что есть PVS-Studio, который предупреждает о таких ляпах :)
Почему код скомпилировался? Ответ прост – последний аргумент функции является опциональным (В).
Заметить такую ошибку глазами весьма непросто. Хорошо, что есть PVS-Studio, который предупреждает о таких ляпах :)