• Работа с регистрами внешних устройств в языке C, часть 2

    • Tutorial
    Наступила полночь и Шехрезада продолжила позволенные речи

    Для начала замечание к предыдущей статье — я там позволили себе неуважительно высказаться по поводу ASSERT — поясню свою позицию. Мне не очень нравится. что проверка в ASSERT проводится только на этапе исполнения, проверка на этапе компиляции эффективнее. Мне в личку сообщили о существовании конструкции, позволяющей сделать необходимые проверки именно на этапе компиляции (я проверил — действительно работает), думаю, что пост на эту тему скоро появится в песочнице.
    Итак, мы продолжаем…
    Как было сказано выше, регистры внешних устройств характеризуются расположением в адресном пространстве (тут мы уже определились) и составом управляющих элементов. Дело в том что многие управляющие элементы недостаточно велики для того, чтобы занять целое слово конкретного МК и, чтобы сэкономить адресное пространство, несколько управляющих элементов могут быть упакованы в один регистр. Такое решение позволяет также в определенных условиях несколько увеличить скорость работы программ, взаимодействующих с данным внешним устройством, потому и встречается весьма часто. В то же время данное решение вызывает определенные проблемы в отношении языка программирования, о которых мы и поговорим.
    Читать дальше →
  • Никто не умеет обрабатывать ошибки

      Из одной книги в другую, из статьи в статью кочует мнение о том, что выражение

      try {
         //do something
      }
      catch(Exception ex) {
      }
      

      является плохой практикой. Возврат кодов – также плохая практика. Но становится ли нам, программистам, жить легче с этими знаниями и так уж ли они неоспоримы? И самый забавный вопрос – кто-нибудь в мире умеет грамотно обрабатывать ошибки, возникающие по ходу работы приложения? (под этим я понимаю обработку только тех ошибок, которые имеет смысл обрабатывать и вывод сообщений об ошибках, которые соответствуют действительно произошедшей, которые не вводят пользователя в замешательство, а в идеале и предлагают решение возникшей проблемы).
      Подробности под катом
    • Несколько простых хеш-функций и их свойства

      В процессе работы над хеш-таблицей возник обычный вопрос: какую из известных хеш-функций использовать. Образцов таких функций в сети множество, есть и «любимчики», использовавшиеся ранее и показавшие неплохой результат, в основном оценивавшийся «на глаз» — длины цепочек в хеш-таблице на боевых данных «примерно равны», значит, все работает так, как нужно; отдельные выбросы… ну что ж, ну выбросы, бывает.
      Читать дальше →
    • Опыт применения ЕСПД

      Введение


      Основная задача этого текста — рассказать, что такое Единая система программной документации (ЕСПД) и как эти стандарты применять на практике. Начну с рассказа о том, какие бывают стандарты, и закончу опытом применения каждого из ЕСПДшных стандартов в отдельности.
      Читать дальше →
    • Как правильно лгать с помощью статистики


        Существуют три вида лжи: ложь, наглая ложь и статистика (источник)

        Есть такой замечательный жанр — "вредные советы", в котором детям дают советы, а дети, как известно, всё делают наоборот и получается всё как раз правильно. Может быть и со всем остальным так получится?

        Статистика, инфографика, big data, анализ данных и data science — этим сейчас кто только не занят. Все знают как правильно всем этим заниматься, осталось только кому-то написать как НЕ нужно этого делать. В данной статье мы именно этим и займемся.


        Hazen Robert "Curve fitting". 1978, Science.

        Структура статьи:
        1. Введение
        2. Предвзятая выборка (Sampling bias)
        3. Правильно выбираем среднее (Well-chosen average)
        4. И еще 10 неудачных экспериментов, про которые мы не написали
        5. Играем со шкалой
        6. Выбираем 100%
        7. Скрываем нужные числа
        8. Визуальная метафора
        9. Пример качественной визуализации
        10. Заключение и дальнейшее чтение

        Читать дальше →
      • Миниатюрный HD-видеотранслятор на виртурилке: тесты в сетях 3G и 4G



          После первых статей о виртурилке к нам пришло много вопросов вида «а можно ли сделать такую штуку, которую цепляешь на человека/велосипед/мотоцикл/машину или на самолетик/коптер/лодку/машинку и она транслирует видео в интернет?»

          Ну вот мы и решили сделать такое устройство, тем более что недавно нам удалось наконец осилить работу с HD-видео. Мы также разработали простенький корпус для устройства (файлы stl для печати на 3D-принтере прилагаются).
          Читать дальше →
        • Смарт-поинтеры и RAII на службе программиста

          Исторически так сложилось, что руководство желает, чтобы задача была выполнена быстро. Для этого программисты сохраняют красоту и чистоту кода. Этот пост появился как напоминание о редкоиспользуемых нововведениях в C++11 – смарт-поинтерах, позволяющих указывать функтор для освобождения ресурсов.
          Для примера возьмем файловый поток FILE из stdio.h, который любят за простоту и скорость, попробуем добавить ему красоту и базовую гарантию при исключениях:
          unique_ptr<FILE, decltype(&fclose)> my_file(fopen("test.txt", "w"), &fclose);
          if(my_file)
            fwrite("test", 4, 1, my_file.get());
          

          В результате код зависит только STL и требует небольшой модификации обращений к файлу, пишется быстро, выглядит современно. Вот так получился RAII в чистом виде.
          Как это работает?
          • +14
          • 8,5k
          • 8
        • Тонкости анализа исходного кода C/C++ с помощью cppcheck

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

          В этой статье будут рассмотрены возможности cppcheck по вылавливанию утечек памяти, полезные параметры для улучшения анализа, а также экспериментальная возможность по созданию собственных правил. Сегодня никаких сравнений анализаторов «кто лучше», статья полностью посвящена работе с cppcheck.
          Читать дальше →
        • Концепции Boost

          • Tutorial
          От использования шаблонов в С++ лично меня всегда отпугивало отсутствие стандартных механизмов задания ограничений параметров. Другими словами, когда разработчик пишет функцию

          template <class T>
          bool someFunc(T t)
          {
          	if (t.someCheck()) {
          		t.someAction(0);
          	}
          }
          

          он делает различные допущения относительно функциональности объектов типа T, однако не имеет стандартной возможности донести их до пользователей. Так приведенный пример предполагает, как минимум, следующее
          Читать дальше →
        • Шпаргалка по С++11 для печати на кружке

          • Tutorial


          Вот захотелось мне такое сделать и я сделал.
          Картинка под спойлером


          Полноразмерная картинка (на случай если Хабр пережмёт картинку под спойлером). Подходит для печати на стандартной кружке, площадь поверхности 20 х 8.8 см, 300 dpi (ребята в магазине сувениров сказали, что это стандарт).
          Шпаргалка, послужившая основой

          P.S. Да, я в курсе, что у меня не вышло вместить 1300-cтраничный стандарт на одну кружку. В следующий раз точно получится, я уверен.