• PVS-Studio, CppCat. Беседа с Андреем Карповым, техническим директором этих проектов

      На Хабре время от времени появляются статьи, посвященные статическому анализатору кода PVS-Studio (также рассматриваются и иные анализаторы), в которых то и дело делаются проверки того или иного проекта с публикацией найденных проблемных мест. Не так давно был представлен новый продукт CppCat— облегченная версия за небольшие, относительно PVS-Studio, деньги. Некоторое описание проекта PVS-Studio для Visual C++ можно найти здесь и здесь, а описание нового проекта можно найти в статье «Альтернатива PVS-Studio за $250».

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

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

      На заданные мною вопросы отвечает Андрей Карпов Andrey2008 — технический директор проектов PVS-Studio и CppCat. Также Андрей делится некоторыми рассуждениями о языке программирования, продуктах иных компаний и взаимодействии с этими самыми компаниями.

      Читать далее...
    • Анализируем исходный код с помощью cppcheck

      В свете множества недавних статей, посвящённых статическому анализу кода на С++, пользователи неоднократно интересовались анализатором cppcheck. Это относительно молодой проект статического анализа с открытым исходным кодом, ориентированный в первую очередь на нахождение реальных ошибок в коде с минимальным количеством ложных срабатываний.

      Совсем недавно cppcheck помог найти уязвимость в проекте Xorg, которая существовала там почти 23 года! Он помог уже тысячам программистов по всему миру, на официальном сайте можно найти информацию о найденных с помощью cppcheck уязвимостях в программах, и этот список постоянно растёт. Итак, если вы хотите знать, почему нужно использовать cppcheck всегда и везде — прошу под кат.
      Читать дальше →
    • Обзор статического анализатора CppCat

        Совсем недавно на Хабре презентовали новый инструмент статического анализа С++ кода — CppCat. О предыдущем своём проекте (PVS-Studio) его авторы долго и подробно рассказывали на Хабре. Отношение к нему у меня было двоякое — с одной стороны, статический анализ, конечно, нужен. С ним лучше, чем без него. С другой стороны — PVS-Studio пугала своей масштабностью, эдакой «энтерпрайзнутостью» ну и ещё ценой. Я хорошо себе представлял, как её может купить команда проекта человек в 50, но что делать разработчику-одиночке или команде человек в 5 — я не понимал. Помнится, предлагал как-то авторам развернуть «PVS as a service» в облаке и продавать доступ к нему по времени. Но они пошли своим путём и сделали урезанную версию за относительно небольшие деньги (такой бюджет вполне реально «пробить» или даже купить просто для себя).

        Давайте посмотрим, стоит ли игра свеч.
        Читать дальше →
      • CBOR — новый бинарный формат представления данных

        Concise Binary Object Representation (сжатое бинарное представление объекта) — формат данных, который был спроектирован таким образом, чтобы обеспечить максимально простой код реализации, формирования компактных выходных данных и возможность расширения формата без необходимости обмена информацией о версии.

        Стандарт формата CBOR был официально анонсирован комитетом IETF в октябре 2013 года в новом документе RFC 7049, авторами которого являются Carsten Bormann и Paul Hoffman. Взглянув на имя первого автора, можно предположить другую причину происхождения аббревиатуры для названия формата, но возможно это просто совпадение. Формат CBOR получил MIME-тип application/cbor.

        На данный момент существует, вероятно, сотни всевозможных бинарных форматов для представления структурированных данных, ряд которых стандартизирован, популярен и широко применяется (например, BER и DER для ASN.1, MessagePack и BSON). Все существующие стандарты решают поставленные перед ними задачи, и CBOR здесь не исключение. К формату было предъявлено семь важных требований, и, поскольку ни один из существующих форматов в полной мере не мог им удовлетворить, был создан новый (да, тут напрашивается картинка ).

        Читать дальше →
      • Почем опиум для народа? Как устроен FOREX и нужен ли он. (Часть II)

          image

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

          Кроме того, был задан ряд провокационных вопросов, которые условно можно свести к вариации одного из двух:

          1. Каковы критерии «кухни»? (вариации: вот этот брокер (имярек) кухня или нет? и пр.)
          2. В чем отличия услуг ITinvest от услуг критикуемых вами кухонь?

          Не желая вступать в полемику и спор с представителями форекс-сообщества (все-таки статья писалась не для них), я, тем не менее, счел себя обязанным продолжить объяснение, что такое «правильный» форекс, а также:

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

          Попутно читатель получит ответ на провокационные вопросы, сформулированные выше. Кому текст покажется занудным – просьба читать только заголовки.
          Читать дальше →
        • Восстановление удалённых c Apple iPhone контактов. 9 простых шагов

          Ситуация — нарочно не придумаешь.

          У блондинки 2 телефона на одной учётке в iСloud. Локальных копий скорее всего нет. За свежесть копий в облаках не ручаюсь. Блондинка решает подарить один из телефонов подруге. Что двигало в её светлой голове — не знаю, но она по одному стёрла более 200 контактов. Вручную. И получила девственно чистую телефонную книжку на втором аппарате. Слёзы, истерика, звонок — выручай.
          Первым делом изолируем аппарат от внешнего мира. Вынимаем SIM-карту, отключаем WiFi и прочие коммуникации.
          Решение настолько простое и очевидное, что мне даже стало немного обидно за ребят из Купертино. Возможно мне повезло, что телефон был не запаролен.
          Читать дальше →
        • Секреты auto и decltype

            Новый стандарт языка принят относительно давно и сейчас уже, наверное, нет программиста, который не слышал о новых ключевых словах auto и decltype. Но как почти с любым аспектом С++, использование этих новых инструментов не обходится без нюансов. Некоторые из них я постараюсь осветить в этой статье.
            Читать дальше →
            • +41
            • 37,8k
            • 6
          • Вы все еще кипятите и сравниваете this с нулем?

              Давным-давно в далекой-далекой галактике широко использовалась библиотека MFC, в которой у ряда классов были методы, сравнивающие this с нулем. Примерно так:

              class CWindow {
                  HWND handle;
                  HWND GetSafeHandle() const
                  {
                       return this == 0 ? 0 : handle;
                  }
              };
              

              «Это же не имеет смысла» – возразит читатель. Еще как «имеет»: этот код «позволяет» вызывать метод GetSafeHandle() через нулевой указатель CWindow*. Такой прием время от времени используется в разных проектах. Рассмотрим, почему на самом деле это плохая идея.
              Читать дальше →
            • Отказываемся от шаблонных шаблонных параметров

                Использовать шаблонные шаблонные параметры С++ довольно сложно. Хочу продемонстрировать силу boost::mpl и показать трюк, позволяющий описывать шаблоны, полностью отказавшись от шаблонных шаблонных параметров.
                Продемонстрирую проблему. Есть класс, принимающий тип объекта и тип контейнера для этого объекта.
                template <typename T, typename Container>
                struct A
                {
                  typedef Container<T> type;
                };
                

                Так писать нельзя, вы должны использовать шаблонные шаблонные параметры, чтобы указать, что Container сам по себе является шаблоном.
                Читать дальше →
              • STM32+Visual Studio

                  Не так давно я вновь занялся поиском IDE для STM. Keil, IAR — это, конечно, прекрасно, но да простят меня любители данных сред, они ужасны. CooCox — единственная вещь, которая напоминает о том, что мы живем в 21 веке. Но CooCoх даже рядом не стоял с моей любимой средой разработки — Visual Studio. И мне удалось найти проект, который позволит мне работать с STM в VS.

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