These are chat archives for synrc/n2o

25th
Jan 2016
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 06:42
Я знаю, здесь не любят ErlyDTL. И всё же — будет ли поддержка новых версий? Я попытался на скорую руку попатчить mad_dtl.erl самостоятельно (явная проблема вроде только с возвращаемым значением erlydtl:compile/3), но не преуспел.
Namdak Tonpa
@5HT
Jan 25 2016 06:42
а зачем его патчить, что не работает?
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 07:06
Свои template tags. В 0.8 тоже вроде бы что-то такое было, но что-то документации по ним не сохранилось, или я не смог найти
В новых версиях появилось поведение erlydtl_library, для которого, по крайней мере, в тестах есть пример.
А, всё, затупил. В mad_dtl.erl что не работает в смысле? Там ломается функция compile_erlydtl_files/1.
Namdak Tonpa
@5HT
Jan 25 2016 07:08
с новым DTL ?
или что?
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 07:09
Да, с новым ErlyDTL. Судя по всему, дело в возвращаемом значении erlydtl:compile/3: она ждёт оk, а приезжает {ok, имя_модуля}
Namdak Tonpa
@5HT
Jan 25 2016 07:09
ну так поправь
сделай #dtl2 рендерер
или патч сделай который для двух версий работает
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 07:21

Видимо, я не вполне понимаю логику работы mad. Вот я поднял версию ErlyDTL, при компиляции получил ошибку:

escript: exception error: no function clause matching 
                 mad_dtl:'-compile_erlydtl_files/1-fun-2-'({ok,login_view}) (/Users/5HT/depot/synrc/mad/src/compile/mad_dtl.erl, line 58)

Поменял строчку в mad_dtl.erl:

@@ -55,4 +55,4 @@ compile_erlydtl_files(Opts) ->
              true -> ok end
     end,

-    lists:any(fun({error,_}) -> true; (ok) -> false end,[Compile(F) || F <- Files]).
+    lists:any(fun({error,_}) -> true; ({ok, _Module}) -> false end,[Compile(F) || F <- Files]).

Скомпилировалось успешно, но при запуске получаю:

[{mad_dtl,'-compile_erlydtl_files/1-fun-2-',
                                                      [ok],
…
Catch: error:function_clause

То есть получается, что откуда-то взялась старая версия ErlyDTL, возвращающая ok вместо кортежа.

mad clean, конечно, делал.
Namdak Tonpa
@5HT
Jan 25 2016 07:22
тебе нужно mad пересобирать и убеждаться что вызывается пересобраный мад
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 07:22
Так я пересобрал
Без этого не собиралось, понятно
Единственное что, какая-то хрень происходит: у меня появился бандл sample в каталоге проекта. При том, что проект называется по-другому. Чего-то я глобально не догоняю.
Namdak Tonpa
@5HT
Jan 25 2016 07:24
sample это дефаултное имя
если ты собираешьш бандл (бандл тоже дефаулт) и не указываешь имя то получится sample
ладно я гляну новый DTL
только попозже
напомни мне на неделе
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 07:28
Ok, хорошо, спасибо
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 14:31

C mad разобрался вроде (ну, как… заставил-таки работать процитированный выше костыль), но появилась новая проблема: непонятно, куда подсовывать опции ErlyDTL. Вроде бы есть rebar.config в корневом каталоге приложения. Дописываю туда нужные опции:

{erlydtl_opts, [
    {doc_root,   "priv/templates"},
    {out_dir,    "ebin"},
    {compiler_options, [report, return, debug_info}],
    {source_ext, ".html"},
    {module_ext, "_view"},
    {libraries, [{mytags, mytags}]},
    {default_libraries, [mytags]}
]}.

При запуске — ошибка. Но если в REPL сказать

erlydtl:compile("apps/myapp/priv/templates/index.html", index_view, [force_recompile, {default_libraries, [mytags]}]).

всё начинает работать.

Namdak Tonpa
@5HT
Jan 25 2016 15:24
{doc_root, "apps/myapp/priv/templates"},
если корневой
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 15:26
Корневой для myapp. Ну то есть в apps/myapp который.
Ну и остальные фичи DTL работают, то есть дело не в этом.
Namdak Tonpa
@5HT
Jan 25 2016 15:26
может опции в новом DTL поменялись
надо исходники DTL смотреть, который erlydtl_opts парсают
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 15:27
Так это и есть опции нового DTL, в старом их не было. И, собственно, тема-то в чём — они работают, как видно из второго примера: в REPL всё ок.
Задача, чтобы в потрохах N2O всё вызвалось с теми же опциями, что и у меня в REPL.
Namdak Tonpa
@5HT
Jan 25 2016 15:28
Res = erlydtl:compile(F, ModuleName, Opts3),
ну вот убедись что сюда передаются такие же опции как ты в REPL передаешь
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 15:54
А как логи из mad_dtl увидеть? Добавил mad:info сOpts3, но не вижу ничего, как и сообщения "DTL Compiling…"
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:14
Чего-то я совсем не догоняю, как всё это устроено. Добавил в deps/mad/src/compile/mad_dtl.erl строку badmatch = Opts3, чтобы хоть в стектрейсе на опции посмотреть. Пересобрал mad, скопировал в каталог проекта, сделал ./mad clean. Хоть бы хрен, как работало, так и работает.
Namdak Tonpa
@5HT
Jan 25 2016 16:15
ну так ./mad же старый
надо ж каждый раз ./mad апдетить
я ж тебе сразу написал
а ты мне сказал что ты все так и делаешь )
напиздел :-)
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:16
Так, стоп. Вот я пересобрал mad, скопировал его в каталог проекта, заменив старый mad. Это не называется "апдейтить"?
Namdak Tonpa
@5HT
Jan 25 2016 16:17
откуда я знаю что ты там куда копировал )
важно то что есть ./mad а есть mad в deps/mad
и это два разных меда
и ты должен слидить что бы они соотвествовали друг другу
исходники в депсах
с медом тем который ты запускаешь
а может быть еще mad в PATH
как у меня
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:18
Дык! Это-то я понимаю. Они соответствуют. Я каждый раз после изменения исходников переношу mad из deps/mad в корень проекта.
Namdak Tonpa
@5HT
Jan 25 2016 16:18
так шо ты там поаккуратнее
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:19
В PATH у меня mad-а нет, я через ./mad его запускаю
Namdak Tonpa
@5HT
Jan 25 2016 16:19
ну значит что-то не так делаешь )
после изменения исходников надо ж mad перегенириовать
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:19
Спасибо, это я понял
Namdak Tonpa
@5HT
Jan 25 2016 16:20
ты как это делаешь?
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:20
Правлю исходники в deps/mad. Запускаю make. Копирую файл mad в корень проекта, откуда я его запускаю.
Namdak Tonpa
@5HT
Jan 25 2016 16:20
все верно
все должно работать
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 16:23
Блин. Ладно, ещё поэкспериментирую
Namdak Tonpa
@5HT
Jan 25 2016 16:23
сам проект тоже пересобирай
хотя там deps/mad/ebinи так будут проапдейченые после make
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 17:00
Проект, конечно, тоже пересобираю
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 18:12

@5HT: в общем, вот тебе по шагам пример с чистым проектом, где хер знает откуда берётся старый mad. То ли я совсем туплю (но вроде последовательность шагов совсем простая), то ли это всё-таки глюк.
1)Получаю с гитхаба свежий mad:

wget https://github.com/synrc/mad/raw/master/mad

2)Создаю проект:

$ ./mad app myapp
Create File: "myapp/sys.config"
Create File: "myapp/apps/sample/priv/static/spa/index.htm"
Create File: "myapp/apps/sample/rebar.config"
Create File: "myapp/apps/sample/priv/templates/index.html"
Create File: "myapp/apps/sample/src/sample.erl"
Create File: "myapp/rebar.config"
Create File: "myapp/apps/sample/src/index.erl"
Create File: "myapp/apps/rebar.config"
Create File: "myapp/vm.args"
Create File: "myapp/apps/sample/src/sample.app.src"
Create File: "myapp/apps/sample/priv/static/synrc.css"
Create File: "myapp/apps/sample/src/routes.erl"
OK

3)Перехожу в каталог с проектом:

$ cd myapp

4)Меняю версию ErlyDTL:

$ vim rebar.config
$ cat rebar.config
…
{erlydtl,".*", {git, "git://github.com/evanmiller/erlydtl", {tag, "0.11.1"} }},
…

5)Выкачиваю зависимости:

$ ../mad deps
==> dependency: "git://github.com/evanmiller/erlydtl" tag: {tag,"0.11.1"}
==> dependency: "git://github.com/extend/cowboy" tag: {tag,"1.0.1"}
==> dependency: "git://github.com/ninenines/cowlib.git" tag: "1.0.0"
==> dependency: "git://github.com/ninenines/ranch.git" tag: "1.0.0"
==> dependency: "git://github.com/uwiger/gproc.git" tag: {tag,"0.3"}
==> dependency: "git://github.com/synrc/fs" tag: {tag,"1.9"}
==> dependency: "git://github.com/synrc/sh" tag: {tag,"1.9"}
==> dependency: "git://github.com/synrc/mad" tag: {tag,"1.9"}
==> dependency: "git://github.com/synrc/active" tag: {tag,"1.9"}
==> dependency: "git://github.com/synrc/nitro" tag: {tag,"0.9"}
==> dependency: "git://github.com/synrc/n2o" tag: {tag,"2.9"}
==> dependency: "git://github.com/sile/jsone.git" tag: {tag,"v0.3.3"}

6)Правлю исходники mad:

$ cd deps/mad/
$ vim src/compile/mad_dtl.erl
$ cat src/compile/mad_dtl.erl
…
lists:any(fun({error,_}) -> true; ({ok, _Module}) -> false end,[Compile(F) || F <- Files]).
…

7)Собираю новый mad из поправленных исходников:

$ ./mad clean
$ make

8)Копирую новый mad в корень проекта:

$ mv mad ../../

9)Перехожу в корень проекта и запускаю там новый mad из поправленных исходников:

$ ./mad clean deps compile plan repl
…
DTL Compiling /apps/sample/priv/templates/index.html
OK
Ordered: [merl,kernel,stdlib,fs,ranch,crypto,compiler,syntax_tools,inets,
gproc,cowlib,cowboy,n2o,sample,active,erlydtl,jsone,mad,nitro,sh]
OK
Configuration: [{n2o,[{port,8001},{route,routes},{log_modules,sample}]}]
Applications: [merl,kernel,stdlib,fs,ranch,crypto,compiler,syntax_tools,inets,
gproc,cowlib,cowboy,n2o,sample,active,erlydtl,jsone,mad,nitro,
sh]
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Setting up watches. Beware: since -r was given, this may take a while!
Eshell V7.0 (abort with ^G)
1> Watches established.
==> "myapp"
==> "/mnt/yadisk/src/education/web/n2o/myapp"
==> "erlydtl"
==> "cowboy"
==> "cowlib"
==> "ranch"

Apps couldn't be loaded: [merl]
==> "gproc"
==> "fs"
==> "sh"
==> "mad"
==> "active"
==> "nitro"
==> "n2o"
==> "jsone"
==> "/mnt/yadisk/src/education/web/n2o/myapp/apps"
==> "/mnt/yadisk/src/education/web/n2o/myapp/apps/sample"
[{mad_dtl,'-compile_erlydtl_files/1-fun-2-',
[ok],
[{file,"/mnt/yadisk/src/education/web/n2o/myapp/deps/mad/src/compile/mad_dtl.erl"},
{line,58}]},
{lists,any,2,[{file,"lists.erl"},{line,1224}]},
{mad_compile,dep,4,
[{file,"/mnt/yadisk/src/education/web/n2o/myapp/deps/mad/src/compile/mad_compile.erl"},
{line,69}]},
{mad_compile,deps,4,
[{file,"/mnt/yadisk/src/education/web/n2o/myapp/deps/mad/src/compile/mad_compile.erl"},
{line,20}]},
{active,compile,2,
[{file,"/mnt/yadisk/src/education/web/n2o/myapp/deps/active/src/active.erl"},
{line,87}]},
{active,handle_cast,2,
[{file,"/mnt/yadisk/src/education/web/n2o/myapp/deps/active/src/active.erl"},
{line,17}]},
{gen_server,try_dispatch,4,[{file,"gen_server.erl"}
Точнее, это либо старый mad, который ждёт ok от ErlyDTL, то ли старый ErlyDTL, который возвращает ok. Но этого в любом случае быть не должно, насколько я понимаю.
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 18:37

Да, и по вопросу про опции ErlyDTL: да, они правильные, проверил с помощью адского костыля — первой строчкой index:main/0 зафигачил

    erlydtl:compile("apps/myapp/priv/templates/index.html", index_view, [force_recompile, {default_libraries, [mytags]}]),

Так ­— работает!
Жопа в том, что в mad_dtl опции тоже правильные, я вижу в логах

DTL Compiling /apps/myapp/priv/templates/index.html
DTL Options [{out_dir,"/home/yashrk/src/myapp/apps/myapp/ebin"},
             {compiler_options,[report,return,debug_info]},
             {libraries,[{mytags,mytags}]},
             {default_libraries,[mytags]}]
Andy
@m-2k
Jan 25 2016 18:39
мистика! :smile:
Yuriy Al. Shirokov
@yashrk
Jan 25 2016 18:39
Она самая.
Namdak Tonpa
@5HT
Jan 25 2016 22:04
охуенный ты пацан
изменил mad а потом удалил deps заклинив все и вытащил новый
$ ./mad clean deps compile plan repl
:-)
я ж говорил что два меда должны совпадать
три раза уже сказал )
хотя clean вроде не удаляет
а не clean только ebin удаляет
ладно потом гляну
надо какие-то строки служебные вывести
Namdak Tonpa
@5HT
Jan 25 2016 22:09
чтобы убеждаться что вызывается тот мад а не другой
Andy
@m-2k
Jan 25 2016 22:09
@5HT свг чо не умеет в перспективные искажения?
Namdak Tonpa
@5HT
Jan 25 2016 22:09
нет
только через SMIL
Andy
@m-2k
Jan 25 2016 22:09
а как тогда анимировать-то бля
Namdak Tonpa
@5HT
Jan 25 2016 22:10
но SMIL запретили во всех браузерах
предлагают CSS анимации для SVG элементов ебанаты
Andy
@m-2k
Jan 25 2016 22:10
там ток skew есть и matrix
из самых сложных
а там пиксели не деформируются
Namdak Tonpa
@5HT
Jan 25 2016 22:11
там был какой-то SMIL полифилл
Andy
@m-2k
Jan 25 2016 22:11
на треугольниках?
Andy
@m-2k
Jan 25 2016 22:12
методы доктора попова прям
пока без анимаций делать буду