Задать вопрос
  • Macbook 12 2017 на 256 или macbook pro 13 2017 на 128 без TouchBar для изучения front-end?

    @McBernar
    У меня 13' про 2017.

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

    Посмотрите лучше в сторону бу 2016 про. Это был на голову качественнее ноутбук.

    Про 128 вам правильно говорят. Более того — 256 тоже еле хватает. Минимум 512 для комфортной работы. И это говорит вам человек, который никогда не хранит музыку/кино/фотки на диске. Только софт для дизайна и разработки.

    Ну и проц/гпу — тоже важно. Мой домашний аймак 2011 года делал рендеры в Cinema4D и After Effects раза в полтора быстрее, чем 2017 прошка.

    В общем, если хотите рабочий инструмент — либо ищите больше денег, либо возьмите прошлое поколение. Реально, прошка с ретиной 2016 года — очень крутая. У меня на старой работе такой был — не мог нарадоваться.
    Ответ написан
    7 комментариев
  • С или modernC++ для IoT?

    @Mace_UA
    Не думаю, что оверхед от эксепшенов и shared_ptr'ов в C++ намного больше, чем оверхед от аналогичных вещей в Си. Ведь "эксепшены" там можно частично имитировать через setjmp/longjmp и прочие прелести, а "shared_ptr" навелосипедить ручками, сделав структуру для хранения данных, указателя на функцию-делитер и атомарных счётчиков strong и weak ссылок, работа с которыми будет осуществляться через соответствующие функции из <stdatomic.h>.
    Ну и "weak_ptr" заодно заимплементить по аналогии с плюсовым, для полноты картины.

    К чему я это всё?

    Если Вам не нужен определённый функционал -- просто не используйте его.
    И это утверждение справедливо вне зависимости от выбранного языка.
    Если Вам не нужна некоторая часть языка -- это не причина отказываться от него полностью. Весь C++ на сто процентов, по-моему, не нужен вообще ни на одном проекте :)

    А из фишек modern C++ в эмбеддеде наибольшую пользу, скорее всего, принесёт constexpr. В сочетании с шаблонами поможет вынести в компайл-тайм много всего -- причём, в отличие от рекурсивной функциональщины, использующей только шаблоны, это будет смотреться читабельно. В C++11 constexpr слабоват, но начиная с C++14 с ним есть где разогнаться.

    Из структур данных в первую очередь посмотрите на array и tuple.

    Для безопасности могут помочь enum class и nullptr.

    Если в Вашем коде имеют место полиморфные иерархии, то override сделает код понятнее и предотвратит неприятные ошибки с hiding'ом вместо переопределения.

    Рекомендую посмотреть на ютубе лекции Jason'а Turner'а -- у него были видосики о применении современного C++ в эмбеддеде. Он показывал сгенерированный ассемблер -- отличий от аналогичного низкоуровневого сишного кода вообще не было. Зато в исходном коде типобезопасность и расширяемость, которых добиться одной чистой Сишкой не всегда возможно.

    Думаю, с выходом новых стандартов C++ и появлением их поддержки в компиляторах этот язык должен набрать большую популярность в эмбеддеде.
    Ответ написан
    Комментировать
  • Как задать формат boost::lexical_cast?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    boost::format вам в помощь. lexical_cast не предназначен для этого.
    std::string str = boost::str(boost::format("%.2f") % temp);
    Ответ написан
    Комментировать
  • Ёмкость аккумулятора и расчёт времени работы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    7Ач/0.007А = 1000ч ≈ 41день.
    Надо ещё учесть ток саморазряда аккумулятора, свинцово-кислотные теряют ~5% заряда за месяц, значит максимум 38 дней, если не будет других потерь.
    Ответ написан
    2 комментария
  • Как сделать Bind по аналогии с QtSignal?

    Nipheris
    @Nipheris Куратор тега C++
    std::placeholders
    btn->onClick = bind(&Player::play, this, std::placeholders::_1);
    Ответ написан
    1 комментарий
  • Почему char занимает 1 байт, а строка с одним символом - 2 байта?

    Djaler
    @Djaler
    Сеньор-помидор
    Все правильно, этот 1 байт занимает символ конца строки '\0'
    Ответ написан
    Комментировать
  • Наследование интерфейсов С++?

    @MiiNiPaa
    Так у вас же ромбовидное наследование.

    TcpSocket::ITcpSocket::start определено, а IServer::ITcpSocket::start — нет.

    Вот и проблемы. Можно их решить, наследуясь от интерфейсов виртуально.
    Ответ написан
    Комментировать
  • Как забиндить classmember handler для boost::asio?

    Nipheris
    @Nipheris Куратор тега C++
    99%, что удаленная функция - это конструктор копирования.
    По смыслу объекта сокета можно догадаться, что копировать его не стоит (т.к. так или иначе он представляет собой обертку над системным ресурсом). Раз его копировать не стоит, используйте указатель на сокет вместо самого сокета. Например, shared_ptr, вот как тут советуют: stackoverflow.com/questions/5425666/passing-around... .

    Вообще, привыкайте, что по значению сложные объекты передаются довольно редко (почти никогда), т.к. передача по значению противоречит сути этих объектов - существовать строго в том количестве, в котором их насоздавал программист.
    Ответ написан
    1 комментарий
  • Какой протокол лучше для передачи данных между несколькими Arduino?

    @vilgeforce
    Раздолбай и программист
    RS485 из коробки полностью удовлетворяет вашим требованиям. Вам необходимо только повесить на Rx/Tx преобразователь уровней TTL<-> RS485.
    Ответ написан
    Комментировать
  • Указатель на функцию из библиотеки на Си в С++ класс?

    AxisPod
    @AxisPod
    Да, не можете. Метод может быть вызван только имея 2 указателя, указатель на объект и указатель на функцию, при этом тип метода содержит в себе тип объекта. Соответственно в C либе вы сможете сохранить только в 2 указателя, но вызвать из C метод вы не сможете.

    Но можно сделать что-то типа
    // C
    struct my_t {
        void (*send_sms)(int);
        void* context;
    };
    
    void my_test(struct my_t *m)
    {
        (m->send_sms)(545, m->context);
    }
    
    // C++
    void send_sms_helper(int value, void* context) {
      MainWindow *wnd = reinterpret_cast<MainWindow*>(context);
      wnd->test(value);
    }
    
    MainWindow::MainWindow(QWidget *parent)...
    {
        my = my_new();
        my->send_sms = send_sms_helper;
        my->context = this;


    А send_sms_helper лучше сделать статическим в MainWindow.
    Ответ написан
    1 комментарий
  • Println, Scan и многопоточность?

    @SilentFl
    Ваша ошибка заключается в недопонимании, что же такое горутина. Горутина != поток. Горутины можно рассматривать как некие блоки кода, которые рантайм может исполнять в произвольном порядке (с ощущением что они исполняются параллельно), и если началось исполнение горутины - то оно уже не прервется (с оговоркой - переключение между горутинами все-таки есть, на io-операциях).
    Решение простое - нужно сказать рантайму чтобы он не в один поток (в рамках терминов ОС) исполнял код. Например вот так
    Ответ написан
    4 комментария
  • Как узнать ip человека из vk?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Отправляем пользователю ссылку на свой сервер вида
    васяпупкин.ру/смотри_большие_сиськи
    У себя на сервере сохраняем ip всех, кто переходил по ссылке
    Ответ написан
    1 комментарий
  • Для чего используется golang?

    artem_kovardin
    @artem_kovardin
    Go отлично подходит для сетевого программирования. Сравнительно небольшие усилия нужны для написания довольно приличного клиент-серверного приложения (consul, etcd).

    Кроме того, скорость и маленькое потребление памяти позволяют применять Go для обработки большого количества информации, подсчета статистики, написания парсеров/кравлеров. Тут очень сильно способствует возможность простого распараллеливания.

    Go применяется для написания девопс и админских инструментов (Docker, CoreOS) которые легко использовать, так как все компилируется в один бинарник и линкуется статично.

    А вообще, заходите к нам, читайте новости и будете всегда в курсе, для чего используется Go.
    Ответ написан
    1 комментарий
  • Питание atmega328 от usb?

    @chapter13
    Потребление такой atmega328 будет в районе 15-20 mA.
    Ответ написан
    Комментировать
  • Питание atmega328 от usb?

    Ocelot
    @Ocelot
    Не сгорит. Двухамперность блока питания говорит только о его максимальном токе. Если контроллер потребляет меньше, никто не будет в него насильно эти два ампера вкачивать.
    Ответ написан
    Комментировать
  • Почему Линус не любит C++?

    @lesha_penguin
    <Мысль_вслух>Если существует специальный «ад для говнокодеров», то наверняка, одним из самых жестких наказаний в нем была бы отладка того говнокода, который, который в С++ получается по принципу «делается более просто и изящно».</Мысль_вслух>

    Если начинать «от сотворения мира»:

    1) Как известно C++ был был придуман Страуструпом, мы не будем умалять его «ученные регалии» (ученных-то наград куча, но они по сути единственное чего «добился человек», кстати, 90% прямо или косвенно за c++). Однако, заметим, что Страуструп — как раз есть пример «чистого теоретика» (в отличии от «практика»-Торвальдса), т.е. является человеком за свою жизнь не принимавшим участия в разработке ни одного серьезного реального программного проекта. По сути компилятор c++ — единственное более-менее практическое дело в его жизни. Соотвественно о том с какими проблемами приходится сталкиваться в реальном «software development-е» с «высоты его ООП-теорий» он имеет весьма посредственное представление.

    2) Как верно заметили, в упомянутой статье, изначально это был как раз «Це с классами», т.е. изначально НЕ БОЛЕЕ ЧЕМ «академическая» попытка навернуть на C отдельные элементы «обьектности» (типа, Smalltalk обьектный, а давайте попробуем сделать такое на более низком уровне). Кстати, могу Вам сказать, что с C++ я впервые познакомился в 80-90е годы, когда языком «ученной среды» был Фортран, языком «системщиков» Си, а для обучения «всех непрофильных специальностей» основам программирования использовались Basic и Pascal. Да, но правда «тогдашний C++ 80» отличался от нынешнего — он реально производил впечатление «просто прикольной поделки» (на память помню, что например, тогда не было и половины привычного функционала например таких вещей как всяких «reinterpret_cast-ов» или namespac-ов.). Кстати, да… барабанная дробь… НЕ БЫЛО STL!!!

    3) Наверное Страуструповский «Це с классами», наверное так бы и остался в списке «прикольных поделок» в аналах истории, если бы не одно обстоятельство: «ВНЕЗАПНО» произошел «софтверный бум», соотвественно: a) «элитных» «олдскульных» программистов стало резко не хватать b) «требования к качеству софта» резко упали c) понадобилось средство для генерации достаточно низкоуровневого «говнокода в промышленных масштабах». И как ни странно, (ага, угадали, именно с появлением в C++ STL-я) C++ так и не избавившись от своих «академических болячек» был брошен в пучину «мейнстрима».

    4) Вам говорят истинную правду, когда говорят, что «C++» это маркетинговое название для «Це с классами». Да, это так. И можно сказать, к великому сожалению, он нашел свою рыночную нишу. (Сейчас любой дурак может легко «освоить C++ за 21 день (с бустом и стлем)», при этом не умея даже внятно ответить на простой вопрос «Если ты такой умный, обьясни тогда почему, c$k@, у тебя программа течет по памяти и падает», (про такие «неполиткорректные вопросы», как «зачем писать 100 строк на то, что пишется в две-три», мы вообще тактично молчим, а то, мало ли, может у человека «сдельная зарплата» за количество строк ;) ), зато с видом крутого Беара Грилса можно обсуждать такие «высокие материи» как «Паттерны» и «чистый ООП»).

    5) И к самому большему сожалению, в некоторых случаях альтернативы нет. Да, Я еще не встречал ни одного программиста, который в действительно реальной разработке софта активно использовал бы C++ и при этом от него бы не плевался. У C++ есть «Огромный ПЛЮС» — Его Мультипарадигменность! По-сути это его единственный плюс, позволяющий «не уйти в дебри» (типа попыток запихнуть «main()» в обьект только ради «идеи чистого ООП»)!

    6) А теперь, после такого «исторического» вступления еще раз перечистайте внимательно письмо Торвальдса, высказывание человека который лучше многих «теоретиков чистого ООП» знает как это оно «на собственной шкуре» разрабатывать сложные системы, и комментарии от хабраюзеров, которые «на живой практике» знают «почем фунт лиха» в топике. Под большинством утверждений я лично бы поставил свою подпись золотыми буквами.
    Ответ написан
    5 комментариев
  • Почему Линус не любит C++?

    mejedi
    @mejedi
    Проблема не в качестве языка, а в качестве программистов.

    Не любят вот почему:
    1) Сферический C++ программист не знает структур данных — за него все делает STL.
    2) Сферический C++ программист беззаботно выделяет память.
    3) Программа сферического C++ программиста не работает без буста.
    4) Сферический C++ программист делает простые вещи сложно.
    Ответ написан
    6 комментариев