Ответы пользователя по тегу Программирование
  • Как выявлять показатели (логи, метрику, дейтсвия пользователя) в приложении?

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

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

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

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Как уже было сказано - это называется IPC
    Если нужно обмениваться данными, то можно использовать техники:
    - Сокеты: TCP/IP можно практически везде, Unix-domain - только в unix системах, но будет быстрее
    - Сигналы: можно передавать данные вместе с сигналом, но только int/указатель, т.е. вариантов не много
    - stdout/stdin: при создании дочернего процесса получить его stdout/stdin потоки и работать с ними
    - Каналы: можно создать канал (анонимный или именованный) и общаться через него
    - Внешний сервис для общения: какой нибудь RabbitMQ, но это чересчур
    - Общая память (Shared Memory): но может не работать во некоторых ЯП
    - Общение через файлы: один процесс пишет в файл и по окончании шлет сигнал другому процессу, который этот файл читает
    - Memory Mapped File : тот же вариант, что и с файлами, но быстрее и при больших данных можешь словить OOM и большое потребление памяти
    - ZeroMQ - это очередь сообщений, которая работает в user-space

    Дополнительно надо помнить, что есть ограничения различных платформ, ОС, ЯП и некоторые варианты там работать не будут
    Ответ написан
    Комментировать
  • На сколько сложно создать офлайн генератор иконок?

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

    Гораздо выгоднее будет просто купить подписку на freepik
    Ответ написан
    Комментировать
  • Какой язык лучше всего подойдет для олимпиад?

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Для решения этой задачи подходит векторизация.
    Вкратце, слово представляется вектором из других слов (базовых) его описывающих. Тогда близость слов можно описать близостью векторов, его описывающих (косинусная близость). Это была теория.
    Практика здесь:
    - Обзор различных техник этого метода
    - Ссылки на питоновские библиотеки
    - Есть уже готовые фреймворки и предобученные модели
    Ответ написан
    1 комментарий
  • Как голосовые ассистенты "понимают" какую команду им необходимо сделать?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это задача NLP - Natural Language Processing
    Если вкратце, то работа ведется в несколько этапов:
    1. Преобразование звука в текст
    2. С помощью NLP этот текст обогащается:
    - Форматируется
    - Убирается мусор
    - Выделяются ключевые слова
    3. Готовый текст подается на вход другой нейронке, которая используя свою базу данных (история, контекст) понимает немерение

    Собственно, сама работа ведется в последней части. Как эти нейронки работают - другой вопрос. Просто обучают на своих наборах данных
    Ответ написан
    2 комментария
  • Полезность моделей памяти которые отличный от linear?

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

    Не совсем понял, чем представленная модель отличается от обычной линейной. Если только тем, что указанный reference - любое число, а не просто смещение от базы, то:
    - Это только лишние расходы на определение реального адреса
    - Виртуальная память уже реализует такую концепцию, но более сложную - с несколькими уровнями адресации - https://www.kernel.org/doc/html/latest/mm/page_tab...

    Мне кажется что данная модель памяти подойдет для машины заточенной под ООП (привет java)

    Единственное преимущество - локальность (кэш хиты). Но его и самим можно добиться.
    В той же самой джаве это делается через паттерн Off Heap

    для машины с защитой памяти так как из reference выйти не получиться,то есть мы не сможем повредить память другого reference


    См. иерархию страниц памяти. Там это уже реализовано

    Собственно полезна ли данная модель памяти


    Полезна, но уже устарела. Сейчас используются более продвинутые стратегии - https://ru.wikipedia.org/wiki/Адресация_памяти

    если для операций над памятью буду использоваться load/store

    А как иначе?

    а алоцирование кусочков будет проводиться чем-то похожем на new

    Любой new под капотом использует системные вызовы, которые этот самый load/store вызывают
    Ответ написан
    Комментировать
  • Что значит эта ошибка при заходе в игру?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Не установлен DirectX 11
    Ответ написан
    1 комментарий
  • Как сделать логику распространения файла?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Может на Kaggle ?
    Ответ написан
    Комментировать
  • К какому шаблону проектирования относятся методы create, findAll, fineOne?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это паттерн репозиторий.

    В общем случае, он предоставляет интерфейс для работы с условной "коробкой": положить, взять, найти.
    Его противопоставляют UnitOfWork. Это как репозиторий, только управление жизненным циклом более явное, как транзакции.

    Здесь есть объяснение, что это такое
    Ответ написан
    Комментировать
  • Как решить эту небольшую задачу?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В одной переменной хранишь полную сумму, а во второй текущее значение n * (n + 1) ... * 2n.

    Идея в том, что каждый раз последняя должна делиться на первый множитель из предыдущего слагаемого и умножаться на 2 следующих члена (n и n + 1).

    Типа такого
    int main(int argc, char** argv) {
        int n = 5;
        // Начинаем с 2
        int current = 2;
        int totalSum = current;
        for (int i = 1; i <= n; ++i) {
            current /= i;
            current *= 2 * i + 1;
            current *= 2 * i + 2;
            totalSum += current;
        }
        printf("S = %d", totalSum);
    }
    Ответ написан
    5 комментариев
  • Объясните пожалуйста работу этого кода?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Во-первых, оберни код в секцию.
    Во-вторых, этот код проходит по всему связному списку, начиная с головы, и на каждой строчке печатает значение из этого узла:
    1. Аллоцируется память для головы списка
    2. С консоли 3 раза считываются числа и каждый раз в конец списка добавляется новый узел
    3. Связный список проходится, начиная с головы, и в консоль выводится число в этом узле. Список обходится, пока не будет достигнут хвост (у него нет потомка)
    Ответ написан
    Комментировать
  • Какие характеристики ноута для начинающего?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если Python, то надо брать больше оперативной памяти - 8 Гб минимум (хорошо если 16)
    Процессор тоже важен, но не на столько как оперативка - любой Intel начиная с i3, либо любой AMD начиная с Ryzen 3.
    Диск - SSD (не HDD, разница заметна), минимум 256 Гб (я был с 128 Гб, это ад).
    Видеокарта будет не особо важна на данном этапе - можно брать любую.

    Лично от меня совет - монитор матовый, IPS (глазам удобнее).
    На клавиатуре пусть будет цифровой блок - больше комбинаций клавиш будет доступно (это цифры справа).
    Для экономии - купите без предустановленной ОС, можно сэкономить много.
    Ответ написан
    7 комментариев
  • Нужно ли при разработке библиотеки следовать принципу одной ответственности?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это скорее проблема версионирования, чем SRP
    Я бы дал такой ответ: тяните что хотите.
    Почему:
    - Пользователи могут начать использовать вашу версию зависимости - просто откатиться от своей
    - Вы можете выложить новую версию своей библиотеки с обновленными зависимостями
    - Увеличение продуктивности разработки: скорость, удобство

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

    P.S. Как я понял, вы думаете, что увеличение уровня абстракции метода влечет за собой обязательное использование внешних зависимостей, то это не обязательно так - все пишут велосипеды. Например, я однажды написал минималистичный парсер JS, вместо использования сторонних библиотек. Сложность по факту одна и та же, но зависимостей нет.
    Ответ написан
    Комментировать
  • Как запустить чужую программу в своей?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если язык C#, то для запуска другого приложения нужен класс Process. С помощью него можно создавать другие процессы. Вот пример
    using System.Diagnostics;
    
    
    var process = Process.Start(new ProcessStartInfo("bash"));
    if (process == null)
    {
        Console.WriteLine($"Could not start");
    }
    else
    {
        Console.WriteLine($"Started. Waiting for exit");
        process.WaitForExit();
    }


    Для C/C++ на Linux есть семейство exec* функций. Например, execve
    Ответ написан
  • Какие есть ресурсы для изучения информатики?

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