• Как динамически подключать библиотеки?

    @Ariox41
    Посмотрите в сторону boost::DLL

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

    В документации много примеров, особых проблем не должно возникнуть.

    Пример из документации, на всякий случай:
    // my_plugin_api.hpp
    #include <string>
    
    class my_plugin_api {
    public:
       virtual std::string name() const = 0;
       virtual float calculate(float x, float y) = 0;
    
       virtual ~my_plugin_api() {}
    };

    Реализация плагина:
    // my_plugin_sum.cpp
    #include <boost/config.hpp> // for BOOST_SYMBOL_EXPORT
    #include "../tutorial_common/my_plugin_api.hpp"
    
    namespace my_namespace {
    
    class my_plugin_sum : public my_plugin_api {
    public:
        my_plugin_sum() {
            std::cout << "Constructing my_plugin_sum" << std::endl;
        }
    
        std::string name() const {
            return "sum";
        }
    
        float calculate(float x, float y) {
            return x + y;
        }
    
        ~my_plugin_sum() {
            std::cout << "Destructing my_plugin_sum ;o)" << std::endl;
        }
    };
    
    // Exporting `my_namespace::plugin` variable with alias name `plugin`
    // (Has the same effect as `BOOST_DLL_ALIAS(my_namespace::plugin, plugin)`)
    extern "C" BOOST_SYMBOL_EXPORT my_plugin_sum plugin;
    my_plugin_sum plugin;
    
    } // namespace my_namespace

    Собственно, загрузка библиотеки:
    #include <boost/dll/import.hpp> // for import_alias
    #include <iostream>
    #include "../tutorial_common/my_plugin_api.hpp"
    
    namespace dll = boost::dll;
    
    int main(int argc, char* argv[]) {
    
        boost::filesystem::path lib_path(argv[1]);          // argv[1] contains path to directory with our plugin library
        boost::shared_ptr<my_plugin_api> plugin;            // variable to hold a pointer to plugin variable
        std::cout << "Loading the plugin" << std::endl;
    
        plugin = dll::import<my_plugin_api>(          // type of imported symbol is located between `<` and `>`
            lib_path / "my_plugin_sum",                     // path to the library and library name
            "plugin",                                       // name of the symbol to import
            dll::load_mode::append_decorations              // makes `libmy_plugin_sum.so` or `my_plugin_sum.dll` from `my_plugin_sum`
        );
    
        std::cout << "plugin->calculate(1.5, 1.5) call:  " << plugin->calculate(1.5, 1.5) << std::endl;
    }

    Вывод:
    Loading the plugin
    Constructing my_plugin_sum
    plugin->calculate(1.5, 1.5) call:  3
    Destructing my_plugin_sum ;o)
    Ответ написан
    Комментировать
  • C# - Как присвоить переменной определенному месту в предложении?

    DanielDemidko
    @DanielDemidko
    Программист
    Следующая инструкция разобьёт считанную строку на массив слов, в независимости от количества пробелов между ними и присвоит его переменной wordsArray. Вы также можете указать любые свои символы для разбивки.
    String[] wordsArray = 
    Console
         // Считываем строку
        .ReadLine()
         // Разбиваем её
        .Split(
         //Массив разделительных символов, вызов .ToArray необходим
                 " ".ToArray(),
        // Указание пропускать повторы разделительных символов
                 StringSplitOptions.RemoveEmptyEntries )
    Ответ написан
    1 комментарий
  • При подключении RDP, VPN соединение отключается. Как это исправить?

    @res2001
    Developer, ex-admin
    VPN подключается локальным администратором?
    Если да, то скорее всего при подключении нового пользователя предыдущего просто выкидывает и соответственно все что было запущено локальным админом завершается, в т.ч. и VPN соединение рвется.
    Для решения проблемы нужно VPN подключение перевести в какой-то автономный режим, чтоб не нужно было держать залогиненного пользователя для его работы.

    Еще как вариант - видимо у вас не сервере не лицензированы службы RDS, а в таком режиме Win Server позволяет одновременно работать максимум 2 пользователям, если не ошибаюсь. Возможно у вас висят отключенные сеансы двух админов, при очередном логине один из сеансов убивается с соответствующими последствиями.
    В этом случае нужно контролировать подключенных пользователей, если сеанс не нужен то производить "выход", а не отключение. Настроить для всех пользователей, кроме того под которым подключается VPN автоматический выход при неактивности.
    Либо лицензировать службы терминалов на большее количество пользователей.
    Ответ написан
    Комментировать
  • При подключении RDP, VPN соединение отключается. Как это исправить?

    Jump
    @Jump
    Системный администратор со стажем.
    Два варианта решения проблемы-
    • Делаем подключение к VPN на роутере или на сервере но как службу, а не как процесс пользователя.
    • Делаем из сервера - сервер терминалов.


    Наиболее адекватный и универсальный - первый вариант.
    Ответ написан
    Комментировать
  • Как создать OS с помощью C++ и Python?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Если ты не троллишь, то начни с изучения ассемблера, архитектуры ПК(Таненбаума например прочитай), затем изучай, как устроены операционные системы(опять же Таненбаум). Я почти уверен, что после этого тебе расхочется делать ОС, но опыт будет полезный и скилл C++ или любого другого языка поднимется.
    Ответ написан
    3 комментария
  • Как лучше возвращать успешные запросы и ошибки в REST API?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Как это нет стандарта? Есть. В случае успеха возвращаете код 200 в заголовке и в теле данные в том формате, которого ожидает клиент. В случае ошибки код ошибки и текст сообщения ошибки.
    Ответ написан
  • Какой опыт Git нужен веб-разработчику для работы в команде в компании?

    Желательно понимать, что делают и зачем нужны следующие команды:
    git status
    git checkout
    git reset
    git fetch
    git pull
    git push
    git diff
    git add
    git commit
    git stash
    Ответ написан
    7 комментариев
  • Как работает этот код?

    @MiiNiPaa
    Может ли n быть больше нуля, если перед этим мы делаем count = 0?
    static unsigned long count = 0;
    Объявляет и инициализирует переменную. Переменная инициализируется только раз за время своей жизни. В случае статической переменной — перед первым запуском функции.
    То есть, начальное значение n — 0, после этого обратно в ноль она больше не сбрасывается.
    зачем здесь mutex
    Подумайте, что случится. если два потока наткнутся на инкремент одновременно юез синхронизации. Особенно при существовании кэша, присутствии оптимизаций, консолидирующих запись в память и тому подобного. На самом деле тут лучше использовать атомик, ну да ладно.
    Ответ написан
    Комментировать
  • Почему существует 2 версии PHP (Non Thread Safe и Thread Safe)?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Здесь ответ на ваш вопрос.

    Для тех, кто не знает английский.

    Версию сервера нужно выбирать в зависимости от того, как вы интегрируете PHP c веб-сервером.
    Например, когда вы используете mod_php, у вас модуль и PHP всегда загружены в память и каждый запрос обрабатывается в отдельном потоке. Из-за этого mod_php работает быстрее, чем CGI. В данном случае нужно использовать потоко-безопасную реализацию (thread-safe) поскольку каждый поток имеет доступ к памяти другого потока.

    Когда вы работаете с IIS, у вас PHP запускается ввиде отдельного процесса через CGI и в таком случае потоко-безопасность не имеет смысла, поскольку у вас 1 процесс и фактически 1 поток созданный этим же процессом. Операционная система изолирует память процессов по умолчанию.

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

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ansible
    Ответ написан
    Комментировать
  • Где найти актуальный путеводитель по созданию RESTfull API?

    AxianLTD
    @AxianLTD
    Книга ваш лучший друг - shop.oreilly.com/product/0636920028468.do
    Ответ написан
    Комментировать
  • Как вызвать из одного .cs файла другой?

    GavriKos
    @GavriKos
    Вы не можете вызвать файл. Вы можете инстанцировать класс из другого файла, вызвать метод, функцию, использовать какие то данные.
    Ответ написан
    Комментировать
  • Какие плюсы linux перед windows для веб-разработчика?

    krimtsev
    @krimtsev
    на сегодняшний день - никаких

    IDE кроссплатформенные
    доступ к VDS через Putty
    Ответ написан
    7 комментариев
  • GIT: Каким наилучшим образом решаются постоянно возникающие конфликты при слиянии веток develop и production?

    Решение, вроде, вполне очевидное - выносите все настройки в (конфигурационные) файлы, которые игнорируются git-ом. Делайте шаблоны этих файлов (оставляем в git), а в README проекта описываем процедуру их копирования в нужное место и "донастройки" (какие переменные нужно изменить, какие добавить/убрать и т.д.). На конкретной площадке (production, stage, test, dev, local etc) свои настройки, все логично

    Еще как вариант - использование environment-переменных (переменных окружения), тогда файлы как таковые вообще не понадобятся. Но:
    - их поведением часто сложно управлять, и, как следствие, сложно отлавливать ошибки при неверных значениях
    - все равно их нужно где-то прописывать (bash-скрипты, .htaccess и т.д.), но теперь уже в разных местах
    - все равно лучше задокументировать, хотя бы чтоб самому потом не забыть :)
    Ответ написан
    6 комментариев
  • Что спрашивают у дизайнеров на техническом собеседовании?

    werty1001
    @werty1001
    undefined
    Точно спросят: Кем вы себя видите через пять лет?
    Ответ написан
    1 комментарий
  • Интеграция Python'а в С/С++ для написания нейросети и последующее встраивание в микроконтроллеры?

    @aol-nnov
    для начала, кашу из головы надо переместить в более подходящее место.
    потом понять, что микроконтроллер - это аппарат с ограниченными ресурсами, а порой и ограниченным набором команд.

    прототип, написанный на коленке на жирнопитоне на восьмиядерном контупере придется *портировать* на диалект языка си, который будет понятен компилятору, собирающему объектный код для микроконтроллера, попутно соображая, сколько килобайт памяти будет в твоем распоряжении на целевой платформе.
    Ответ написан
    1 комментарий
  • Можно ли с помощью Visual Studio 2015 Community писать коммерческий софт?

    MrNexeon
    @MrNexeon
    Можно. Если ваша команда состоит из одного человека (Вас), то:

    Любой индивидуальный разработчик может создавать бесплатные или платные приложения с помощью Visual Studio Community.


    Если более одного человека:

    Visual Studio Community может использовать неограниченное число пользователей в организации в следующих случаях: в учебных аудиториях, для научных исследований или участия в проектах с открытым кодом.

    Для всех прочих сценариев использования: В некорпоративных организациях Visual Studio Community могут использовать до 5 пользователей.


    Источник: https://www.visualstudio.com/ru/vs/community/
    Ответ написан
    Комментировать
  • Как найти программиста, чтобы он не украл идею?

    vicodin
    @vicodin
    Имею некоторый опыт
    Комментировать
  • Как найти программиста, чтобы он не украл идею?

    @malbaron
    0. Ты тут не первый такой умный. Поищи в поиске. Очень частый вопрос.

    Вы преувеличивайте проблему:

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

    Юридические:

    4. Попробуй патентовать. Для этого патенты и придуманы.
    5. NDA вы, поди, из статей про стартапы в США услышали. У них другое законодательство. Не знаю в нашей юриспруденции понятия - "неразглашение". Есть "коммерческая тайна". Есть куча описаний как правильно оформить "коммерческую тайну". Договора о неразглашении недостаточно.

    Сюрприз:

    6. А еще есть авторское право. Авторские права останутся у программиста. И он сможет воспользоваться своим продуктом (что важно - уже готовым, в который вкладываться не нужно).
    7. Решается правильным оформлением того, что программист создавал продукт именно для вас и только для вас под зарплату.

    P.S.:
    Более серьезные программисты - менее подвержены этой проблеме.
    У них и репутация и зарплата - незачем воровать.

    Начинающие, тем более, что сейчас рекламируется "быстро срубить денег в ИТ" - скорее подвержены искушению украсть.
    Ответ написан
    8 комментариев