These are chat archives for synrc/n2o

12th
Oct 2015
Namdak Tonpa
@5HT
Oct 12 2015 16:57
if you have any problems with compiling other tools
mad is guaranteed to work with synrc libs not all erlang.mk and rebar3 libs
I don't want to see mad as a bunch of cases like linux makefiles and #defines
I'd better support 50 libs but perfectly than 500 with a mess
Rado Kozmer
@rkozmer
Oct 12 2015 18:57
With rebar3 I have other issues. So, I rewrote those few hackney lines to httpc and now I can talk to 'elastic search'. Mad works. Thanks.
Namdak Tonpa
@5HT
Oct 12 2015 18:57
very cool
I just released a service walker which relies on httpc with retries and pipeline
Andy
@m-2k
Oct 12 2015 19:47
есть полное описание wf:async кроме как возможность отправки сообщений в фуункцию?
Namdak Tonpa
@5HT
Oct 12 2015 20:52
так n2o_async это просто synrc версия gen_server
для всего для чего нужен gen_server смело бери n2o_async
Andy
@m-2k
Oct 12 2015 21:58
application: erlach
    exited: {{{badrecord,cx},
              [{n2o_async,async,3,
Namdak Tonpa
@5HT
Oct 12 2015 21:58
ух
something really old
я недавно lang добавлял пол года назад
Andy
@m-2k
Oct 12 2015 21:59
ты о чем
Namdak Tonpa
@5HT
Oct 12 2015 21:59
а типа проблема в другом
ты какой-то макрос юзаешь CTX или шо?
там нет внутри этого процесса #cx контекста
ты если его хочешь создать тебе нужно вручную в init это сделать
Andy
@m-2k
Oct 12 2015 22:00
ниче не понимаю о чем ты повествуешь
вот cx
но мне прост надо процесс который будет жить при старте приложения
Namdak Tonpa
@5HT
Oct 12 2015 22:01
а создается точно
ничего себе
вот это я предусмотрел
ну n2o_sync идеальный кандидат
на все время жизни приложения
Andy
@m-2k
Oct 12 2015 22:02
ну и как заюзать
Namdak Tonpa
@5HT
Oct 12 2015 22:02
ну n2o_file пример же
и в документации примеры есть
и в примере есть пример :-)
Andy
@m-2k
Oct 12 2015 22:02
примеры эт фигня
откуда n2o_file стартует
Namdak Tonpa
@5HT
Oct 12 2015 22:04
n2o_async:start(#handler{}).
Andy
@m-2k
Oct 12 2015 22:05
а это в каких случаях вызывается https://github.com/synrc/n2o/blob/master/src/handlers/n2o_async.erl#L69
Namdak Tonpa
@5HT
Oct 12 2015 22:05
его кстати можно и под супервизором напрямую стартовать
sunray() -> Async=#handler{module=pb_sunray,class=service,group=pb,state=[],name=sunray},
           {{async,sunray},{n2o_async,start_link,[Async]},
            permanent, 5000, worker, [pb_sunray]}.
а потом я это в супервизоре возвращаю
init([])   -> {ok, {{one_for_one, 5, 10}, supervision() }}.
supervision() -> [sunray()].
pure OTP no shit
n2o_async — это просто наследник gen_server :-)
поэтому supervisor compatible
но зато без эриксоновской хуйни
на LING ее не будет
Andy
@m-2k
Oct 12 2015 22:09
о какой хуйне речь
Namdak Tonpa
@5HT
Oct 12 2015 22:10
handle_call handle_cast и прочее
ген сервера не будет
будет шото поменьше типа n2o_async
n2o же охуенный
лучше чем OTP
:-)
просто руки не доходят сделать свои io и core вместо kernel и stdlib
Andy
@m-2k
Oct 12 2015 22:13
если я так запущу какие кляузы мне надо будет написать
n2o_async:start(#handler{module=?MODULE,class=service,group=erlach,state=[],name=converter}),
Namdak Tonpa
@5HT
Oct 12 2015 22:13
proc только
Andy
@m-2k
Oct 12 2015 22:14
proc(init,#handler{}) -> ok;
proc(Message,#handler{}) -> ok.
Namdak Tonpa
@5HT
Oct 12 2015 22:14
типа того
Andy
@m-2k
Oct 12 2015 22:15
а term есть?
вижу что нет
Namdak Tonpa
@5HT
Oct 12 2015 22:15
только proc(init) вроде {ok,#handler{}} должен вернуть
второй вроде все может возвращать
Andy
@m-2k
Oct 12 2015 22:16
proc {reply,Message,#handler{}} возвращает
Namdak Tonpa
@5HT
Oct 12 2015 22:18
ну это только n2o_file
вроде все можно возвращать
это все можно как gen_server:call вызывать
либо асинхронным способом
Andy
@m-2k
Oct 12 2015 22:20
странноватое наследование
Namdak Tonpa
@5HT
Oct 12 2015 22:21
n2o_async:send
по-хорошему
по имени
Andy
@m-2k
Oct 12 2015 22:22
send(Class,Name,Message)
Namdak Tonpa
@5HT
Oct 12 2015 22:22
просто (Name,Message)
Andy
@m-2k
Oct 12 2015 22:23
send(Name,Message) -> send(async,{Name,key()},Message).
key() -> n2o_session:session_id().
Namdak Tonpa
@5HT
Oct 12 2015 22:23
ну напиши себе полный шорткат в своем приложении
Andy
@m-2k
Oct 12 2015 22:23
в принципе key undefined вернет
Namdak Tonpa
@5HT
Oct 12 2015 22:23
ну что ты в самом деле
Andy
@m-2k
Oct 12 2015 22:23
шо за шорткат
Namdak Tonpa
@5HT
Oct 12 2015 22:23
ну как это
это ж async шорткат
а ты себе свой сделай app:send/2
и сделайтам свой класс send(app,Name,Messsage)
Andy
@m-2k
Oct 12 2015 22:24
а
так то да, потом ток заебешься по коду лазить :smile:
Namdak Tonpa
@5HT
Oct 12 2015 22:25
я за 3 дня переписал 14 модулей и написал 26 мок тестов
Andy
@m-2k
Oct 12 2015 22:25
в банке?
Namdak Tonpa
@5HT
Oct 12 2015 22:25
если ты не можешь лазить по коду то зачем программировать :-)
я с другой стороны подхожу к вопросу
я стараюсь чтобы дерево это по которому ты лазишь было меньше
Andy
@m-2k
Oct 12 2015 22:26
и я, где разница
Namdak Tonpa
@5HT
Oct 12 2015 22:27
я к тому что когда все удобно то лазить не сложно
Andy
@m-2k
Oct 12 2015 22:39
{ok, #handler{}} не может быть возвращен
и {noreply, #handler{}} тоже так как это синхронный вызов
Namdak Tonpa
@5HT
Oct 12 2015 22:40
в n2o_file возвращается {ok, #handler{}} в init
Andy
@m-2k
Oct 12 2015 22:40
в init
я про proc ващето
Namdak Tonpa
@5HT
Oct 12 2015 22:41
точно
в proc надо только OTP муть возвращать
так короче
там третим параметром #handler как стейт идет
та и все
Andy
@m-2k
Oct 12 2015 22:43
в OTP все тоже самое
разве нет?
Namdak Tonpa
@5HT
Oct 12 2015 22:43
ну посмотри на n2o_async
Andy
@m-2k
Oct 12 2015 22:43
я смотрю
Namdak Tonpa
@5HT
Oct 12 2015 22:43
это минимальный gen_server по сути
ты хочешь на этом писать в веб странице ?
я тебе не запрещаю
OTP в каждой коробке
я себе написал n2o_async и заюзал его в n2o_file
и еще в примерах по n2o
Andy
@m-2k
Oct 12 2015 22:44
не )
Namdak Tonpa
@5HT
Oct 12 2015 22:44
нарвится gen_server ебаш себе страницы на генсервере
мне лично похуй :-)
Andy
@m-2k
Oct 12 2015 22:44
а cast события как юзать?
Namdak Tonpa
@5HT
Oct 12 2015 22:45
так же
cast call info — все попадает в proc
get_server:cast можешь юзать смело
Andy
@m-2k
Oct 12 2015 22:46
то есть так: gen_server:cast(n2o_async:pid({Class,Name}),Message).
uuu
Namdak Tonpa
@5HT
Oct 12 2015 22:46
ну это не мое апи
gen_server:cast это OTP
Andy
@m-2k
Oct 12 2015 22:47
ну как бэ да
Namdak Tonpa
@5HT
Oct 12 2015 22:47
а функция pid довольно неплохо
Andy
@m-2k
Oct 12 2015 22:47
ага
такое ощущение что ты писал а потом забыл что писал
Namdak Tonpa
@5HT
Oct 12 2015 22:48
я написал 80 строчек
не считая n2o_async конечно
но его я написал заранее
Andy
@m-2k
Oct 12 2015 22:48
не знаешь как на маке потестить слоу-локалхост?
link conditioner не пашет уже давно
Andy
@m-2k
Oct 12 2015 22:55
чота в стопах не сходится
stop(Name) -> stop(async,{Name,key()}).
stop(Class,Name) -> [ supervisor:F(n2o,{Class,Name})||F<-[terminate_child,delete_child]],
                wf:cache({Class,{Name,key()}},undefined).
Namdak Tonpa
@5HT
Oct 12 2015 22:56
что именно?
Andy
@m-2k
Oct 12 2015 22:56
wf:cache({Class,{Name,key()}} должно быть wf:cache({Class,Name}}
Namdak Tonpa
@5HT
Oct 12 2015 22:56
там нейм же с точностью до сессии
после класс всегда 2-тапл с сессией
Andy
@m-2k
Oct 12 2015 22:56
  1. посмотри на первую строку
Namdak Tonpa
@5HT
Oct 12 2015 22:56
в async имени
Andy
@m-2k
Oct 12 2015 22:57
2 init(#handler{module=Mod,class=Class,name=Name}=Handler) -> wf:cache({Class,Name},self()), Mod:proc(init,Handler).
Namdak Tonpa
@5HT
Oct 12 2015 22:57
оно что не работает?
ты пробовал stop вызывать?
Andy
@m-2k
Oct 12 2015 22:57
да
Namdak Tonpa
@5HT
Oct 12 2015 22:57
и что именно не работает?
Andy
@m-2k
Oct 12 2015 22:57
пока не понял
Namdak Tonpa
@5HT
Oct 12 2015 22:57
:-)
когда поймешь сообщи о проблеме!
Andy
@m-2k
Oct 12 2015 22:58
))
1> n2o_async:start(#handler{module=?MODULE,class=service,group=erlach,state=[],name=converter}).

=INFO REPORT==== 13-Oct-2015::01:57:51 ===
erlach_image:Convert init: <0.556.0>

=INFO REPORT==== 13-Oct-2015::01:57:51 ===
erlach_image:Convert supervisor started
ok
2> process_info(list_to_pid("<0.556.0>")).            
[{current_function,{gen_server,loop,6}},
*****
 {suspending,[]}]
3> n2o_async:stop(service,converter).     
true
4> process_info(list_to_pid("<0.556.0>")).
[{current_function,{gen_server,loop,6}},
*****
 {suspending,[]}]
5> wf:cache({service,converter}).
<0.556.0>
Namdak Tonpa
@5HT
Oct 12 2015 23:03
проблема налицо
как говорится
Andy
@m-2k
Oct 12 2015 23:05
stop(Name) -> stop(async,{Name,key()}). сделает вообще феерическое wf:cache({Class,{{Name,key()},key()}},undefined)
тем более что key только для % wf:async page workers юзается
Namdak Tonpa
@5HT
Oct 12 2015 23:06
я вижу вижу
Andy
@m-2k
Oct 12 2015 23:06
ок
Namdak Tonpa
@5HT
Oct 12 2015 23:06
а только со stop хуйня?
Andy
@m-2k
Oct 12 2015 23:06
просто взор пал
Namdak Tonpa
@5HT
Oct 12 2015 23:10
> n2o_async:stop(file,{<<"05ce205b93a59004bb18a2374ce7485f">>,<<"ws-safari.png">>}).
true

> n2o_async:pid({file,{<<"05ce205b93a59004bb18a2374ce7485f">>,<<"ws-safari.png">>}}).
undefined
Andy
@m-2k
Oct 12 2015 23:10
пофиксал?
сам то понял что проверял?
Namdak Tonpa
@5HT
Oct 12 2015 23:11
какого хуя два раза нотификации в гитлере приходят?
Andy
@m-2k
Oct 12 2015 23:11
хз
Namdak Tonpa
@5HT
Oct 12 2015 23:12
незнаю шо я проверял но я нашел ошибку и пофиксал
возможно ты меня спрашивал не про это
Andy
@m-2k
Oct 12 2015 23:13
нашел я
Namdak Tonpa
@5HT
Oct 12 2015 23:13
пойду еще раз почитаю твое сообщение
Andy
@m-2k
Oct 12 2015 23:13
да, ты то пофиксал
Namdak Tonpa
@5HT
Oct 12 2015 23:13
ну да нашел ты :-) ок
Andy
@m-2k
Oct 12 2015 23:13
можешь не читать
Namdak Tonpa
@5HT
Oct 12 2015 23:13
чего?
Andy
@m-2k
Oct 12 2015 23:13
сообщение
:smile:
Namdak Tonpa
@5HT
Oct 12 2015 23:14
просто то что я пофиксал с тем что в сообщении не очень вяжется :-)
Andy
@m-2k
Oct 12 2015 23:14
с чего бы
Namdak Tonpa
@5HT
Oct 12 2015 23:15
а не, все работает ок
чето стреманулся
Andy
@m-2k
Oct 12 2015 23:17
у меня тож не стопарнулось
3> n2o_async:stop(service,converter).
true
4> wf:cache({service,converter}).
undefined
5> process_info(list_to_pid("<0.555.0>")). 
[{current_function,{gen_server,loop,6}},
 {initial_call,{proc_lib,init_p,5}},
 {status,waiting},
****
Namdak Tonpa
@5HT
Oct 12 2015 23:19
у меня четко убивает
Andy
@m-2k
Oct 12 2015 23:26
10> supervisor:terminate_child(n2o,{service,converter}).
{error,not_found}
11> supervisor:delete_child(n2o,{service,converter}).   
{error,not_found}
12> process_info(list_to_pid("<0.555.0>")). 
[{current_function,{gen_server,loop,6}},
 {initial_call,{proc_lib,init_p,5}},
 {status,waiting},
 {message_queue_len,0},
че происходит ваще
Namdak Tonpa
@5HT
Oct 12 2015 23:26
шото залипло там у тебя :-)
написал какой-то мегацикл
Andy
@m-2k
Oct 12 2015 23:27
хм хм
Namdak Tonpa
@5HT
Oct 12 2015 23:28
поломал эриксон :-)
мегахакер
Andy
@m-2k
Oct 12 2015 23:28
да, шо-то он часто ломаться стал
Namdak Tonpa
@5HT
Oct 12 2015 23:28
та да
пора переходить на LING
Andy
@m-2k
Oct 12 2015 23:28
:smile:
бля. оно реально не завершается
proc(init,#handler{}=H) -> wf:info(?M,"Convert init: ~p",[self()]), {ok,H};
proc(M,#handler{}=H) -> wf:info(?M,"Convert proc: ~p",[M]), {reply,ok,H};
proc(Unknown,H) -> wf:warning(?M,"Unknown event ~p",[Unknown]), {reply,unknown,H}.
11> Pid ! "sas".
"sas"

=INFO REPORT==== 13-Oct-2015::02:32:02 ===
erlach_image:Convert proc: "sas"
Namdak Tonpa
@5HT
Oct 12 2015 23:33
да бля надо terminate прописать
или что там надо прописать
Andy
@m-2k
Oct 12 2015 23:34
хз
где
Namdak Tonpa
@5HT
Oct 12 2015 23:34
в протоколе этом
Andy
@m-2k
Oct 12 2015 23:35
terminate(_Reason, #handler{name=Name,group=Group,class=Class}) ->
    spawn(fun() -> supervisor:delete_child(Group,Name) end),
    wf:cache({Class,Name},undefined), ok.
Namdak Tonpa
@5HT
Oct 12 2015 23:36
не успевает эта хуйня вызываться или шо
Andy
@m-2k
Oct 12 2015 23:36
stop(Class,Name) -> [ supervisor:F(n2o,{Class,Name})||F<-[terminate_child,delete_child]],
                wf:cache({Class,Name},undefined).
сравни
Namdak Tonpa
@5HT
Oct 12 2015 23:36
кеш лишний явно :-)
да и вообще пересечение
Andy
@m-2k
Oct 12 2015 23:37
supervisor:delete_child(Group,Name)
supervisor:F(n2o,{Class,Name})
какая-то хуйня
Namdak Tonpa
@5HT
Oct 12 2015 23:38
ну это в OTP так пишут
это не я придумал
лупишься в gen_server — должен вручную удалять из супервизора
Andy
@m-2k
Oct 12 2015 23:39
не
supervisor:start_child(Group,ChildSpec)
тут получается что Group может быть только n2o
Namdak Tonpa
@5HT
Oct 12 2015 23:40
у асинка конечно
и у файла тоже
Andy
@m-2k
Oct 12 2015 23:40
ну и Name и {Class,Name}
Namdak Tonpa
@5HT
Oct 12 2015 23:40
этоже n2o-шные сервисы
и #handler.name={Class,Name} всегда да
Andy
@m-2k
Oct 12 2015 23:40
ШТО
(#handler{class=Class,name=Name
2 разные переменные
Namdak Tonpa
@5HT
Oct 12 2015 23:41
бля стыдно признаться забыл )
Andy
@m-2k
Oct 12 2015 23:41
ну и Group это #handler.group
и оно юзается при старте
Namdak Tonpa
@5HT
Oct 12 2015 23:41
эта хуйня должна быть как супервизор существующий
Andy
@m-2k
Oct 12 2015 23:41
а при удалении удаляется только из группы n2o
Namdak Tonpa
@5HT
Oct 12 2015 23:41
иначе кина не будет
Andy
@m-2k
Oct 12 2015 23:43
n2o_async:start(#handler{module=?MODULE,class=service,group=erlach,state=[],name=converter}),
сделай чтобы это было рабочим кодом?
Namdak Tonpa
@5HT
Oct 12 2015 23:43
супервизор как у тебя в приложении называется?
Andy
@m-2k
Oct 12 2015 23:44
?MODULE?
Namdak Tonpa
@5HT
Oct 12 2015 23:44
supervisor:start_link({local,review},review,[]).
вот например как называется супервизор у review приложения
Andy
@m-2k
Oct 12 2015 23:44
ща
Namdak Tonpa
@5HT
Oct 12 2015 23:44
просто review
Andy
@m-2k
Oct 12 2015 23:44
supervisor:start_link({local,?MODULE},?MODULE,[]).
-module(erlach).
Namdak Tonpa
@5HT
Oct 12 2015 23:44
тогда правильно
стейт ты какой будешь ганять [] список разве?
ты в функциях список там крутишь или что
Andy
@m-2k
Oct 12 2015 23:45
проблема в Group
Namdak Tonpa
@5HT
Oct 12 2015 23:45
покажи мне proc/2 в erlach
Andy
@m-2k
Oct 12 2015 23:45
просто сделай чтобы воркер удалялся с учетом группы
проки я выше кидал
Namdak Tonpa
@5HT
Oct 12 2015 23:46
а делете чайлды не надо переписывать?
так повешай group=n2o просто
group=n2o это реальный воркараунд :-)
Andy
@m-2k
Oct 12 2015 23:47
то есть фиксать не хочешь?
Namdak Tonpa
@5HT
Oct 12 2015 23:47
я вижу проблему
но счас очень занят
а тут нужно думать как все нахуй переписать :-)
Andy
@m-2k
Oct 12 2015 23:47
ок
Namdak Tonpa
@5HT
Oct 12 2015 23:48
бо реально я вижу две проблемы
можешь создать тикеты
это будет создавать прессинг на меня
Andy
@m-2k
Oct 12 2015 23:48
уже создаю
Namdak Tonpa
@5HT
Oct 12 2015 23:48
а можешь сам пофиксать :-)
Andy
@m-2k
Oct 12 2015 23:48
:smile:
я хз как в stop достать из handler Group
Namdak Tonpa
@5HT
Oct 12 2015 23:50
нужно в функции proc вернуть #handler.group
и для нее сообщение написать типа {get,group}
но ты счас будешь говорить что это говно
Andy
@m-2k
Oct 12 2015 23:51
почему
оно ж уже понаписано
handle_call({get},_,#handler{module=Mod}=Async) -> {reply,Async,Async};
будет прост больше говна :smile:
Namdak Tonpa
@5HT
Oct 12 2015 23:51
реально я все предусмотрел почти
только пару опечаток :-)
Andy
@m-2k
Oct 12 2015 23:53
вот жеж блядь уже есть
Pid when is_pid(Pid) -> Async = send(Pid,{get}), stop(Class,Name), start(Async);
Namdak Tonpa
@5HT
Oct 12 2015 23:54
:-)
n2o_async охуенный
Andy
@m-2k
Oct 12 2015 23:55
мож send(Pid,{get}) в стоп перенести и возвращать через return?
чтобы 2 раза не делать при рестарте
Namdak Tonpa
@5HT
Oct 12 2015 23:56
хз счас не могу ответить, мне пора ложиться спать завтра рано вставать
Andy
@m-2k
Oct 12 2015 23:56
))
баюшки
Namdak Tonpa
@5HT
Oct 12 2015 23:56
zzZZ