@proelixir

Страница 933 из 1045
Kazakbay
17.04.2018
10:23:00
Вопрос отпал)

Aleksandr
17.04.2018
14:13:45
А что про property based testing рассказывал? Какие-нибудь примеры как оно в Elixir 1.7 будет выглядить?
У Андреа только что был доклад Property-based testing is a mindset, если будет запись, советую посмотреть. Примерно так это будет выглядеть https://github.com/whatyouhide/stream_data . Одной из крутых фич предлагается сделать генерацию данных на основе type spec.

Dmitry
17.04.2018
22:22:49
@avfomin Да уж, до proper-а пока далеко

Vladimir
18.04.2018
04:37:04
А кто-нибудь заморачивался с иерархическими структурами? (хранение данных с реализацией nested set/closure table/...)

Google
Артем
18.04.2018
18:33:51
блээээээээ

ни у кого случайно нет скрипта для переноса arc из s3 в local storage?

до моего проекта доехал РКН

Vladimir
18.04.2018
18:40:57
Taras ?
18.04.2018
19:43:54
А без привязки к Postgres?
наверное, так же, только составный ключик в ets/dets ( еее... тут надо будет заморочиться... и почему без постгреса? )

MrFlorius
19.04.2018
16:48:54
Можно ли дать имя воркеру, созданному через Task? worker(Task, [Module, :function, [args]])

Dmitry
19.04.2018
17:16:41
Можно ли дать имя воркеру, созданному через Task? worker(Task, [Module, :function, [args]])
https://hexdocs.pm/elixir/Supervisor.Spec.html#worker/3 можно id указывать, подойдет?

Yuri
19.04.2018
18:37:16
Подскажите а есть возможность получить стейт в генсервере, когда выполняються другие handle_cast ?

Alexander
19.04.2018
18:37:55
Получить где?

Yuri
19.04.2018
18:38:57
Ну грубо говоря у меня в фоне handle_cast делает запросы на сторонние API, получает данные и пишет в стейт, хочеться не ждать завершения всех запросов, а получить в любой момент стейт

Alexander
19.04.2018
18:39:13
Вообще gen_server реагирует на всё строго последовательно, как любой процесс в beam. Пока на одно сообщение реагирует, остальные копятся в инбоксе.

Google
Yuri
19.04.2018
18:39:35
вот, те. тут без вариантов

Alexander
19.04.2018
18:39:50
если он вдруг в сторонние апи пишет как-то асинхронно, то можно

Артем
19.04.2018
18:40:01
Alexander
19.04.2018
18:40:20
точняк, можно асинхронность сделать отдельным процессом.

Yuri
19.04.2018
18:40:49
мммм а данные хранить тогда не в стейте

а в ets

я просто хотел данные в стейте хранить, но он ждет очереди

Alexander
19.04.2018
18:41:54
server1 -> call server2: а дай ка мне ответ от внешнего API server2 отдаёт какой-то уникальный id server2 идёт во внешний api server2 -> cast server1 {уникальный id, ответ от внешнего API}

Yuri
19.04.2018
18:42:23
немного не понял )

Артем
19.04.2018
18:42:38
мммм а данные хранить тогда не в стейте
в стейте. из таска шли сообщение обратно генсерверу, пускай кладёт в стейт

Yuri
19.04.2018
18:43:48
блин зачем тогда генсервер в этом контексте, только для хранения данных получается

Alexander
19.04.2018
18:44:29
а он обычно для этого и используется

Артем
19.04.2018
18:45:02
генсервер для реализации поведения

Alexander
19.04.2018
18:45:24
query_id = :erlang.make_ref() parent = self() spawn fn -> result = ExternalAPI.long_call() send parent, {query_id, result} end

а потом где-то handle_info({query_id, result}, state) do ...

это если таймаут не нужен и прочие понты.

и в любой момент можно получить состояние :sys.get_state, поскольку вся тяжёлая долгая работа — отдельно, и твой gen_server в любой момент может ответить на запрос состояния

Yuri
19.04.2018
18:48:01
спасибо, ща попробую

Alexander
19.04.2018
18:48:22
но лучше как-то более нормально ) чтобы был таймаут и всё такое

Yuri
19.04.2018
18:49:37
да вот тоже думаю, что такое получается, либо ets уже использовать

Google
Yuri
19.04.2018
18:57:07
Alexander
19.04.2018
18:58:30
а как здесь получать текущий стейт?
в любой момент? Для дебага или для жизни? Для дебага — :sys.get_state(pid или registered name) Для жизни — def handle_call(:get_state, _from, state), do: {:reply, state, state} и call его

Yuri
19.04.2018
18:59:06
ааа понял, спасибо

MrFlorius
19.04.2018
19:12:55
А как дочерним процессом Task.Supervisor сделать другой Task.Supervisor

Alexander
19.04.2018
19:21:14
и в любой момент можно получить состояние :sys.get_state, поскольку вся тяжёлая долгая работа — отдельно, и твой gen_server в любой момент может ответить на запрос состояния
бред: https://github.com/erlang/otp/blob/716ef17d2a00c7f4a5a5cf92fffd18adb94c542d/lib/stdlib/src/sys.erl#L113 https://github.com/erlang/otp/blob/716ef17d2a00c7f4a5a5cf92fffd18adb94c542d/lib/stdlib/src/sys.erl#L302 https://github.com/erlang/otp/blob/716ef17d2a00c7f4a5a5cf92fffd18adb94c542d/lib/stdlib/src/gen.erl#L148 https://github.com/erlang/otp/blob/716ef17d2a00c7f4a5a5cf92fffd18adb94c542d/lib/stdlib/src/gen.erl#L172

точно такой же вызов к genserver'у как и остальное

мы это поведение в тестах handle_cast юзаем, когда нужно дождаться когда handle_cast выполнится

Alexander
19.04.2018
19:22:39
Вообще-то, gen_server это такой же процесс как другие

С заранее запрограммированным поведением

Которым я предложил воспользоваться

Alexander
19.04.2018
19:23:11
ага

Alexander
19.04.2018
19:23:12
А бред тут только ты.

Alexander
19.04.2018
19:24:42
вопрос был: Подскажите а есть возможность получить стейт в генсервере, когда выполняються другие handle_cast ? твой ответ некорректен, в любой момент ты не получишь его стейт, только когда дойдет очередь.

хотя да сорян. tldr

Alexander
19.04.2018
19:27:10
Я рассказал об этом, а потом, предложив решение, позволяющее отдать дорогие запросы к внешним апи другому генсерверу, рассказал как получить состояние

А теперь как дебил защищаю репутацию в интернете. Доктора мне.

Alexander
19.04.2018
19:28:05
?

Dmitry
19.04.2018
19:28:46
Так очередь на системные сообщения доходит сразу, или только в самом конце?

Alexander
19.04.2018
19:28:53
Я жду завтрашнего дня, хецнер и овш блокнули и кучу других хостеров, будет весело похоже...

Google
Dmitry
19.04.2018
19:29:11
А почему?

Ну, всмысле, по коду то понятно что вс] по порядку

Alexander
19.04.2018
19:29:40
Они такие же как все остальные, отп - надстройка над логикой, которая говорит что все по порядку

Dmitry
19.04.2018
19:29:54
Но почему нельзя было сделать 2 ресива

Alexander
19.04.2018
19:29:59
Чтоб не ломать наверное

То что и так работает

Dmitry
19.04.2018
19:30:29
Впринципе в ОТП почему так не сделали

Везде 2 ресива

Сперва выгребаем системные

А потом - любые

Alexander
19.04.2018
19:31:04
Если системных нет, а любых много - будет дорого

И бесполезно

Alexander
19.04.2018
19:31:42
ну вот какраз чтобы не было ситуаций, когда ты послал 3 эвента в процесс 2 обычных и 1 системный, ожидаешь что они по порядку обработаются, а выполнятся не по порядку, будет сюрприз

Dmitry
19.04.2018
19:32:22
Так а если у тебя загруженный под орех мэилбокс

То как обзервер смотрит на генсервер

висит неопредел]нное время?

Alexander
19.04.2018
19:33:01
обсервер висит да

Alexander
19.04.2018
19:33:05
Таймаутит

Alexander
19.04.2018
19:33:12
у загруженного процесса cложно стейт посмотреть, таймауты летят

Dmitry
19.04.2018
19:33:36
Точно, таймаутит...

Google
Yuri
19.04.2018
19:33:39
окей, а как увеличить тогда таймаут ?

Dmitry
19.04.2018
19:34:03
В обзервре - хз

Yuri
19.04.2018
19:34:12
в init ?

в генсервере именно)

Dmitry
19.04.2018
19:34:40
В api

def get_state(pid), do: GenServer.call(pid, :get_state, 1000000)

Igor
19.04.2018
21:07:13
Сходил пообщался с ребятами из AEON кстати. Напрасно их тут обосрали, более чем адекватные ребята. И проект в принципе получше и уж точно поинтереснее многих. Стэк опять таки огонь, все хайп слова собрали. Но конечно стартапчик. Был бы лет на 5 помоложе, да денег бы побольше давали, может и сам пошёл бы. Сори за рекламу, но чувствую себя причастным к необоснованному скептицизму в их адрес (типа извинился).

Страница 933 из 1045