Задать вопрос
  • Как исключить при 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;
    Ответ написан
  • Почему функция is_palindrome не видит метода .lower()?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    исходное слово тоже к нижнему регистру привести надо, а вообще не надо приводить к нижнему иначе логика неправильная - регистр тоже надо учитывать
    Ответ написан
    Комментировать
  • Как быстро освоить c#, если я работаю на c++?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Пролистываешь метанит параллельно повторяешь примеры.
    Это за 1-2 дня можно сделать.
    Синтаксис довольно простой и немного похож на C++, поэтому изучится легко. Дальше уже идешь в проект и изучаешь какие библиотеки/фичи платформы там используются - их много поэтому лучше не распыляться на них во время обучения
    Ответ написан
    Комментировать
  • Как разместить N файлов по папкам?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Сортируешь все файлы по размеру
    2. Берешь самый большой файл и помещаешь в первую папку
    3. Дальше каждый файл по убыванию размера:
    1. Находишь папку с наименьшим оставшимся размером, который позволяет добавить туда файл
    2. Если таких нет - создаешь новую папку и кладешь туда
    Ответ написан
    7 комментариев