• Как считать время у большого количества объектов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Пусть у каждого объекта будет свой штамп времени - когда он протухает.
    В Update() проверяешь текущее время и время протухания - если превышено (и при этом предыдущее состояние не протухло), то меняешь вид/представление.
    Этакая машина состояний

    P.S. я не unity разраб., возможно во фреймворке уже есть готовые решения для такого
    Ответ написан
  • Правильно ли я понял свойства распределенных систем?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Допускает ли High Availability полный отказ системы или только отказ каких-то компонент с точки зрения функциональности, а не экземпляров?

    Доступность исчисляется относительно внешнего клиента - может или нет получить доступ к сервису. Здесь без разницы, что для этого используется кластеризация, бэкапы, стендбаи и т.д.
    Главное - это то, как систему видит пользователь. Собственно, все SLA на так и рассчитываются.
    Какая правильная и полная формулировка Availability из CAP?

    На сколько я помню, эту теорему в свое время критиковали и продолжают за неясность определения. Но если в кратце, доступность здесь означает, что ты получишь ответ, даже если связь с другими узлами кластера пропадет. Если в кратце, доступность = можешь получить ответ хоть когда-нибудь.
    Пример:
    1. Есть кластер из 2 Postgres мастеров. Связь между ними пропадает и запросы они принимать не могут. Это НЕ Availability, т.к. нам важна консистентность
    2. Если кластер из 2 Postgres узлов - мастер и слейв. Даже если связь между ними пропадет, то запросы они принимать смогут, но данные могут быть в не согласованном состоянии (мастер принял несколько UPDATE/INSERT/DELETE, а слейв о них не знает). Это Availability, но Consistency мы потеряли
    3. Если кластер из 2 Mongo узлов. Там используется свой протокол, который позволяет системе быть доступной, даже если связь между мастерами потеряется. Это Availability, но согласованность может потеряться
    P.S. в последнем используются специальные распределенные структуры данных (чтобы каждый узел мог модифицировать свою версию, а потом смержить с другими узлами)
    Отказоустойчивая система не допускает потери функциональности вообще?

    Отказоустойчивость - это не дискретная (0 или 1), а непрерывная характеристика. Здесь лучше думать в ключе SLA (99, 99.9, 99.999 т.д.), т.к. никакая система не может быть полностью отказоустойчивой. Но в целом да - отказоустойчивость значит, что функциональность должна работать и клиент может ее использовать.
    Как, в двух словах хотя бы, проводится измерение производительности и пропускной способности сервиса?

    1+ слово - тестирование (нагрузочное, объемное и т.д.)
    Здесь нельзя вычислить формулами, сколько и что сможем обслужить. Только экспериментом числа получать.

    UPD: если хочешь призму, чтобы смотреть на распределенные системы, то вот тут скачай "Распределенные системы" от Таненбаума - https://www.distributed-systems.net/index.php/book...
    Ответ написан
    5 комментариев
  • Почему C# не кроссплатформенный?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    С# работает на виртуальной архитектуре

    Правильнее говорить: имеет собственный байт код. Приложения .NET не запускаются в виртуальной машине! Они компилируются JIT'ом и просто могут взаимодействовать с платформой, но нет никакой ВМ (например, песочница как в JVM отсутствует - ты видишь обычный процесс.
    Почему так?

    Потому что C# (и .NET Framework в частности) был ориентирован для работы под Windows и там очень много специфичных для нее деталей есть (взять ту же концепцию COM объектов).
    Java изначально поддерживала другую стратегию + была поддержка Linux (на котором сидели энтузиасты), что в итоге вылилось в то, что эти самые энтузиасты полюбили Java и начали писать на ней везде (а для этого надо было иметь реализацию JVM под нужную платформу)
    Сейчас ситуация меняется: .NET есть под MacOS, Linux и Windows. Это не полная кроссплатформенность, но философия другая: мы будем поддерживать несколько платформ, но делать это качественно. Сейчас упор делается в Linux и веб в частности.
    Дополнительно:
    - Спецификация открытая и ничто не мешает реализовать под свои платформы. Взять тот же .net nanoFramework, mono, unity
    - Mono вышел в 2004 году, а значит еще с тех пор .NET был кроссплатформенным
    Ответ написан
    2 комментария
  • Как переустановить windows рядом с linux?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Не полетит.
    P.S. Только если во время установки не форматнешь раздел с линуксомselect-partition-install-clean-windows-10.jpg?resize=827%2C620&quality=78&strip=all&ssl=1

    UPD: фс линукса останется в норме, но загрузчик может затретереться. лучше установить через qemu
    Ответ написан
    3 комментария
  • Как связать python flask сервер и код на C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Здесь подойдет любой RPC фреймворк. В частности, рекомендую gRPC - довольно популярный и для твоего случая подходит хорошо:
    - Есть кодогенерация и для C# и для питона
    - Описание API не зависит от яп
    - Большое коммьюнити

    P.S. здесь подойдут и HTTP запросы. То что нужно долго ждать - ничего, подождет.
    GET запрос не обязательно должен выполняться моментально.
    Ответ написан
    Комментировать
  • Возможно ли избежать ошибку чтения в массиве если алгоритм задействует ячейку которой нет?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Граничные значения обрабатывать особенным образом:
    - Если это первая и последняя строка, то не берем в учет верхнюю или нижнюю строки соответственно
    - Если это самый левый или правый столбец, то не берем в учет левый или правый (относительно текущего) столбец соответственно

    Т.е. в каждый цикл дополнительно вставляются окаймляющие участки (для этих случаев)
    Ответ написан
    Комментировать
  • Как скрыть консоль в консольном приложении C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Смени тип выполняемого приложения с консольного приложения на оконное.
    В свойствах проекта с `Console Application` на `Windows Application`
    Ответ написан
    Комментировать
  • Как ограничить количество запросов на сервер при создании поисковика?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Лучше будет выставлять больший таймаут перед запросом. Т.е. если сейчас запрос делается спустя 0,5 сек после ввода, то сделай спустя 1 сек.

    Либо, чтобы запрос выполнялся, когда ввода не было X секунд
    Ответ написан
  • Как сделать чтобы квадратик менял гравитацию когда прикасается к порталу?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Может вместо 2.0f; писать -2.0f;.
    Ты же все-таки в противоположном направлении хочешь лететь
    Ответ написан
  • Что нужно для запуска консольного приложения C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ты указал режим развертывания - зависит от платформы. Это значит, что там где выполняется приложение тоже должен быть установлен рантайм под который ты разрабывал.
    Попробуй либо под .net framework скомпилировать (он почти на каждой винде установлен).
    Либо выстави режим развертывания "независит от платформы" (или типа того, не помню название) - тогда можно будет запускать даже там, где .net не установлен
    Ответ написан
    1 комментарий
  • Какой тип лучше использовать для листа в Unity в данном случае?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Заносить ОБЪЕКТЫ.
    Разница будет в производительности - если хранить только id, то придется еще и искать нужный объект дополнительно. Все равно хранятся не объекты, а ссылки на них - разницы с числом почти никакой

    P.S. в данном контексте, правильно говорить "объект", а не "класс"
    Ответ написан
    3 комментария
  • Как получить фундаментальные знания CS?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Единственное чем хороша база института - математика. Но предлагаю только ознакомиться с базовыми предметами, не вдаваясь в глубокие подробности (не нужно уметь интегрировать в уме).
    Тут предлагаю курсы CS Center на степике - https://stepik.org/org/compscicenter
    Там есть дискретная математика, мат. анализ и математическая статистика, алгоритмы. Больше и не нужно.

    За практикой идти в универститет не следует. Сфера развивается стремительно и программа поспевать не будет.
    Ответ написан
    Комментировать
  • Как реализовать быстрый обмен сообщения между скриптами на Python через RabbitMQ?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Во-первых, сетевые задержки - у вас несколько серверов
    Во-вторых, сам python немного медленный (может сервер не самый мощный, в нормальных серверах не должно быть проблемой)
    В-третьих, прдьюсер постоянно создает новые обменники и очереди
    channel = await get_channel()
     
        exchange = await channel.declare_exchange(
            "direct", auto_delete=True
        )
     
        queue = await channel.declare_queue(
            consumer, auto_delete=True
        )

    В-четвертых, нужно время на подтверждение обработки запроса (await message.ack())
    Ответ написан
    Комментировать
  • Как составить регулярное выражение?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1. В исходной строке заменяем все пробелы на '-'. Это обычный string.Replace
    2. Проверяем через регулярное выражение [a-z0-9\-]+

    // Входная строка
    var input = "Hello, world 2";
    
    // Заменяем пробелы на тире
    input = input.Replace(' ', '-');
    
    // Проверяем регулярным выражением
    var regex = new Regex(@"[a-z0-9\-]+");
    if (regex.IsMatch(input))
    {
        Console.WriteLine($"Соответствует");
    }
    else
    {
        Console.WriteLine($"Не соответствует");
    }


    P.S. вообще приведенный пример не соответствует поставке задачи: почему символы перевелись в нижний регистр, почему восклицательный знак исчез.
    Так же есть вопрос на счет табуляции и нескольких пробелов последовательно.
    Ответ написан
    Комментировать
  • Почему степенной ряд оканчивается NaN?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это значит на каком-то шаге (последнем) где-то получился double.NaN.
    Скорее всего это случилось здесь - Math.Pow(x, step * 2) / Fact((step * 2) + 1), т.к. факториал растет гораздо быстрее степенной функции и получилось так, что деление вернуло 0

    Попробуй использовать decimal вместо double, но тогда придется писать свою функцию возведения в степень (Math.Pow только с double работает)
    Ответ написан
    Комментировать
  • Как создать свой образ Arch Linux?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    То, что ты перечислил - это называется дистрибутив.
    Самый популярный ресурс для изучения - Linux From Scratch
    Ответ написан
    Комментировать
  • Проверяет ли Роскомнадзор на территории какой страны расположен сайт?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Где расположен сервер - не важно. Важно только где расположена БД, которая эти ПД хранит.
    Это регламентирует статья 18 ФЗ-152
    Ответ написан
    9 комментариев
  • Что такое культура программирования?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Не слышал о таком понятии. Скорее всего это HR развлекается
    Ответ написан
    Комментировать
  • Подключение к Postgres из JetBrain Golang: пользователь/пароль не верны, что делать?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Для входа нужно модифицировать hba.conf

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Описание проблемы проще чем кажется: чем больше трафика - тем больше работы.
    Это влечет за собой:
    - Больший нагрев процессора и других комплектующих + повышение их износа -> могут отвалиться
    - В каждом софте (даже стабильной ОС) есть ошибки, которые точно возникнут согласно ЗБЧ
    - Появляется слишком много прерываний, которые тормозят систему -> большие операционные издержки (переключение контекста, переход в режим ядра и т.д.)
    - Рано или поздно доступные ресурсы закончатся (ОЗУ, Диск, буфер сетевой карты), а не многие приложения могут такое обработать и упадут

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

    Сколько ресурсов должно быть для корректной работы при определенной нагрузке надо искать самим - тестировать систему (стресс/нагрузочное/объемное и т.д.).
    Создавать математические формулы - такое себе, т.к. слишком много важных параметров не будет учтено:
    - Топология сети
    - Используемые комплектующие
    - Охлаждение
    - Расположение серверов
    - Версия ОС + гипервизор

    UPD: + конечно же когда много трафика, то какие-то пакеты отбрасываются/теряются и необходимо слать их повторно, что увеличивает нагрузку на сеть + задержку запроса
    Ответ написан
    1 комментарий