Задать вопрос
  • На сколько сложно создать офлайн генератор иконок?

    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
    Ответ написан
    Комментировать
  • Как реализовать атомарное обновление 2 файлов?

    AshBlade
    @AshBlade Автор вопроса
    Просто хочу быть счастливым
    В итоге пришел к такому решению:
    Моя основная проблема - не как атомарно обновить 2 файла, а создавать снапшот приложения и очищать лог (чтобы размер не становился огромным) так, чтобы согласованность не нарушалась.

    Моя проблема заключалась в изначально неправильном проектировании файловой структуры - было только 2 файла: снапшот и лог.
    Спустя время нашел следующее решение:
    - Файл снапшота 1 - для его обновления создается временный файл снапшота, который атомарно переименовывается (системный вызов rename атомарный - так прописано в документации)
    - Вместо единого файла лога используется сегментированный лог - весь лог хранится в нескольких меньших файлах. Т.е. теперь я работаю с логическим файлом лога, который состоит из нескольких физических сегментов. Сегменты лога не удаляются при создании снапшота - этим может заниматься фоновый поток, который удаляет те сегменты все записи которых по индексу меньше индекса примененной записи в снапшоте.

    Так как я использую RAFT, то необходимость в UNDO логе при записи в лог отпадает:
    - запись append only, т.е. закоммиченные записи перезаписываться не будут
    - лог может быть в несогласованном состоянии только если не до конца будут перезаписаны незакоммиченные записи, но это можно понять по чек-суммам, которые идут после каждой записи (можем откатить лог)

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

    В итоге работа со снапшотами будет примерно следующей:
    - Добавляем (при необходимости перезаписываем) записи в лог
    - Если размер сегмента превысил максимальный, то создаем новый и закрываем старый (работа будет вестить с новым файлом)
    - Новый снапшот создаем во временном файле
    - Когда снапшот готов, то атомарно вызовом rename перемещаем его в целевой файл (замена)
    - Фоновый поток в один момент обнаружит, что есть файлы лога с неактуальными записями и тогда их (старые сегменты лога) удалит

    Похожие идеи я нашел в:
    - etcd - создание новых файлов сегментов через атомарный rename
    - kafka - все записи хранит в xxxxxxx.log файле, где xxxxxxx означает офсет первой записи
    Ответ написан
    Комментировать
  • Обновление nodejs api после деплоя через докер и безопасность. Каков путь?

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

    Собираешь новый образ с новым тэгом
    Повторить процесс удалив контейнер?

    Да
    Примерно так
    docker stop my-container
    docker rm my-container
    docker run --name=my-container my-image:new-tag

    Какие подводные по настройке безопасности?

    root-less контейнеры
    маунтить отдельные файлы и по возможности ro
    порты не привилегированные использовать
    вообще, докер это не про безопасность, а про скорость
    Стоит ли держать бд на одном vps с api или поднять еще один.

    Если инстанс контейнера один, то лучше на одном - локальность данных
    Если горизонтально масштабируешься + отказоустойчивость повысить хочешь, то лучше раздельные
    Ответ написан
  • Как исправить ошибку vector subscript out of range?

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

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    HealthBarImage.fillAmount = (float) HealthBossNow / HealthBoss;
    Ответ написан