Задать вопрос
  • Правильный способ реализовать поиск с автодополнением по одному слову?

    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 комментариев
  • Как собрать tar.gz пакет и установить в Termux?

    worldlight
    @worldlight Автор вопроса
    Просто программист
    Проблема решена, у меня был не установлен rust, не обратил внимание на пару строк выше. Закрыто
    Ответ написан
    Комментировать
  • Как асинхронная программа(event loop) понимает, что пришел ответ от сервера?

    bingo347
    @bingo347
    Crazy on performance...
    Что-бы понять асинхронность полностью придется постепенно опустится на самый низкий уровень, вплоть до железа. Но начать стоит с самого верха - с уровня нашего приложения.

    Итак, мы пишем на нашем высокоуровневом любимом языке, неважно JS/Rust/C#/Scala/Python или любой другой. В современном мире у нас скорее всего есть какая либо абстракция для работы с асинхронными апи, предоставляемая или стандартной библиотекой языка или сторонними библиотеками. Она может быть примитивной и основанной на колбэках или более продвинутой, вроде Future/Promise/Task или чем-то подобным. Иногда наш язык предоставляет синтаксис наподобие async/await для более простой работы с этими абстракциями, а иногда асинхронная работа может вообще быть скрыта от нас в рантайме языка, например как с горутинами в Go. Но в любом случае где-то под капотом у нас будет event-loop, а иногда и не один, так как никто не запрещает нам писать многопоточку в то же время используя асинхронные вызовы.

    Сам event-loop - это не более чем обычный while(true) или любой другой бесконечный цикл. И внутри этого цикла наша программа имеет доступ на извлечение к некоторой очереди (если не знаете, что это за структура данных, то погуглите), которая содержит в себе результаты уже обработанных задач. Программа берет очередной результат, находит ожидающий ее колбэк/Promise/Future/Task и запускает выполнение ожидающего кода. Очередей опять же может быть несколько и обрабатываться они могут по разному, но это не важно. Важно то, что наш основной поток (или потоки) ничего не знают, о том как выполняются асинхронные задачи. Он лишь смотрит, есть ли в очереди результат, и если есть - обрабатывает его, а если нет, то принимает решение или выйти из цикла (и завершить поток, а иногда и весь процесс) или уснуть пока новых результатов не появится.

    Но откуда же в очереди берутся результаты? Надо понимать, что асинхронная программа почти всегда многопоточная и результат операций попадает в очередь из фоновых потоков, которые просто блокируются в ожидании нужного ресурса (или сразу многих ресурсов, если используют системные апи вроде epoll или kqueue). Как правило такие фоновые потоки большую часть времени находятся в состоянии ожидания, а значит не потребляют ресурсы CPU и не попадают в планировщик ОС. Такая простая модель действительно позволяет сильно экономить ресурсы по сравнению с моделью, где множество потоков выполняют по 1 задаче и самостоятельно ожидают свои запросы.

    Важно отметить, что в современном мире даже на среднеуровневых языках, вроде C или C++, не говоря уже о высокоуровневых, не реализуют асинхронность сами. Во-первых, на разных ОС для этого используются разные апи. Во-вторых, эти апи на разных ОС умеют обрабатывать разные типы ресурсов (с сетью вроде как умеют работать все основные ОС, но помимо сети асинхронно можно работать с пользовательским вводом, диском и периферийными устройствами, вроде сканеров, вебкамер и прочего цепляемого в usb). Наибольшую популярность (ИМХО) имеет кроссплатформенная библиотека libuv, хотя в Rust принято использовать mio (или даже абстракции над ней, вроде tokio), в C# подобные механизмы есть в .NET Core, а в Go оно уже зашито
    в те самые 1.5МБ рантайма, что Go засовывает в каждый бинарь
    (там правда еще и GC, но один фик это много и достойно вынесения в динамическую либу)


    Ок. С прикладным кодом вроде разобрались. А что же происходит в ядре ОС? Ведь, как писалось выше, у нас даже есть апи, чтоб ждать запросы пачкой. Все просто. Ядра ОС стали асинхронными еще до того, как это стало мейнстримом, если мы конечно имеем дело не с ОС реального времени (но у нас же винда/линь/мак/фряха, а не ОС для бортового компа боинга, где это критично). Смотрите, когда что-то происходит на внешней периферии (ну например диск запрошенные данные прочитал или по сети данные пришли, или юзер мышкой дернул), то формируется прерывание. CPU реально прерывает свою текущую работу и бежит смотреть что случилось, точнее вызывает обработчик предоставленный ОС. Но у ОС то есть основная работа, поэтому она скорее старается освободить обработчик и просто скидывает все данные в оперативку, а разбираться будет потом, когда очередь дойдет. Ничего не напоминает? Очень похоже, на то что происходило в event-loop, только вместо фоновых потоков "результаты" попадают в очередь из прерываний. А уже когда-то потом ОС отдаст данные в драйвер устройства, ну и т.д., пока они не дойдут до нашего прикладного приложения. Вот и все, никакой магии.
    Ответ написан
    3 комментария
  • Как на андроиде восстановить насыщенность белого?

    Так разве не в настройках экрана, особенно в ксяоми
    Выбрать более холодный тон
    Ответ написан
    4 комментария
  • Как правильно использовать python скрипт через PHP backend?

    @rPman
    В общем случае технологии называются Interprocess communication.

    Изначально предлагались (php/python) механизмы очереди сообщений, shared memory и semaphores, как минимум на их основе делают высокоуровневые библиотеки по работе с сообщениями (и используют именно их, а не низкоуровневые, но знать про них обязан каждый, чтобы понимать недостатки)

    Второе и самое логичное, использовать socket-ы, как unix socket или pipes, так и tcp. Многие не заморачиваются, а поднимают полноценный асинхронный http сервер и организуют общение между приложениями по http или лучше websocket протоколу, так как это позволяет распределить приложения уже не в пределах одного сервера, а в сети, что дает очень высокую гибкость, но ценой значительных накладных расходов на сериализацию.

    Правда если используются разные языки программирования, в которых разные форматы для структур данных, так же придется сериализовать структуры, т.е. память копировать и кодировать/декодировать.
    Ответ написан
    2 комментария