• Есть ли open-source Bash скрипты, позволяющие собирать информацию с серверов?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    node-exporter
    В конфиге экспортера выставляешь, что нужно собирать
    Любым скриптом делаешь http запрос на сервер и получаешь эту инфу
    Ответ написан
    Комментировать
  • WPF ошибка CS0103?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Класс помечен partial - проверь что оба объявления находятся в одном и том же неймспейсе что и в XAML разметке (тот что x:Class).
    Вот тут на SO похожая проблема - https://stackoverflow.com/questions/6925584/the-na...
    Ответ написан
  • Персонаж не прыгает в unity3D! Почему?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Вместо Input.GetButtonDown("Jump") используй Input.GetKeyDown(KeyCode.Space)
    Ответ написан
  • Какие есть бинарный сериализаторы для React?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Protobuf - https://github.com/protobufjs/protobuf.js
    Avro - https://github.com/mtth/avsc
    Parquet - https://github.com/ironSource/parquetjs (проект давно не обновлялся)
    Thrift - https://thrift.apache.org/tutorial/js

    P.S. React или нет без разницы - тут js главное
    Ответ написан
    Комментировать
  • Можно ли всем строковым полям задавать тип TEXT и повлияет ли это сильно на производительность?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Судя по этой статье можно всегда использовать TEXT вместо CHAR(N) и VARCHAR(N), т.к. производительность особо не страдает.

    А если самому пойти в документацию, то можно увидеть следующее:
    There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. While character(n) has performance advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of the three because of its additional storage costs. In most situations text or character varying should be used instead.

    Т.е. в производительности разницы нет - только в стоимости хранения. (в отличие от других СУБД)
    Ответ написан
    5 комментариев
  • Какой шаблон проекта выбрать при написании телеграмм бота Visual Studio 2022?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для простого телеграм бота подойдет и консольное.
    ASP.NET Core/Web.API - точно нет, т.к. они для веб-приложений, у тебя не такое.
    Также может подойти шаблон Worker Service, но он больше для каких-то сложных приложений.

    Предлагаю пока остановиться на консольном, но параллельно изучать Worker Service, т.к. в нем много удобных вещей - логирование, обработка исключений, мониторинг, DI и т.д.
    Возможно, однажды пригодится, но пока оставайся на консоли.
    Ответ написан
    2 комментария
  • Есть ли хороший курс/книга про использование паттерна page object на C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Курс/книга ради одного паттерна - вряд ли можно найти хорошие.
    Page Object паттерн из GUI тестирования, поэтому искать там. Рекомендую курс от Selenium - https://www.seleniumtraining.com/selenium-c-sharp-...
    Там как раз есть 6 часовой туториал с проектом по Page Object, но он в платной подписке.

    Также по тестированию на C# есть книга Selenium with C# - в 12 главе описывается Page Object

    Есть статья на хабре, но думаю она только описывает этот паттерн, только для знакомства
    Ответ написан
    1 комментарий
  • Почему цикл for блокирует асинхронное выполнение программы?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Ключевое слово await заставляет ожидать завершения всей функции и только потом происходит переход к следующей итерации.
    Если использовать asyncio.create_task, то создается и запускается фоновая задача - цикл продолжается после запуска этой асинхронной функции и не ждет ее завершения.

    хотя в функции pool_user нет ничего, что могло бы блокировать асинхронный цикл

    Во-первых, там есть подключение if await user.connect()
    Во-вторых, ты отправляешь сообщение если подключиться не удалось await bot.send_message

    Но в любом случае ты постоянно делаешь подключение, которое и блокирует выполнение функции
    Ответ написан
    3 комментария
  • В чём разница между DI, DI-контейнером и сервис-локатором?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    DI, Dependecy Injection - это сам процесс внедрения зависимостей (например, когда ты зависимости через конструктор получаешь)
    Пример:
    class User
    {
        IService _service;
        
        // DI
        User(IService service)
        {
              _service = service;
        }
    }


    DI-Container - это специальный контейнер, который может необходимую зависимость предоставить. Сначала ты в него регистрируешь все зависимости, а потом вызываешь метод по типу .getService("UserService") и он сам понимает какой сервис ты хочешь, какая у него реализация и как его создать (возможно для него нужны другие зависимости)
    Пример
    // DI-контейнер
    var container = new DependencyContainer();
    container.Register(typeof(IService), new ConcreteService());
    
    var service = container.Get<IService>();


    Сервис-локатор - это (анти) паттерн, когда, грубо говоря, у тебя есть статический класс этого DI контейнера, к которому обращаются все сервисы. Т.е. вместо того, чтобы использовать тот же самый DI или передавать интерфейс DI контейнера они напрямую обращаются к конкретному DI-контейнеру. Так делать не надо - будут трудности с тестированием, обновлением и всем сопутствующим
    Пример
    // Сервис-локатор
    class ServiceRegistry
    {
         IService Service;
         static IService GetService()
         {
               return Service;
         }
    }
    
    class User
    {
         void DoSomething()
         {
               var service = ServiceRegistry.GetService();
               service.MakeStuff();
         }
    }
    Ответ написан
    2 комментария
  • Какой брокер сообщений выбрать под задачу - принять данные по api и записать в базу?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Миллион элементов в json - это сильно (жирно).
    Предлагаю следующий вариант:
    - В качестве брокера использовать любой брокер сообщений/менеджер очередей с ACK/NACK механизмом (Redis Streams, RabbitMQ, Kafka)
    - Все json разбиваем на 2 категории - большие и маленькие в зависимости от размера (кот. поддерживает брокер)

    Алгоритм будет следующий:
    Producer:
    - Приходит запрос с json
    - Если json маленький, то отправляем в брокер напрямую
    - Если json большой, то сохраняем его в отдельную БД и получаем ID этой записи, в брокер отправляем ID этой записи

    Consumer:
    - Получает сообщение из брокера
    - Если json содержится в сообщении (когда маленький), то сохраняем в БД
    - Если json был большим и передан ID из БД, то читаем этот JSON из временный БД и сохраняем в целевую БД
    - Коммитим сообщение

    Пример такого запроса:
    // Маленький объект
    {
       "data": {
           "key": "value"
        },
        "id": null
    }
    
    // Большой объект
    {
        "data": null,
        "id": 13123123
    }


    P.S. название паттерна хранения большого объекта во внешнем хранилище и передача только его id не помню
    Ответ написан
  • Фреймворки для кросс-платформенной разработки. Практикуют ли переписывание под разные платформы?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Windows Forms - это только Windows, т.к. он построен вокруг нативных системных вызовов Windows. Вообще-то я однажды писал Windows Forms для Linux, но там очень много было костылей и багов, поэтому - нет, не надо.

    Что касается кросс-платформенной разработки на C#.
    Если речь идет про разработку оконных приложений, то тут 2 варианта:
    - Avalonia UI - это кросс-платформенный фреймворк, разрабатываемый сообществом (не майкрософтом), очень похож на WPF. Есть почти все платформы
    - MAUI - это новый кросс-платформенный фреймворк, разрабатываемый майкрософтом. Он довольно новый, поддерживает множество платформ (по странице документации даже Linux (GTK#)). Но он довольно сырой и по отзывам очень много багов
    - WebAssembly/Blazor - фреймворк для создания PWA, веб-приложений, но можно и для мобильных приложений
    Ответ написан
    3 комментария
  • Как постить посты в вк каруселью?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Загрузи несколько фотографий напрямую в сообщество - получи их id (фотографий)
    2. После вызови метод wall.post и в поле attachments укажи id этих фотографий - https://dev.vk.com/ru/method/wall.post
    Ответ написан
    Комментировать
  • Какой хост внутри контейнера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Попробуй указать имя хоста контейнера напрямую через hostname

    db:
        ports:
          - 5432:5432
        hostname: 'db'
        restart: always
        build:
          context: docker
          dockerfile: db.Dockerfile
        env_file:
          - configuration/db.env
        volumes:
          - .:/docker-entrypoint-initdb.d
          - ./dump:/var/www/dump
          - dbdata:/var/lib/postgresql/data
    Ответ написан
    Комментировать
  • Как отследить то, что самопроизвольно закрывает приложения NET в Ununtu?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Автономные приложения под линуксом надо запускать как сервисы через systemd.
    Как это сделать можно почитать тут - https://habr.com/ru/companies/timeweb/articles/759966/

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

    Также я не услышал про логи (в каком они виде) - если есть лог файл, то смотри там, иначе ничего сказать не могу.

    Могу также порекомандовать запускать это все в докере. Немного замороченно, но та же самая функциональность (логи и рестарт), что и в systemd сервисе.
    Ответ написан
    1 комментарий
  • Какая структура с лимитом памяти позволит ускорить поиск по огромному файлу с набором бинарных данных?

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

    В качестве индекса можно использовать бинарное дерево. Но здесь, я бы сделал так:
    - В узлах храним записи фиксированного размера, чтобы не бегать постоянно и дополнительно высчитывать смещения (все 16 байт для хранения использовать можно)
    - Само дерево будет содержать отрезки, т.е. не полный готовый ответ. В противном случае, будет нарушено ограничение на размер (10Гб ты никак не перепрыгнешь)

    В итоге, путь будет такой:
    1. Идешь в индекс ("дерево отрезков") и находишь левую и правую границу
    2. Идешь в целевой файл и запускаешь бинарный поиск по нему

    Если хранить индекс в памяти, то будет гораздо быстрее. Но высоту дерева надо найти импирически из-за ограничения в 100Мб в памяти
    Ответ написан
    Комментировать
  • Как выделить элемент не останавливая воспроизведение видео (OPENCV)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Никак, просто делаешь это быстро.
    Либо выделяешь не каждый кадр, а с определенным шагом. Например, выделяешь каждую секунду
    Ответ написан
  • Почему контейнер успешно создается локально, но не создаётся из регистра?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В докерфайле не вижу слоя с рантаймом - только sdk.
    Посмотри шаблон тут - https://learn.microsoft.com/ru-ru/dotnet/core/dock...
    Ответ написан
    1 комментарий
  • Безопасен ли OpenAPI в FastApi?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    OpenAPI надо использовать только во время разработки, для удобства.
    В проде надо отключать
    Ответ написан
  • Python ModuleNotFoundError - как исправить ошибку на Ubuntu?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если нужно использовать папку как модуль - то добавляй точку в начало названия.
    Т.е. не konstabot , а .konstabot
    Ответ написан
    5 комментариев
  • Как выявлять показатели (логи, метрику, дейтсвия пользователя) в приложении?

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

    Чаще всего вижу такое решение:
    - Приложение отслеживает внутрениие метрики и отдает их в Prometheus формате
    - Prometheus приложение собирает эти метрики
    - Grafana получает метрики из Prometheus и строит по ним дашборды
    - Grafana делает запрос в БД для получения статистики и строит по ним дашборды

    В общем, смотри пару Prometheus/Grafana

    P.S. анализ логов для получения метрик - плохая затея, не надо так
    P.P.S. метрики, логирование, действия пользователя и т.д. - в общем случае называется observability - возможность понимать что происходит в приложении/системе и т.д.
    Ответ написан
    Комментировать