• Передача функции - шаблоны или std::function?

    Nipheris
    @Nipheris Куратор тега C++
    template<typename Func> void MyFunc (const Func & otherFunc);

    void MyFunc (const std::function<void()> & otherFunc);

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

    С другой стороны, почему-то никто не упомянул такую важную разницу:
    class overloaded_functor {
    public:
    	bool operator()(int a) const { return a > 10; }
    	bool operator()(double a) const { return a > 10.0; }
    	bool operator()(const std::string& a) const { return a.size() > 10; }
    };
    
    template <typename Func>
    void foo(Func f) {
    	// Все варианты компилятся и работают (т.к. сама шаблонная функция foo и все применения оператора вызова к f компилятся ПОСЛЕ того как мы написали foo(overloaded_functor()) );
    	f(3);
    	f(5.4);
    	f("Blah");
    }
    
    void bar(std::function<bool(int)> f) {
    	f(3);
    	// Компилится, но, как и ожидаемо, конвертит double к int, чего мы в нашем случае не хотим
    	f(5.4);
    	// Не компилится вовсе
    	f("Blah");
    }
    ...
    foo(overloaded_functor());
    bar(overloaded_functor());


    std::function по-определению требует указания конкретного типа функции/функтора, которую он оборачивает, поэтому std::function не может работать с перегруженным функтором. Это не так часто нужно, но бывает, например visitor часто реализуется именно таким функтором с несколькими вариантами оператора вызова.

    На всякий случай отмечу, что я ни в коем случае не говорю, что std::function недостаточно мощный вариант. Наоборот, его нужно использовать в большинстве случаев, т.к. в большинстве случаев нужно функция конкретного типа (конкретной сигнатуры и конкретного возвращаемого значения). Однако разницу следует понимать, т.к. эти варианты используются в разных ситуациях.
    Ну и понятное дело, обычный указатель на функцию неудобен, т.к. не позволяет захватить контекст. В Сях для этого существует паттерн userData, и всякий разработчик библиотеки, которая использует callback-и, реализует этот паттерн. В Плюсах для этого есть std::function.
    Ответ написан
    Комментировать
  • Что практичнее изучать ES6 или Typescript?

    Учите оба, ES6 поможет найти работу, а TS, даже если вы не будете использовать его для написания кода, научит вас хорошим вещам.
    Ответ написан
    Комментировать
  • Существуют ли задачники по реляционной алгебре и нормализации баз данных?

    Это вы хорошо спросили). Вот что удалось найти:
    db4u.wikidot.com/normexercises
    https://cs.senecac.on.ca/~dbs201/pages/Normalizati...
    https://web.csulb.edu/~mopkins/cecs323/morenormali...

    https://lagunita.stanford.edu/courses/DB/RA/SelfPa...
    https://www.seas.gwu.edu/~bhagiweb/cs2441/lectures...

    Фигня конечно, поэтому подпишусь на вопрос, хорошие упражнения пригодились бы. На русском искать даже пробовать не буду.
    Ответ написан
    Комментировать
  • Как правильно создать архитектуру БД для нескольких сервисов?

    Если бы в тегах у вас не стоял MySQL, я бы сказал - "используйте схемы". В нормальных СУБД "база данных" - это единица администрирования, а "схема" - это пространство имён, т.е. как раз то, что вам нужно для различных сервисов и подсистем.

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

    В разных БД желательно хранить абсолютно несвязанные данные, такие, что можно взять одну из БД и спокойно перекинуть на другой сервер, или вообще на другую СУБД. Например, в одной БД у вас CRM-система, а в другой хранит данные ваш почтовый сервер. А в третьей данные для промо-сайта.

    Но т.к. вы указали MySQL, я говорю вам "используйте префикс к таблицам".

    К ответу Александр : как раз таки если это всё сервисы одного предприятия, то и авторизация лучше будет отдельным сервисом, наравне с остальными. Также со своей схемой/префиксом.
    Ответ написан
    Комментировать
  • Есть ли платформы для организации API?

    Посмотрите продукты компании Mashape Inc. Они как раз такими потребностями занимаются. Занимаются серьезно, клиенты у них крупные.
    Ответ написан
    1 комментарий
  • Из каких источников изучить c# wpf чтобы взаимодействовать с микроконтроллерам?

    Nipheris
    @Nipheris Куратор тега C#
    Сначала изучите C# и .net fw откуда угодно (1000 и 1 ответ на Тостере уже есть), чтобы не задавать такие вопросы.
    Очевидно же, что язык и даже платформа не имеет отношения к кокнретным интерфейсам. Тем более UI-подсистема.

    Вы как планируете управлять ими, через COM-порт?
    Ответ написан
    Комментировать
  • Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?

    Nipheris
    @Nipheris Куратор тега C++
    Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?

    Нет, не всегда. В большинстве случаев не вызывается. Системный вызов осуществляется только если текущий блок, управляемый сишной кучей (т.е. сишным рантаймом) исчерпывается. Если б каждый раз делался системный вызов, вы б не дождались результатов работы вашей программы.

    И при удалении тоже?

    См. выше.

    И вот интересно, а как сделать маленькую кучу, чтобы память выделялась в пределах этой маленькой кучи только?

    Выделяете блок памяти любым из известных вам способов, декларируете функции а-ля myalloc и myfree, и реализуете один из алгоритмов управления свободным пространством в куче (например, двоичного разбиения).

    В C++ можно переопределить операторы new и delete.
    Ответ написан
    8 комментариев
  • Как в Window динамически добавлять Pie Chart ( WPF C#)?

    Nipheris
    @Nipheris Куратор тега C#
    Добавлять созданием объекта чарта. Привязывать, например, биндингами, как в примере.

    Вы C# и WPF впервые видите?
    Ответ написан
    Комментировать
  • Почему фотошоп такой быстрый?

    Ничего в Фотошопе сверхбыстрого нет. Его просто не на JS пишут, а на C/C++, и, я уверен, с ассемблерными вставками там, где надо. Хотя, и без них я думаю он бы хорошо справлялся.

    Да, кстати, о GPU. В современных CPU тоже достаточно много векторных инструкций, SSE там всякие. Если их умело применить, то для обработки несложных изображений никакого GPU не надо будет. Я уверен, что в Фотошопе эти наборы команд также применяются.

    Добавим к этому лучших разработчиков в индустрии - они не то что хорошо знают алгоритмы обработки изображений, они сами их изобретают. Кому еще, как не им?

    Выводы:
    а) вы возможно привыкли к тормозам современного ПО, пишущегося на высокоуровневых языках криворукими ребятами. Не всё ПО такое. Как заметили предыдущие отвечающие, Фотошоп работал и на 32 метрах оперы, сейчас он тот еще монстр;
    б) можно сильно по-разному реализовать алгоритмы обработки. Если вы поймете, какой потенциал у современных чипов, вы перестанете удивляться скорости обработки изображений.
    Ответ написан
    2 комментария
  • Какой из этих подходов в ООП лучше и как они называются?

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

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

    Второй вариант подразумевает, что магия может полностью задаваться извне, и Magick только кастит её, но в её "формировании" не участвует.

    Сейчас вы не решили для себя, что такое Magick. Вам нужно это сделать, и вопрос отпадёт сам собой.
    Ответ написан
    1 комментарий
  • Как вывести список база данных?

    SqlConnection.GetSchema с параметром "Databases" вернет вам DataTable со списком баз данных. Привяжите его к листбоксу или заполните листбокс вручную..
    Ответ написан
    Комментировать
  • О чем речь в POST запросе на C#?

    Nipheris
    @Nipheris Куратор тега C#
    1) из хранилища сертификатов текущего пользователя вытаскивается сертификат по его серийному номеру;
    2) к запросу прикладывается полученный из хранилища клиентский сертификат;
    3) содержимое poststr пишется в тело POST-запроса;
    4) запрос отправляется и программа ждет ответ от сервера;
    5) ответ перекодируется в строку result и выводится в консоль;

    Как в ноде вытащить сертификат из Виндового хранилища - понятия не имею. С остальным вы и сами разберетесь.
    Ответ написан
  • Как организовать репозитории для разных разработчиков?

    Если немного проще: есть один проект в котором верстальщику нельзя давать код бекэнда, а то еще понравиться и себе скопирует.

    Если вы не хотите давать код, то вы не хотите давать репозиторий. Чтобы работать, верстальщику понадобится локальная копия репы. Раз у него будет такая копия, захочет - вытащит файлы. Гит делает слепок всего дерева целиком, поэтому в принципе невозможно надежно ограничить доступ к содержимому файлов в других папках.

    Делайте две разные репы для фронта и бэка, вы привыкнете и вам понравится.
    но может есть лучше решение.

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

    P.S. Посмотрел ваш скрин, странно много папок вне frontend и backend, что вы в них держите?)
    Ответ написан
    4 комментария
  • От чего зависит скорость восстановления базы данных?

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

    Вопрос восстановления достаточно широкий сам по себе, поэтому, не зная контекста, могу только сказать, что на практике скорость восстановления в основном зависит от проработанности политики резервного копирования, и от натренированности и скиллов админов.

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

    Если под временем восстановления имеется в виду непосредственное время копирования данных из одного места в другое - то надо определиться, какие это будут "места", т.е. носители, и как технически делается бэкап - всегда целиком, или только разница от некоторого начального снимка и т.д.
    Ответ написан
    1 комментарий
  • Как компилировать butteraugli под Windows?

    Nipheris
    @Nipheris Куратор тега C++
    При этом libpng установлен. Не понимаю, что я делаю не правильно?

    Я думаю, include-директория libpng не была передана компилятору, и нужно это сделать.

    При этом libpng установлен.

    Что вы понимаете под установкой libpng в контексте Windows?)
    Ответ написан
  • Переход из backend во frontend?

    Nipheris
    @Nipheris Куратор тега C#
    в этом вопросе я вообще не силен

    В вашем вопросе уже есть ответ. Сейчас перед вами встала проблема, и вы ищите, куда бы от неё убежать. Если бы вам бэкенд был не интересен, вы бы у нас не спрашивали. Если бы вы таки попытались разобраться хотя бы в вопросе взаимодействия с базой - то тоже бы не спрашивали.

    Если для вас проблема то, что вы указали,
    взаимодействие с бд, да и вообще вся работа с бд

    то вам еще рановато говорить, что вы "пишете на asp.net". Фреймворк вы конечно может и достаточно знаете, но пока что это не инструмент в ваших руках. Почему? А кому сегодня нужен бэкенд на C# без базы данных? Распределенные вычисления? Ну может быть, но таких проектов единицы. Массово это LOB-приложения, и там всё начинается с БД.

    Поэтому, сначала доучите то, что уже начали. Или просто отдохните, если устали, судя по количеству вопросов от вас вы довольно серьезно взялись за тему. Собственно, к чему такая спешка? Нужно срочно работу найти?
    Ответ написан
    Комментировать
  • Как укротить GC, резервирующего память "про запас"?

    Nipheris
    @Nipheris Куратор тега C#
    На самом же деле память, реально используемая приложением остается без изменений.

    Откуда такой вывод?
    Но я то знаю, что в программе не будет создаваться больше ни одного объекта они будут только перерисовываться.

    Еще более абсурдное суждение. Кто говорит, что перерисовка не приводит к созданию объектов? Как насчёт объектов Graphics?
    как можно избавиться от резервируемой памяти "про запас"

    Могу ошибаться, но я никогда не слышал о резервировании памяти "про запас". Видимо, объекты все-таки создаются.
    мне надо чтобы приложение не ело лишней памяти ну или ело, но эта память со временем не увеличивалась (при каждом вызове Invalidate).

    Она будет время от времени собираться, как вы и сказали. Чем меньше свободной памяти в системе, чем чаще будет сборка мусора. Если для вас эти условия недостаточно строгие, используйте языки с ручным управлением памятью.

    Еще проверьте, что у вас не утекают IDisposable объекты. Можете повызывать GC.Collect, но это само по себе временное решение.
    Ответ написан
    3 комментария