Size: a a a

Clojure — русскоговорящее сообщество

2021 March 21

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
И потом обрабатывать уже результаты
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
То что последовательность ленивая не означает что вычисляться будет строго одно значение при вызове first
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
там > 400тыс requests
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
может я и правильно деляю, я не знаю...
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
andei papkov
там > 400тыс requests
Я думаю, кложа для (future) использует тредпул, то есть не будет создавать 400к потоков
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
пока я не ограничел, падало Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "pool-11269-thread-1"
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
учтите что это учебные задания, я её не знаю, могу писать тут не правду
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
andei papkov
поскажите как распаралелить правильно вычисления, я получается создаю список задач, после делю c partition-all
и в итоге всё равно бегаю рекурсией, можно ли обойтись средствами clojure без рекурсии:

 requests-parts (partition-all 2 requests)]
 ...
 (thread
   (loop [parts requests-parts]
     (when-some [p (first parts)]
       (doall (map deref p))
       (recur (rest parts)))))
так задача какая?
выполнять не более 2-х запросов параллельно?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
andei papkov
учтите что это учебные задания, я её не знаю, могу писать тут не правду
условия задания можно увидеть?
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
конкурс mail.ru на highload
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
Описание задачи
Вам дано трехмерное игровое поле размером 3500х3500 клеток, в котором закопаны клады на глубине от 1 до 10 этажей.
Основная задача — добыть как можно больше монет за отведенное время (см. ограничения на решение).
Вам необходимо написать приложение, упакованное в контейнер типа Docker, отвечающее требованиям задачи и умеющее делать запросы в API нашего сервера - игрового мира.
Генерация мира
Технически организаторами соревнования разработано сервер-приложение, которое работает по определенной бизнес-логике.
При генерации мира используется параметр SEED. Он определяет сколько кладов и на каком этаже будет сгенерировано, какая будет ценность каждого клада и какой этаж будет оптимальным по соотношению ценности кладов к стоимости их добычи.
Кроме того, игровой мир имитирует среду. Вы можете встретить разные ошибки, которые зависят от времени (CPU_TIME) и RPS игрового мира, и конкретно CPU_TIME и RPS на каждый ENDPOINT игрового мира. От этого зависят вероятности возникновения ошибок, и их вам нужно исследовать.
Обратите внимание, что исходный код сервера и параметр SEED во время проведения соревнования публиковаться не будут.
В этом раунде гарантированно будет:
490 000 кладов;
23 030 000 монет лежит в кладах.
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
делаю типа исследование поля 3500x3500 (шлю много запросов)
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Ilshat Sultanov
На мой взгляд новый дестракчеринг добавили для запуска функций через clojure -X и -M. -X требовал функу с 1 аргументом (мапой). А флаг -M - [& args]. И позиционные аргументы теперь можно спокойно заменить на именованные
Мне тоже эта мысль сразу в голову пришла.
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
исследую маленькими квадратами
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Vadim Selin
вопрос от начинающего:
Я создал проект на re-frame и для него нужно ещё крохотный server side — api в два метода. Для этого api не очень хочется тащить в проект что-то большое и серьёзное.
Поскольку в shadow-cljs есть встроенный http сервер для разработки я вставил свои обработчики в него src/clj/<projectname>/handler.clj. Но теперь мне хочется чтобы код из этого обработчика как-то перегружался внутри jvm когда я редактирую файл. Для режима разработки я запускаю lein watch, но shadow-cljs присматривает только за фронтендом.
Что можно сделать?
А тебе надо чтобы прям само и сразу? Ручками в REPL лениво догружать?
источник

VS

Vadim Selin in Clojure — русскоговорящее сообщество
Damir Farazetdinov
А тебе надо чтобы прям само и сразу? Ручками в REPL лениво догружать?
ну по-крайней мере не хочется перезапускать lein watch
это долго очень
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
andei papkov
Описание задачи
Вам дано трехмерное игровое поле размером 3500х3500 клеток, в котором закопаны клады на глубине от 1 до 10 этажей.
Основная задача — добыть как можно больше монет за отведенное время (см. ограничения на решение).
Вам необходимо написать приложение, упакованное в контейнер типа Docker, отвечающее требованиям задачи и умеющее делать запросы в API нашего сервера - игрового мира.
Генерация мира
Технически организаторами соревнования разработано сервер-приложение, которое работает по определенной бизнес-логике.
При генерации мира используется параметр SEED. Он определяет сколько кладов и на каком этаже будет сгенерировано, какая будет ценность каждого клада и какой этаж будет оптимальным по соотношению ценности кладов к стоимости их добычи.
Кроме того, игровой мир имитирует среду. Вы можете встретить разные ошибки, которые зависят от времени (CPU_TIME) и RPS игрового мира, и конкретно CPU_TIME и RPS на каждый ENDPOINT игрового мира. От этого зависят вероятности возникновения ошибок, и их вам нужно исследовать.
Обратите внимание, что исходный код сервера и параметр SEED во время проведения соревнования публиковаться не будут.
В этом раунде гарантированно будет:
490 000 кладов;
23 030 000 монет лежит в кладах.
я, на практике, работаю с http client, у которого есть connection pool, которому можно выставить ограничения
делая параллельные блокирующие вызовы к клиенту получаем естественное ограничение

в данном случае я, наверное, использовал бы core.async/pipeline (-async или -blocking)
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
спс, я почитаю
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Vadim Selin
ну по-крайней мере не хочется перезапускать lein watch
это долго очень
Я так делаю:
1. Запускаю Lein watch
2. Смарю, на каком порту поднимется nRepl (8777 кажется)
3. Подключаюсь к этому nRepl и работаю. (Бековый код редактирую, перезагружаю и всё такое)
источник

VS

Vadim Selin in Clojure — русскоговорящее сообщество
Damir Farazetdinov
Я так делаю:
1. Запускаю Lein watch
2. Смарю, на каком порту поднимется nRepl (8777 кажется)
3. Подключаюсь к этому nRepl и работаю. (Бековый код редактирую, перезагружаю и всё такое)
спасибо, попробую разобраться как это делать
источник