• Есть ли трекер задач с контролем времени для каждой из задач?

    zamboga
    @zamboga
    Бизнес-аналитика, фин. моделирование, дашборды
    Ловите из моей копилки

    • Тайм-трекеры

    https://Toggl.com — отдельный софт в трее, расширение под хром, приложение на андроид. Интеграция с кучей сервисов (трело, асана и т.д.). Хоткеи тоже есть. Бесплатного тарифа вполне достаточно. автотрекинг
    https://TimeDoctor.com — платный. Делает скриншоты. Удобен для компании. Есть отдельный софт в трее, хоткеи. Интеграция с кучей сервисов.
    https://pomelloapp.com — простой помидоро-трекер, интеграция с трелло. Хоткеи есть, в трее не сидит, простенький бар поверх всех окон
    https://PomoDoneApp.com — простой помидоро-трекер, интеграция с трелло. Хоткеи есть, в трее показывает таймер с обратным отсчетом времени.
    https://tmetric.com — простой трекер, интеграция с трелло, есть десктопное приложение, помидорок нет. Хоткеи есть, сидит в трее
    https://www.timecamp.com — есть куча интеграций, расширение хром, приложение в трее, автотрекинг
    https://toptal.com/tracker/
    ○ Grindstone https://www.epiforge.com/grindstone/
    https://www.primaerp.com
    https://tahometer.com
    https://aTimeLogger
    https://myhours.com
    https://wakatime.com
    savemytime.co/en неплохое приложение, где дела при каждом включении смартфона высвечиваются, но оплата там очень большая за такую прогу.

    ○ Статьи
    § https://habrahabr.ru/company/xakep/blog/254119/
    § https://habrahabr.ru/post/327310/
    § https://habrahabr.ru/post/24070/
    § https://habrahabr.ru/post/177225/
    § Чем удобнее всего учитавать время работы над конкретной задачей?
    Ответ написан
    1 комментарий
  • Есть ли разница между двумя функциями?

    myjcom
    @myjcom Куратор тега C++
    не изобретайте велосипед)))
    библиотека STL
    используйте std::vector
    и std::rotate

    определение и пример
    en.cppreference.com/w/cpp/algorithm/rotate
    Ответ написан
    Комментировать
  • Зачем нужна репликация и на каких проектах она нужна?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Зачем нужна репликация в принципе?

    Во-первых, отказоустойчивость. Если у вас несколько реплик и один сервер сдох, приложение не обвалится с грохотом, а будет работать с оставшимися.
    Во-вторых, производительность. Или один сервак будет обрабатывать 1000 запросов в секунду или 3 по 330 - есть разница.

    Какие проекты требуют такого понятия как репликация?

    Как следует из вышенаписанного, такие, для которых важна стабильность и в у которых нагрузка достаточно высокая, чтобы начал задыхаться один сервер.

    Что называется master, а что slave?

    В режиме master-slave репликации есть один master-сервер, обрабатывающий запросы на изменения данных, и несколько slave-серверов, обрабатывающих запросы на чтение. В случае выхода мастера из строя, один из слейвов становится мастером.

    отличия между master-slave и master-master?

    В режиме master-master все сервера равноценны и могут обрабатывать любые запросы. Но она сложнее и если один из серверов дохнет, вы можете получить повреждение данных.
    Ответ написан
    2 комментария
  • Как передать в функцию переменные и вернуть их?

    @tugo
    Эти переменные оформите в с структуру.
    int number_rocket[4];
      int amount, min_fuel = 0, min_E = 0, min_mass = 0, max_umass = 0, max_speed = 0;

    Структуру передавайте в функцию по ссылке
    Ответ написан
    1 комментарий
  • Как удалить элемент вектора внутри цикла?

    @D3Nd3R
    Можно все сделать и без цикла:
    contours.erase(std::remove_if(contours.begin(), contours.end(),
    		[this](std::vector<cv::Point> vec)->bool
                             {return vec.size() < this->mParams.minContourSize; })
    		,contours.end());
    Ответ написан
    Комментировать
  • Почему не работает этот код с ссылками?

    terrier
    @terrier
    using namespace std;

    Вот не надо так делать и не будет подставляться std::swap (который как известно возвращает void) вместо вашего варианта swap
    P.S. Ну, и, конечно сама функция swap, которая не свапает - это тоже достойно.
    Ответ написан
    1 комментарий
  • Расчёт золота, серебра и меди в игре, как сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Откройте учебник математики, класс этак за четвёртый - пятый. Там где-то должно быть написано, как делить целые числа и как находить остаток от деления.
    Ответ написан
    Комментировать
  • Как заставить консольное c++ приложение работать в фоне?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Чтобы избавиться от консоли, правильнее всего запускать приложение как службу в windows
    https://code.msdn.microsoft.com/windowsapps/CppWin...
    https://habrahabr.ru/post/71533/
    или как демон в unix
    https://stackoverflow.com/questions/17954432/creat...
    Ответ написан
    6 комментариев
  • Как передать вектор в функцию?

    @Mercury13
    Программист на «си с крестами» и не только
    Раз мы изменяем наш вектор — то по неконстантной сцылке.

    void add (int n, std::vector<int>& vec){
        vec.push_back(n);
    }
    
    std::vector <int> myVec;
    add(5, myVec);
    Ответ написан
    Комментировать
  • В чем разница между Git и GitHub?

    @SolidMinus
    Та же, что и porn и pornhub ;)

    Первое - название системы, вторая там где все это лежит
    Ответ написан
    1 комментарий
  • Наилучший алгоритм, который подбирает близкий цвет из палитры?

    dom1n1k
    @dom1n1k
    https://en.wikipedia.org/wiki/Color_difference
    А конкретнее CIE76 - это оптимальный вариант по соотношению точности/сложности.
    Ответ написан
    2 комментария
  • Как делается анимация в играх?

    @sta-ger
    Game Developer
    Кроме покадровой анимации существует еще и скелетная.
    Spine
    DragonBones
    Ответ написан
    Комментировать
  • Что почитать на cpp после ооп?

    GavriKos
    @GavriKos
    Советую начать писать код.
    Ответ написан
    Комментировать
  • Почему функция rand() возвращает одно и то же значение?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    небыла

    не было.
    Даже так?
    while(true)
    std::cout << rand() << std::endl;

    Почитайте про генераторы псевдослучайных чисел, вероятно вы не меняете seed, поэтому генератор при каждом запуске выдаёт то же значение.
    В простейшем случае нужно в начале программы делать
    srand(time(0));
    Это инициализирует псевдослучайную последовательность текущим временем(количество секунд с 1 января 1970)
    Ответ написан
    2 комментария
  • Как перегрузить оператор +?

    nekipelov
    @nekipelov
    Вы возвращаете ссылку на локальный объект, так нельзя. Компилятор должен был предупредить об этом. Правильно как-то так (не видя ваш класс я могу ошибаться):

    Vect operator+(const Vect &lhs, const Vect &rhs)
    {
      Vect v;
    
      v.size = lhs.size + rhs.size;
      v.vec = new int[v.size];
    
      std::copy(lhs.vec, lhs.vec + lhs.size, v.vec);
      std::copy(rhs.vec, rhs.vec + rhs.size, v.vec + lhs.size);
    
      return v;
    }
    Ответ написан
    Комментировать
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    TrueBers
    @TrueBers
    Гуглю за еду
    Длинному вопросу — длинный ответ:

    при этом под полиморфизмом понимается динамический полиморфизм

    А почему вы отрицаете статический? У динамического, например, есть накладные расходы на vtable, инвалидации кешей, и т. п. Если бы STL использовал динамический полиморфизм, у нас бы не было такой эффективности. А у статического таких проблем нет.

    инкапсуляция (то есть в C++ это будет выражено классом с private и public функциями-членами)

    Инкапсуляция — это совсем не про private и public. А скорее про интерфейс и его сокрытую реализацию.
    www.ddj.com/cpp/184401197

    Про отрисовку виджетов, на самом деле, вопрос холиварный. С виджетами изначально мы имеем поломанный интерфейс. Т. е. Widget может добавить в себя тип Widget* или Widget&. А теперь делаем так:
    class Widget {
    public:
      void add(shared_ptr<Widget> child);
    };
    
    auto root = make_shared<Widget>();
    root->add(root); // о_О шта?

    Мы так сделать можем, а значит интерфейс неверный. Кучи проверок в функции add() никому не нужны. Есть такой мужик Sean Parent, может слышали, вот он предложил этой проблеме замену на другую структуру данных со статическим полиморфизмом, без ненужных оверхедов. Они это используют в Фотошопе. На каком ещё языке это можно сделать столь эффективно?

    мы не знаем в данном месте кода, какой это именно виджет, но нам нужно вызвать draw, который может быть разным в зависимости от типа виджета

    А как же мы у STL-контейнеров тогда это вызываем и всё прекрасно работает без наследования и виртуальных функций?

    Вы скажете, что virtual call быстрее switch

    Не факт, зависит от оптимизатора и количества функций. Адекватный оптимизатор разворачивает свитч в jump-table, который на пару процентов может быть быстрее, чем виртуальный вызов. При этом, точно так же, он может девиртуализировать виртуальную функцию если она используется в элементарном базовом блоке, например, в цикле.

    От vector'а не рекомендуется наследоваться

    От него и никогда не требуется этого. Достаточно набросать адаптер, идеология C++ в трёх, как вы сказали, китах: контейнеры, итераторы и алгоритмы. Написав адаптер, он будет работать со всей стандартной библиотекой и алгоритмами, чего обычно более, чем достаточно. Например, те же std::queue, std::priority_queue и std::stack являются адаптерами и могут изменять вектор (и не только), ни от кого при этом не наследуясь.

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

    Ну, дык, верно. Вас собеседуют же не всегда гении. Бывают дурни, задроты, идеалисты, холиварщики, ЧВСшники. Ничего хорошего от них обычно не стоит ждать. От таких надо валить подальше просто.

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

    Итого, мой ответ:
    1. Своей задаче — свой инструмент. Не забивайте гвозди микроскопом, он вам пригодится целым для другого.
    2. Не холиварьте. Если так "положено", но нихрена ни в какие рамки не лезет, не нужно это дальше туда пихать. Нужно переступить через гордость и идеалы, и сделать по-другому.
    3. Выжимайте максимум из каждой парадигмы и технологии. Благо, в C++ этого навалом. Где-то функциональщина больше попрёт, где-то лучше шаблонами нагородить. А уж где не получилось, придётся костыли пихать.
    Ответ написан
    2 комментария
  • Как обрезать строку до нужного знака?

    @MStrechen
    Не волшебник, только учусь
    s = "text text : one two three"
    print(s[s.find(":") + 1 : ])

    Объясню, что тут происходит. s.find(x) ищет позицию x. Если символа x нет, возвращает -1. s[ А : Б ] - это так называемый "слайс" строки, кусок от А включительно до Б не включительно. Если Б отсутствует - строка будет от А включительно до конца.
    s.find(":") + 1 - первый символ, входящий в новую строку. Если find вернёт -1, тогда мы просто получим всю строку целиком.
    Ответ написан
    Комментировать
  • Что больше добавит производительности SSD или 8 гб памяти?

    Ommonick
    @Ommonick
    qa+dev (scala, golang, ts/js, api, grpc)
    Сначала память, потом ссд
    теперь поясню. Хоть я и ярый сторонник ссд взамен хдд и рассматриваю хдд только как неторопливые хранилища данных (кино, архивы, бэкапы), практика показывает что малое количество памяти вызывает излишние обращения к файлу подкачки, что по сути порождает лишние операции, сказывающиеся на производительности. Когда достаточно памяти - система не дергает хдд для подкачки и общее впечаление от работы хорошее. Не сомневаюсь что можно поставить ссд и файл подкачки на нем будет работать быстрее, но я считаю, что если есть возможность не выполнять какую то работу, то лучше ее не выполянть, чем искать варианты как ее выполнить быстрее\менее затратно.
    В общем ставьте память, а потом ради комфорта докупаете ссд, как будет возможность
    Ответ написан
    6 комментариев
  • Что свидетельствует о том, что машина обучается, а не собирает новые данные и не сравнивает их с уже загруженными?

    @nirvimel
    Из чего состоит кот?
    - Из головы, туловища, лап и хвоста.
    Из чего состоит стул, на котором сидит кот?
    - Из сиденья, ножек и спинки.

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

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

    Но как тогда человеческий мозг решает эту задачу?
    - Человеческий мозг работает на нечеткой логике. Поэтому человеку может казаться, что в облаках и кляксах Роршаха скрываются образы знакомых предметов (ложноположительное срабатывание нейронной сети). Нейроны мозга изначально связаны между собой хаотично, и эта структура не способна выдать определенный ответ о принадлежности различных изображений к одной категории. Но в ходе обучения эта структура перестраивается таким образом, чтобы ответы на вопрос о принадлежности изображения определенной категории с каждым разом (шаг обучения) лучше соответствовали действительности. См. На чем основан принцип обучаемости нейронных сетей? . В процессе самого распознания не происходит никакого целенаправленного вспоминания или поиска информации в памяти (это занимало бы слишком много времени). Мозг взрослого человека выдает ответ "это (не) кошка" так же быстро, как и мозг новорожденного, различается лишь точность этих ответов и процент ошибок. Эта точность определяется только структурой связей между нейронами в сети, а никак не количеством различных кошек, которых человек может вспомнить сознательно. Доказательством этого может служить тот факт, что у людей, переживших потерю памяти, никак не меняется способность распознавать простые образы при том, что они не в состоянии вспомнить даже собственное имя.
    Ответ написан
    2 комментария