• Какие есть оптимальные способы хранения и передачи изображений из MongoDB?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Да, есть: хранить сами изображения не БД, а в отдельном файловом хранилище с внешним доступом по ссылке-идентификатору. В самой же БД хранить только идентификаторы изображений в хранилище. Это стандартная практика работы с файлами и БД.
    Ответ написан
    Комментировать
  • Преобразование шрифта?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Этот текст - это символы Unicode.

    Например, "б" в слове "большое" - это символ 0x0431

    Проблема в том, что там символы не из одного алфавита, а полная солянка. На этом сайте можно получить коды всех символов: https://www.rapidtables.com/convert/number/ascii-t...
    Получите:
    1D04 1D00 28D 43E 1D07 20 431 43E 1D27 44C 26F 43E 1D07 20 28D 43E 1D29 1D07


    Как видите, они все разбросаны довольно сильно. 1D** - Phonetic Extensions . 04** - Cyrillic, 02** - IPA Extensions

    Символы из разных алфавитов подобраны по внешней похожести на нужные буквы (как Ш - это перевернутая m вообще). Наверно, какой-то онлайнг конвертер вроде этого где-то имеет набор из 33 кодов и подставляет их вместо русских букв. Не знаю, есть ли такой обратный.

    Можно написать обратный конвертер на том же питоне, только надо руками сопоставить каждому символу из текста нужный символ из обычного ascii. Например, заведите солварь (вам надо руками все встречающиеся символы в исходной строке туда добавить):
    convert = {'ᴀ': 'а', ... 'ʍ':'м', ...}

    Потом примените его ко всем символам в вашей строке каким-нибудь map().
    Ответ написан
    Комментировать
  • Как запросить по 2 записи из каждой категории с лучшим рейтингом?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кажется можно решить через оконные функции. Посмотри как тут https://dev.mysql.com/doc/refman/8.0/en/window-fun...

    Пригодится RANK или LEAD.
    Ответ написан
    1 комментарий
  • На чем пишут современные соц.сети, способные выдержать большой поток людей?

    @Everything_is_bad
    Пишут на том, на чем умеют, главное чтобы это можно было поддерживать и масштабировать, начинающие на такое не способны, тут нужен опыт.
    Ответ написан
    4 комментария
  • На чем пишут современные соц.сети, способные выдержать большой поток людей?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нужно писать соцсеть на "одних лишь ЯП". Производительность CMS принципиально ограничена. Все существующие соцсети, "способные выдержать большой поток" - это очень индивидуальные решения, без каких-либо готовых компонентов.
    Ответ написан
    Комментировать
  • На чем пишут современные соц.сети, способные выдержать большой поток людей?

    @bit8
    Большую соц.сеть на 1 языке не создать, в определенныый момент придется часть сервисов переписывать на другие языки, для производительности или фишек каких то
    Ответ написан
    Комментировать
  • Возможно ли на винде написать программу дешифровки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    То, что вы хотите, делается через создание драйвера виртуального диска, а уже в драйвере можете реализовывать различные шифрования. Тогда это будет прозрачно для программ - они просто запрашивают файл, а драйвер обеспечивает к нему доступ.
    Изучать нужно API операционки и примеры существующих решений
    Ответ написан
    1 комментарий
  • Возможно ли на винде написать программу дешифровки?

    @rPman
    Для начала, именно такой функционал уже встроен в операционную систему - штатное шифрование ntfs, доступ к файлам открывается при авторизации пользователем (можно воспользоваться run as ...), из под которого было произведено шифрование. При этом дешифрация происходит исключительно на момент чтения и записи файлов, сами файлы на диске остаются зашифрованными, это происходит прозрачно и автоматически.

    Всю систему шифруют не на уровне файлов а на уровне диска, пароль будет запрошен при старте системы (точнее при монтировании диска) штатный инструментарий windows или сторонние типа veracrypt
    Ответ написан
    Комментировать
  • Как устранить утечку памяти при множественных соединениях в net/http Golang?

    @calculator212
    Вообще есть сомнения что дело в этой мапе, первое что в глаза бросается, это то что вы неправильно обрабатываете ошибки пример из оф доки
    resp, err := http.Get("http://example.com/")
    if err != nil {
    	// handle error
    }
    defer resp.Body.Close()
    body, err := io.ReadAll(resp.Body)

    Вы сначала проверяете на ошибку и если ошибки нет, через defer закрываете соединение.
    Второе - вам стоит почитать про http.Transport и некоторые особенности клиентов, т.к. даже соединения которые должны были закрыться могут висеть очень долго
    tr := &http.Transport{
    	MaxIdleConns:       10,
    	IdleConnTimeout:    30 * time.Second,
    	DisableCompression: true,
    }
    client := &http.Client{Transport: tr}
    resp, err := client.Get("https://example.com")

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

    Получается так что в idleConnWait = {map[http.connectMethodKey]http.wantConnQueue} постоянно записываются новые элементы,
    В целом есть вероятность, что "утечка" тут, но это очень легко проверить даже без профилировщика, т.к. эта мапа уникальна для каждого клиента, то можно напрямую проверять сколько клиент занимает памяти, но на самом деле есть большая вероятность, что проблема в том, что вы неправильно используете client, т.к. эта мапа периодически очищается и расти она должна только до определенного значения
    Ответ написан
    9 комментариев
  • Как устранить утечку памяти при множественных соединениях в net/http Golang?

    Скорей всего, проблема в том, что вы возвращаете ошибку, не закрывая http соединение.
    Для этого была специально введена одна из самых привлекательных конструкций языка - defer.

    var client = &http.Client{
        Timeout: time.Millisecond * 100,
    }
    
    func scan(ip string) (error, string, string, string) {
        resp, err := client.Get("http://" + ip)
        // Здесь сразу желательно обработать ошибку ...
        
        // Закрываем соединение в конце выполнения
        // функции в любом случае,
        // даже если где-то возникнет ошибка
        defer resp.Body.Close()
    
        // Закрытие неиспользуемых соединений
        // Нужно ли это теперь?
        // client.CloseIdleConnections()
    
        // Проблема могла быть тут
        // if err != nil {
        //     return err, "", "", ""
        // }
    
        headers := buildHeaders(resp.Header)
        body, _ := io.ReadAll(resp.Body)
    
        // и это нам уже особо не нужно
        // resp.Body.Close()
    
        return err, headers, string(body), resp.Status
    }
    Ответ написан
    3 комментария
  • Что за файлы и как с ними жить дальше?

    Alex_Geer
    @Alex_Geer Автор вопроса
    System Engineer
    Ни кто не хочет писать ответ, напишу сам. В общем через команду file можно убедится что это действительно дампы процесса. Нашел ошибки в логах LibreOffice когда файлы удаляются ранее чем преобразовались в PDF, процесс зависает и система его убивает. Возможно эта информация будет кому то полезна.
    Ответ написан
    1 комментарий
  • Почему постоянно выводится расстояние 0(Алгоритм Дейкстры для городов)?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы выводите d[begin_index], это расстояние до начальной вершины. Естественно там 0 будет. А выводить надо расстояние до конечной. Надо end использовать (и выводить после того, как вы end нашли).
    Ответ написан
    Комментировать
  • Как в Debian с помощью find нати каталоги созданные 1 час назад?

    @Stariyded
    Сетевой админ
    Попробуйте ключ -cmin
    Ответ написан
    Комментировать
  • Что означает запись [4]byte в языке Go?

    igorzakhar
    @igorzakhar
    Массив из 4 значений у которых тип byte
    Ответ написан
    2 комментария
  • Что означает запись [4]byte в языке Go?

    @chemdev
    Пройти типы в go и узнать, что это массив из byte длиной 4
    Ответ написан
    3 комментария
  • Как происходит пошаговое обучение языковых моделей азам?

    @rPman
    Ответ в виде короткого гайда ты не получишь, он не влезет в формате qna, да и некому тебе его дать.. гугли, все есть в интернете.

    Для начала, чтобы повторить свою языковую модель, которая начнет показывать признаки интеллекта (т.е. нейронка построит внутри модель человеческого интеллекта), нужно минимум десятки миллионов долларов (это оптимистичная оценка). Это при условии наличии специалистов (команда), данных (все бросились парсить интернет и те кто эти данные хостят внезапно осознали что их данные имеют цены) и мотивацию. И да ее качество, в лучшем случае будет на уровне gpt3.5 от openai...
    Например у богатейшей в мире компании google, создавшей собственно алгоритм transformer, стоящий в основе современных llm-ок, имеющей огромные ресурсы, собранные данные со всего интернета, собственное железо (их TPU на порядок энергоэффективнее видеокарт, и развиваются уже десятилетие) - догнать по возможностям openai gpt4, не получилось!

    Причина - gpt стала показывать такие признаки при значительном увеличении количества как параметров нейронной сети (миллиарды) так и обучающих данных (трилионы токенов). Чтобы это все обработать в разумные сроки (месяцы-годы), нужны суперкомпьютеры на основе nvidia видеокарт, от монополиста, удерживающего рынок так что цены на это дело 10х от возможных (или даже 100х), плюс санкции добавляют еще Nx к цене да и не найти адекватного оборудования.

    НО! можно взять готовую нейронную сеть (ключевое слово pretrained или base или completion приписка у тех кто публикует такие сетки бесплатно) и использовать их токенизер (между прочем токенизация, тоже не простой процесс, поэтому лучше брать готовый) и finetuning на своих данных. С некоторым везением, результата можно будет добиться с 100-кратно меньшими денежными затратами (была статья где перец за 100$ дообучил llama7B до симуляции чата своих друзей). Помним, что если в обучающей выборке не было твоих знаний (не фактов а именно умений и пониманий) то дообучить этому будет сложнее и скорее всего итоговый результат - сеть начнет забывать что ранее знала и галлюцинировать еще сильнее. Тюнинг обычно используют чтобы повысить качество уже имеющихся умений и определить формат общения (например обучить модель общаться не в форме чата а в форме инструкций). Качество данных (соответствие обучающей выборке) - в этом случае имеет наиважнейшее значение.

    Ну, и есть разные алгоритмы - ключевые слова для гуглинга - finetuning, peft, rhlf. Есть алгоритмы поверх llm-ок, не трогая их веса можно повысить возможности с помощью RAG...

    Лучшие сетки с доступными весами на текущий момент, для обучения и работы с которыми хватит домашних видеокарт - llama3-8B (вышла 3 дня назад, всех шокирует, особенно 70B), openchat35-7B (на основе mistral)
    Ответ написан
    Комментировать
  • Какие существуют методы сравнения качества изображения?

    @alexalexes
    Я бы попробовал взвесить удельный информационный вес одного пикселя изображения:
    P = размер файла / (длина * ширина).
    Если изображение jpeg, то бы еще посмотрел степень компрессии по качеству Q.
    И потом бы взял результат:
    order by P desc, Q desc
    Это самый наивный анализ без влезания в оценку частотных и вивлет преобразований.
    Ответ написан
    1 комментарий
  • С чего начать изучать разработку приложений под Linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Нужно определиться зачем вы планируете изучить детально систему - вы собираетесь заняться системным программированием?
    ИЛи прикладным? Если прикладным, то для GUI приложений просто осваиваете любой фреймворк, типа qt, который работает в Линукс и пишете.
    Библиотеки для С++ есть и там и там.
    Ответ написан
    2 комментария