These are chat archives for synrc/n2o

14th
Oct 2015
Alex Popov
@aseidlitz
Oct 14 2015 02:11
Making progress, but still no luck...
KVS seems to be configured correctly:
kvs:version().
{version,"KVS MNESIA"}
3> kvs:config(dba).
store_mnesia
but now I get exception:
{ok,U} = roster:create_user("u101","Test","User").
** exception exit: {noproc,
                       {gen_server,call,
                           [chat_sup,
                            {start_child,
                                {6,
                                 {roster_user,start_link,
                                     [#user{
                                          id = 6,version = undefined,container = feed,feed_id = user,
                                          prev = 5,next = undefined,feeds = [],guard = true,
                                          etc = undefined,email = undefined,username = undefined,
                                          password = undefined,display_name = undefined,...}]},
                                 permanent,2000,worker,
                                 [roster_user]}},
                            infinity]}}
     in function  gen_server:call/3 (gen_server.erl, line 212)
I don't see roster in .applist and I can't start it manually...
Plan Params: []
Ordered: [kernel,stdlib,fs,ranch,crypto,compiler,syntax_tools,mnesia,inets,
          gproc,cowlib,cowboy,n2o,esim,active,erlydtl,jsone,kvs,mad,nitro,sh,
          shen]
Alex Popov
@aseidlitz
Oct 14 2015 02:19
8> application:which_applications().
[{shen,"SHEN JavaScript/OTP Compiler","1"},
 {sh,"VXZ SH Executor","1"},
 {nitro,"NITRO HTML5 DSL","0.10"},
 {mad,"MAD VXZ Build Tool","1.9"},
 #kvs{mod = "KVS Abstract Term Database",cx = "1"},
 {jsone,"Erlang JSON Library","git"},
 {erlydtl,"ErlyDTL compiles the Django Template Language to Erlang bytecode",
          "git"},
 {active,"ACT VXZ Continuous Compilation","0.9"},
 {esim,"EasySim","1"},
 {n2o,"N2O WebSocket Application Server","2.10"},
 {cowboy,"Small, fast, modular HTTP server.","1.0.3"},
 {cowlib,"Support library for manipulating Web protocols.",
         "1.0.0"},
 {gproc,"GPROC","git"},
 {inets,"INETS  CXC 138 49","6.0.1"},
 {mnesia,"MNESIA  CXC 138 12","4.13.1"},
 {syntax_tools,"Syntax tools","1.7"},
 {compiler,"ERTS  CXC 138 10","6.0.1"},
 {crypto,"CRYPTO","3.6.1"},
 {ranch,"Socket acceptor pool for TCP protocols.","1.0.0"},
 {fs,"VXZ FS Listener","0.8"},
 {stdlib,"ERTS  CXC 138 10","2.6"},
 {kernel,"ERTS  CXC 138 10","4.1"}]
Andy
@m-2k
Oct 14 2015 03:05
@5HT n2o_async хранит ключи процессов в ETS:caching, записи в котором становятся неактуальны по истечению TTL
FAIL
Andy
@m-2k
Oct 14 2015 03:20
неплохо было б сделать поддержку infinity для TTL и устанавливать для процессов. или хранить их в отдельной ETS таблице без TTL
второй вариант мне нравится больше
Namdak Tonpa
@5HT
Oct 14 2015 05:33
2>  roster:create_user("u101","Test","User").

=INFO REPORT==== 14-Oct-2015::08:33:36 ===
roster_user:User 1 spawned <0.244.0>{ok,<0.244.0>}
m2k: надо просто в n2o_async использовать wf:cache/3 там можн указать кастомный TTL infinity
@aseidlitz я обновил для тебя roster до n2o v.2.9
Alex Popov
@aseidlitz
Oct 14 2015 05:51
Спасибо, посмотрю!
Namdak Tonpa
@5HT
Oct 14 2015 05:56
roster это не законченный продукт, это так набросок для чатописателей
Alex Popov
@aseidlitz
Oct 14 2015 07:25

Мне именно набросок и нужен. Хочу разобраться как твоя реализация чат протокола работает.

create_user/3 с 2.9 работает, но возникают проблемы с add(еxception error: no function clause matching ) и ({proc_lib,init_p_do_apply,3,[{file,"proCatch: error:undef240})...

Буду разбираться...

Namdak Tonpa
@5HT
Oct 14 2015 07:26
скинь сюда add
скидуй все что не работает я починю
Alex Popov
@aseidlitz
Oct 14 2015 07:29
это add:
26> {ok,U3}=roster:create_user("test2","Another","User").

=INFO REPORT==== 14-Oct-2015::00:28:16 ===
roster_user:User 12 spawned <0.360.0>** exception error: no match of right hand side value {ok,<0.360.0>}
27> roster:add(U3,#'Person'{name=oleg,surname=zinchenko}).
** exception error: no function clause matching 
                    roster:add(<0.334.0>,
                               #'Person'{id = undefined,name = oleg,surname = zinchenko,
                                         username = undefined,status = undefined}) (/Users/alexp/Proj/Erlang/EasySim/poc/deps/roster/src/roster.erl, line 23)
28>

А это ошибка на старте:

$ mad repl
REPL Params: []
Configuration: [{n2o,[{log_modules,roster},{port,8000},{route,roster_routes}]},
                {kvs,[{dba,store_mnesia},
                      {log_modules,roster},
                      {schema,[kvs_user,kvs_acl,kvs_feed,kvs_subscription,
                               roster]}]}]
Applications: [kernel,stdlib,fs,ranch,crypto,compiler,syntax_tools,mnesia,
               inets,gproc,cowlib,kvs,cowboy,n2o,esim,active,erlydtl,jsone,
               mad,nitro,roster,sh,shen]
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.1  (abort with ^G)
1> [{mad_utils,configs,[],[]},
                               {mad_compile,compile,1,
                                                                    [{file,"/Users/alexp/Proj/Erlang/EasySim/poc/deps/mad/src/compile/mad_compile.erl"},
                                               {line,6}]},
                                                           {active,compile,2,
                                                                                      [{file,"/Users/alexp/Proj/Erlang/EasySim/poc/deps/active/src/active.erl"},
                                                  {line,87}]},
                                                               {active,handle_cast,2,
                                                                                              [{file,"/Users/alexp/Proj/Erlang/EasySim/poc/deps/active/src/active.erl"},
                                                          {line,17}]},
                                                                       {gen_server,try_dispatch,4,[{file,"gen_server.erl"},{line,615}]},
                 {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,681}]},
                                                                                 {proc_lib,init_p_do_apply,3,[{file,"proCatch: error:undef240}]}]
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 12 spawned <0.236.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 11 spawned <0.237.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 10 spawned <0.238.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 9 spawned <0.239.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 8 spawned <0.240.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 7 spawned <0.241.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 6 spawned <0.242.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 5 spawned <0.243.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 4 spawned <0.244.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 3 spawned <0.245.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 2 spawned <0.246.0>
=INFO REPORT==== 14-Oct-2015::00:29:28 ===
roster_user:User 1 spawned <0.247.0>

Спасибо!

Just in case:
{sub_dirs,["apps"]}.
{deps_dir,"deps"}.
{deps, [
    {erlydtl,".*", {git, "git://github.com/evanmiller/erlydtl", {tag, "0.8.0"}  }},
    {cowboy, ".*", {git, "git://github.com/extend/cowboy",      {tag, "1.0.3"}  }},
    {gproc,  ".*", {git, "git://github.com/uwiger/gproc.git",   {tag, "0.3"}    }},
    {fs,     ".*", {git, "git://github.com/synrc/fs",           {tag, "0.8"}    }},
    {sh,     ".*", {git, "git://github.com/synrc/sh",           {tag, "0.8"}    }},
    {mad,    ".*", {git, "git://github.com/synrc/mad",          {tag, "master"} }},
    {active, ".*", {git, "git://github.com/synrc/active",       {tag, "master"} }},
    {nitro,  ".*", {git, "git://github.com/synrc/nitro",        {tag, "master"} }},
    {roster,  ".*", {git, "git://github.com/synrc/roster",      {tag, "master"} }},
    {kvs,       ".*", {git, "git://github.com/synrc/kvs",          {tag, "master"} }},
    {n2o,    ".*", {git, "git://github.com/synrc/n2o",          {tag, "master"} }}
]}.
Namdak Tonpa
@5HT
Oct 14 2015 07:33
так там же сигнатура не совпадает
add(#user{}=User,#'RosterItem'{}=Person) ->
вот так надо вызывать
roster:add(U3,#'Person' — такого нету
только #'RosterItem'
Alex Popov
@aseidlitz
Oct 14 2015 07:35
Я так тоже пробовал...
roster:add(U,#'RosterItem'{name=oleg,surname=zinchenko}). 
** exception error: no function clause matching 
                    roster:add(<0.274.0>,
                               #'RosterItem'{id = undefined,version = undefined,
                                             container = feed,feed_id = undefined,prev = undefined,
                                             next = undefined,feeds = [],guard = false,etc = undefined,
                                             name = oleg,surname = zinchenko,username = undefined,
                                             status = undefined}) (/Users/alexp/Proj/Erlang/EasySim/poc/deps/roster/src/roster.erl, line 23)
У тебя оно работает?
Namdak Tonpa
@5HT
Oct 14 2015 07:37
> roster:add(#user{id=2},#'RosterItem'{name=oleg,surname=zinchenko}).
{ok,#'RosterItem'{id = 1,version = undefined,
                  container = feed,
                  feed_id = {roster,2},
                  prev = undefined,next = undefined,feeds = [],guard = false,
                  etc = undefined,name = oleg,surname = zinchenko,
                  username = undefined,status = undefined}}
если правильно вызывать то работает :-)
надо будет README.md поправить
Alex Popov
@aseidlitz
Oct 14 2015 07:39
Ок. create_user/3 возвращает PID а не рекорд...
Я пришлю PR
Спасибо еще раз!
Да, работает!
Я с ним немного поиграюсь и пришлю апдейт для доки...
Namdak Tonpa
@5HT
Oct 14 2015 07:42
там надо чтобы create_user возвращал что-то типа {ok,{Pid,KeyId}}
Namdak Tonpa
@5HT
Oct 14 2015 07:49
там вообщем надо подумать чтобы все красиво было
Andrii Sergiienko
@fycth
Oct 14 2015 15:56
после апгрейда OSX на el capitan, mad и fs у всех правильно работают? у меня теперь при изменениях на файловой системе вместо перекомпиляции выбрасывается Catch: error:undef - и все на этом. никто такого не встречал?
Andy
@m-2k
Oct 14 2015 15:57
скинь эррор полностью
Andrii Sergiienko
@fycth
Oct 14 2015 15:58
это все
больше ничего нет
Andy
@m-2k
Oct 14 2015 15:58
вчера такое было, но оно не было связано с кэпом :smile:
Andrii Sergiienko
@fycth
Oct 14 2015 15:59
а с чем у тебя было связано?
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.1  (abort with ^G)
1> Catch: error:undef
                     Catch: error:undef
и всё...
Andy
@m-2k
Oct 14 2015 16:02
не, это не то
какие версии fs, active, mad
Andrii Sergiienko
@fycth
Oct 14 2015 16:03
мад - мастер, актив 09, фс - фс 09
да оно работало все пока кэп ни пришел...
ладно. я думал мож у кого-то уже было такое. если не то пойду сам грестись...
Andy
@m-2k
Oct 14 2015 16:04
может 1.9 а не 0.9
Andrii Sergiienko
@fycth
Oct 14 2015 16:06
09
Andy
@m-2k
Oct 14 2015 16:06
ну обновись тогда че
Andrii Sergiienko
@fycth
Oct 14 2015 16:54

в 2.8 я мог сделать из ерланга

wf:wire("myFunction()")

и функция myFunction вызывалась на странице. в 2.9 у меня это сломалось. В консоли браузера я вижу только

{"t":104,"v":[{"t":100,"v":"io"},{"t":109,"v":""},{"t":109,"v":
  • лог из xhr.js:21

оно как-то по-другому работает в 2.9?

Andy
@m-2k
Oct 14 2015 16:54
; добавь в конец
у меня без проблем работает wf:wire("pid='"++wf:to_list(PageId)++"';"),
Andrii Sergiienko
@fycth
Oct 14 2015 16:55
добавил. результат тот же
дивно. покажи сис конфиг - мож там надо протокол какой куда добавить?
Andy
@m-2k
Oct 14 2015 16:56
nitro мож обновить надо
Andrii Sergiienko
@fycth
Oct 14 2015 16:56
нитро мастер
блядство...
Andy
@m-2k
Oct 14 2015 16:57
мне пришлось в rebar.config nitro выше n2o пихнуть чтобы бранч корректный грузился
{deps, [
    {mad,    ".*", {git, "git://github.com/synrc/mad",          {tag, "1.9"} }},
    {erlydtl,".*", {git, "git://github.com/evanmiller/erlydtl", {tag, "0.8.0"}  }},
    {gproc,  ".*", {git, "git://github.com/uwiger/gproc",       {tag, "0.3"}    }},
    {fs,     ".*", {git, "git://github.com/synrc/fs",           {tag, "1.9"} }},
    {sh,     ".*", {git, "git://github.com/synrc/sh",           {tag, "1.9"} }},
    % {kjell,  ".*", {git, "git://github.com/karlll/kjell",       {tag, "master"} }},
    {active, ".*", {git, "git://github.com/synrc/active",       {tag, "1.9"} }},
    % {rest,   ".*", {git, "git://github.com/synrc/rest",         {tag, "1.5.0"}  }},
    {kvs,    ".*", {git, "git://github.com/synrc/kvs",          {tag, "master"} }},
    {nitro,  ".*", {git, "git://github.com/synrc/nitro",        {tag, "master"} }},
    {n2o,    ".*", {git, "git://github.com/5HT/n2o",            {tag, "master"} }},
в сисконфиге ничего интересного кроме {formatter,bert},
Andy
@m-2k
Oct 14 2015 17:04
@fycth завелось?
Andrii Sergiienko
@fycth
Oct 14 2015 17:05
нет
та же фигня
Andy
@m-2k
Oct 14 2015 17:06
в таком случае я выкачиваю n2o/review и сравниваю :smile:
Andrii Sergiienko
@fycth
Oct 14 2015 17:07
я щас примерно этим занимаюсь :)
Andy
@m-2k
Oct 14 2015 17:07
кэш браузера обновил?
bert.js не реврайтил? n2o.min.js не делал?
Andrii Sergiienko
@fycth
Oct 14 2015 17:08
ага. и хром и ФФ. нет. скрипты все из репо
Andy
@m-2k
Oct 14 2015 17:08
ггг
Andrii Sergiienko
@fycth
Oct 14 2015 17:09

что странно:
когда я делаю wf:wire(#api{ - то мне приходит в страницу вот такое

{"t":104,"v":[{"t":100,"v":"io"},{"t":109,"v":"ready_to_record = function(data) {{ if (validateSources([])) {  ws.send(enc(tuple(atom('pickle'),bin('document'),bin('g2gCaAVkAAJldmQABWluZGV4ZAAPcmVhZHlfdG9fcmVjb3JkawAIZG9jdW1lbnRkAAlhcGlfZXZlbnRoA2IAAAWkYgAM2whiAARmrA=='),utf8_toByteArray(JSON.stringify(data))))); } else console.log('Validation Error'); }};ready_to_share = function(data) {{ if (validateSources([])) {

то есть видно название фукнции и т.п.
а когда я делаю wf:wire("ready_to_record();") - то мне приезжает во такое

{"t":104,"v":[{"t":100,"v":"io"},{"t":109,"v":""},{"t":109,"v":[131,108,0,0,0,3,100,0,5,101,114,114,111,114,100,0,6,98,97,100,97,114,103,108,0,0,0,7,104,4,100,0,9,110,50,111,95,97,115,121,110,99,100,0,5,102,
посмотри на "v"
выглядит будто он как-то не так декодирует то что приехало с сервера. или это так надо?
Andy
@m-2k
Oct 14 2015 17:10
да я уже заметил
109 не отображается вроде как
так как это arraybuffer
глянь что внутри через debuger
у тебя походу просто ф-ия не вызывается
utf8_dec(r.v[1].v)
Andrii Sergiienko
@fycth
Oct 14 2015 17:12
так. вот какое дело. у меня после wire стояло еще wf:flush. убрал его - и вайр стал работать...
Andy
@m-2k
Oct 14 2015 17:12
это делает из arraybuffer String
ггг
flush вроде как для других целей
я его и не юзаю вообще
Andrii Sergiienko
@fycth
Oct 14 2015 17:15
да у меня было там на каком-то древнем n2o что без флаш до страницы вайр не доезжал
поэтому он у меня тут понатыкан везде
Andy
@m-2k
Oct 14 2015 17:15
:shipit:
Andrii Sergiienko
@fycth
Oct 14 2015 17:17

скажите мне еще такую вещь пожалуйста

    [{'_', [
        {"/static/[...]", n2o_static, {dir, "apps/anseko/priv/static", mime()}},
        {"/n2o/[...]", n2o_static, {dir, "deps/n2o/priv", mime()}},
        {"/ws/[...]", n2o_stream, []},
        {"/stream[...]", stream_handler, []},
        {'_', n2o_cowboy, []}
    ]}]).

вот у меня при таком конфиге http://localhost/stream попадает все равно не в stream_handler, а в routes.erl

как мне сделать так чтобы оно не в роутес приезжало, а в отдельный модуль прямиком? что в этом конфиге не так?

Andy
@m-2k
Oct 14 2015 17:17
а как ты полосу прокрутки убираешь?
Andrii Sergiienko
@fycth
Oct 14 2015 17:17
какую такую полосу прокрутки?...
Andy
@m-2k
Oct 14 2015 17:18
а. не, прост гитлер глючит
Andrii Sergiienko
@fycth
Oct 14 2015 17:18
глючит
Andy
@m-2k
Oct 14 2015 17:19
так мож у тебя "/ws/stream[...]", а не "/stream[...]",
откуда я знаю что ты там передаешь
:smile:
Andrii Sergiienko
@fycth
Oct 14 2015 17:20
ты - нет. но я ж знаю. ws://localhost/stream - при указанной выше конфиге приезжает в роутес. а должен в stream_handler
Andy
@m-2k
Oct 14 2015 17:21
надеюсь ты понял что я написал
_
Andrii Sergiienko
@fycth
Oct 14 2015 17:21
ммм...
Andy
@m-2k
Oct 14 2015 17:22
/ между stream и [...] не нужен?
это не nginx все таки
Andrii Sergiienko
@fycth
Oct 14 2015 17:23
да ты прав...
Andy
@m-2k
Oct 14 2015 17:23
кул :smile:
Andy
@m-2k
Oct 14 2015 17:33
никто не встречал адекватных книжек по лиспу на русском?
Andrii Sergiienko
@fycth
Oct 14 2015 17:36
не думаю что можно встретить
в лучшем случае - хреновый перевод
Andy
@m-2k
Oct 14 2015 17:37
хреновый перевод - это да, это сегодняшние реалии :smile:
Andrii Sergiienko
@fycth
Oct 14 2015 17:39
ну когда я учился, то вот эта книжка считалась крутой
мож те понравится
я правда ее так и не прочел
поэтому не могу оценить насколько она хороша. Может @5HT имеет мнение
Andy
@m-2k
Oct 14 2015 17:42
. В Рунете ее повсюду хаят и бранят за рассмотрение одних только основ, — дескать, она годится только как самое общее введение. Действительно, после прочтения одной этой книги вы, скорее всего, не сможете писать полноценные программы, зато получите полное представление о том, как работает язык, узнаете много полезных тонкостей.
надо SICP зачитать
Andrii Sergiienko
@fycth
Oct 14 2015 17:43
эээ ну да. тут как бы надо знать что ты очешь от книги получить
надо
только под нее лисп сегодня не найти подходящий :)
racket рекомендуют как самый подходящий
возьми пока хаскель - на степике хороший курс на русском щас идет
ну это тоже конечно основы
Andy
@m-2k
Oct 14 2015 17:45
не матан нихачу
скобочки хачу ))))))
Andrii Sergiienko
@fycth
Oct 14 2015 17:45
а там матана как раз нету. все толково и просто. хоршее введение
а
Andy
@m-2k
Oct 14 2015 17:46
код как данные, метапрограммирование, все такое
Andrii Sergiienko
@fycth
Oct 14 2015 17:46
ну тада не знаю. я сам время от времени смотрю на книжки про лисп. но че-то промышленность ничего не издает нового
на амазоне только классика мэтров
...по бешенным бабкам
Andy
@m-2k
Oct 14 2015 17:47
надо у catap'а спросить
Andrii Sergiienko
@fycth
Oct 14 2015 17:47
вообще я не представляю как люди на лиспе сегодня пишут. я лет 5 назад усиленно засел за лисп. Писал приложение для конторы где тогда работал. Обломался я на работе с БД (то ли пострегр то ли мскл).
Мэтры с русскго форума убедили меня что это слишком - нету нормальной либы на лиспе для работы с БД
тем все и кончилось
Andy
@m-2k
Oct 14 2015 17:48
над свою было написать, че
Andrii Sergiienko
@fycth
Oct 14 2015 17:48
поэтому когда я вижу новости про лисп в продакшене (тот же grammarly) - я не понимаю как они это делают
написал бы. но я не крутой лиспер
я ж только учился
хотя логика верная
Andy
@m-2k
Oct 14 2015 17:49
там да, без базы из коробки сильно приунывашеь
Andrii Sergiienko
@fycth
Oct 14 2015 17:49
менеджеры пакетов там тоже - ад адовый
короче это хорошо когда у тебя работа на лиспе - и ты только лиспом занимаешься
а так вот "тихими вечерами" сидеть лисп долбать - это реально для отважных. жизни не хавтит
хотя если наверное взять тот же Allegro - то там наверное все в корбке уже есть
и ИДЕ, и либы, и БД и все прочее
а с опенсорсными лиспами по-моему там до сих пор все очень грустно
ну хотя вот про тот же Racket восторги слышно- вроде там уже можно че-то писать "из корбки"
в обещм как соберешься БД пистаь на лиспе - пингуй. я приду если не поучаствую, то поучусь :)
Andy
@m-2k
Oct 14 2015 17:52
да я воббще хотел на common lisp посмотреть
Andrii Sergiienko
@fycth
Oct 14 2015 17:53
я на SBCL страдал
Andy
@m-2k
Oct 14 2015 17:53
диалекты эт наверн все круто но elixir например это п;здец
Andrii Sergiienko
@fycth
Oct 14 2015 17:54
Steel Bank Common Lisp (SBCL) is a high performance Common Lisp compiler.
тошо надо
Andy
@m-2k
Oct 14 2015 17:55
я его оказывается уже установил :)
Andrii Sergiienko
@fycth
Oct 14 2015 17:55
yay!
я тоже обычно ставлю много вкусного - потом нахожу 5 лет спустя...
Andy
@m-2k
Oct 14 2015 17:56
да не, я неделю назад поставил а потом рабочий день кончился, все вкладки позакрывал и забил :smile:
Andy
@m-2k
Oct 14 2015 18:58
@fycth не в курсе как тормознуть lo в маке чтобы байты медленнее по ws ходили?
это вроде как через туннелирование можно сделать, но упарываться таак влоомм
Andrii Sergiienko
@fycth
Oct 14 2015 19:33
@m-2k без понятия.
Andy
@m-2k
Oct 14 2015 19:40
неа, я раньше Link Conditioner юзал