These are chat archives for synrc/n2o

13th
Sep 2015
Namdak Tonpa
@5HT
Sep 13 2015 09:20
вот как должен выглядеть наш AVZ: https://auth0.com
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:38
Кстати об AVZ. Попытался тут его подключить к свежесозданному через mad проекту, получаю следующее:
Compiling /deps/avz/src/facebook.erl
Line 41: {undefined_record,panel}
Line 47: {undefined_record,api}
Line 48: {undefined_record,api}
Line 49: {undefined_record,api}
Line 50: {undefined_record,dtl}
DTL Compiling /deps/avz/priv/google_sdk.dtl
DTL Compiling /deps/avz/priv/facebook_sdk.dtl
DTL Compiling /deps/avz/priv/microsoft_sdk.dtl
Namdak Tonpa
@5HT
Sep 13 2015 10:39
ну так а nitro ты подключил?
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:39
Да
Namdak Tonpa
@5HT
Sep 13 2015 10:39
#api и #panel живут же в nitro
значит неправильно подключил
покажи rebar.config
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:40
{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.1"}  }},
    {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"} }},
    {n2o,    ".*", {git, "git://github.com/synrc/n2o",          {tag, "master"} }},
    {avz,    ".*", {git, "git://github.com/synrc/avz",          {tag, "master"} }}
]}.
Namdak Tonpa
@5HT
Sep 13 2015 10:42
а точно
avz просто работает только с 2.8
мы еще не сделали релиз
а ты мешаешь 2.8 и мастер ветки
ты точно хочешь помогать тестированию или хочешь чтобы вы у тебя все работало?
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:44
А-а, ясно.
Namdak Tonpa
@5HT
Sep 13 2015 10:44
я счас пофиксаю avz для мастер n2o
спасибо за фидбек
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:45
Чтобы всё работало, по крайней мере, пока разбираюсь со фреймворком. Но mad-то можно будет пользоваться со стабильной веткой?
Namdak Tonpa
@5HT
Sep 13 2015 10:45
счас сделаешь mad up avz
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:45
Ага, спасибо!
Namdak Tonpa
@5HT
Sep 13 2015 10:45
конечно
да тут уже осталось понты до 2.9
можешь на мастер переходить :-)
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:45
Ггг
Namdak Tonpa
@5HT
Sep 13 2015 10:45
счас 2 мин
https://github.com/synrc/avz/releases/tag/2.8 эта версия avz только для n2o 2.8
за то что будешь жить на мастере от нас бесплатные консультации :-)
Namdak Tonpa
@5HT
Sep 13 2015 10:53
делай mad up avz
обновил мастер до 2.9
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 10:56
О, всё запустилось, отлично.
Namdak Tonpa
@5HT
Sep 13 2015 10:56
Travis-CI надобы обновить:
==> jsone (compile)
ERROR: OTP release OTP17 or later is required, you have: R16B
ERROR: compile failed while processing /home/travis/build/synrc/avz/deps/jsone: rebar_abort
Namdak Tonpa
@5HT
Sep 13 2015 11:18
переключил тревиса на 17 эрланг
везде
нам лично мапы вообще не нужны для synrc стека
только прикольная функция application:get_env/3
но если и ее выпилить то можно быть совместимыми вплоть до R14
только тогда придется вместо jsone что-то другое брать либо даунгрейднуть его
это прикльный чистый JSON парсер написаный одним японцем
Namdak Tonpa
@5HT
Sep 13 2015 11:25
напомню что парсер можно переключить в конфиге
{n2o,json,jsx} например
для synrc/rest:
{rest,json,mochiweb_json} например
Namdak Tonpa
@5HT
Sep 13 2015 11:30
причина по которой я включаю более медленный форматтер jsone в n2o это то что он идиоматично написан на чистом эрланге, и работает под LING.
но вы у себя скорее всего будете использовать jsonx
если вообще будете json форматтер использовать
надо добавить это в книгу
Alexander Hudich
@alttagil
Sep 13 2015 13:04
у меня вот вопрос тупой, нафиг писать такой криптик код,типа try Module:event({server,Message}),[] catch E:R -> wf:error(?MODULE,"Catch: ~p:~p~n~p", wf:stack(E, R)) end, я вот пытаюсь заглянуть в исходник, но пока нормально не отформачу руками на несколько строк нихрена у меня мозг не врубается в простыню символов
Namdak Tonpa
@5HT
Sep 13 2015 13:35
try Module:event({server,Message}),[] 
     catch E:R -> wf:error(?MODULE,"Catch: ~p:~p~n~p", wf:stack(E, R)) end,
чего здесь криптик?
перепиши по другому как тебе понятнее я посмотрю
эта строчка говорит о том что на вызов ивента должна тратиться одна строка
поэтому если количество символов вылазил за 80
то это в след релизах нужно отрефакторить
вчера обсуждали логгинг ошибок в try catch
ты где был ? :-)
тут как у бы у нас code style выработался за некоторое время
все символы расположены так не случайно
вот тут например есть хуйня которая тебя удивит еще больше
Namdak Tonpa
@5HT
Sep 13 2015 13:40
мой коде стайл сделан так чтобы я быстро понимал а не ты
потому что у меня 3 гитхаб организации и 50 репозиториев
мне некогда скролировать
поэтому код ужат немного
а у тебя на гитхабе 2 форка всего лишь и не понятно вообще знаешь ли ты эрланг
и что ты "красивого" вообще написал :-)
Alexander Hudich
@alttagil
Sep 13 2015 14:13
хозяин - барин, конечно. но доки нет фактически, комментов нет, код ужат в несколько конструкций на строке - в итоге разбираться сложно. мне codestyle у RabbitMQ нравится. все практически на ладони
Namdak Tonpa
@5HT
Sep 13 2015 14:14
кто тебя учил суппорт просить?
прийти и сказать ваш код говно пушо я его не понимаю :-)
у меня 80 страниц документации + статьи в инетернете
это больше чем у любого существующего фреймворка на эрланге
Alexander Hudich
@alttagil
Sep 13 2015 14:15
а я разве сказал, что код говно?
Namdak Tonpa
@5HT
Sep 13 2015 14:15
ты уже сказал достаточно
чтобы тебя добавить в специальный список
Andrii Sergiienko
@fycth
Sep 13 2015 14:19
Максим порой на исламиста похож больше чем на буддиста :D
Namdak Tonpa
@5HT
Sep 13 2015 14:19
я просто экономлю свое время
Andrii Sergiienko
@fycth
Sep 13 2015 14:19
Это да, полезный навык
Alexander Hudich
@alttagil
Sep 13 2015 14:20
мог бы просто не отвечать, если так время дорого. что такого оскорбительного в моем вопросе?
Namdak Tonpa
@5HT
Sep 13 2015 14:20
вот у @fycth спроси он тебе ответит на все твои вопросы
покажи ему где документация лежит :-)
Andrii Sergiienko
@fycth
Sep 13 2015 14:22
@alttagil можно начать вот отсюда: http://synrc.com/apps/n2o/
Alexander Hudich
@alttagil
Sep 13 2015 14:23
да читал я всё. и книга у меня есть. вы чего?
Andrii Sergiienko
@fycth
Sep 13 2015 14:23
с автографом?
Alexander Hudich
@alttagil
Sep 13 2015 14:23
без
Namdak Tonpa
@5HT
Sep 13 2015 14:23
это все меняет
чего нехватает в документации говори
сейчас как раз идет работа на SECOND EDITION
Andrii Sergiienko
@fycth
Sep 13 2015 14:23
ну собсно читал то ладно, но оно достаточно живо обновляется. Имеет смысл заглядывать временами.
Если чего не было, то уже может есть.
А если чего таки нет, то принимаются пожелания
Namdak Tonpa
@5HT
Sep 13 2015 14:24
в конце месяца обещаю бесплатный экземпляр всем у кого будут толковые предложения по документации в первую очередь тем кто эти предолжения в виде пул реквестов оформит
по чему нет документации как логинг настраивать для страниц ?
конкретно вопрос в чем?
Namdak Tonpa
@5HT
Sep 13 2015 14:30
логгинг секцию нужно добавить либо в API (wf:error wf:info wf:warning) либо отдельно вместе с error_page и прочими штуками
порблема с error_page в том что это только если HTML сервится через n2o_document
если только SPA через n2o_stream то тут нужно ошибку на клиент по другому выдавать если event завалился
вот этого счас нет
вчера обсуждали это с @m-2k
Alexander Hudich
@alttagil
Sep 13 2015 14:32
я боюсь отстрелите мне чего-нибудь ))) вопроса нет сейчас, на конкретный вопрос вы мне отвечали вполне полно, за что спасибо большое.
Namdak Tonpa
@5HT
Sep 13 2015 14:33
вот ты какой режим N2O используешь?
через /static эндпойнт HTML сервиш?
или HTML на ходу как в PHP и ASP.NET генерируется ?
в функции main/0
Alexander Hudich
@alttagil
Sep 13 2015 14:40
точно отстрелите чего-нибудь. я нуб еще в н2о, пытаюсь понять, как я могу его прикрутить к существующему PHP фронтенду для выдачи данных (графиков итд) в реальном времени. поэтому пока что я его никак не использую - вокруг хожу
Namdak Tonpa
@5HT
Sep 13 2015 14:40
ну вот это же конкретный вопрос
очень просто
главная страница у тебя генерируется PHP отлично
если ты хочешь просто прикрутить вебсокеты к существующему PHP сайту — отлично N2O именно для этого и создан!
на своей странице ты подключаешь N2O вот такими скриптами:
   <script>var transition = {pid: '', host: 'localhost', port:'8000'};</script>
       <script src='/n2o/protocols/bert.js'></script>
        <script src='/n2o/bullet.js'></script>
        <script src='/n2o/utf8.js'></script>
        <script src='/n2o/n2o.js'></script>
        <script>protos = [$bert]; N2O_start();</script>
Прописываешь в переменной transition адрес N2O сервера
Andy
@m-2k
Sep 13 2015 14:43
и в event(init) обновляешь DOM
Namdak Tonpa
@5HT
Sep 13 2015 14:43
используешь только spa протокол без нитрогена в функции main() -> []. возвращаешь пустой список
Alexander Hudich
@alttagil
Sep 13 2015 14:44
это кстати охренительно интересно, потому что я думал, что только в iframe вывод надо от n2o вставлять
Namdak Tonpa
@5HT
Sep 13 2015 14:44
event(init) это то куда ты попадешь после того как на странице вызовется N2O_start();
дальше шлешь в этот процесс с Pid который ты можешь посмотреть в event(init)из кроля или откуда угодвно в эрланг чере Pid ! {bin,Message}
на клиенте его ловишь и все
вот так $file.do = function(x) { console.log(x); }
Alexander Hudich
@alttagil
Sep 13 2015 14:46
а кроль это чего?
Namdak Tonpa
@5HT
Sep 13 2015 14:47
RabbitMQ твой по форматированию которого ты угораешь
Andy
@m-2k
Sep 13 2015 14:47
:smile:
Alexander Hudich
@alttagil
Sep 13 2015 14:47
:-D
Andy
@m-2k
Sep 13 2015 14:47
ужатое форматирование - это ок, я сам тоже к этому пришел
в этой главе все это написано
просто нет тупого турториала
по типу такого как я только что написал
Andy
@m-2k
Sep 13 2015 14:51
https://auth0.com/ ничо так
только надо avz от bootstrap отвязать
Namdak Tonpa
@5HT
Sep 13 2015 14:51
отвязано давно уже
все кнопки из конфига берутся
Andy
@m-2k
Sep 13 2015 14:52
а я давно и не смотрел )
по мылу рега там есть же?
Namdak Tonpa
@5HT
Sep 13 2015 14:53
ну MTA само оно не поставит если ты об этом
Andy
@m-2k
Sep 13 2015 14:53
я прост тут сделал идиоматичную регу по мылу через gmail
с солью на каждого юзера
могу поделиться
только не в виде PR
Namdak Tonpa
@5HT
Sep 13 2015 14:54
@fycth тебе надо такой стафф?
Andy
@m-2k
Sep 13 2015 14:55
генерация паролей, отсылка мыла клиенту с ссылкой на активацию
активация в ETS, добавление в kvs после активации
Alexander Hudich
@alttagil
Sep 13 2015 14:56
спасибо за наводку! выглядит все еще интереснее, чем я думал :clap:
Namdak Tonpa
@5HT
Sep 13 2015 14:57
попрбуй сделай у себя и напиши об этом пост в блоге
за это я переведу тебе 10 баксов
Andy
@m-2k
Sep 13 2015 14:58
@alttagil только пиши с примерами в процессе а то потом сухо получится :smile:
никто не в курсе как nginx настроить чтобы html файл отдавал на любой запрос url?
или cowboy
Namdak Tonpa
@5HT
Sep 13 2015 14:59
n2o_static эндпойнт поставь на /
Andy
@m-2k
Sep 13 2015 14:59
чтобы spa у меня работало для всех страниц
{"/", n2o_static, static()},так? а как он будет один и тот же файл забирать?
Namdak Tonpa
@5HT
Sep 13 2015 15:01
"/[...]"
Andy
@m-2k
Sep 13 2015 15:01
у меня адреса
/lol
/lol/lol2
Namdak Tonpa
@5HT
Sep 13 2015 15:02
а типа вообще один и тот же файл
Andy
@m-2k
Sep 13 2015 15:02
для всех их надо отдавать /static/index.html
spa же
Namdak Tonpa
@5HT
Sep 13 2015 15:02
там есть опци в ковбое file и dir для статик хендлера
посмотри в примерах ковбоя cowboy_static хендлер
в n2o только dir опция в статик хендлере используется ковбоевскакя
Andy
@m-2k
Sep 13 2015 15:04
Dispatch = cowboy_router:compile([
        {'_', [
            {"/", cowboy_static, {priv_file, static_world, "index.html"}},
            {"/[...]", cowboy_static, {priv_dir, static_world, "",
                [{mimetypes, cow_mimetypes, all}]}}
        ]}
Namdak Tonpa
@5HT
Sep 13 2015 15:07
{"/[...]", cowboy_static, {priv_file, static_world, "index.html"} }
типа такого надо
Andy
@m-2k
Sep 13 2015 15:07
ага
Andy
@m-2k
Sep 13 2015 15:12
лол, работает :smile:
{"/static/[...]",     n2o_static, static()},
{"/n2o/[...]",        n2o_static, n2o()},
{"/ws/[:q1/[:q2]]",   n2o_stream, []},
{"/[...]",            cowboy_static, {priv_file, erlach, "static/erlach.html"}},
осталось такое же правило для nginx ^_^
наверн просто index index.html для location ~ | не, надо ж url оставить таким как был
Andy
@m-2k
Sep 13 2015 15:19
мамочки
расчехлил старые конфиги nginx и ужаснулся что это писал я
  location ~ "^/([a-zA-Z0-9]{8})([a-zA-Z0-9]{16})([a-zA-Z0-9]{1,100})/?$" {
    #lua_code_cache off;
    default_type text/html;

        ## REDIS MUST BE STARTED!

        set $idd '';
        rewrite_by_lua_file "conf/sites-available/lua/redis.lua";

        set $realtime_path_prefix 'realtime/';
        set $unix_realtime_32 '00068rj2dhp70rj2';
        set_misc_base32_padding off;
        set_decode_base32 $cam $1;
        set_decode_base32 $unix_time $2;

        set_by_lua $path '
            local path = ngx.var.cam
            if ngx.var[2] == ngx.var.unix_realtime_32 then
                path = ngx.var.realtime_path_prefix .. path
            else
                path = path .. "/" .. os.date("%Y-%m-%d/%H-%M-%S", tonumber(ngx.var.unix_time))
            end
            return path
            ';
        try_files "/${path}.jpg" =404;
  }
Namdak Tonpa
@5HT
Sep 13 2015 15:24
котаны смотрите шо я сделал
event(#client{data=Data}) ->
    wf:info(?MODULE,"Client Delivered ~p~n",[Data]),
    1/0,
    ok;
Andy
@m-2k
Sep 13 2015 15:25
слишком сложный прикол
Namdak Tonpa
@5HT
Sep 13 2015 15:25
> $io.do = function (x) { console.log(JSON.stringify(x.v[2].v)); }
> ws.send(enc(tuple(atom('client'),bin('hello'))));
> [{"t":100,"v":"error"},{"t":100,"v":"badarith"},
{"t":108,"v":[{"t":104,"v":[{"t":100,"v":"index"},
                          {"t":100,"v":"event"},{"t":97,"v":1},
                          {"t":97,"v":52}]},
                           {"t":104,"v":[{"t":100,"v":"n2o_client"},{"t":100,"v":"info"},                  {"t":97,"v":3},{"t":97,"v":9}]},{"t":104,"v":[{"t":100,"v":"n2o_proto"},{"t":100,"v":"push"},{"t":97,"v":5},{"t":97,"v":38}]},{"t":104,"v":[{"t":100,"v":"n2o_stream"},{"t":100,"v":"websocket_handle"},{"t":97,"v":3},{"t":97,"v":38}]},{"t":104,"v":[{"t":100,"v":"cowboy_websocket"},{"t":100,"v":"handler_call"},{"t":97,"v":7},{"t":98,"v":588}]},{"t":104,"v":[{"t":100,"v":"cowboy_protocol"},{"t":100,"v":"resume"},{"t":97,"v":6},{"t":98,"v":457}]}]}]
Andrii Sergiienko
@fycth
Sep 13 2015 15:26
@m-2k @5HT да, может быть надо
Andy
@m-2k
Sep 13 2015 15:26
а, я понял
теперь ошибки в js консоль приезжают
гггг
Andrii Sergiienko
@fycth
Sep 13 2015 15:26
красота
Namdak Tonpa
@5HT
Sep 13 2015 15:27
на на стороне джаваскрипта можно будет стектрейс показать как захочешь
комичу
Andy
@m-2k
Sep 13 2015 15:27
@fycth если я на гист скину ты вкомитишь это в avz?
или там нет этой логики
Andrii Sergiienko
@fycth
Sep 13 2015 15:27
@m-2k разберемся
Namdak Tonpa
@5HT
Sep 13 2015 15:28
на сервер эта колбаса так выглядит:
=ERROR REPORT==== 13-Sep-2015::18:23:59 ===
n2o_client:Catch: error:badarith
[{index,event,1,52},
 {n2o_client,info,3,9},
 {n2o_proto,push,5,38},
 {n2o_stream,websocket_handle,3,38},
 {cowboy_websocket,handler_call,7,588},
 {cowboy_protocol,resume,6,457}]
Twitter Format Stacktrace
кто пиздел что в эрланге ошибки непонятны? :-)
Andy
@m-2k
Sep 13 2015 15:34
главное теперь в config запихать параметр чтобы отключать лог в js
Namdak Tonpa
@5HT
Sep 13 2015 15:35
а сообщения не показываются
это на клиенте debug=true надо включить
либо wf:wire("debug=true;")
Andy
@m-2k
Sep 13 2015 15:35
хакирам это расскажи
Namdak Tonpa
@5HT
Sep 13 2015 15:35
а точно!
нельзя показывать ошибки хакерам
иначе они узнают как код организован
Andy
@m-2k
Sep 13 2015 15:36
и по ip тебя вычислят
Andrii Sergiienko
@fycth
Sep 13 2015 15:39
Узнаю как код организован и выпустят клон!!!
Namdak Tonpa
@5HT
Sep 13 2015 15:40
вам смешно а в N2O для этого AES написан :-)
только для того чтобы юзер не узнал постбек и имя модуля
поэтому стектрейсы тоже надо тщательно скрывать
Andrii Sergiienko
@fycth
Sep 13 2015 15:41
это круто
Andy
@m-2k
Sep 13 2015 15:42
@5HT а я думал ты меня потроллил
Namdak Tonpa
@5HT
Sep 13 2015 15:43
так всегда: вы пишите хуйню, а я ее превращаю золотые мысли :-)
Andrii Sergiienko
@fycth
Sep 13 2015 15:44
почти как корпоративный девиз "превращаем ваши хуёвые идеи в алмазы"
:)
Andy
@m-2k
Sep 13 2015 15:44
я не хуйню написал, я тебе постоянно об этом говорю, но тебе бы лижбы дебаг в консоли
чтобы клиенты тебе сами стектрейсы слали и прочее
Namdak Tonpa
@5HT
Sep 13 2015 15:46
стектрейсы должны на crashdump.io слаться
а не в браузер
Andy
@m-2k
Sep 13 2015 15:46
я как вижу лог ошибок в браузере, у меня рвотный рефлекс начинается
ну и где этот крашдамп? кому позвонить надо, давай позвоню
в NY? в Камбоджи?
Andrii Sergiienko
@fycth
Sep 13 2015 15:46
не, оно само слаться должно, по телефону не надо
это же не СССР уже
Andy
@m-2k
Sep 13 2015 15:47
Сталину позвоню
а то нет на вас управы!
Andrii Sergiienko
@fycth
Sep 13 2015 15:47
бардак!
Andy
@m-2k
Sep 13 2015 15:47
:smile:
вот такое у меня даже решение было азаза
location  = / {
    default_type text/html;
    content_by_lua '
      ngx.say("<html><head><title></title><head><body><h2>NODE RUNNING</h2></body></html>")
      ';
  }
Namdak Tonpa
@5HT
Sep 13 2015 15:51
надо N2O на lua написать и встроить в nginx
Andy
@m-2k
Sep 13 2015 15:52
там всё плохо
китаец уже написал же
сайт openresty на lua написан
Andrii Sergiienko
@fycth
Sep 13 2015 16:24
@m-2k что там с гистом? де gmail, соль и прочие хеши?
Andy
@m-2k
Sep 13 2015 16:24
ща с nginx разберусь, через часок оформлю
Namdak Tonpa
@5HT
Sep 13 2015 16:24
счас будет новый эррор логгинг
и про него статья в книге
и ту хуйню как страницу с нуля для PHP сайта сделать тоже надо написать
Andy
@m-2k
Sep 13 2015 16:30
Pid ! {bin,Message}
вот так $file.do = function(x) { console.log(x); }
это работает?
Namdak Tonpa
@5HT
Sep 13 2015 16:30
ага
Andy
@m-2k
Sep 13 2015 16:30
но ты же понимаешь что просто бинарь слать смысла нет?
без хидера
Namdak Tonpa
@5HT
Sep 13 2015 16:30
ну в нем себе и делай хедер
Andy
@m-2k
Sep 13 2015 16:31
нет это все говно
лишний код
надо слать тапл
Namdak Tonpa
@5HT
Sep 13 2015 16:31
ftp юзай
там 11 полей
Andy
@m-2k
Sep 13 2015 16:31
{Header,<<>>}
я к тому что bin не нужен
Namdak Tonpa
@5HT
Sep 13 2015 16:31
не нужен не пользуйся
Andy
@m-2k
Sep 13 2015 16:31
ftp уже дописан?
Namdak Tonpa
@5HT
Sep 13 2015 16:32
в работе
Andy
@m-2k
Sep 13 2015 16:32
то есть пока только через file_relay.erl?
как можно будет юзать ftp без чанков хотя бы - напиши мне
Namdak Tonpa
@5HT
Sep 13 2015 16:33
уже можно
Andy
@m-2k
Sep 13 2015 16:33
кул
#ftp{meta=Header,data=Bin}
Namdak Tonpa
@5HT
Sep 13 2015 16:34
например
Andy
@m-2k
Sep 13 2015 16:39
поднял на маке nginx - cowboy - n2o
для SPA
надо кому пример конфигов?
статью? бесплатной еды?
Namdak Tonpa
@5HT
Sep 13 2015 16:41
статью
возвращать всегда результат main/0 и event(init) на клиент в поле {io,_,Data} ?
Andy
@m-2k
Sep 13 2015 16:41
ок, после того как вторую страничку сделаю и можно будет ходить между ними по ws
@5HT нет конечно
Namdak Tonpa
@5HT
Sep 13 2015 16:42
а когда?
Andy
@m-2k
Sep 13 2015 16:42
возвращать надо явно
Namdak Tonpa
@5HT
Sep 13 2015 16:42
так оно явно я пакую ответ в IO
для этого IO и был придуман чтобы Код и Данные возвращать
Andy
@m-2k
Sep 13 2015 16:43
у меня 99% ивентов не возвращают ничего
а DOM обновляют
Namdak Tonpa
@5HT
Sep 13 2015 16:43
ну может опцию сделать чтобы типа похуй шо в data
а счас ниуя не слать
только ошибки если есть
Andy
@m-2k
Sep 13 2015 16:44
я чот немного не понимаю что за ио дата
Namdak Tonpa
@5HT
Sep 13 2015 16:44
почитай тогда книгу
Andy
@m-2k
Sep 13 2015 16:46
WebSocketPid ! {io, Message} вот так должны данные уезжать напрмер
но никак не event(_) -> wf:info(***). который отошлет {io,_,ok}
Namdak Tonpa
@5HT
Sep 13 2015 16:54
WebSocketPid ! {io,Eval,Data} так тоже уедут
и если поставить флаг n2o events_reply то и ok должен уезжать
имхо так
Andy
@m-2k
Sep 13 2015 16:55
но зачем
Namdak Tonpa
@5HT
Sep 13 2015 16:58
@fycth ты шо скажешь?
а не {io,Eval,Data} не уедут
такого протокола нет
есть {direct,_}
вот он может возвращать например
есть direct pickle и flush
client и server точно должны возращать
а nitrogen протокол не должен
вот!
да так и есть
Namdak Tonpa
@5HT
Sep 13 2015 17:06
но все равно надо наверно отдельный месадж для ошибок
{error,_}
чтобы не возить их в {bin,_}и {io,_,_}
зацените как теперь active работает:
> Compile Params: ["n2o"]
==> "n2o"
Compiling /deps/n2o/src/protocols/n2o_file.erl
==> "/Users/5HT/depot/synrc/n2o/samples"
==> "/Users/5HT/depot/synrc/n2o/samples/apps"
Active: module loaded: {reloaded,n2o_file}
ничего лишнего
Namdak Tonpa
@5HT
Sep 13 2015 17:26
еще бы от этих сообщений от sub_dirs избавится как-то
Namdak Tonpa
@5HT
Sep 13 2015 17:35
> npm install linux -g
попробуйте у себя на маках :-)
Andy
@m-2k
Sep 13 2015 17:37
rm -rf /* тоже попробуйте
Namdak Tonpa
@5HT
Sep 13 2015 17:37
$ linux init
Created new config folder at /Users/5HT/depot/synrc/synrc.com/linux
bash-3.2$ sudo linux boot
Password:
Linux has booted { ip: '192.168.64.2',
  hostname: 'daisy-buddy-simba-mittens',
  pid: 48195 }
bash-3.2$ linux ssh
 __    __    __
/  \__/  \__/  \__   Welcome to HyperOS Linux! (Based on TinyCore Linux)
\__/  \__/  \__/  \        hyperos.io              tinycorelinux.net
   \__/  \__/  \__/

tc@daisy-buddy-simba-mittens:~$
ебануться!
Andy
@m-2k
Sep 13 2015 17:38
tinycore норм тема
распаковывала у нас фс в оперативку а потом запаковывала )
Namdak Tonpa
@5HT
Sep 13 2015 17:44
это через новый Yosemite гипервизор
говорят что под Hyper-V тоже работает
Namdak Tonpa
@5HT
Sep 13 2015 17:55
// N2O File Transfer Protocol

var read_slice = function(start, end) {
    reader = new FileReader();
    reader.onloadend = function(e) {
      if(e.target.readyState == FileReader.DONE) {
        ws.send(enc(tuple(atom('ftp'),1,bin(file.name),3,4,5,6,7,
           bin(e.target.result),'send',block_size,11))); } };
    reader.readAsBinaryString(file.slice(start, end)); };

    $file.do = function(rsp) { if(rsp.value[0][9]==="next"){
        var size = parseInt(rsp.value[0][6]);
        read_slice(rsp.value[0][6],rsp.value[0][10]) } else {
          console.log('send complete'); } }
доктор телеграфирует
счас буду писать тесты для io.js :-)
Andy
@m-2k
Sep 13 2015 18:00
покаж код который ограничивает размер чанка на сервере
Namdak Tonpa
@5HT
Sep 13 2015 18:26
тот которы ковбоевский ? :-)
или наш FTP-шный
Andy
@m-2k
Sep 13 2015 18:27
тот который не позволит чанки аллоцировать по 8 гигабайт в RAM
Namdak Tonpa
@5HT
Sep 13 2015 18:27
в нашем WS я такое сделаю
про ковбой ничего не могу общать
это хуйню не я пишу
Andy
@m-2k
Sep 13 2015 18:28
а какой макс размер пакета по WS?
Namdak Tonpa
@5HT
Sep 13 2015 18:28
8МБ
Andy
@m-2k
Sep 13 2015 18:28
а кто их склеивает?
Namdak Tonpa
@5HT
Sep 13 2015 18:33
ковбой
Andy
@m-2k
Sep 13 2015 18:45
ну вот пока он будет их склеивать память кончится
Namdak Tonpa
@5HT
Sep 13 2015 18:46
кого их
Andy
@m-2k
Sep 13 2015 18:46
tcp пакеты
Namdak Tonpa
@5HT
Sep 13 2015 18:46
склеенный максимальный 8МБ
че ты упоролся там?
Andy
@m-2k
Sep 13 2015 18:46
походу
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:01
Что-то не могу разобраться с AVZ. Код примеров читал: и cms, и skyline. Что нам надо передавать в шаблон страницы логина, кроме того, что возвращают avz:sdk/1 и avz:buttons/1? В skyline на странице логина подключается какой-то файл all.min.jsявно с какой-то N2O-шной логикой — он обязателен? Если да, откуда его брать?
Namdak Tonpa
@5HT
Sep 13 2015 21:01
в avz надо только те скрипты подключать что с ним идут
@fycth можешь помочь человеку?
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:02
Я сделал ровно как вот здесь описано: http://maxim.livejournal.com/421845.html
Подставил в самый простой шаблон
Andy
@m-2k
Sep 13 2015 21:02
в avz без чтения сорцов не разобраться )
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:03
Кнопки фейсбука и твиттера нарисовались, но обработчик у них javascript:void(0).
Про логику логина — верю (и готов читать код). Но у меня сейчас не работает тупо нажатие на кнопку, перекатанное из примеров 1:1. ЧЯДНТ?
Andy
@m-2k
Sep 13 2015 21:05
возможно тебе это поможет, но тут у меня свои сессии и avz немного допиленый, но логика та же
https://github.com/5HT/erlach/blob/master/apps/erlach/src/profile.erl#L91-L111
Namdak Tonpa
@5HT
Sep 13 2015 21:05
да у него кнопка не нажимается
Andy
@m-2k
Sep 13 2015 21:05
продавилась?
Namdak Tonpa
@5HT
Sep 13 2015 21:06
мой пример старый
то старый avz
Andy
@m-2k
Sep 13 2015 21:06
еще бы
я ж грю, читать код avz надо чтобы вогнать
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:06
@m-2k: у тебя SPA, как я успел понять?
Andy
@m-2k
Sep 13 2015 21:07
нет
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:08
А, всё, вижу, как там всё устроено
Andy
@m-2k
Sep 13 2015 21:08
там говнокода много, так что осторожнее
Namdak Tonpa
@5HT
Sep 13 2015 21:09
#panel{class= <<"center">>,body=#link{body= <<"Auth with Twitter">>,
            class= <<"button success">>, postback={twitter,logintwitter}} };
вот рендеринг этой кнопки посылает постбек в виде джаваскрипта на клиент
тебе нужно включить логгинг форматтера
wf_convert в log_modules модуле
и убелится в консоли что на клиент приезжает джаваскрипт для этой кнопки
или если это фейсбучные кнопки
убедится что хендлеры повешаны скриптами facebook_sdk.js
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:10
О, интересно, спасибо, сейчас попробую
Namdak Tonpa
@5HT
Sep 13 2015 21:11
для фейсбука это
wf:wire('fb_login();');
который вешается на эту кнопку
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:12
О как
Namdak Tonpa
@5HT
Sep 13 2015 21:12
там же все в коде
и это так лениво описывать шо пиздец :-)
обычно это нада людям которые стартапы делают
а там это все все знают и так уже
поэтому вопросов не возникает
но даже с учетом этого avz проще чем все остальное
просто надо понимать что Facebook, Google, Microsoft это JavaScript based авторизация
а Twitter, Github и OAuth — это HTTP redirect based атворазации
это две совершенно разные модели объеденены в одном продукте avz
я вас прошу вы как-то разберитесь пушо я очень не хочу ставить avz и смотреть что там происходит :-)
мне достаточно того что @fycth говорит что там все ок и работает :-)
он официальный мейнтейнер avz
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:25
Не ходят сообщения после отдачи страницы, ни с клиента на сервер, ни наоборот (логи включены для всех модулей)
Namdak Tonpa
@5HT
Sep 13 2015 21:26
значит не поключено
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:27
Добавляю в шаблон то, что возвращаютavz:sdk/1 и avz:callbacks/1. Не нашёл пока в коде avz, чего бы оно ещё могло хотеть.
А, avz:callbacks/1 вообще ради побочного эффекта существует, её не надо никуда добавлять
Andy
@m-2k
Sep 13 2015 21:32
там надо пробрасывать ивенты в avz
вроде как
api_event/3
Namdak Tonpa
@5HT
Sep 13 2015 21:34
вообщем жди @fycth
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:34
api_event/3 я видел. Но это же обработка того, что с клиента приехало уже. А у меня тупо обработчики на кнопки не вешаются.
Понял, жду
Namdak Tonpa
@5HT
Sep 13 2015 21:40
проверь почему нихуя не приходи
ты какой сервис фейбук или твитер хочешь подключить?
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:41
Я хочу пока просто разобраться, экспериментирую с фейсбуком и твиттером (гугловые скрипты пишут ошибку с гугловой стороны, отключил пока). Влез в это дело я ради OAuth вообще.
Andy
@m-2k
Sep 13 2015 21:41
а ты так делал? main() -> _R = avz:callbacks([twitter]),
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:42
У меня сейчас так:
-define(LOGIN,[facebook,twitter]).
…
main() ->
  avz:callbacks(?METHODS),
  [ #dtl{file = "login", bindings = [ {sdk, avz:sdk(?LOGIN)},
                                      {buttons, avz:buttons(?LOGIN)} ] } ].
Andy
@m-2k
Sep 13 2015 21:43
наркоман?
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 21:43
???
Namdak Tonpa
@5HT
Sep 13 2015 21:43
все ок вроде
Andy
@m-2k
Sep 13 2015 21:46
чот даркнет не получится сделать, поисковики умеют в js
интересно они могут в N2O_Start(); ?
если да то ебаться с main/0 нет смысла
Andy
@m-2k
Sep 13 2015 22:32
@5HT ws.send(enc(tuple(atom('client'),tuple(atom('history'),e.state)))); } что я тут должен поменять
Namdak Tonpa
@5HT
Sep 13 2015 22:33
e.state на []
Andy
@m-2k
Sep 13 2015 22:34
e.state это строка
с [] тоже ниче не приезжает
Namdak Tonpa
@5HT
Sep 13 2015 22:34
стоки нельзя теперь
числа тоже нельзя
только tuple atom bin и []
Andy
@m-2k
Sep 13 2015 22:35
и как строку передать? в бинаре?
Namdak Tonpa
@5HT
Sep 13 2015 22:35
ага
или list
Andy
@m-2k
Sep 13 2015 22:35
а как
лист
Namdak Tonpa
@5HT
Sep 13 2015 22:35
bin('string')
листа пока нет нормального
надо string написать
Andy
@m-2k
Sep 13 2015 22:40
кул, работает erlach_spa:Recceived: <<"sas">>
приезжают только {client, Evt}?
Namdak Tonpa
@5HT
Sep 13 2015 22:41
все приезжает
server client flush pickle direct
bin ftp
N2O, PING
это все что приезжает в N2O
Andy
@m-2k
Sep 13 2015 22:42
О, кул
а это в книге явно написано?
Namdak Tonpa
@5HT
Sep 13 2015 22:42
ДА БЛЯДЬ!
Andy
@m-2k
Sep 13 2015 22:42
сук :smile:
Namdak Tonpa
@5HT
Sep 13 2015 22:42
:-)
Yuriy Al. Shirokov
@yashrk
Sep 13 2015 23:02
Забавно, что пример использования avz из аккаунта @fycth тоже не работает https://github.com/fycth/n2o-examples
Видимо, там что-то за крайние полгода капитально разъехалось
Подожду, действительно, реакции @fycth, а пока на другой машине попробую, мало ли, вдруг это какие-то глюки локальные
Namdak Tonpa
@5HT
Sep 13 2015 23:03
ну мы же последний месяц n2o активно меняли
и avz переписывали
у него в репозитории замороженые версии n2o и avz
должно работать
попробуй взять следующие стабильные
Namdak Tonpa
@5HT
Sep 13 2015 23:12
его пример не работает пушо он не собирается
там надо mad из мастера взять
Namdak Tonpa
@5HT
Sep 13 2015 23:24
я вытащил это
оно не может работать
надо свой avz sample писать
там в некоторых местах web_app в некоторых n2o_sample1