• Как создать абстрактную фабрику, не ссылаясь на реализацию?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В приложении, которое использует Dependency Injection можно выделить 2 "области":
    - Composition Root
    - Остальное приложение

    Composition Root - это место в котором собираются все зависимости воедино. О всех реализациях зависимостей должен знать только он.
    Остальное приложение - это (тафтология) все остальное приложение. Они используют только интерфейсы и другие абстрации.

    Обычно Composition Root - это входная точка приложения. В нем создается эта самая ServiceFactoryImpl (стандартные реализации, из конфигурации могут быть прочитаны флаги, создан в зависимости от платформы и т.д.), а затем как интерфейс IServiceFactory, передается в остальные места.

    Т.е. в коде это будет как-то так
    #include <IServiceFactory.h>
    
    class Sample {
    private:
        IServiceFactory _factory;
    public:
        Sample(IServiceFactory factory): _factory(factory) { }
        DoSomething() { 
            auto service = _factory.CreateService();
            service.MakeStuff();
        }
    }
    
    int main() {
        auto factory = ServiceFactoryImpl(); // Читаем конфигурацию, параметры ОС и др.
        auto sample = Sample(factory);
        sample.DoSomething();
    }
    Ответ написан
    1 комментарий
  • Из-за чего докер контейнер выдает ошибку и как его остановить Resource is still in use?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    тебе просто нужно удалить контейнер, которому примаунчен этот вольюм.
    пока контейнер ОСТАНОВЛЕН все ресурсы за ним еще сохраняются
    Ответ написан
    1 комментарий
  • Как собрать kotlin в docker через gradle?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Когда запускаешь команду сборки, просто пропускай этап тестов - gradle build -x test
    Ответ написан
    2 комментария
  • Как загнать в dictionary key как null?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Напиши обертку
    var dict = new Dictionary<MyNullableInt, string>();
    dict[null] = "hello, world!";
    
    Console.WriteLine(dict[null]); // Output: hello, world!
    
    
    struct MyNullableInt: IEquatable<MyNullableInt>, IEquatable<int?>
    {
        public int? Value { get; set; }
        public bool Equals(MyNullableInt other)
        {
            return other.Value == Value;
        }
    
        public bool Equals(int? other)
        {
            return other == Value;
        }
    
        public static implicit operator MyNullableInt(int? value)
        {
            return new MyNullableInt() {Value = value};
        }
    
        public static implicit operator int?(MyNullableInt value)
        {
            return value.Value;
        }
        
        public override bool Equals(object? obj)
        {
            if (obj is int value)
            {
                return value == Value;
            }
    
            if (obj is MyNullableInt mni)
            {
                return mni.Value == Value;
            }
    
            return false;
        }
    
        public override int GetHashCode()
        {
            return Value.GetHashCode();
        }
    }
    Ответ написан
    3 комментария
  • На сколько сложно создать офлайн генератор иконок?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Самостоятельно создать - крайне сложно.
    За деньги нанять - легко, но придется выложиться крупно.

    Гораздо выгоднее будет просто купить подписку на freepik
    Ответ написан
    Комментировать
  • Найти все css/js кроме минифицированных?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Я бы предложил такой вариант - (?<!\.min)\.\w*$ -
    он ищет все файлы, у которых нет .min до расширения.
    Это более гибкий вариант, но если нужно только css/js, то такой - (css\/.*(?<!\.min)\.css)|((js\/.*(?<!\.min)\.js))$ - надо учитывать, что в js папке может находится css и наоборот (если это критично)
    Ответ написан
    Комментировать
  • Как работают транзакции, уровни изоляции в данном случае?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1) Что будет с запросом UPDATE, если исполнение кода ещё не дошло до этого запроса, оно получается будет ещё доступна для запросов из другого кода?

    Не понял, что имеется ввиду. Но если это про то - "будут ли видны изменения, которые сделаны до вызова этого UPDATE в транзакции", то это зависит от уровня изоляции других транзакций.
    В случае SERIALIZABLE - нет, не увидят.
    2) А если функцию sameFunc запустят много юзеров? Получается КАЖДЫЙ юзер будет ждать завершения предыдущих транзакций от всех остальных юзеров?

    Так как указана SERIALIZABLE, то да:
    - Если конфликтов не будет, т.е. никто не обновлял те же самые записи, то будут ждать
    - Если кто-то одновременно обновил одни и те же данные, то будет конфликт транзакции

    Стоит еще учесть, что если одна и та же запись обновлена одновременно разными транзакциями, то поздняя транзакция просто заблокируется и будет ждать: либо когда первая закоммит - тогда конфликт транзакции, либо первая выполнит откат и ты продолжишь выполнение
    P.S. еще есть таймаут ожидания транзакции

    3) А если все запросы в транзакции взаимодействуют только с полями конкретного юзера, то как это нужно реализовать в транзакциях? Вроде как объект транзакции один — сам node.js, который единожды подключается к БД.

    А вот тут надо разобраться. Зависит от того как ты работаешь с БД.
    Судя по названию ты используешь пул соединений (переменная pool) и каждый раз выполняешь запрос на нем. Я не знаю node.js и фреймворк для БД, который ты используешь, но что-то подсказывает, что на каждый такой .query создается отдельное подключение и выполняется запрос.
    Если да, то этот код работать не будет, т.к. ты постоянно открываешь новое соединение, начинаешь транзакцию или запрос и закрываешь соединение. В этом случае, все начавшиеся транзакции завершатся сразу, а запросы, которые должны работать в транзакции будут выполняться сразу.
    Чтобы все работало корректно - на каждом вызове этого метода открывай новое соединение и работай с ним. Тогда гонки в коде не будет. (Можно еще использовать пул соединений).

    Дополнительно я бы еще реализовал логику повторных попыток выполнения, если был обнаружен конфликт транзакций (проверяй исключение)
    Ответ написан
    6 комментариев
  • Как исключить при join повторение множества для другого множества?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Единственный вариант кроме рекурсии - хранимая процедура.
    Ответ написан
  • В чем причина ошибки Docker "Error response from daemon: No such container"?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    То что ты показал - это список образов. Запускается через docker image ls.
    Тебе нужно использовать docker container ps (либо docker ps - одно и то же)
    Ответ написан
    Комментировать
  • Как исправить ошибку сборки из кэша после очистки этого самого кэша?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    случайно .dockerignore нет с /app/build или типа того?
    Ответ написан
    Комментировать
  • Как проверить выделение памяти в Unity c помощью unit теста?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Для тестирования выделения памяти нужно использовать dotMemory. У него есть отдельный плагин для всяких unit фреймвоков - https://blog.jetbrains.com/dotnet/2018/10/04/unit-...
    Единственная проблема - она платная, а других аналогов мне не известно.
    2. Нашел репозиторий с кодом для профилирования Unity, но последнее обновление 5 лет назад - https://github.com/donaldwuid/unitymemoryprofilert...
    3. У самого Unity есть документация по профилированию памяти, но это не для юнит тестов, а для всего приложения - https://unity.com/how-to/analyze-memory-usage-memo...

    Лично я не советую тестировать выделение памяти в юнит тестах. Память надо профилировать в рабочем приложении, когда запущено, собрать данные за несколько часов работы и только тогда станет понятно, какие места надо оптимизировать.
    А так - уйдешь в микрооптимизации для кода, запускающегося раз за всю жизнь
    Ответ написан
  • Реально на NoSQLсделать полноценный ИМ?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Короткий ответ - да.
    Длинный -
    NoSQL - это обощенное название для всех НЕРЕЛЯЦИОННЫХ БД - ключ-значение (Redis), документо-ориентированные (MongoDB), графовые (Neo4J), семейство столбцов (Cassandra).
    Каждая имеет свой язык запросов. Какие-то похожи на SQL (Cassandra имеет схожий синтаксис), какие-то можно превраить в SQL (у Mongo очень похож на SQL, можно сконвертировать простые запросы, как представленный например), другие вообще не похожи (Redis - это просто 1 строка команды в plain text).
    Все что нужно - найти способ как транслировать этот SQL запрос в язык для целевой NoSQL.
    Ответ написан
  • Какой язык лучше всего подойдет для олимпиад?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Язык - C++. Однажды участвовал и в команде все писали на питоне - не прошли по времени.
    Где и как - решай задачи с acmp
    Ответ написан
    Комментировать
  • Как открывать много TCP соединений и поддерживать их?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Порт задается 16-битным числом, значит максимальное кол-во портов - 65535.
    Но нужно помнить, что некоторые порты зарезервированы (первые 1023), другие уже могут использоваться.

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

    Тут есть несколько возможных решений:
    - Создать древовидную структуру сети, т.е. есть узлы, которые объединяют в себе несколько других (группу) и для отправки ты используешь не порт, а ID узла. Т.е. маршрутизация на стороне приложения
    - Если нужно отправлять пакет всем, то задумайся над броадкастом.
    - Задать предел для размера кластера, либо кол-ва клиентов

    UPD:
    1. Асинхронность из rust тут вообще ни о чем - это фича языка. Главное здесь - возможности ОС
    2. Такое большое кол-во соединений приведет не только к большому потреблению ресурсов, но и большому кол-ву прерываний. Производительность снизится. Рекомендую пересмотреть архитектуру огромного кластера с полносвязной топологией.
    Ответ написан
    1 комментарий
  • Имеет ли смысл двухфакторная аутентификация на смартфоне?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Заводишь пароль на телефон. На всякий случай, можно еще и 2 метод аутентификации.
    Для важных приложений тоже заводишь пароль - либо само приложение их поддерживает (банковские, OTP), либо средствами самого телефона.
    Пароли используешь сложные и длинные, а главное - для каждого приложения разное, не повторяться
    Ответ написан
    2 комментария
  • Именная лицензия (named user license) как разработчик может узнать кто в действительности использует ПО?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Не пойман - не вор
    Ответ написан
    Комментировать
  • Книги, курсы по DWH?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Ответ написан
    Комментировать
  • Как исправить ошибку 403 при попытке доступа?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    403 ошибка означает ошибку авторизации.
    Короче говоря, нужно залогиниться и все пройдет. Как происходит логин в этом API это уже другой вопрос (имя/пароль, токен доступа и т.д.)
    Ответ написан
    Комментировать
  • Как определить Xml файл, на котором вылетает программа?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Нет, скорее всего это не XML файл.

    Судя по логам (System.Runtime.Remoting.Proxies) используется RPC запрос, к сервису HMI (я не знаю, что это за сервис, но возможная расшифровка Human Machine Interface). Суть в том, что он должен отдавать ответ в формате XML, но почему-то этого не делает.

    Что случилось (изменился API, возникло у него исключение и т.д.) мне не известно, но проблема скорее всего на их стороне
    Ответ написан
    3 комментария
  • Как настроить слежение за внешней веткой Git, чтобы сделать git pull?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    То есть должен забирать с dev но пушить в свои ветки по названиям.

    А вот так лучше не делать - однажды себе в ногу выстрелишь. Плюс ко всему, история слияний, ПР и другие вещи станут спагетти, а не деревом.

    Делай отдельную ветку для фичи/экспериментов, а если нужны обновления, то git merge
    Ответ написан
    Комментировать