These are chat archives for synrc/n2o

21st
Sep 2015
fxmy wang
@fxmy
Sep 21 2015 03:22

Got js errors in Opera 12.16 Linux Uncaught exception: RangeError: Offset larger than array size

Error thrown at line 6, column 42 in uc(u1, u2) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return a;
called from line 9, column 81 in <anonymous function>(f, t) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 17 in fl(a) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return a.reduce(function(f,t){ return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 81 in <anonymous function>(f, t) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 17 in fl(a) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return a.reduce(function(f,t){ return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 81 in <anonymous function>(f, t) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 17 in fl(a) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return a.reduce(function(f,t){ return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 81 in <anonymous function>(f, t) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 17 in fl(a) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return a.reduce(function(f,t){ return uc(f, t instanceof Uint8Array ? t :
called from line 9, column 81 in <anonymous function>(f, t) in http://127.0.0.1:8000/n2o/protocols/bert.js:
return uc(f, t instanceof Uint8Array ? t :

though no errors on Chrome and Firefox, maybe Opera 12.16 is too old (:3JZ)
Namdak Tonpa
@5HT
Sep 21 2015 09:42
how can I reproduce ?
Namdak Tonpa
@5HT
Sep 21 2015 09:48
I see the error
@m-2k там ошибка в твоем коде явная
блядь сука
как я эту хуйню пропустил
тамже полный бред напиан
а не
непонятная хуйня какая-то
@fxmy is it reproducable on sample?
Namdak Tonpa
@5HT
Sep 21 2015 09:56
aha, I see it
Namdak Tonpa
@5HT
Sep 21 2015 10:09
вот что значит копировать хуйню из стековерфлов
Opera:
>>> fl([[],[1,2],1,[[],2],2,3,4]);
Unhandled Error: Offset larger than array size
Safari/Chrom/Firefox:
> fl([[],[1,2],1,[[],2],2,3,4]);
< [1, 2, 1, 2, 2, 3, 4]
Namdak Tonpa
@5HT
Sep 21 2015 10:33
@fxmy try now! seems I fixed it for Opera, at least sample is working now in 12.16
fxmy wang
@fxmy
Sep 21 2015 10:49
@5HT cool, I will try it next morning~
Namdak Tonpa
@5HT
Sep 21 2015 11:15
thanks for feedback
Vitaly Shutko
@sokal32
Sep 21 2015 14:07
Макс, посмотри катит ли такое в mqs, я добавил для зафейленого handler-а (Mod:Fun) class/term/stacktrace, т.к. лог мне без него не говорит ни о чем synrc/mqs#3
Namdak Tonpa
@5HT
Sep 21 2015 14:08
пойдет
Vitaly Shutko
@sokal32
Sep 21 2015 14:10
отлично
Namdak Tonpa
@5HT
Sep 21 2015 16:58
ftp.js
var ftp = {
    $file: undefined, $reader: undefined, $block: undefined,
    init: function(file, force) { ftp.$file = file; ftp.send('', 'init', 1); },
    start: function() { ftp.$active = true; ftp.send_slice(0, ftp.$block); },
    stop: function() { ftp.$active = false; },
    send: function(data, status, force) {
        ws.send(enc(tuple(atom('ftp'),number(1), bin(ftp.$file.name), number(3),number(4),number(5),number(6),
        number(7),bin(data),bin(status||'send'),number(force || data.byteLength),number(11)))); },
    send_slice: function(start, end) {
        this.$reader = new FileReader();
        this.$reader.onloadend=function(e) {
             var res=e.target, data=e.target.result;
             if(res.readyState==FileReader.DONE&&data.byteLength>0) ftp.send(data); };
        this.$reader.readAsArrayBuffer(ftp.$file.slice(start,end)); } }

$file.do = function(rsp) {
    var offset = rsp.v[6].v, block = rsp.v[10].v, status = rsp.v[9].v;
    switch (status) { case 'init': console.log('Block: '+block); ftp.$block = block; break;
                      case 'send': var x = qi('ftp_status'); if(x) x.innerHTML = offset;
                                   if(block>0 && ftp.$active) ftp.send_slice(offset, offset+block); } }
upload.erl
-module(upload).
-compile(export_all).
-include_lib("nitro/include/nitro.hrl").

-record(upload, {?CTRL_BASE(upload), name, value}).

render_element(#upload{id=Id} = U) ->
    Uid = case Id of undefined -> wf:temp_id(); I -> I end,
    wf:wire(select()),
    wf:wire(browse()),
    wf:wire(start()),
    wf:wire(stop()),
    Upload = #panel  { body = [
             #input  { id   = Uid,         type    = <<"file">>, style = "display:none" },
             #span   { id   = ftp_status,  body    = [] },
             #span   { body = [
             #button { id   = ftp_open,    body = "Browse" },
             #button { id   = ftp_start,   body = "Upload" },
             #button { id   = ftp_stop,    body = "Stop" }
    ] } ] }, wf:render(Upload).

browse() -> "{ var x=qi('ftp_open');  if (x) x.addEventListener('click', function(e) { qi('upload').click(); e.preventDefault(); }); }".
start()  -> "{ var x=qi('ftp_start'); if (x) x.addEventListener('click', function(e) { ftp.start(); }); }".
stop()   -> "{ var x=qi('ftp_stop');  if (x) x.addEventListener('click', function(e) { ftp.stop(); }); }".
select() -> "{ var x=qi('upload');    if (x) x.addEventListener('change',function(e) { ftp.init(this.files[0],1); }); }".
пример в n2o/samples
@doxtop написал, все вопросы по upload контролу и ftp протоколу к нему
Namdak Tonpa
@5HT
Sep 21 2015 17:08
только что залил DVD :-)
Namdak Tonpa
@5HT
Sep 21 2015 17:26
-module(upload).
-compile(export_all).
-include_lib("nitro/include/nitro.hrl").

-record(upload, {?CTRL_BASE(upload), name, value}).

render_element(#upload{id=Id} = U) ->
    Uid = case Id of undefined -> wf:temp_id(); I -> I end,
    bind(ftp_open,  click,  "qi('upload').click(); e.preventDefault();"),
    bind(ftp_start, click,  "ftp.start();"),
    bind(ftp_stop,  click,  "ftp.stop();"),
    bind(nitro:to_atom(Uid), change, "ftp.init(this.files[0],1);"),
    Upload = #panel  { body = [
             #input  { id   = Uid,         type    = <<"file">>, style = "display:none" },
             #span   { id   = ftp_status,  body    = [] },
             #span   { body = [
             #button { id   = ftp_open,    body = "Browse" },
             #button { id   = ftp_start,   body = "Upload" },
             #button { id   = ftp_stop,    body = "Stop" }
    ] } ] }, wf:render(Upload).

bind(Control,Event,Code) ->
    wf:wire(#bind{target=Control,type=Event,postback=Code}).
нова версия
чисто на ftp API контрол работает
а ftp API по ftp протоколу init send
Namdak Tonpa
@5HT
Sep 21 2015 17:54
качает шото не быстро 10МБ/с с включенными логами при чанке 1МБ
nponeccop
@nponeccop
Sep 21 2015 17:57
По лану?
Namdak Tonpa
@5HT
Sep 21 2015 17:58
по lo0
хз будем смотреть
так то вроде все заебись написано
даже @m-2k последние фиксы в bert.js енкодер внес
счас посмотрю по WiFi
Namdak Tonpa
@5HT
Sep 21 2015 18:04
шо вайвай у меня вообще хуйня какая-то
по WiFi 5MB/s
где гигабиты блядь
вот тут можно потестировать заливку
и мой домашний WiFI заодно :-)
Browse — выбрать файл
а потом Upload — огонь
nponeccop
@nponeccop
Sep 21 2015 18:15
Нужен контрольный тест с кали.
Namdak Tonpa
@5HT
Sep 21 2015 18:17
так он же вроде хуй бинарные протоколы скриптитьь умеет
nponeccop
@nponeccop
Sep 21 2015 18:17
Или заливка файла в /dev/nul
Namdak Tonpa
@5HT
Sep 21 2015 18:17
счас заливка просто в gen_server
nponeccop
@nponeccop
Sep 21 2015 18:18
Из браузера ж?
Или?
Namdak Tonpa
@5HT
Sep 21 2015 18:18
самом собой
еще не весь n2o под ноду перевел
не везде еще эту хуйню расставил
try { module.exports = {ftp:ftp}; } catch (e) { }
работают над этим
думаю из ноды не сильно быстрее будет
будет на копейки
хотя посмотрим :-)
тут же я DOM апдейчу в real-time
я вот думаю N2O.js под нодой запускать
или там брать WebSocket клиент и под него писать все?
тогда придется еще какую-то хуйню для ноды писать
а я бы хотел просто new WebSocket юзать в ноде как в браузере
так можно?
Namdak Tonpa
@5HT
Sep 21 2015 18:43
самое класное что при 10MB/s можно спокойно чатится на странице
в этом же стриме