• Comment from a drafted post.
  • Реверс-инжиниринг полёта Бэтмена
    +12
    Снимаю шляпу, очень сильно. При прочтении создавалось впечатление поиска иголки в стоге сена. Впрочем, так оно и есть.
  • Любовь и ненависть к Java 8
    0
    В общем случае в C++ так же,
    auto i = 1;
    // or, more like C++11
    auto i {1};
    



    Знаю что это пост 13-го года… Но на случай если кто-то сюда случайно попадет так же как и я.
    Ваши 2 выражения не идентичны. В первом случае auto выведется в тип int — все правильно. А во втором в…
    std::initializer_list<int>
    

    Такая особенность выведение типов у auto.
  • GHOST — уязвимость gethostbyname() в glibc
    0
    Вы отредактировал коммент и мой потерял смысл. :) Теперь я понял, спасибо.
  • GHOST — уязвимость gethostbyname() в glibc
    0
    Это я понял, спасибо. Я не понял как надо совместно использовать inet_aton() и gethostbyname(), чтоб избежать проблем ?:)
  • GHOST — уязвимость gethostbyname() в glibc
    0
    вызов inet_aton() перед gethostbyname()

    Не совсем понял практику использования этих двух функций вместе. Может первое вместо второго? Или gethostbyaddr() вместо gethostbyname()?
  • Игра про автора systemd — Леннарта Поттеринга
    0
    Ну Вы не перегибайте.

    coreutils/busybox — являются оберткой над кучей маленьких программ, каждая из которых выполняет только одну задачу.
    gcc — выполняет одну задача — компилирует.
    emacs — редактирует текст, несмотря на кучу дополнительных плагинов.
    ядро — само по себе состоит из кучи модулей/процессов/etc., которые просто работают в одном адресном пространстве (если говорить о монолитных ядрах)

    и т.д. и т.п.

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

    Улавливаете разницу?
  • Игра про автора systemd — Леннарта Поттеринга
    +9
    А еще нарушает один из канонов юникса — «программа должна выполнять только одну задачу, но выполнять ее хорошо» (цитата не дословная).
    Слишком много функций systemd пытается на себя перетянуть, а от этого страдает надежность.
  • Как правильно клонировать объект?
    +1
    А как же фабричный метод? Он вроде как дешевле сериализации, безопаснее clone'а и толерантен к полиморфизму.
  • Robotale: радиоуправляемая машинка с Arduino и Bluetooth, которая поможет изучить основы работы с Arduino и не только
    +3
    Все оно так, да не совсем. Было дело, заказали 5-ть таких китов с dx.com для демо на конференцию. Все компоненты как в описании, но:
    1. Вместо Arduino приехал китайский клон: Funduino. У Funduino оказался нехилый баг: используя питание от китовых аккумов, на пин 5V подавалось 3.3V (при питании с USB — все нормально). Проблема очень критична для некоторых сенсоров, например, сонара (он работает только на 5-ти). Не знаю, был ли это брак, или это поголовная болезнь.
    2. В комплекте одна плата драйвера L298N, а движков 4. При параллельном подключение 2-ух движков на один вход, все работает из рук вон плохо. Движки вроде одинаковые, а вот редукторы в каждом из них работают с совсем разной скоростью, при одинаковом напряжении. В итоге робот гребет в совершенно непредсказуемую сторону. Кроме того, при попытке поворота (два колеса вперёд, два — назад), робота неслабо сносит с оси.
    3. Общая корявость сборки: движки закреплены на плате так, что после установки колёс те цепляют за края платы.

    В результате пришлось в срочном порядке заменять шасси и Funduino на отдельно купленные оригинальные Arduino при тех же остальных запчастях. Получилось вот так:
    Видео


    Гораздо позже, после дополнительных доработок грубым напильником, вышло как-то так:
    Фото
    image

    Резюме: как игрушка может и подходит, но геморроя от кита можно получить очень много.
  • Сериализация C++ с полиморфизмом и прототипами
    0
    Всё же это C++, а не Java или C#


    Если Вы помните, C++ предоставляет множество парадигм и абсолютно не ограничивает их использование и даже смешивание. Конечно есть некий оверхед в использовании динамического полиморфизма. Но чем конкретно Вам не нравится подобный подход?
  • Многозадачность в ядре Linux: workqueue
    +2
    Тут Вы конечно правы — самому копаться придется очень много. Тем не менее, основы есть основы и базовые компоненты ядра (например та же обработка прерываний) существенно не меняются. Чаще всего добавляют новые стратегии и структуры данных, при этом от старых никто не отказывается.
  • Многозадачность в ядре Linux: прерывания и tasklet’ы
    +6
    Отлично написано, спасибо. «Ядро Linux. Описание процесса разработки» Р. Лава помогает разобраться с темой.
    На мой взгляд, стоит также упомянуть о том, что минимальная необходимая логика внутри обработчика в top-half должна содержать ответ устройству о полученном прерывании, это must have всегда.
  • Почему Ваза утонул, а С++ всё ещё на плаву
    0
    Вы же согласны, что даже такой простой механизм, как позднее связывание, тоже может оказаться дороговатым удовольствием в некоторых случаях?
  • Почему Ваза утонул, а С++ всё ещё на плаву
    0
    Я смотрю Вы никогда не работали с критичным к производительности кодом.
    Делать некоторые вещи в рантайме может оказаться непомерно дорогим удовольствием. При этом нам по прежнему нужен толерантный к изменениям код. Тут на помощь приходят и статический полиморфизм (вспоминаем концепцию «стратегий» у Александреску А. «Современное проектирование на с++»), и вычисления на этапе компиляции.
  • Почему Ваза утонул, а С++ всё ещё на плаву
    0
    И совсем забыл про в) полиморфизм на этапе компиляции.

    Это все к тому, что шаблоны в C++ ну оочень мощный интсрумент.
  • Почему Ваза утонул, а С++ всё ещё на плаву
    +1
    Окей, шаблоны из гуд (хотя того же можно достичь, опять же, архитектурно)


    Это как же Вы архитектурно достигнете:
    а) вычислений во время компиляции
    б) автоматической генерации кода
    ?
  • Таблица виртуальных методов и техника безопасности
    0
    Так никто и не говорил, что так надо делать :). А Ваш пример действительно ужас, так как memset вызывается уже после вызова конструктора. memset'ом можно инициализировать объекты, выделенные, например, с помощью malloc. Но опять таки этого никогда не стоит делать. В статье была просто проведена аналогия между структурами в Си и классами С++.
  • Таблица виртуальных методов и техника безопасности
    0
    Кстати, для более глубокого понимания, очень рекомендую «Дизайн и эволюция С++» Страуструпа. Там описан и механизм, и то, что к такому решению привело.
  • Разработка сайтов (веб-приложений) на C++ (и не только) в виде подключаемых библиотек (*.so, *.dll)
    +1
    Как минимум без libevent и boost::asio в POSIX'е есть poll(). Правда не во всех системах есть нативная его реализация (иногда это просто проксирование того же select'а)
  • Comment from a drafted post.