• Какие книги по C++ были выпущены недавно?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Комментировать
  • Как выловить ошибку в приложении QT?

    EvgenijDv
    @EvgenijDv
    C/C++ programmer
    При отладке не получалось просмотреть больше одного вызова чтения, после него вылезал SegFault. Но при "Запуск без отладки" все работало, поэтому забил.

    facepalm.png
    Ответ написан
    Комментировать
  • Поможет ли дополнительная оперативная память?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    На самом деле информации очень мало. Чрезвычайно. Дело даже не столько в юз-кейсе, сколько в таких банальных вещах, как ОС и возраст ПК. Очень печально видеть таких кул-хацкеров, которым на всё один ответ - ставь SSD. Я тоже таким был. Пока руки не выпрямил. Теперь краткий ликбез:

    Об SSD: оно быстрое, причём не столько по скорости чтению/записи, сколько по времени доступа, отчего IOPS взлетает до небес; однако, потребительские диски - 10k перезаписей на ячейку, что при интенсивном раскладе убьёт пол диска за год (ну в общем, как винда любит); да, дополнительные плюшки, вроде меньшего энергопотребления и практически полного иммунитета к тряске хоть и имеют место быть, однако они больше необходимы в лаптопах; ах да, SSD бесшумны - это круто, но на любителя, мне нравится детектить работу ПК по шуму.

    Об RAM: это очень зависит от ОС, точнее Windows/НЕWindows. Объясняю - это исчадие ада очень любит кэшировать. Кэшировать всё и вся. А ещё. Оно очень расточительно на память. Видимо подсистемы пишут не просто разные люди, но и даже не контактирующие никаким образом друг с другом. По опыту скажу, что очень часто инженерные решения в Windows примерно такие: если можно что-то сделать так или иначе, то здесь это сделано и так и иначе. От чего оверхэд колоссален. Причём с повышением цифры всё только хуже - фичи добавляют, оптимизировать забывают. От этого система почему-то очень не хочет выгружать индексацию, например, освобождая доступ приложениям. А ещё, ещё в Windows есть где-то глубоко утечка. Лечится только перезагрузкой. Ну это у меня ноутбук аптайм неделями держит - приходится перезагружатся таки иногда.

    О файле подкачке: не знаю, кто вообще так назвал swap; нормальные системы могут работать без свапа, эта не может (разве только если есть >16ГБ RAM); не знаю, где проблема, однако похоже, что Windows зачем то вместо того, чтобы забыть кэш диска, очень хочет убрать неактивные приложения в свап.

    Об износе: самое первое при первое что изнашивается - дерьмовые планки RAM. Так уж случилось, что в дешёвых RAM гнилые кондеры, да и сама логика не ахти, так что со временем заряд держит всё хуже и хуже. Отсюда проблемы - тайминги надо повышать, да вот только кто об этом заботиться будет. Ошибки хлынут, ОС их бережно разбирает и переподгружает (видимо для этого swap), однако это всё становиться невыносимо медленно.

    Окей, получается что если:
    + ОС время от времени залипает
    + ОС иногда убегает под синие шторы
    + ОС порядком надоела заботой о пользователе с сообщениями о нехватки памяти
    + Диспетчер задач прогнозирует скоры апокалипсис по причине 99% занятой физической памяти
    + После перезагрузке полчаса-час работать можно относительно спокойно

    то настало время поменять RAM. Именно поменять, а не добавить, не скупитесь, старая RAM будет только тянуть новую на дно. Смею предположить, что планкам больше 2х лет - это примерный срок службы плохих планок RAM. В следующий раз рекомендую брать не бюджетные решения kingston, а каких-нибудь корсаров, дороже в полтора раза, зато хоть на 10 лет =), как установил эмпирический опыт.

    Теперь об SSD. Не советую сейчас. Серьёзно. Эта штука ещё толком не нагрелась, хотя возраст у неё приличный. Они уже почти не страдают детскими болезнями, но до сих пор не хватает действительно хороших предложений на рынке. Подождите совсем чуть-чуть тут уже анонсируют интересные плюшки. Впрочем потребительский сектор уже почти готов для SSD, на мой таки сугубо личный взгляд твёрдотельные на стационаре - перебор.

    Чуть чуть про HDD. Они прекрасны. На самом деле. Они очень живучи - до сих пор HDD на 160 ГБ трудится, хотя ему почти 10 лет (на то время это было очень очень); сейчас я на него смонтировал рут и не знаю бед. За время его безотказной работы устали 2 SSD (один из них был взят как-только SSD появились и его объём был скромные 60 ГБ) и три гибрида. Причём один из гибридов перепрошили мне на работу "без твёрдотельного кусочка" - до сих пор в NAS стоит. Гарантийный ремонт дисков - это банальная замена, поберегите данные и нервы. К слову, посмотрите в SMART, возможно просто плохо именно этому накопителю.

    Ещё меньше про новую платформу. И да и нет. Если ничего серьёзного не требуется (какой-нибудь фиче-related программинг) - не обязательно. Хотя CPU тоже изнашивается, да. Ну а по поводу Core i3 - ни в коем случае. Обратите внимание на Pentium GXXX - уникальные камни, дешёвые, быстрые, холодные. Если честно Core i3 - огрызок. Если и Core, то хотя бы i5 - тут и Turbo Boost нормальные, и Hyper Threading даёт заметные 0-150%. Хотя платформу было бы обновить не плохо.

    Итоги. Если таки решитесь на SSD - почитайте вот здесь. Там много ссылок, интересных и не очень, может помочь. Если таки решитесь на обновление платформы, учтите, что здесь придётся обновить всё. Не просто камень перевоткнуть, а минимум - поменять мат. плату.
    Ответ написан
  • Чем отличаются weak и strong?

    morozovdenis
    @morozovdenis
    strong - сильная ссылка и при присваивании в проперти с strong-ом колво ссылок на объект увеличивается

    weak - слабая ссылка и при присваивании в проперти с weak-ом колво ссылок на объект НЕ увеличивается, а когда объект удаляетс, то этому проперти присваивается nil

    пример:
    @property (strong, nonatomic) NSObject *a;
    @property (weak, nonatomic) NSObject *b;
    
    NSObject *_a = [NSObject new]; // retainCount == 1
    self.a = _a; //retainCount == 2
    _a = nil; // объект ещё не удалён , retainCount == 1
    self.a = nil; // объект будет удален
    
    NSObject *_b = [NSObject new]; // retainCount == 1
    self.b = _b; // retainCount == 1
    _b = nil; //  объект будет удален, а в self.b будет nil
    Ответ написан
    3 комментария
  • Как подружить Arduino с 200 релюшками?

    У тебя есть 200 (!) реле.
    Ну зачем, зачем тебе Ардуино?!
    Ответ написан
    2 комментария
  • Какой метод указывает QWidget не исчезать после отображения методом show() ?

    @xseven
    Вы создаете немодальный диалог вызывая show()
    Если я правильно понял, то:
    Попробуйте вызвать exec() вместо show(), тогда окно станет модальным и не закроется пока вы не завершите необходимые действия в нем.
    Ответ написан
    Комментировать
  • Книги по ООП без привязки к языку?

    donkaban
    @donkaban
    Умею рисовать тени
    Мейер - Буч - GoF.

    Бертран Мейер. Объектно-ориентированное конструирование программных систем
    Гради Буч. Объектно-ориентированный анализ и проектирование
    Эрик Гамма, Ральф Джонсон, Ричард Хелм, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
    Ответ написан
    3 комментария
  • Хороша ли NetBeans как IDE для C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Попробуйте QtCreator. Под виндой ms vs тоже терпимо (особенно с Visual Assist).
    Ответ написан
    Комментировать
  • Что такое "асимптотически точная оценка времени работы алгоритма"?

    @throughtheether
    human after all
    Мое авторитетное мнение дилетанта таково.
    Во-первых, имеет смысл ознакомиться с первоисточником по данной теме, а именно со статьей Дональда Кнута. В ней на стр.19 дается удобное, на взгляд автора, определение отношений Θ,O,Ω. Эти отношения первоначально задаются как отношения значений неких двух функций. Оценка временной и пространственной сложности - это приложения. Целью введения такой нотации было упростить вычисление количества операций, требуемых для выполнения алгоритма, без потери качественных характеристик, а также отвязаться от возможных зависимостей от архитектуры, компилятора и т.д. Грубо говоря, если алгоритм обсчитывает 1000 единиц входных данных час, то эта нотация помогает быстро оценить, как долго будут обсчитываться, например, 2000 единиц. Естественно, что эта нотация "огрубляет" информацию о значениях функции, в этом ее предназначение.

    Что такое «асимптотически точная оценка времени работы алгоритма»?
    Если речь идет о Θ-нотации, то это функция (или множество функций), растущая так же быстро, как и время работы алгоритма с увеличением длины входных данных.

    Оценка Θ() существует только тогда, когда O() и Ω() совпадают и равна им.
    Это положение мне представляется частично верным. Если f(n)=O(g(n)) и f(n)=Ω(g(n)), то f(n)=Θ(g(n)), где g(n) - некая функция, например, вида nlogn. Другое дело, что если f(n)=O(n), то также верно, что f(n)=O(n^2), то есть, несмотря на то, что у функции есть Θ-оценка, ее O- и Ω-оценки могут не совпадать.

    Итак, O() - асимптотическая оценка алгоритма на худших входных данных, Ω() - на лучших входных данных
    Если определить "лучшие"/"худшие" данные как требующие минимального/максимального времени среди наборов входных данных такой же длины, то это утверждения мне также представляется частично корректным. Количество операций, которое выполняет алгоритм в худшем, среднем и лучшем случаях - это функции от длины входных данных. Каждую из этих функций можно оценить при помощи каждой из трех (Ω,Θ,O) нотаций.

    Мне представляется разумным такое восприятие оценок:
    f(n)=O(g(n)) - функция f(n) растет не быстрее функции g(n)
    f(n)=Ω(g(n)) - функция f(n) растет не медленнее функции g(n)
    f(n)=Θ(g(n)) - функция f(n) растет так же быстро, как и функция g(n)
    Попробуйте нарисовать график некоей возрастающей функции в логарифмическом масштабе по оси ординат, и представить, где расположены значения функций, корректно оценивающих исходную при помощи Ω,O,Θ нотаций, пользуясь определениями из статьи Кнута и отметив на графике константы C и n0.


    Известно, что например для сортировки qsort средняя оценка для случайного распределения входных данных (она же лучшая, для полностью сбаллансированного варианта) равна Θ(nlogn),
    С моей точки зрения, корректно также будет сказать, что средняя оценка также равна O(nlogn) или Ω(n).

    тогда как верхняя оценка (для специально подобранных неоптимальных данных) равна O(n^2).
    а также равна Θ(n^2).

    Правильно ли будет сказать, что реально асимптотически точная оценка алгоритма дается в первую очередь на основании особенностей работы конкретного алгоритма для усредненных входных данных (понимая под усредненными данными случайно распределенный массив данных), а в сложных случаях - отталкиваясь от оценок сверху O() и снизу Ω()?
    С моей точки зрения, если есть совпадающие оценки O и Ω, элементарно получается Θ-оценка. Другое дело, что "худшая", "лучшая", "средняя" вычислительные сложности - это функции от длины входных данных. Для каждой из этих функций может быть дана оценка асимптотической скорости возрастания, будь то Ω, Θ или O. Рассуждая о "случайно распределенном массиве данных", можно углубиться в матстатистику, что, на мой взгляд, не упростит задачу.

    Пользуясь случаем, рекомендую курс на coursera от Tim Roughgarden. Релевантные видео есть на youtube.
    Ответ написан
    9 комментариев
  • Как манипулировать потоками звука в PulseAudio?

    :D Используйте QJackCTL. Это утилита, которая предназначена именно для этого. Она может захватывать на себя все аудиопотоки, перенаправляя их куда вам нужно. Вот пример интерфейса:
    a620da9a131f41eba788523413b5c0be.png

    На скриншоте jamin и ardour - программы для работы со звуком. Вот таким нехитрым способом можно из одной в другую звук загонять.

    Вообще если занимаетесь звукозаписью на линуксе - Ubuntu Studio - очень удобный дистрибутив. Там все запилено и настроено как надо обычно уже, заводится с полпинка, без плясок с бубнами.
    Ответ написан
    1 комментарий
  • Оператор switch case в Arduino для диапазона данных?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне не нравится обилие if. Как можно сократить конструкцию, используя switch case?

    Следуя стандарту С/С++ -- никак. К тому же dist у вас -- float, а в кейсах оператора switch можно указать только целочисленные метки.
    Но можно кучу if заменить на следующее:
    digitalWrite(led1, 1);
    digitalWrite(led2, dist <= 40);
    digitalWrite(led3, dist <= 30);
    digitalWrite(led4, dist <= 20);
    digitalWrite(led5, dist <= 10);
    Ответ написан
    Комментировать
  • Книга по основам программирования?

    Возьмите Страуструпа по плюсам. Ведь все-таки он придумал ООП в том виде который сейчас используется) и лучше чем у него в общем-то вы врядли найдете что-то по тому что вы назвали. Точнее, найдете - но с него лучше начать. Проектирование - банду четырех читайте, и Фаулера. Но без понимания ООП к проектированию рано подходить, так что начните с первого человека, которого я Вам назвал. Тем более что после C будет понятно что происходит в коде)
    Ответ написан
    2 комментария
  • Какие есть качественные книги по алгоритмам в области компьютерной графики?

    Абраш Майкл Таинства программирования графики-К :ЕвроСИБ ,1996.-384 с.-ISBN 5-7707-8493-8
    Ответ написан
    Комментировать
  • Какие существуют направления в программировании?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    embedded - это микроконтроллеры, промышленное оборудывание.... такие вот штуки. Смартфоны давно уже не входят в эту категорию. Тут нужно хорошое понимание того как работает железо, Си, ассемблер и все такое прочее. Хороших специалистов в этой области выпускается с каждым годом все меньше и меньше

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

    Шифрование, криптография... рано или поздно в любом направлении сталкнетесь хотя бы с базовыми вещами. Как минимум будете слышать всякие штуки типа SHA12, RSA, SSL и т.д. с чем бы вы в итоге не работали (разве что в embedded меньше этого, хотя я не могу точно сказать).

    Что до функционального программирования... это парадигма программирования, на ряду с процедурным и объектно-ориентированным. Это как бы не привязано к направлению разработки. Более того, масса языков совмещают в себе все эти парадигмы или дают возможность писать в том стиле, в котором вы хотите (например PHP, Haskel, Pyhon, Java с 8-ой версии вроде как лямбда-вычисления поддерживает)...

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

    Ну а хороший специалисты будут востребованы всегда.
    Ответ написан
    4 комментария
  • На каком языке разрабатывать игры под Android?

    opium
    @opium
    Просто люблю качественно работать
    Мне кажется человек который хорошо разбирается в С# такие странные и детские вопросы в принципе задавать не может.
    Ответ написан
    Комментировать
  • Как сделать что бы printf принтил число одной длины вне зависимости от его знака?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Пробел после % ставит пробел перед положительными значениями, в позиции, где идёт минус перед отрицательными: "% .5d". Плюс после % ставит знак и перед положительными и перед отрицательными значениями: "%+.5d". Об этом и о многом другом можно узнать из man 3 printf.
    Ответ написан
    Комментировать
  • Почему Unity3D создает такой большой exe файл?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ахах, ну что за люди? Нет, ну ладно hello world был бы 200 метров (и такое может быть), но чтобы жаловаться за 14 мегабайт. Ведь для этих деревьве можно скриптов на пару игр накидать, а будут те же 14 мегабайт. Ну, или чуть чуть больше.

    Объясняю. Работает Unity на Mono. Он требует runtime, то беж виртуальную машину, чтобы запускать специальный код, а также набор библиотек. Собственно, я даже немного удивлён, от чего ж так мало. Судя по всему, ненужные компоненты вырезаются и пара скриптов таки ещё удвоют размер. И всякие дополнительные компоненты также его будут сильно увеличивать.

    Нет, этот вопрос был бы весьма кстати, если бы Вы использовали Ogre вместо Unity, C++ вместо C#, OpenGL вместо дикой смеси оного и DirectX. Но Вы используете тучу возможностей тучной Unity и после этого жалуетесь, что размер очень большой.

    Впрочем, RTFM. Возможно поможет.
    Ответ написан
    2 комментария
  • Как правильно мержить ветки в git?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Снова вы :)
    Запомните - единица, с которой работает git - это коммит. Любое изменение в репозитории либо закомиченно, либо висит в активных изменениях. Поэтому git не мог удалить у вас файл, не сделав коммит :) Поищите по истории в каком из коммитов (в том числе и merge-коммитах) он мог удалиться.

    А вообще вы явно что-то путаете, потому что checkout приводит вашу рабочую папку в состояние этой ветки, поэтому как вы могли понять что файл удалился из ветки test1, когда находитесь в ветке development - непонятно. После git co dev && git merge test1 сделайте git co test1 и скажите что происходит.

    Да, и merge не удаляет изменения, а просто применяет все коммиты из одной ветки в другую.
    Ответ написан
    4 комментария
  • Как организовать код через ООП для простой задачи?

    @smozhaykin
    Ну как минимум можно добавить такую иерархию: базовый класс Cell с виртуальным методом Open, от него наследуются классы MineCell и EmptyCell. Метод MineCell.Open завершает игру, EmptyCell.Open открывает ячейку и показывает число мин вокруг.
    Ответ написан
    1 комментарий