Mark
если уж на то пошло, то на фронт можно и aws\s3 либу затащить что умеет делать это все под капотом. Но опять, авторизация
Была у нас как-то на проекте либа, использовавшаяся на фронте для авторизации в cognito. Светила мастер токен в дев-консоли, с которым делай шо хошь))))
Mikhail
Возобновлением занимается? Есть ли обертки чтобы s3 заменить на gcp/azure? Что с корсами?
minio есть такой проект, реализует S3 протокол под вашу проблему должен подойти иначе делать реализацию под каждый клауд отдельно
Eugene
это только тебя волнует.
Eugene
мой вопрос был 1
Максим
мой вопрос был 1
на твой вопрос вот схема и она с беком https://t.me/golang_jobsgo/111017
Eugene
но если по существу - то вообще говно вопрос, перекидывается очень быстро
Eugene
ты видимо ни вопроса не понял ни схемы.
Mark
А вообще я бы порезал и в горутинах загрузил на бэке
Максим
А вообще я бы порезал и в горутинах загрузил на бэке
но у Евгения был вопрос — сделать без бека
Anton
Да не выйдет это без бека
Anton
Права на запись в blob storage нет с фронта без бека. Боже. Гошный чат.
Максим
ты видимо ни вопроса не понял ни схемы.
ну меня деклассифицировали из сеньоров до джуна+ 🙂 можно джуну простить не знание сижу джуню с готовым решением как могу
Mark
Права на запись в blob storage нет с фронта без бека. Боже. Гошный чат.
Есть библиотеки в ts, но если душить то да, они тоже в бэк ходят, хоть и не тобой написанный
Eugene
но у Евгения был вопрос — сделать без бека
нет, не без бэка, а без гоняния контента через бэк.
Anton
Вы все ненастоящие синьоры. Настоящий есть только один, это Коша. И его нет в этом чате. Так что можно расслабиться.
Максим
Ты ж недавно говорил, что не сеньёр?)
я случайно упомнял свой сеньорский опыт в пхп в виде резюме
Eugene
Права на запись в blob storage нет с фронта без бека. Боже. Гошный чат.
вообще, строго говоря, если говнокодить - то можно сделать вообще без бэка, но тогда будут светиться креды во фронте :)
Максим
Да хорош уже нюни ныть ё-моё
ну мне написали, что я не разобрался, я отвветил, что это ок
Mark
Никто тут не пытается обидеть, чего опять в это скатываться, ну сранулись пару раз, забыть уже успели хоспаде, это интернет, "тут и на хуй послать могут"
Максим
Пхп не опыт)
ну вот, тогда все сходится
Mikhail
tus диаграмка делает все что ты спрашиваешь, и частями грузит, и рестартует загрузку если надо, и вообще готовый пример запустил бы уже да проверил)
Максим
Eugene
дык я из праздного интереса спросил :)
Mikhail
топик стартеру, я плохо понимаю вопрос изначальный, потому и накинул Толи есть проблема, толи нету
Mark
Плюс если тебя можно деклассифицировать в джуна сообщением анонимуса - то какой ты тогда сеньор
Максим
Плюс если тебя можно деклассифицировать в джуна сообщением анонимуса - то какой ты тогда сеньор
ну я о том же, я не против любого тайтла, но предложения в догонку к критике пришли отрывчатые и спорные участниками обсуждения без конкретики
Mark
извините всё, я тоже завязываю с этим, только по делу начали говорить
Eugene
топик стартеру, я плохо понимаю вопрос изначальный, потому и накинул Толи есть проблема, толи нету
проблем нету, вопрос из праздного интереса - умеет ли жаваскриптовая с3сдк лить с восстановлением при обрыве. ожидался ответ - да умеет / нет, еще не завезли. начался балаган про го и пересылание через бэк, какие-то либы, пляски с корсом...
Eugene
что и требовалось.
Mikhail
и вообще, это проблемы фронта. пускай там и разбираются (с)
Eugene
ну, тут видишь до чего дошло - бэкеры не понимая фронта начинают гонять петабайты через свой несчастный сервер, ну ок, деньги ихние
Mark
Да проще ответить "Да, можно. А нужно ли?"
Максим
Да проще ответить "Да, можно. А нужно ли?"
деньги нужны Евгению 🙂 значит нужно
x1gluk1x
У s3 хранилищ есть такая штука как presigned url. Её может сгенерировать бэк индивидуально для конкретного клиента и он сможет используя эту ссылку залить файл, либо провести другую операцию. В зависимости от того какие права бэк вшил в ссылку и тд. Такой подход как раз используется что бы не забивать свои каналы гоняя кучу трафика, а давая клиенту сделать это самому
Mikhail
Хм красиво, не знал
в tus выше же ровно это и использовано, гляньте внимательней если оно вам действительно нужно
Максим
в tus выше же ровно это и использовано, гляньте внимательней если оно вам действительно нужно
не, там ссылка не выписывается, там через sdk льется просто методом Upload() с указанием key и бакета а стейт идет рядом в мета-файлах потом из них собирается инфа по склейке и через sdk вызывается метод склеивания, удаляя чанки
Mikhail
Максим
но по этой схеме все одним куском идет над клиентом только заморочиться, но в целом да @eugenesumin ваш вопрос получается закрыт но решение все же вендор локед — это уже от меня, для жирных котов короче, для стартапчика жирновато писать
Eugene
да мой вопрос давно закрыт уже когда Михаил ответил одной фразой :)
Максим
да мой вопрос давно закрыт уже когда Михаил ответил одной фразой :)
не совсем закрыт, нарезку самому писать надо и стейт загрузки будет на клиенте, а значит мусор может собираться от брошенных не финальных загрузок ну ладно, кто будет это все разбираться. в мелочах
Eugene
а что лучше для стартапчика - это большой вопрос, который сильно зависит от того сколько контента будет литься на с3. может выйти, что для стартапчика вендорлок будет существенно дешевле
Mikhail
дорогий дневник, шел 3ий день выходных. Все демонстрации пройдены, весь мусор собран, больше не знаю чем занятся.
Максим
дорогий дневник, шел 3ий день выходных. Все демонстрации пройдены, весь мусор собран, больше не знаю чем занятся.
Тут спрашивали, какую бы задачу решить на го вместо простых и тестовых, есть такая интересная задача, которую бы я отдал на аутсорс/тестовое/стажировку Есть го-сервис, который делает запросы в LLM (gemini, Qwen-Code, GPT-4, Claude), ответ ожидает в формате interface Response { files: { [filePath: string]: string } message?: string error?: string } то есть овтет будет прмиерно таким { "files": { "main.ts": "console.log('Hello, world!');", "utils/helper.ts": "export function greet(name: string) { return `Hello, ${name}`; }" }, "message": "Файлы успешно сгенерированы" } Проблема Когда llm в виде стрима отдает этот json — она рисует его последовательно то есть в таком виде чанк 1 { "files": { "main.ts": "console.log('Hello чанк 2 , world!');", чанк 3 "utils/helper.ts": и так далее (и чуть мелкими кусочками)... надо сделать так, чтобы: - когда появлялось новое название файла — слалось ws сообщение на клиент и потом поток событий на доавбление его контена - как только появился вторйо файл — все повторялось (событие о том, что мы отдаем уже другой файл и опять поток с его содержимым Кто готов сделать такое или есть наработки — готов буду заплатить или помочь с реализацией, просто у меня работа с проектом делается не только на стороне разработки, а еще куча дизайна, маркетинг и прочее сейчас я в mvp прошу llm делать ответ в другом формате, но llm температурят и отдают в кривом (особенно claude) виде, gpt4 через раз, только qwen справляется буду рад участию и упомяну на сайте codiew.io, и даже заплачу, можно будет в резюме указать если решите поизучать как ее реализовать, есть пара известных способов: - использовать gjson - использовать токенайзер нативной encoding/json - использовать решение типа https://docs.boundaryml.com/guide/baml-basics/streaming на клиенте это будет выглядеть так https://codiew.io/r/6n0?t=12000
Mikhail
что такое ВО?
Максим
что такое ВО?
это пересылка, удалил
Борис
Тут спрашивали, какую бы задачу решить на го вместо простых и тестовых, есть такая интересная задача, которую бы я отдал на аутсорс/тестовое/стажировку Есть го-сервис, который делает запросы в LLM (gemini, Qwen-Code, GPT-4, Claude), ответ ожидает в формате interface Response { files: { [filePath: string]: string } message?: string error?: string } то есть овтет будет прмиерно таким { "files": { "main.ts": "console.log('Hello, world!');", "utils/helper.ts": "export function greet(name: string) { return `Hello, ${name}`; }" }, "message": "Файлы успешно сгенерированы" } Проблема Когда llm в виде стрима отдает этот json — она рисует его последовательно то есть в таком виде чанк 1 { "files": { "main.ts": "console.log('Hello чанк 2 , world!');", чанк 3 "utils/helper.ts": и так далее (и чуть мелкими кусочками)... надо сделать так, чтобы: - когда появлялось новое название файла — слалось ws сообщение на клиент и потом поток событий на доавбление его контена - как только появился вторйо файл — все повторялось (событие о том, что мы отдаем уже другой файл и опять поток с его содержимым Кто готов сделать такое или есть наработки — готов буду заплатить или помочь с реализацией, просто у меня работа с проектом делается не только на стороне разработки, а еще куча дизайна, маркетинг и прочее сейчас я в mvp прошу llm делать ответ в другом формате, но llm температурят и отдают в кривом (особенно claude) виде, gpt4 через раз, только qwen справляется буду рад участию и упомяну на сайте codiew.io, и даже заплачу, можно будет в резюме указать если решите поизучать как ее реализовать, есть пара известных способов: - использовать gjson - использовать токенайзер нативной encoding/json - использовать решение типа https://docs.boundaryml.com/guide/baml-basics/streaming на клиенте это будет выглядеть так https://codiew.io/r/6n0?t=12000
Ну то есть, надо парсить жсон почанково.
Максим
Ну то есть, надо парсить жсон почанково.
ага и стримить когда мы находимся внутри чанка files.[*].content до закрытия files.[*].content и ноды files.[*]
Максим
причем tus у меня закрыта проблема (пока что), а вот эта с стримингом контента открыта
Борис
ага и стримить когда мы находимся внутри чанка files.[*].content до закрытия files.[*].content и ноды files.[*]
https://github.com/Blaze2305/partial-json-parser/blob/main/examples/json_stream/main.go - ну в принципе что-то такое сделано, остается следить, в какой ноде мы находимся.
Максим
https://github.com/Blaze2305/partial-json-parser/blob/main/examples/json_stream/main.go - ну в принципе что-то такое сделано, остается следить, в какой ноде мы находимся.
нууу очень круто выглядит! спасибо! 1 example и ровно под стримминг осталось только найти исполнителя 🙂
Anton
нууу очень круто выглядит! спасибо! 1 example и ровно под стримминг осталось только найти исполнителя 🙂
Джсон так себе для стриминга подходит. Какие структуры надо парсить будет? Произвольные?
Максим
Джсон так себе для стриминга подходит. Какие структуры надо парсить будет? Произвольные?
{ "files": { "main.ts": "console.log('Hello, world!');", "utils/helper.ts": "export function greet(name: string) { return Hello, ${name}; }" }, "message": "Файлы успешно сгенерированы" } или { "error": "Some error" } вот в таком формате буду запрашивать
Максим
Маленькие структуры зачем тут стриминг
это пример стримминг нужен, что live режим во время записи поддерживать
Anton
это пример стримминг нужен, что live режим во время записи поддерживать
Так непонятно что будет стремится. Такую структуру не проще просто передать целиком?
Максим
Так непонятно что будет стремится. Такую структуру не проще просто передать целиком?
я ссылку на пример скинул, почему и как https://codiew.io/r/6n0?t=12000 (вот. как сейчас, но сейчас не json)
Anton
ndjson можно просто взять.
Максим
ndjson можно просто взять.
кстати, я не подумал о том, что можно на клиенте работу делать, спасибо!
Глафира
Пpoвepeннaя тeмa, пo 9к зa дeнь
Глафира
Пpoвepeннaя тeмa, пo 9к зa дeнь
Mikhail
Епта... Я уж подумал Глафира за ndjson топит!! Мол 9к скачиваний, хз чего тока, но все-же. Звучит солидно
Eugene
@halabooda кстати, а если качать через твой сервер, то кто будет резать на части на фронте ? ну т.е. я в браузер кидаю файл на 5 гиг, что дальше происходит ?
Eugene
фронтовый ? тогда непонятен был твой вопрос про то - кто в браузере будет резать и потом отправлять команду на склейку.
Eugene
это же по сути то же самое.
Максим
фронтовый ? тогда непонятен был твой вопрос про то - кто в браузере будет резать и потом отправлять команду на склейку.
да не, все предлагаемые решения — они обычные и понятные, просто tus делает это уже готовым, там нет магии, вся критика — сделать все тоже самое, но самому без учетам стейта загрузки и прочих мелочей, что tus уже прошел в несколько мажорных итераций (но плюсы тоже имеются, например трафик не гонять через бек, как уже разобрали) - опциональный выбор стораджа (file/s3/gcp/azure) - управление стейтом загрузки и провайдинг мета-данных - корсы из коробки - тюнинг размеров и потоков - хуки - готовая инфра под клиенты на многих языках (включая нативные мобилки) - простота деплоя - открытый код (запишем в плюс) + активная поддержка большой компанией + использование в еще больших (жирнющих) компаниях - управление отдачей контента с учетом заголовков скачиваний или отдачи Content-Disposition (мелочи, но все же) - вызов как библиотеки, а не сервиса (я так сделал)
Eugene
а если браузер закрыть, открыть и снова кинуть тот же файл, оно продолжает ?