These are chat archives for synrc/n2o

23rd
Sep 2015
fxmy wang
@fxmy
Sep 23 2015 07:00
just noticed that FTP sample consumes lots of CPU.
wandering whether a server side buffer that reduces write operation rate could improve that (:3JZ)
fxmy wang
@fxmy
Sep 23 2015 07:09
wondering ops
Namdak Tonpa
@5HT
Sep 23 2015 07:52
it consumes CPU because we do write through on each chunk
all we need to change is just accumulate the #ftp.data in #handler of n2o_async process
but now you can power off the machine and last chunk will be saved
it would be impossible with #ftp.data buffer
fxmy wang
@fxmy
Sep 23 2015 08:09
that's true. last unwritted buffer will lost across power failure
Namdak Tonpa
@5HT
Sep 23 2015 08:12
we will add accumulation option and configurable buffer size
fxmy wang
@fxmy
Sep 23 2015 08:13
( ゚∀゚)=b
just trying myself, but the file won't upload at all. I must been missing something (:3JZ) keep on diggin' fxmy/n2o@7332cf9
Namdak Tonpa
@5HT
Sep 23 2015 08:19
n2o-ftp-cpu.png
For me it's not a lot :-)
no, you're doing it wrong. you should use #ftp.data as a buffer inside #handler.state
fxmy wang
@fxmy
Sep 23 2015 08:21
well I got one old laptop with Core(TM)2 Duo CPU T5670 , CPU consumes up to 85%( ゚∀゚)
let me see....
Namdak Tonpa
@5HT
Sep 23 2015 08:22
it shouldn't be more that 2 lines of code :-)
try to fit that limitations
fxmy wang
@fxmy
Sep 23 2015 08:24
will try my best ( ゚∀゚)
Namdak Tonpa
@5HT
Sep 23 2015 08:24
new FTP article: http://5ht.co/ftp.htm
fxmy wang
@fxmy
Sep 23 2015 08:25
( ゚∀゚)=b awesome
bronzeboyvn
@cuongth
Sep 23 2015 09:02
@5HT опечатка: exectly -> exactly
Namdak Tonpa
@5HT
Sep 23 2015 09:03
thanks, fixed
fxmy wang
@fxmy
Sep 23 2015 11:13
"processunder" missing space http://5ht.co/ftp.htm
@5HT
Ilya Gorskin
@Revent
Sep 23 2015 11:43
Mnesia(nonode@nohost): WARNING Mnesia is overloaded: {dump_log,write_threshold}
бедалага мнезия :)
fxmy wang
@fxmy
Sep 23 2015 12:52
Did anyone observed that after upload finished, click Upload button again and again will write more data to the file thus corrupting the file?
The file uploaded ended up become bigger than original one
I tried add
wf:info(?MODULE, "writer stopped~n", [])
before
{stop, normal, FTP#ftp{data= <<"">>,block=?stop}, Async#handler{state=FTP#ftp{block=?stop}}};
but didn't saw it printed in console
Namdak Tonpa
@5HT
Sep 23 2015 13:11
should be limiting option in JavaScript
fxmy wang
@fxmy
Sep 23 2015 13:48
maybe we are leaking async writer process?

added self() in

proc(#ftp{sid=Sid,data=Msg, block=Block, filename=Filename}=FTP,#handler{state=#ftp{data=State, offset=Offset}}=Async) ->

and this PID is still alive

fxmy wang
@fxmy
Sep 23 2015 13:57
=INFO REPORT==== 23-Sep-2015::21:45:28 === n2o_file:send {ftp,1,<<"RabbitMQ in Action.pdf">>,3,4,5,9074861,7,<<>>, <<"send">>,262144,11} PID: <0.416.0>
11> erlang:process_info(pid(0,416,0)). [{current_function,{gen_server,loop,6}}, {initial_call,{proc_lib,init_p,5}}, {status,waiting}, {message_queue_len,0}, {messages,[]}, {links,[<0.293.0>]}, {dictionary,[{'$ancestors',[n2o,<0.292.0>]}, {'$initial_call',{n2o_async,init,1}}]}, {trap_exit,false}, {error_handler,error_handler}, {priority,normal}, {group_leader,<0.291.0>}, {total_heap_size,1974}, {heap_size,1598}, {stack_size,9}, {reductions,32399}, {garbage_collection,[{min_bin_vheap_size,46422}, {min_heap_size,233}, {fullsweep_after,65535}, {minor_gcs,9}]}, {suspending,[]}]
Namdak Tonpa
@5HT
Sep 23 2015 14:20
don't worry we will fix everything
just not now
we have seven days till 2.9 deadline
fxmy wang
@fxmy
Sep 23 2015 14:21
great ( ゚∀゚)=b
Alexandr
@alle-ox
Sep 23 2015 15:10
@5HT а в энкодере >>>, что обозначают? что то нигде найти не могу
Alexandr
@alle-ox
Sep 23 2015 16:33
нашел
Namdak Tonpa
@5HT
Sep 23 2015 18:10
@fxmy now you can try
@alle-ox где ты такое увидел?
Alexandr
@alle-ox
Sep 23 2015 19:30
@5HT да это Логический сдвиг вправо. ну в enc98 есть
Namdak Tonpa
@5HT
Sep 23 2015 19:31
а
Alexandr
@alle-ox
Sep 23 2015 19:32
bignum в bert.js почти сделал. так то работает. но нужно почистить.
Namdak Tonpa
@5HT
Sep 23 2015 19:33
скинь сюда код :-)
Alexandr
@alle-ox
Sep 23 2015 19:36
у меня кстати вопрос в краткой записи if else. можно ли произвести два действия.
Namdak Tonpa
@5HT
Sep 23 2015 19:38
var dv,sz=(b==2?sx.getUint16(ix):sx.getInt32((a=ix,ix+=4,a)));
типа такого?
Alexandr
@alle-ox
Sep 23 2015 19:39
да
Andy
@m-2k
Sep 23 2015 19:39
как си
ускорить bert кмк можно если набирать Uint8Array линейно, без рекурсии, таким образом расход памяти и копирование резко сократятся
Namdak Tonpa
@5HT
Sep 23 2015 19:43
сделай :-)
так чтоб тесты не поломались :-)
Andy
@m-2k
Sep 23 2015 19:43
будет больше кода, ты сделаешь реверт )
Namdak Tonpa
@5HT
Sep 23 2015 19:43
если сделать все правильно то не будет сильно больше
Andy
@m-2k
Sep 23 2015 19:43
это только для сложных таплов
Namdak Tonpa
@5HT
Sep 23 2015 19:43
просто с рекурсии на for перепишется
ну и мерять надо будет
Andy
@m-2k
Sep 23 2015 19:44
даунлоад запили
Namdak Tonpa
@5HT
Sep 23 2015 19:44
скажи как
Andy
@m-2k
Sep 23 2015 19:44
хотя бы без чанков
что как
Namdak Tonpa
@5HT
Sep 23 2015 19:44
я запилю хоть завтра
Andy
@m-2k
Sep 23 2015 19:44
?
как на for переписать?
Namdak Tonpa
@5HT
Sep 23 2015 19:45
не
как даунлоад написать :-)
Andy
@m-2k
Sep 23 2015 19:45
а он сильно сложнее?
Namdak Tonpa
@5HT
Sep 23 2015 19:45
а нахуя он если можно по ссылке файл отдавать статикой?
Andy
@m-2k
Sep 23 2015 19:45
как мне ща делать? у меня был relay
а теперь его как-то смержить надо?
статикой не ок
Namdak Tonpa
@5HT
Sep 23 2015 19:46
не тут тоже релей можно сделать
тут счас две команды init, send надо просто recv добавить
и все
в n2o_file
и в ftp.js дописать пару строчек
:-)
Andy
@m-2k
Sep 23 2015 19:47
сделаешь PR? я ща немног не в адеквате
то есть теперь вместо ws.send я должне писать ftp.start?
я к чему, ты б ща оформил просто передачу через #ftp
я б впихнул это в эрлач
Andy
@m-2k
Sep 23 2015 19:53
да по сути нифига и не поменяется )) ws.send(enc(tuple(atom('ftp'),number(1), bin(ftp.$file.name), number(3)
хитрый логинг :smile: wf:info(?MODULE,"stop ~p", [FTP#ftp{data= <<"">>}]),
кавычки не обязательны
дефайны не по канонам, походу писалось совсем в попыхах :smile:
Namdak Tonpa
@5HT
Sep 23 2015 19:58
дефайны писал доктор
это авторский стиль
80 строк три файла, а ты к дефайнам :-)
Andy
@m-2k
Sep 23 2015 19:59
чисто попиздеть, знаешь ли )
а где файл на сервере ловить
Namdak Tonpa
@5HT
Sep 23 2015 20:00
в каталоге по Sid Name
надо вынести Sid в параметры и там из сессии брать из document.cookie
нанофикс в ftp.js
прямо в строчке ws.send(enc(tuple(atom('ftp',...
Andy
@m-2k
Sep 23 2015 20:02
info(#ftp{ - это даунлоадинг?
это его мне надо в релей превратить?
опять
Namdak Tonpa
@5HT
Sep 23 2015 20:03
релей это все что не init send recv
то что сразу перед unknown
это все команды ftp протокола
Andy
@m-2k
Sep 23 2015 20:04
я про n2o_file.erl если чо
тут нет recv
Namdak Tonpa
@5HT
Sep 23 2015 20:11
ну вот нужно написать для даунлоада :-)
Alexandr
@alle-ox
Sep 23 2015 20:25
This message was deleted
Namdak Tonpa
@5HT
Sep 23 2015 20:33
и relay еще
Alexandr
@alle-ox
Sep 23 2015 20:52
https://gist.github.com/alle-ox/d1cc9800ccd8ede70908 пока только SMALL_BIG_EXT. и в энкодере, если не заморачивать с коротким вариантом if..else.
то все работает полность для SMALL_BIG_EXT.сейчас с коротким вариантом не работают отрицательные числа. для поддержки LARGE_BIG_EXT нужно немножко добавить кода в обработку длины массива.
Namdak Tonpa
@5HT
Sep 23 2015 20:53

так а енкодер что для всех строк работает:

function bignum(o) { return {t:110,v:o};}

?

Закомитил только что включение relay протокола:
info(#ftp{status = <<"relay">>}=FTP, Req, State) -> 
         {reply,wf:format(FTP),Req, State};
и recv:
info(#ftp{status = <<"recv">>}=FTP, Req, State) -> 
         {reply,wf:format(FTP),Req, State};
Alexandr
@alle-ox
Sep 23 2015 20:56
ну я по примеру number делал.
Namdak Tonpa
@5HT
Sep 23 2015 20:57
да но там же потенциально может быть 8екзабайт
размер файла
оно на сервере корректно раскодируется
ты тесты запускал
проверял?
numbers большие там нужно сгенерировать и подправить
Alexandr
@alle-ox
Sep 23 2015 21:01
кстати в тесте uni, только для генерации юникода используются.
Namdak Tonpa
@5HT
Sep 23 2015 21:01
там оно недоиспользуется
надо дописать
Alexandr
@alle-ox
Sep 23 2015 21:06
ну я сделал uni4, и добавил в object(D) ->
Namdak Tonpa
@5HT
Sep 23 2015 21:06
работает?
тесты проходят?
Alexandr
@alle-ox
Sep 23 2015 21:13
uni(5) -> rnd(16#800000000000,16#7FFFFFFFFFFFF).
с 12 F работают, если добавить 13, то падает, но это наверно уже область LARGE_BIG_EXT
Alexandr
@alle-ox
Sep 23 2015 21:24
This message was deleted
Alexandr
@alle-ox
Sep 23 2015 21:36
странно, на тех числа, что упал тест спокойно кодируются и декодируются в браузере
Namdak Tonpa
@5HT
Sep 23 2015 21:36
там же надо чтобы символ в символ совпадало
Alexandr
@alle-ox
Sep 23 2015 21:38
в тестах
Namdak Tonpa
@5HT
Sep 23 2015 21:41
ну может в браузере не символ в символ
вот такое будет
в 2.12
Alexandr
@alle-ox
Sep 23 2015 21:52
уменьшил количство итераций, стало заметнее: разница в единицу в первом числе из которого складывается необходимое число
DATA:[131,104,2,110,7,0,87,169,230,144,22,91,65,110,7,0,59,71,146,224,43,162,93]
ENC:[131,104,2,110,7,0,88,169,230,144,22,91,65,110,7,0,60,71,146,224,43,162,93]
буду смотреть
Namdak Tonpa
@5HT
Sep 23 2015 21:53
шаришь :-)