Задать вопрос
  • Почему mysql потребляет более 100% CPU?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Проверьте свои настройки БД, товарищ сильно ругал настройки MySQL, когда в CRM ломанулись тысячи пользователей.
    Ответ написан
    Комментировать
  • Какую СУБД выбрать альтернативой MySQL?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Использую в работе MySQL, PostgreSQL, MSSQL. Список не полный, конечно. Первые два использовал и для приложений с высокой нагрузкой, где параллельно может работать много пользователей и большой поток данных.

    Смело используйте как MySQL, так и PostgreSQL - но, самое главное, не доверяйте настройкам по умолчанию. По умолчанию эти базы настроены на запуск на 99% железа - шатко-валко, но работать будут. Но чтобы они работали быстро, нужно настраивать их.
    Ответ написан
    Комментировать
  • Почему у меня выдаёт ошибка при запуске тригггера?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Приведенный вами пример полностью работает.
    Проверьте структуру таблиц, вы ее меняли?
    Ответ написан
  • Symfony 3 регистрация 2-х типов?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если вы говорите, как добавить признак - OnYourLips вам подсказал решение.
    Если у вас вопрос, как сделать в целом, то вот, через FOSUserBundle:
    https://symfony.com/doc/current/bundles/FOSUserBun...
    Можно еще вот тут -https://symfony.com/doc/current/bundles/FOSUserBun... посмотреть, но первая ссылка закрывает вашу потребность.
    Ответ написан
    Комментировать
  • Как создать проект Web Pages в VS2017?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, второй проект на вашем скрине это и есть проект веб-форм.
    Но, зачем? ASP.NET MVC значительно удобнее и проще, на мой взгляд.

    P.S. Вы создавали проект, а нужно web-сайт, вот там есть то что вам нужно.
    Повторю свой призыв, используйте ASP.NET MVC, формы это мертвая технология.
    Ответ написан
    Комментировать
  • Как сделать свойства товаров в БД?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если вы используете БД PostgreSQL, то можете хранить аттрибуты, к примеру, в JSON-поле таблицы. Они индексируются и не придется делать кучу JOIN, как с EAV, чтобы вытащить данные.

    Но тут есть очевидные минусы, это удаление атрибута, к примеру. Может быть достаточно тяжелым. Но все зависит от способа реализации.

    В целом, можно взять EAV и достраивать JOIN-ами к запросу атрибуты, а можно и JSON.
    Забыл сказать, JSON поддерживает индексы и запросы по полям.
    Ответ написан
    3 комментария
  • Почему возникает ошибка при запросе?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А у вас там в файле базы такая таблица есть? Удостоверьтесь в этом, а так же в том, что ее имя правильно замапленно.

    P.S. Ваша ошибка вот она -
    Caused by: org.h2.jdbc.JdbcSQLException: Таблица "LEGAL_ENTITY" не найдена
    Table "LEGAL_ENTITY" not found; SQL statement:
    select legalentit0_.id as id1_2_, legalentit0_.inn as inn2_2_, legalentit0_.name as name3_2_, legalentit0_.version as version4_2_ from legal_entity legalentit0_


    Та ошибка, которую вы указали, это возникающая на следующем уровне.

    P.P.S https://stackoverflow.com/questions/33519630/h2-jd...
    Ответ написан
    5 комментариев
  • Как такой запрос сделать в RedBeanPHP?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А что вас останавливает сделать это через R::getCol ?
    На сколько я знаю, у них нет QueryBuilder-а, который вам нужен.
    Автор предлагает примеры: www.redbeanphp.com/index.php?p=/query_builder
    Ответ написан
    Комментировать
  • Как выполнить проверку против определенного значения payload в express-jwt?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    var jwt = require('express-jwt');
    
    app.get('/protected',
      jwt({secret: 'shhhhhhared-secret'}),
      function(req, res) {
        if (!req.user.admin) return res.sendStatus(401);
        res.sendStatus(200);
      });


    Если я правильно понял, jwt({secret: 'shhhhhhared-secret'}), говорит нам о том, что при доступе к '/protect' нужно применить middleware jwt с настройками {secret: 'shhhhhhared-secret'} и расшифровать HMAC-токен с использованием секретной фразы 'shhhhhhared-secret', потом пихнуть полученную учетку в запрос.

    Внутри же
    function(req, res) {
        if (!req.user.admin) return res.sendStatus(401);
        res.sendStatus(200);
      }
    вы получаете req и пользователя, и проверяете уже доступ на основание данных учетки.
    Ответ написан
    1 комментарий
  • С чего начать в освоении языка программирования C#? Какие программы используют?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Откройте для себя Microsoft Virtual Academy, там есть с чего начать.
    Ответ написан
    Комментировать
  • Как сделать временную таблицу с одинаковыми данными?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Небольшая ремарка к ответу DevMan :
    SELECT
      cols.*
    FROM 
      (SELECT 'Economy'::character varying (25)  economy) AS cols
    CROSS JOIN
      generate_series(1,10);


    Я изменил SELECT 'Economy'::character varying (25) economy, чтобы не было ?column?, ну и тип явный поставил.
    Ответ написан
    Комментировать
  • Как выбрать версию .NET Framework?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Правильно ли я понял, что для разработки интерфейса используем WPF? Насколько он мне даст потом возможности к кастомизации и добавлению свистилок/перделок?

    Только WPF дает максимальную свободу в плане кастомизации интерфейса, тоже самое на winforms будет сделать порой крайне сложно.
    Касаемо выбора .NET Framework, первый вопрос, минимальная версия windows.
    Скажем, вы ориентированы на Windows 7 и выше, то ваш выбор это 4.7 (последняя версия). Дальше от вас требуется проверять совместимость при переходе на новую версию framework-а с тем списком ОС, который вы поддерживаете.

    А если вдруг вам потребуется поддержка других ОС, то советую посмотреть в сторону кроссплатформенных UI библиотек сразу.
    Ответ написан
    1 комментарий
  • На каких GUI можно писать программы для Windows Mac Linux на C#?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Можно посмотреть https://github.com/AvaloniaUI/Avalonia , кроссплатформенный UI фреймворк, который берет свое вдохновление из WPF, если так можно выразиться.

    Потом, можно посмотреть на https://github.com/picoe/Eto , достаточно зрелый фреймворк для разработки кроссплатформенных приложений.
    Ответ написан
    Комментировать
  • Как добавить дополнительную обработку при подписывании делегата на событие?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Допустим, у вас есть класс API.
    В нем, у вас есть вот такой event:
    public event TokenRecivedEventHandler OnTokenRecived;

    и метод:
    public async Task GetTokenEvtAsync(Models.LoginViewModel loginModel)
    {
        var response = await GetToken(loginModel);
        OnTokenRecived?.Invoke(this, new TokenRecivedEventArgs(response));
    }


    В другом месте(классе, форме и т.п) вы делаете:
    var api = new API();
    api.OnTokenRecived += Api_OnTokenRecived;
    api.OnTokenRecived += Api_OnTokenRecived2;
    
    await api.GetTokenEvtAsync(loginModel: viewModel);
    
    api.OnTokenRecived -= Api_OnTokenRecived;
    api.OnTokenRecived -= Api_OnTokenRecived2;


    И два обработчика:

    private void Api_OnTokenRecived(object sender, TokenRecivedEventArgs args)
    {
        TokenDecoder.Decode(args.Token, tokenResult);
    }
    
    private void Api_OnTokenRecived2(object sender, TokenRecivedEventArgs args)
    {
        buttonLogin.Enabled = false;
        buttonLogout.Enabled = !buttonLogin.Enabled;
        buttonApiGetUser.Enabled = !buttonLogin.Enabled;
        buttonApiGetUserFields.Enabled = !buttonLogin.Enabled;
    }


    И все. Примеры взяты из рабочего кода и адаптированы под условие вопроса. Все работает. Вы просто вешаете два обработчика на свое событие.

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

    P.S. Если вам не два обработчика нужно, а именно какое-то дополнительное действие, то тут немного по-другому.

    private EventHandler _eventHandler;
    
    public event EventHandler OnCustomEvent
    {
        add 
        { 
            _eventHandler += value; 
            Log("Обработчик добавлен");
        }
        remove 
        { 
            _eventHandler -= value; 
            Log("Обработчик удален");
        }
    }
    Ответ написан
    Комментировать
  • С помощью чего генерировать исходный код в библиотеки?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    На самом деле, вам нужно вот это https://msdn.microsoft.com/en-us/library/bb398860.aspx
    Ответ написан
    Комментировать
  • Как сервер авторизации JWT и API сервер проводят валидацию токена?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, второе приложение (API) должно уметь по данному токену получать пользователя.
    По сути, JWT-токен состоит из трех частей:
    • Заголовок с алгоритмом
    • Тело
    • Подпись


    В теле, обычно лежит информация вида:
    1. Когда выдан
    2. Срок действия
    3. Кто выдал
    4. Публичные метки (роли, идентификатор пользователя и т.п.)


    API декодирует токен, в зависимости от алгоритма (может быть понадобится p12 - сертификат, все зависит от настроек) и на основание этой информации получает пользователя. Как только у вас истекает время жизни токена, приложение бросает 401 и вам нужно заново получить токен.

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

    Есть другой вариант, когда сервер авторизации дает два токена, второй - то что называется refresh_token. При такой ситуации, API может запросить новый токен для этого пользователя и дальше общаться через новый токен.

    Важно понимать, что использует клиент в качестве библиотеки для JWT-аутентификации (а API - это клиент), как она (библиотека) может работать.
    Ответ написан
    6 комментариев
  • Как вывести только те ресурс, где установлено определенное значение TV?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если не ошибаюсь, catcases тоже нужно явно указать среди includeTVs.
    Еще, ради интереса, попробуйте сделать значение на английском и сравнить. Есть подозрение, что иногда сравнивается не корректно.

    Вообще, такое вещи я делал через свой сниппет, с SQL-запросом внутри.
    Ответ написан
    4 комментария
  • Как настроить связку PHP+postgresql?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Я бы вам порекомендовал посмотреть в сторону PDO. Всё же унифицированный API для подключения и взаимодействия с базами данных.

    Убедитесь, что расширения для работы с postgres у вас подключены в php.ini.
    Само подключение достаточно простое, как и последующая работа:

    $userId = 20;
    try {
        $db = new PDO("pgsql:dbname=basa;host=localhost", "admin", "123" );
        $sql = "SELECT * FROM public.users WHERE id = ?";
        $sqlQuery = $db->prepare($sql);
        $sqlQuery->execute([$userId]);
        
        while($result = $sqlQuery->fetch(PDO_FETCH_ASSOC)) 
        {
            echo "{$result['id']} / {$result['name']}<br />";      
        }
    
        $dbh = null;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    Ответ написан
    3 комментария
  • Как реализовать чтение и выполнение запросов из DBContext в портативной библиотеке?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    В целом, можно.
    Можно сделать сервис-локатор уровня приложения, посредством которого все модули могут получать те или иные сервисы.

    А дальше, просто: Регистрируете сервис, который отдает нужную логику или просто Unit Of Work по верх DbContext-а и используете из плагина.
    ApplicationBoostrap:
    private void ConfigureContainerBuilder(ContainerBuilder builder)
            {
                builder.Register(c => EngineConfigurationHandler.Current)
                    .As<IConfiguration>().SingleInstance();
    
                //Зарегистрируем сервисы 
                builder.RegisterAssemblyModules(typeof(RegisterDomainIocModule).Assembly);
                builder.RegisterAssemblyModules(typeof(BaseService<>).Assembly);
                builder.RegisterAssemblyModules(typeof(Bootstrapper).Assembly);
            }


    И, где-то в недрах:

    using(var uov = ApplicationContext.Resolve<IUnitOfWork>())
    {
        var data = uov.Query<SomeDomainModel>().Where(...);
    
        uow.Save(new SomeDomainModel{  Name = "Name" });
        uow.Commit();
    }


    Почему я сказал про Unit Of Work,а не конкретный DbContext - потому что DbContext вы не контролируете, в отличии от вашего же Unit Of Work. И, соответственно, поддержку будет сделать куда проще. Опять же, в Unit Of Work вы можете напихать дополнительную логику пост- и пре-обработки (фильтрация по флагу IsDeleted), автоматическое присвоение ModifyDate при сохранение и т.п.

    P.S. и да, я надеюсь, вы не имели ввиду Portable Library, вот тогда вам точно не обойтись от своих абстракций, определенных именно в Portable Library и повсеместно эксплуатируемых.
    Ответ написан
    Комментировать