Задать вопрос
  • Как организовать систему обновлений БД?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Это называется "Миграция БД". Для этого уже давно есть готовые инструменты, которые уже много лет применяются везде.
    Ответ написан
    Комментировать
  • Допустимо ли хранить логи nodejs приложения в mysql бд или есть решения лучше?

    @vitaly_il1
    DevOps Consulting
    Есть - уже лет 10+ назад придумали БД для логов. Самые популярные сегодня - Elastic (== ELK в прошлом) и Loki.
    Есть куча облачных сервисов на базе этих БД.
    Все современные логгеры поддерживают log shipping по сети.
    Ответ написан
    Комментировать
  • Допустимо ли хранить логи nodejs приложения в mysql бд или есть решения лучше?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотря что именно логгируется и для чего используется. Например, во многих CMS (админпанели, блоги итд) существует "логгирование действий пользователей" и оно традиционно использует базу. Ибо именно из базы удобнее и проще всего через web это показывать.

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

    Также плохое решение использовать console.log. Нужно использовать специальные библиотеки для логгирования, они есть под любые развитые языки. Например, такие, как winston для node.js. Библиотки позволяют настраивать уровень логгирования, транспорт (файлы/syslog/итд), что позволит написанный один раз код потом не переделывать под другие реалии (запуск в кубере, запуск для тестов на машине разработчика итд итп).

    В процессе развития и роста можно будет уже приделывать Elastic/OpenSearch, vector, greylog, logstash итд итп в зависимости от потребностей. Для пет-проекта это, скорее всего, не нужно. Но даже для пет-проекта полезно учиться правильным практикам. Чтобы потом хорошо делать в больших и сложных.
    Ответ написан
    Комментировать
  • Допустимо ли хранить логи nodejs приложения в mysql бд или есть решения лучше?

    @rPman
    Логи нужно не просто писать в какую-то базу, а делать их машиночитаемыми, иначе смысла нет.

    Пишут тут что это нужно только если у тебя миллионы запросов и гигабайты логов.. все это чушь (не совсем, просто если у тебя маленький проект, пользу логи будут приносить редко), а вот централизованная работа с логами со всех своих инстансев и даже проектов, очень даже неплохо, облегчает мониторинг, облегчает разработку, облегчает поиск проблемных пользователей/ситуаций и т.п... но ценою ресурсов на это.

    А так, первым шагом можно вместо записи в базу данных, просто писать в jsonl (построчно по json на событие), по меньше упаковки в человекочитаемые строки и побольше читаемые машиной, постаравшийсь полностью исключить вывод сообщений об ошибках в stdout/stderr, и над именованием файлов подумать, что бы удобнее с ними было работать.
    Ответ написан
    Комментировать
  • Правильный способ реализовать поиск с автодополнением по одному слову?

    Davidaa_WoW
    @Davidaa_WoW
    Зависит от того, что вы храните в индексе, и какой результат в итоге хотите получить.
    Какие могут быть кейсы:
    1. В индексе хранится много чего: кошки, собаки, попугаи и т.д.
    Решение: заводите новое поле, например 'pet_type'. Устанавливайте в него значение, например: 'собака'. Далее, создаёте статический фильтр синонимов в индексе, называете его, например 'pet_analyzer' и прописываете список необходимых синонимов. В результате должно получиться, что-то типа такого:
    PUT /pets_index
    {
      "settings": {
        "analysis": {
          "filter": {
            "pet_synonyms": {
              "type": "synonym",
              "synonyms": [
                "собака, щенок, кобель => dog",
                "кошка, кот, котёнок => cat",
                "попугай, попугайчик => parrot"
              ]
            }
          },
          "analyzer": {
            "pet_analyzer": {
              "type": "custom",
              "tokenizer": "standard",
              "filter": ["lowercase", "pet_synonyms"]
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "pet_type": {
            "type": "text",
            "analyzer": "pet_analyzer"
          }
        }
      }
    }

    2. В индексе хранятся только собаки, либо вам нужно распределение (щенки/взрослые собаки/распределение по полу)
    В таком случае, добавляете эту характеристику прямо в name. То есть документ у вас будет называться: 'Щенок лабрадора'. Далее, смотрите на типы формирования входящих запросов. Вам могут подойти:
    Ответ написан
    Комментировать
  • Как сделать копию папки из контейнера на компьютер после отработки кода?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Примонтируйте каталог как volume - тогда бэкап можно будет делать даже при выключенном контейнере.
    Ответ написан
    2 комментария
  • Как конвертировать модель в GGUF и квантовать?

    @rPman
    На самой странице модели есть пример кода на python или ссылка на github или докер образ, как ее использовать, обычно там же простым способом можно квантовать 8бит (более чем достаточно для исполнения, быстро, минимальные требования vram и без потери качества)

    Есть проект vllm, в котором поддержку универсально пилят для всех топовых моделей, попробуй его, у него же встроен веб сервер, а так же веб сервер с совместимым openai api, а там 100500 локальных вебморд для использования.

    p.s. только llama.cpp эффективно умеет работать на процессоре и главное использовать gpu и обычную память одновременно (например не хватает считанных гигабайт)
    Ответ написан
    Комментировать
  • Как исправить файловую систему на Линукс и не потерять данные?

    Подключите ISO с диском восстановления, какой-нибудь небольшой или просто специализированный дистрибутив, загрузитесь с него. По возможности скопируйте ваш диск с помощью dd целиком, если нужно (вот только куда — вам предостоит решить с хостером), или копировать в пайп по сети через ssh, например. Для этого понадобится и поднять SSH в загруженном вами образе.

    Как вариант — из загрузочного образа смонтировать ФС в режиме чтения: mount -o ro /dev/blablabla /mnt/blabla и выковырять ценные файлы.

    После этого отмонтировать ФС /dev/blablabla и провести xfs_repair...
    Ответ написан
    Комментировать
  • Как максимально сжать файлы в архиве?

    @apppostol
    Сами форматы jpg и mp4 подразумевают в себе алгоритмы сжатия. Вы пытаетесь сжать уже сжатое.
    Чтобы уменьшить размер файлов видео, их надо перекодировать с более низким битрейтом (что может сказаться на качестве).
    И так же понизить качество/разрешение фотографий.
    Других способов нет.
    Ответ написан
    1 комментарий
  • Какие есть хорошие ресурсы для изучения Docker для Golang?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Не думаю, что вы найдете что-то конкретное. Но вы можете воспользоваться AI для этого.
    Руководствуйтесь принципом - 1 контейнер - 1 сервис. Допустим, если у вас одно монолитное приложение и БД, то это 2 отдельных контейнера. Если у вас микросервисная архитектура, то каждый микросервис это один отдельный контейнер
    Ответ написан
    1 комментарий
  • Как расшифровать 1685700050?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Ну если это время, то:
    import datetime
    
    timestamp = 1685700050
    str_time = datetime.datetime.fromtimestamp(timestamp)
    print(str_time)

    У меня получилось 2023-06-02 13:00:50

    UPD. Это не код, а UNIX-время - количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года
    Ответ написан
    Комментировать
  • Как выполнить функцию после завершения всех задач?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Используйте метод Task.WaitAll
    Ссылки на все эти задачи, при этом надо, кончено не бросать без присмотра при перезаписи переменной outer, а сохранить (например, в массив Task[])
    Ответ написан
    Комментировать
  • Как организовать хранение электронных документов для веб-приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Лучше для чего именно? Какую проблему или проблемы вы этим решить хотите? Для начала определитесь, что именно вас не устраивает в вашем текущем решении - конкретные проблемы, характеристики, фичи и прочее. Скорость и качество доступа к хранилищу, объем, безопасность, надёжность и прочее. Сделайте список/документ. На основе вот этого списка и вашего опыта эксплуатации вашего решения сформулируйте требования к вашему хранилищу. И вот уже на основе этих требований подбирайте конкретное решение, которое их закроет по максимуму или, хотя бы, большей частью. Роутер и внешний диск вам тут точно не подойдут - низкая производительность и надёжность. Типовое универсальное решение - S3 хранилище в масштабируемом облаке. Альтернатива для своего сервера в своей серверной - FreeNAS.
    Ответ написан
    Комментировать
  • Что это за формат видео?

    @aab137
    Для определения формата видео можно воспользоваться утилитой ffmpeg
    ffmpeg -i <ваша ссылка с m3u8>
    Будут выведены метаданные видео, включая формат, кодек и т.д.
    С помощью этой же утилиты можно и скачивать видео, а не мучиться, склеивая чанки
    ffmpeg -i <ваша ссылка с m3u8> -vcodec copy -acodec copy output.mp4
    Ответ написан
  • Зачем файл с расширением .sin?

    GavriKos
    @GavriKos
    Может все таки sln?
    Это объединение проектов - солюшн. Вполне нормально, когда несколько проектов объединены, когда собирается больше одного exe например
    Ответ написан
    Комментировать
  • Какие существуют средства автодокументации кода Python для недокументированного кода?

    @rPman
    Топовые ИИ могут это сделать (openai o1/gpt4o, anthropic claude opus/sonet, google gemini pro, qwen 2.5 72b, llama3.2 70b,.. изучи lmsys арену lmarena.ai там можно выбрать домен задачи), у тебя не очень большой объем кода.

    Главная ошибка - пытаться одним промптом решить задачу (хотя o1 может быть близок к этому). Поиграй с промптами, твоя задача собрать описание работы твоего кода, опиши все что знаешь сам, напиши запрос, которым можно собрать информацию по функционалу, информацию по структуре кода,.. если есть время, попробуй разобрать код на структурные элементы, хотя бы 3 уровня (например модули - классы - методы) и задавать ИИ один и тот же вопрос, собрав в контексте весь код, структурное описание и в конце задавай вопрос о назначении конкретного элемента, и так повторить для каждого. Собирай ответы в один большой запрос, который уже в последствии можно передать o1 на итоговый анализ (можно и без нее, внутри o1 по уму делает именно это, но так как openai на столько закрытая что готова жестоко наказывать любого, кто попытается узнать этот алгоритм).

    Я помню мне хватило одной модели claude sonet и с десяток запросов, чтобы проанализировать исходный код чужого проекта и понять, на сколько ограничен или нет его функционал, при этом я спрашивал у модели итеративно, какой файл исходников ему нужен, в твоем случае все влезет за раз.

    Помни что чем больше размер контекстного окна, тем сильнее llm теряет информацию в нем (случайно), но повторение этой информации наоборот увеличивает ее значимость для нее, т.е. исходный код + описание этого кода облегчает для модели анализ. Есть и недостатки, даже топовые модели - переобучены (это болезнь всех нейронок), и какое-нибудь неосторожное ключеове слово или название может заставить модель думать не так как надо а как было написано в обучающих данных, тупой пример - если я хочу написать проект, работающий с api openai, и модель научена на ней, то мне было невероятно сложно заставить модель не генерировать сложный метод формирования api запроса, вместо вызова одной строчки (как я требовал в промпте) curl, прописанной в конфиге... но как только я убрал везде упоминание openai и подробно описал требования, так все прошло на ура. Поэтому, экспериментируй, изучай, перепроверяй все что тебе сгенерирует ИИ. Современный ИИ это не замена, а очень мощный инструмент помощник, который возьмет на себя скучную рутину.

    p.s. рекомендую лайфхак
    когда тебе нужен короткий ответ на твой вопрос, следуй следующему сценарию (особенно если используешь слабые модели, но работает для нетиповых задач и у топовых), в виде чат-сессии:
    {твой вопрос}
    {добавь текст: 'глубоко вдохни и подумай шаг за шагом'/'take a deep breath and think step by step'}
    [получи ответ, читать его не обязательно но оставь его в контекстном окне]
    {задай вопрос: 'а если подумать еще раз'/'but if you think about it again'}
    [получи еще один ответ, читать его так же не обязательно но оставь его в контекстном окне]
    {задай окончательный вопрос: 'Итак, какой будет твой ответ?'/'So, what will be your answer?', тут можно определить, в каком виде нужен ответ}
    [получи окончательный ответ]

    По поводу 'take a deep breath' была исследовательская работа, которая показала что эта просьба повышает качество моделей очень значительно, а мои исследования показали что просьба 'подумать еще раз' позволяет модели сомневаться в предыдущем тексте и искать альтернативные варианты, обычно это исправляет ошибки, если это в принципе возможно.

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