These are chat archives for synrc/n2o

9th
Sep 2015
Namdak Tonpa
@5HT
Sep 09 2015 00:25
function dstr(b,ix,s) {
    var sz = b==2?s.getUint16(ix):s.getUint32(ix),r=[]; ix+=b;
    return { value: utf8_dec(new DataView(s.buffer.slice(ix,ix+sz))), size: ix+sz }; };
function drun(b,ix,s) {
    var sz = b==1?s.getUint8(ix):s.getUint32(ix),r=[]; ix+=b;
    for (var i=0;i<sz;i++) { e=din(0,ix,s); r.push(e); ix=e.size; }
    if (b==4 && s.getUint8(ix++) != 106) throw ("NIL");
    return { value: r, size: ix }; };
function din(b,ix,s) {
    var code=s.getUint8(ix++); var r;
    var x=(code > 96 && code < 120)?$tab[code-97]:(code == 131?['BERT',131,decode,0]:['U',0,dnop,0]);
    r=x[2](x[3],ix,s); r.type=x[0];
    console.log("code " + code + " return: "+r.type + " " + r.value);
    return r; }
хардкорчик :-)
Andy
@m-2k
Sep 09 2015 00:25
ПСИХ БЛЯТЬ
Namdak Tonpa
@5HT
Sep 09 2015 00:26
я свел все к трем функциям :-)
и таблице одной
var $tab=[['INT',97,dint,1],['LINT',98,dint,4],['FLOA',99,dflo,31],['ATOM',100,dstr,2],
          ['REF',101,dnop,0],['PORT',102,dnop,0],['PID',103,dnop,0],['TUP',104,drun,1],
          ['LTUP',105,drun,4],['NIL',106,dnil,4],['STR',107,dstr,2],['LIST',108,drun,4],
          ['BIN',109,dstr,4],['BIG',110,dbig,1],['LBIG',111,dbig,4],['NFUN',112,dnop,0],
          ['EXP',113,dnop,0],['NREF',114,dnop,0],['SATO',115,dnop,0],['MAP',116,dnop,0],
          ['FUN',117,dnop,0],['AU8',118,dnop,0],['SAU8',119,dnop,0]];
Andy
@m-2k
Sep 09 2015 00:26
Ебать мой хуй
Namdak Tonpa
@5HT
Sep 09 2015 00:27
ATOM STRING BINARY у меня парсается одной функцийей dstr
TUPLE LIST тоже одной drun
:-)
Andy
@m-2k
Sep 09 2015 00:28
уже срефакторить успел сучка
энкодер написал?
Namdak Tonpa
@5HT
Sep 09 2015 00:28
неа
только декодером занимаюсь
Andy
@m-2k
Sep 09 2015 00:28
и я
Namdak Tonpa
@5HT
Sep 09 2015 00:28
уже глаза вылазят спать хочу пиздец
Andy
@m-2k
Sep 09 2015 00:29
)))
еще бы, от такого форматирования
Namdak Tonpa
@5HT
Sep 09 2015 00:53
все у меня уже все работает
только с utf8 проблемы
Andy
@m-2k
Sep 09 2015 00:53
ну молодец чо
Namdak Tonpa
@5HT
Sep 09 2015 00:53
но со старым енкодером
там тоже надо нахуй все переписать
Andy
@m-2k
Sep 09 2015 00:53
у меня нихуя не работает :smile:
Namdak Tonpa
@5HT
Sep 09 2015 01:14
может ну его нахуй эти BIGINT ?
все равно оно в N2O не юзается
Andy
@m-2k
Sep 09 2015 01:14
а чо
долго писать?
Namdak Tonpa
@5HT
Sep 09 2015 01:14
для байтоебов запилим потом полный BERT.js
а счас типа Light версия, ок?
та блядь я уже ебанулся тут
все у меня теперь даже utf8 уже через DataView работает
осталось только енкодер красиво епреписать
вот это минимальный декодер для N2O
function decode(b,ix,d) { var s = new DataView(d);
    if (s.getUint8(ix++)!==131) throw("BERT"); return din(0,ix,s); };
function din(b,ix,s) { var code=s.getUint8(ix++); var r;
    var x=(code > 96 && code < 120)?$tab[code-97]:['U',0,dnop,0];
    r=x[2](x[3],ix,s); r.type=x[0]; return r; }
function dflo(b,ix,s) { return { value: [], size: ix+b}; }
function dint(b,ix,s) { return { value:b==1?s.getUint8(ix):s.getInt32(ix), size:ix+b }; }
function dnil(b,ix,s) { return { value:[],size:ix+1}; }
function dnop(b,ix,s) { return { }; }
function dstr(b,ix,s) {
    var sz = b==2?s.getUint16(ix):s.getUint32(ix),r=[]; ix+=b;
    return { value: utf8_dec(new DataView(s.buffer.slice(ix,ix+sz))), size: ix+sz }; };
function drun(b,ix,s) {
    var sz = b==1?s.getUint8(ix):s.getUint32(ix),r=[]; ix+=b;
    for (var i=0;i<sz;i++) { e=din(0,ix,s); r.push(e); ix=e.size; }
    if (b==4 && s.getUint8(ix++) != 106) throw ("NIL");
    return { value: r, size: ix }; };
меньше хуй кто напишет
Andy
@m-2k
Sep 09 2015 01:22
Снимок экрана 2015-09-09 в 4.21.13.png
у меня пока так :worried:
чот у тебя реально лайток
utf8_dec где?
Namdak Tonpa
@5HT
Sep 09 2015 01:25
ну он такой же как utf8_decode
я даже думаю их объединить
function utf8_dec(utftext) {
    var i = c = c1 = c2 = 0, string="";
    while ( i < utftext.byteLength ) {
        c = utftext.getUint8(i);
        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        } else if ((c > 191) && (c < 224)) {
            c2 = utftext.getUint8(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = utftext.getUint8(i+1);
            c3 = utftext.getUint8(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return string;
}
Andy
@m-2k
Sep 09 2015 01:26
да, нашел уже
скинь мне байты уникод строки
utftext то есть
Namdak Tonpa
@5HT
Sep 09 2015 01:27
> rp(term_to_binary(<<"байтойобство"/utf8>>)).
<<131,109,0,0,0,24,208,177,208,176,208,185,209,130,208,
  190,208,185,208,190,208,177,209,129,209,130,208,178,208,
  190>>
Screen Shot 2015-09-09 at 4.28.09 AM.png
все я иду спать
мерять нет времени, уверен что у меня все работает заебись
таблица конечно медленная, switch будет быстрее работать
Andy
@m-2k
Sep 09 2015 01:30
var decoder = new TextDecoder(encoding);
var decodedString = decoder.decode(dataView);
так не проще?
Namdak Tonpa
@5HT
Sep 09 2015 01:30
но это мне похуй
TextDecoder в Safari нет
оно только в Mozilla и Google
Andy
@m-2k
Sep 09 2015 01:31
говно
Namdak Tonpa
@5HT
Sep 09 2015 01:31
отож
Andy
@m-2k
Sep 09 2015 01:32

String.fromCharCode.apply(null,a)
"ƒmбайтойобство"

можно еще так, лол

Namdak Tonpa
@5HT
Sep 09 2015 01:32
как появится сразу выбросим utf8_dec
Andy
@m-2k
Sep 09 2015 01:34
ему надо uint16array так то
Namdak Tonpa
@5HT
Sep 09 2015 01:34
кому ему?
Andy
@m-2k
Sep 09 2015 01:34
String.fromCharCode.apply(
Namdak Tonpa
@5HT
Sep 09 2015 01:35
где я его возьму :-)
ладно я побежал спать пушо уже пиздец
utf8_toByteArray напиши по-человечески
и энкодер ебани симметричный с моим декодером :-)
если хочешь
а лучше спать иди!
Andy
@m-2k
Sep 09 2015 01:37
я на работе )
Namdak Tonpa
@5HT
Sep 09 2015 01:37
ты шо охранник? :-)
Andy
@m-2k
Sep 09 2015 01:37
а то
Andy
@m-2k
Sep 09 2015 03:14
Yay! запилил декодер
надо еще подучить всякие bind и apply
а то это совсем для наркоманов
Andy
@m-2k
Sep 09 2015 03:39
а какие проблемы с float?
 term_to_binary(6.086).
<<131,70,64,24,88,16,98,77,210,242>>
(new DataView(new Uint8Array([64,24,88,16,98,77,210,242]).buffer)).getFloat64(0)
6.086
Andy
@m-2k
Sep 09 2015 03:49
это какая то хуйня мне кажется:
function de_big(S, Count) {
    var Size, Value;
    Size = ltoi(S, Count);
    S = S.substring(Count);
    Value = ltobi(S, Size);
    return { value : Value, rest: S.substring(Size + 1) }; };
а, не, норм там логики в ltobi
Andy
@m-2k
Sep 09 2015 04:28
@5HT
if (b==4 && s.getUint8(ix++) != 106) throw ("NIL");
для LTUP будет ошибка
Andy
@m-2k
Sep 09 2015 04:48
короче у меня вот так теперь обащение к эл-там
function isTUPLE(x, num, name) {
    return (typeof x == 'object' && x.length === num && x[0] === name);
}
оч удобно, списки - это списки, таплы - это тоже списки
без value и type ибо нахер нинад
var erlang = new Bert().dec(reader.result);
без глобальных переменных
function Bert() {
    this.map = {
        106: [this.nil,0],   // NIL_EXT
        115: [this.atom,1],  // ATOM_EXT
        100: [this.atom,2],  // SMALL_ATOM_EXT
        104: [this.tuple,1], // SMALL_TUPLE_EXT
        105: [this.tuple,4], // LARGE_TUPLE_EXT
        107: [this.string,2],// STRING_EXT
        108: [this.list,4],  // LIST_EXT
        97:  [this.num,1],   // SMALL_INTEGER_EXT
        98:  [this.num,4],   // INTEGER_EXT
        70:  [this.num,8],   // NEW_FLOAT_EXT
        109: [this.binary,4] // BINARY_EXT
    };
};

Bert.prototype.str = function(length) { return String.fromCharCode.apply(null,new Uint8Array(this.buf(length))); };
Bert.prototype.buf = function(length) { return this.arrayBuffer.slice(this.offset, this.offset+=length); };
Bert.prototype.num = function(length) {
    var val;
    switch(length) {
        case 1: val=this.dataView.getUint8(this.offset); break;
        case 2: val=this.dataView.getUint16(this.offset); break;
        case 4: val=this.dataView.getUint32(this.offset); break;
        case 8: val=this.dataView.getFloat64(this.offset); break;
    }
    this.offset+=length; return val;
};


Bert.prototype.dec = function(arrayBuffer) {
    this.arrayBuffer = arrayBuffer;
    this.dataView = new DataView(arrayBuffer);
    this.offset = 0;
    if (this.num(1) !== 131) { throw ("Not a valid BERT."); };
    var erlang = this.de_inner(null);
    if (this.offset === this.arrayBuffer.byteLength) { return erlang; }
    throw ("Invalid BERT.");
};

Bert.prototype.de_inner = function (type) {
    type = type || this.num(1);
    var fun = this.map[type];
    if(fun) return fun[0].bind(this)(fun[1]);
    throw("Unexpected BERT type: " + type);
};
Bert.prototype.nil = function() { return []; };
Bert.prototype.binary = function(len) { return this.buf(this.num(len)); };
Bert.prototype.atom = function(len) {
    var value = this.str(this.num(len));
    return value === "true" ? true : value === "false" ? false : value;
};
Bert.prototype.tuple = function(len) {
    var list = [], arity = this.num(len);
    for (var i = 0; i < arity; i++) { list.push(this.de_inner(null)); }
    return list;
};
Bert.prototype.string = function(len) { return this.str(this.num(len)); };
Bert.prototype.list = function(len) {
    var list = [],length = this.num(len);
    for (var i = 0; i < length; i++) {
        list.push(this.de_inner(null));
    };
    var tail = this.num(1);
    if (tail !== 106) {
        list.push(this.de_inner(tail));
        console.log('Warning! Improper list without NIL_EXT');
    };
    return list;
};
Ilya Gorskin
@Revent
Sep 09 2015 06:32
это волшебство в чистом виде
Yuriy Al. Shirokov
@yashrk
Sep 09 2015 07:13
В книжке опечатка на странице 20: "nitroo" вместо "nitro"
Namdak Tonpa
@5HT
Sep 09 2015 07:36
ну @m-2k, у меня же меньше декодер :-)
у тебя тоже в принципе все хорошо
счас зааплаю твои фиксы
Bert.prototype.tuple = function(len) {
вот это хуйня я же говорил что по стандартам N2O мы пишем только function definition
Namdak Tonpa
@5HT
Sep 09 2015 07:43
ничего плохого в глобальных переменных нет, когда у тебя JS бибиотека занимает 221 LOC
LTUP можно и не поддерживать
в N2O приложениях нет таплов арности больше чем 256
Namdak Tonpa
@5HT
Sep 09 2015 07:56
@yashrk спасибо!
bronzeboyvn
@cuongth
Sep 09 2015 08:04
какая книга про N2O ?
Namdak Tonpa
@5HT
Sep 09 2015 08:17
@cuongth this one: http://synrc.com/apps/n2o/
bronzeboyvn
@cuongth
Sep 09 2015 08:47
@5HT thanks
Namdak Tonpa
@5HT
Sep 09 2015 08:54
@m-2k так а у тебя utf8_dec нет
надо теперь наши два варинта смержить как-то
у тебя все хорошо, проблема только что не по правилам n2o написано а по правилам джаваскриптеров
и что кода много :-)
Namdak Tonpa
@5HT
Sep 09 2015 09:34
$ uglifyjs *.js protocols/**.js -c -m --mangle-props -o 1.js
$ gzip 1.js
$ $ ls -l 1.js.gz | awk '{print $5}'
3579
we need to fit TCP MSS!
bronzeboyvn
@cuongth
Sep 09 2015 10:22
I have a question on Erlang:
Having unread messages in your mailbox will consume memory and slow down the process when new messages are received, as the littering messages need to be traversed before new ones will be pattern matched. Not only that, but sending a message to a process with large number of unread messages will slow down sender, because the send operation will consume more reductions.
of course, it easy to understand first sentence. But I don't understand the second
why sender will be slow down ?
Namdak Tonpa
@5HT
Sep 09 2015 10:51
need to dig into beam code for proper answer
Namdak Tonpa
@5HT
Sep 09 2015 10:58
function dec(d)  { var sx=new DataView(d),ix=0,tab=
  [['INTE',dint,1],['LINT',dint,4],['FLOA',dflo,0],['ATOM',dstr,2],
   ['REFE',dnil,0],['PORT',dnil,0],['PID0',dnil,0],['TUPL',drun,1],
   ['TUPL',drun,4],['NIL0',dnil,1],['STRI',dstr,2],['LIST',drun,4],
   ['BINA',dstr,4],['BIGI',dnil,0],['LBIG',dnil,0],['NFUN',dnil,0],
   ['EXPO',dnil,0],['NREF',dnil,0],['SATO',dnil,0],['MAPS',dnil,0],
   ['FUNC',dnil,0],['AUT8',dnil,0],['SAU8',dnil,0]];
function din()   { var c=sx.getUint8(ix++),x=(c>96&&c<120)?tab[c-97]:['U',0,dnil,0];
                   return {type:x[0],value:x[1](x[2])}; };
function dflo(b) { return []; };
function dnil(b) { return []; };
function dint(b) { return b==1?sx.getUint8(ix++):sx.getInt32((a=ix,ix+=4,a)); };
function dstr(b) { var sz= b==2?sx.getUint16(ix):sx.getUint32(ix),r=[]; ix+=b;
                   return utf8_dec(new DataView(sx.buffer.slice(ix,ix+=sz))); };
function drun(b) { var sz= b==1?sx.getUint8(ix):sx.getUint32(ix),r=[]; ix+=b;
                   for (var i=0;i<sz;i++)r.push(din());if(b==4)ix++; return r; };
                   if (sx.getUint8(ix++)!==131) throw("BERT"); return din(); };
no size, JSON.stringify(dec(new Uint8Array([131,104,3,97,1,108,0,0,0,3,98,0,0,1,48,98,0,0,1,45,98,0,0,1,148,106,97,5]).buffer)); will produce:
"{"type":"TUPL","value":[{"type":"INTE","value":1},{"type":"LIST","value":
[{"type":"LINT","value":304},{"type":"LINT","value":301},
{"type":"LINT","value":404}]},{"type":"INTE","value":5}]}"
Namdak Tonpa
@5HT
Sep 09 2015 11:03
с 70 и 77 придется еще один if написать
зато никаких констант в коде и глобальных переменных
можно мои четырехбайтовые имена поменять на циферки берта
все равно я уже их помню наизусть :-)
Namdak Tonpa
@5HT
Sep 09 2015 11:19
вот так типа:
dvp = DataView.prototype;
dvp.gu=dvp.getUint8;dvp.gu2=dvp.getUint16;
dvp.gi4=dvp.getInt32;dvp.gu4=dvp.getUint32;
function dec(d)  { var sx=new DataView(d),ix=0,t;
function din()   { var c=sx.gu(ix++),x=(c>96&&c<120)?t[c-97]:t[23];
                   return {t:x[0],v:x[1](x[2])};};
function nop(b) { return []; };
function int(b) { return b==1?sx.gu(ix++):sx.gi4((a=ix,ix+=4,a)); };
function str(b) { var sz=b==2?sx.gu2(ix):sx.gi4(ix);ix+=b;
                   return utf8_dec(new DataView(sx.buffer.slice(ix,ix+=sz))); };
function run(b) { var sz=b==1?sx.gu(ix):sx.gu4(ix),r=[]; ix+=b;
                   for (var i=0;i<sz;i++)r.push(din());if(b==4)ix++; return r; };
  t=[[97,int,1],[ 98,int,4],[ 99,nop,0],[100,str,2],
    [101,nop,0],[102,nop,0],[103,nop,0],[104,run,1],
    [105,run,4],[106,nop,4],[107,str,2],[108,run,4],
    [109,str,4],[110,nop,1],[111,nop,4],[112,nop,0],
    [113,nop,0],[114,nop,0],[115,nop,0],[116,nop,0],
    [117,nop,0],[118,nop,0],[119,nop,0],[  0,nop,0]];
                  if (sx.gu(ix++)!==131) throw("BERT"); return din(); };
Namdak Tonpa
@5HT
Sep 09 2015 11:26
> JSON.stringify(dec(new Uint8Array([131,104,3,97,1,108,0,0,0,3,98,0,0,1,
48,98,0,0,1,45,98,0,0,1,148,106,97,5]).buffer));
< "{"t":104,"v":[{"t":97,"v":1},{"t":108,"v":[{"t":98,"v":304},
{"t":98,"v":301},{"t":98,"v":404}]},{"t":97,"v":5}]}"
Namdak Tonpa
@5HT
Sep 09 2015 11:47
неплохо, bert decoder in 15 LOC
Namdak Tonpa
@5HT
Sep 09 2015 11:59
переписал на switch чтобы предсказания ветвлений работали на интеле
function dec(d) { sx=new DataView(d);ix=0;
                  if(sx.gu(ix++)!==131)throw("BERT?"); return din();};
function nop(b) { return []; };
function din()  { var c=sx.gu(ix++),x; switch(c) { case 97: x=[int,1];break;
                  case 98: x=[int,4];break;  case 100: x=[str,2];break;
                  case 104: x=[run,1];break; case 107: x=[str,2];break;
                  case 108: x=[run,4];break; case 109: x=[str,4];break;
                  default: x=[nop,0]; } return {t:c,v:x[0](x[1])};};
function int(b) { return b==1?sx.gu(ix++):sx.gi4((a=ix,ix+=4,a)); };
function str(b) { var sz=b==2?sx.gu2(ix):sx.gi4(ix);ix+=b;
                  return utf8_dec(new DataView(sx.buffer.slice(ix,ix+=sz))); };
function run(b) { var sz=b==1?sx.gu(ix):sx.gu4(ix),r=[]; ix+=b;
                  for (var i=0;i<sz;i++)r.push(din());if(b==4)ix++; return r; };
Andy
@m-2k
Sep 09 2015 15:57
Ты жмешь код, нечитаемо
Namdak Tonpa
@5HT
Sep 09 2015 15:57
берт енкодеры не нужно читать
их нужно сделать маленькими и быстрыми
Andy
@m-2k
Sep 09 2015 15:58
Есть же минимайзер, он сделает код уродским за тебя
Namdak Tonpa
@5HT
Sep 09 2015 15:58
не сделает
из твоего такой не сделает
Andy
@m-2k
Sep 09 2015 15:58
В одну строку
Namdak Tonpa
@5HT
Sep 09 2015 15:59
ну делай
я же говорил можешь пользоваться любым минимайзером
победит у кого меньше кода
:-)
я енкодер написал базовый
Andy
@m-2k
Sep 09 2015 15:59
Я сплю вообще, мне похуй
Namdak Tonpa
@5HT
Sep 09 2015 16:00
function atom(o)   { return {t:100,v:utf8_toByteArray(o)}; }
function bin(o)    { return {t:109,v:utf8_toByteArray(o)}; }
function tuple()   { return {t:104,v:arguments}; }
function enc(o)    { return new Blob(flat([131,ein(o)]));  }
function ein(o)    { return eval('en_'+o.t)(o); }
function en_98(o)  { return [98,o.v>>>24,o.v>>>16&255,o.v>>>8&255,o.v&255]; }
function en_100(o) { return [100,o.v.length>>>8,o.v.length&255,o.v];}
function en_104(o) { return [104,o.v.length,o.v.map(function(x){return ein(x);})]; }
function en_109(o) { var l=o.v.length;return[108,l>>>24,l>>>16&255,l>>>8&255,l&255,o.v]; }
function en_108(o) { var l=o.v.length;return[108,l>>>24,l>>>16&255,l>>>8&255,l&255,
                     o.v.map(function(x){return ein(x);})]; }
энкодер и декодер теперь симметричные
весь bert.js теперь занимает 3КБ
Andy
@m-2k
Sep 09 2015 16:01
Что за флат ещё
New blob вроде старое говно, надо юзать arraybuffer
Namdak Tonpa
@5HT
Sep 09 2015 16:02
какое старое
надо в WebSocket канал послать блоб
как его еще взять
Andy
@m-2k
Sep 09 2015 16:02
Blob это и есть arraybuffer
L>>>24 это че?
DataView
SetUint16 же есть
Andy
@m-2k
Sep 09 2015 16:09
И зачем возвращать json? Надо просто делать .set(start,end,value) склеивая все в массив байтов
Andy
@m-2k
Sep 09 2015 17:28
@5HT выложили код на гист, я его пофиксаю и вкомитим
Без prototype, так и быть
😀
Namdak Tonpa
@5HT
Sep 09 2015 17:35
как зачем, для симметричности функций
@m-2k мой код уже в master давно :-)
или ты про encoder?
надо резать bert.js и client.js
из-за того что все бинарные форматы читатся могут только через колбек
нужно крутить протоколы в цикле этого бинарного
dec(enc(tuple())) == tuple() должно быть
и enc(dec([131,106])) == [131,106]
думаю может перенести этот цикл протоколов в n2o.js
а в bert.js остаить только encoder/decoder
и client.js переименовать в json.js
Namdak Tonpa
@5HT
Sep 09 2015 17:40
хз не хочется потом по всем примерам и проектам шаблоны менять
надо имена наверно оставлять эти
json нужен потому что я хочу сделать это универсальным представлением
внутри n2o
чтобы IO EVAL DATA отформатированный на сервере json форматтером
приезжал в таком JSON виде который бы не отличался от dec(Bert)
это нужно для того чтобы протоколльные хендлеры работали с любыми форматтерами
а то сейчас протокольные хендлеры берта работают только с bert и прошиты в bert.js
а должно быть ftp.js io.js bin.js
эх
двадцать раз уже всё это расказывал :-)
и тесты нужны
в которых написано будет что bert.js не полностью протокол поддерживает bert
а только то что необходимо для n2o
Namdak Tonpa
@5HT
Sep 09 2015 17:46
кароче следи за моими руками
Andy
@m-2k
Sep 09 2015 17:56
Слежу как Хатико
Namdak Tonpa
@5HT
Sep 09 2015 17:56
так шо ты загавнил мой енкодер?
Andy
@m-2k
Sep 09 2015 17:57
Ща с лаптопа перелогинюсь...
так
давай перепишем по-человечески как ты хочешь чтобы как хошь отсылалось и во что хошь конвертилось
why not
перепишешь свои проекты, прогресс главное
Andy
@m-2k
Sep 09 2015 18:04
@5HT напиши в гитхаб что n2o only for R18+
Namdak Tonpa
@5HT
Sep 09 2015 18:04
там написано
To run N2O websites you need to install Erlang version 18 or higher. N2O works on Windows, Mac and Linux.
Andy
@m-2k
Sep 09 2015 18:04
должно быть тут https://github.com/synrc/n2o#erlang-version
Namdak Tonpa
@5HT
Sep 09 2015 18:05
так я пофиксал твой unique_integer
Andy
@m-2k
Sep 09 2015 18:05
а там можно убрать кмк
Namdak Tonpa
@5HT
Sep 09 2015 18:05
фолбек сделал в старые эрланге
реально счас N2O надо 17
и то только из-за application:get_env/3
и все
если пофиксать это то и на 15 и может даже на 14 будет работать
но я специально хочу подтягивать чтобы на послдений минус один только работало
Andy
@m-2k
Sep 09 2015 18:06
говнокод
:smile:
а нет в эрланге #ifdef по версиям?
Namdak Tonpa
@5HT
Sep 09 2015 18:07
даже если есть я этого не хочу
Andy
@m-2k
Sep 09 2015 18:07
ты мерял сколько try -catch работает?
Namdak Tonpa
@5HT
Sep 09 2015 18:07
вроде быстро
Andy
@m-2k
Sep 09 2015 18:07
я бы не был так уверен
Namdak Tonpa
@5HT
Sep 09 2015 18:07
ладно уберу
напиши как ты хочешь енкодер написать
Andy
@m-2k
Sep 09 2015 18:07
гггг
Namdak Tonpa
@5HT
Sep 09 2015 18:07
а то ты шото меня стреманул
Andy
@m-2k
Sep 09 2015 18:08
потому что мой код можно js-ёбам показать а твой нет :smile:
потому что он неподдерживаемый
Namdak Tonpa
@5HT
Sep 09 2015 18:09
все он поддерживаемый
я его поддерживаю и отвечаю за него
Andy
@m-2k
Sep 09 2015 18:09
базара нет, братиш ))
хитрый какой
Andy
@m-2k
Sep 09 2015 18:18
@5HT все таки переписал на arraybuffer?
function str(b) { var sz=b==2?sx.gu2(ix):sx.gi4(ix);ix+=b;
                  return utf8_dec(new DataView(sx.buffer.slice(ix,ix+=sz))); };
Namdak Tonpa
@5HT
Sep 09 2015 18:19
тут изначально так было
я немного у тебя поворовал идей
Andy
@m-2k
Sep 09 2015 18:20
а чо switch не захотел чтобы ix++ каждый раз не писать
dvp.gu=dvp.getUint8;dvp.gu2=dvp.getUint16;
Namdak Tonpa
@5HT
Sep 09 2015 18:20
так а ix же глобальный какая разница
Andy
@m-2k
Sep 09 2015 18:20
то везде писать а то в одном месте
Bert.prototype.num = function(length) {
    var val;
    switch(length) {
        case 1: val=this.dataView.getUint8(this.offset); break;
        case 2: val=this.dataView.getUint16(this.offset); break;
        case 4: val=this.dataView.getUint32(this.offset); break;
        case 8: val=this.dataView.getFloat64(this.offset); break;
    }
    this.offset+=length; return val;
};
Namdak Tonpa
@5HT
Sep 09 2015 18:21
это красиво
но слишком большое
Andy
@m-2k
Sep 09 2015 18:21
ну блядь так сократи, ты ж сократил
Namdak Tonpa
@5HT
Sep 09 2015 18:21
я пытался
Andy
@m-2k
Sep 09 2015 18:21
я не говорю что прям так надо )
Namdak Tonpa
@5HT
Sep 09 2015 18:22
я даже смотри шо ебанул:
 while(i--) r[sz-i-1]=din();
чтобы без push богомерзких
там этот код пиздец быстрый, я гарантирую, можешь померять :-)
Andy
@m-2k
Sep 09 2015 18:23
я знаю :smile:
r[] - самое быстрое по доступу
но только среди этих имен переменных хуй чо разберешь
Namdak Tonpa
@5HT
Sep 09 2015 18:24
да можно подумаь старый берт кто-то разбирал
жрали все говно написаное на substring и нормально было :-)
кароче чем тебе flat масивов не нравится?
напиши короче енкодер
Andy
@m-2k
Sep 09 2015 18:26
ну а где сама flat()
Namdak Tonpa
@5HT
Sep 09 2015 18:26
шо сам не можешь написать ? :-)
Andy
@m-2k
Sep 09 2015 18:26
запили норм код с нормальными именами переменных и форматированием на гист
Namdak Tonpa
@5HT
Sep 09 2015 18:26
function flat(a) { 
     return a.reduce(function(f,t){
                return f.concat(Array.isArray(t)?flat(t):t);},[]); }
Andy
@m-2k
Sep 09 2015 18:26
так и думал
это же говно, разве нет? )
Namdak Tonpa
@5HT
Sep 09 2015 18:27
идиоматический flat на джаваскрипте
в ES6 будет встроенный
Andy
@m-2k
Sep 09 2015 18:27
так то да, но после while(i--) как то не оч
Namdak Tonpa
@5HT
Sep 09 2015 18:28
ну я тут согласен
но пока я хочу что-то рабочее получить
Andy
@m-2k
Sep 09 2015 18:28
так ты код запилишь или я забиваю хуй?
Namdak Tonpa
@5HT
Sep 09 2015 18:28
и унифицировать json этот {t,v}
счас
так у меня тут все развалено
Andy
@m-2k
Sep 09 2015 18:28
ток с переменными и разметокй
Namdak Tonpa
@5HT
Sep 09 2015 18:28
код нихуя не рабочий
Andy
@m-2k
Sep 09 2015 18:29
ты декодер залей
Namdak Tonpa
@5HT
Sep 09 2015 18:29
так он в мастере
вот тут все вместе
Andy
@m-2k
Sep 09 2015 18:30
а почему для бинаря отрабатывает
function str(b) { var sz=b==2?sx.gu2(ix):sx.gi4(ix);ix+=b;
return utf8_dec(new DataView(sx.buffer.slice(ix,ix+=sz))); };
Namdak Tonpa
@5HT
Sep 09 2015 18:31
удобно
Andy
@m-2k
Sep 09 2015 18:31
мне нужен arraybuffer или uint8array
картинки же
Namdak Tonpa
@5HT
Sep 09 2015 18:32
utf8dec это unit8array
а ну это надо зафиксать ты прав
Andy
@m-2k
Sep 09 2015 18:32
переименуй txt в erl
Namdak Tonpa
@5HT
Sep 09 2015 18:32
переименовал
utf8_dec не всегда надо вызывать ты прав
я там писал для этого ?_: но потом форснул пуш так :-)
Andy
@m-2k
Sep 09 2015 18:36
так и чего там все работает через arraybuffer или uint8array?
Namdak Tonpa
@5HT
Sep 09 2015 18:36
все ж через DataView и аксесоры getUint8
протри глаза
Andy
@m-2k
Sep 09 2015 18:37
ты ж по другому хотел
Namdak Tonpa
@5HT
Sep 09 2015 18:37
как? я хотел самым нативным способом
DataView это самое нативное парсанье
Andy
@m-2k
Sep 09 2015 18:37
хотя да getuint только для view есть
Namdak Tonpa
@5HT
Sep 09 2015 18:38
быстрее и круче быть уже не может
Andy
@m-2k
Sep 09 2015 18:38
ну я ж говорил
return {t:c,v:x[0](x[1])};} - тогда это осталось убрать и ок
Namdak Tonpa
@5HT
Sep 09 2015 18:38
я даже избивлся от таблицы в угоду switch чтобы ветвления предсказывались на интелах
это я не уберу потому что я хочу это сделать универсальным форматом для всех форматтеров
чтобы протоколы ftp.js bin.js работали с этим {t,v} джсоном
Andy
@m-2k
Sep 09 2015 18:39
json.js также отдает результат?
Namdak Tonpa
@5HT
Sep 09 2015 18:39
json такой же будет отдавать {t,v}
Andy
@m-2k
Sep 09 2015 18:39
тогда хорошо
Namdak Tonpa
@5HT
Sep 09 2015 18:40
сейчас он отдавет {name:io,eval:хуйня,data:null}
а будет {t:ATOM,v:{t:TUPLE,....
Andy
@m-2k
Sep 09 2015 18:40
а можно сделать расширение Number например?
чтобы у него .type появился
Namdak Tonpa
@5HT
Sep 09 2015 18:40
можно
я так и хочу сделать
Andy
@m-2k
Sep 09 2015 18:40
тогда это говно {} не надо
v - будет сам объект
Namdak Tonpa
@5HT
Sep 09 2015 18:40
даже не так
client.js будет отдавать {name:io,eval:хуйня,data:null}
а потом эта хуйня будет прокручиваться через еще один reduce
Andy
@m-2k
Sep 09 2015 18:41
и чекаться name
Namdak Tonpa
@5HT
Sep 09 2015 18:41
и попадать в протокол как {t,v} транспорт
Andy
@m-2k
Sep 09 2015 18:41
потом в коллбэк
Namdak Tonpa
@5HT
Sep 09 2015 18:42
я вообще хочу клинет на WAMP форматер посадить
[io,Eval,Data]
ну кароче
Andy
@m-2k
Sep 09 2015 18:42
у меня ща так и есть
без v и t
Namdak Tonpa
@5HT
Sep 09 2015 18:42
да у тебя так и есть но оно не там где нужно :)
ты постирал ифнормацию о типах
Andy
@m-2k
Sep 09 2015 18:43
да
я написал в консоли 1.type = 222, у меня не получилось и я забил хуй
Number.prototype.type = function() { return 333; };
Number(4).type
а так работает
НАДО ТАК ЗАЕБАШИТЬ
Namdak Tonpa
@5HT
Sep 09 2015 18:46
ну просто когда формируешь пакет ты же явн указываешь
я хочу чтобы нельзя было так делать tuple(atom('client'),1)
а только так tuple(atom('client'),number(1))
Andy
@m-2k
Sep 09 2015 18:47
почему
для деревянности?
Namdak Tonpa
@5HT
Sep 09 2015 18:47
так енкодер станет короче
Andy
@m-2k
Sep 09 2015 18:47
ага
так ты сможешь переписать {t:x,v:a} в a.t = type?
Namdak Tonpa
@5HT
Sep 09 2015 18:49
так там и так type
раньше там была строка
потом я сразу туда бертовскую константу ебанул
так еще все охуеннее стало :-)
а зачем переписывать ?
{t:x,v:a} в a.t = type? это же одно и тоже
внутри JSON
{t:x} и a.t = x это же одно и тоже
Andy
@m-2k
Sep 09 2015 18:50
в каком виде json выдает?
Namdak Tonpa
@5HT
Sep 09 2015 18:51
счас
Andy
@m-2k
Sep 09 2015 18:51
{a:a b:b}?
Namdak Tonpa
@5HT
Sep 09 2015 18:51
{t:x,v:y}
какой нахуй {a,b} ?
t — type
v — value
type — бертовская константа
два поля только
Andy
@m-2k
Sep 09 2015 18:55
если это стандарт json - тогда фэйл
Namdak Tonpa
@5HT
Sep 09 2015 18:55
непонял
что это?
{} — это json
[] — это тоже
это все структуры V8
они супербыстрые в V8
точно также как в эрланге таплы и списки
в чем твоя проблема?
Andy
@m-2k
Sep 09 2015 18:56
в том что писать x.v[0][6].v - зашквар )
но если без этого никак - ладно
Namdak Tonpa
@5HT
Sep 09 2015 18:57
придумаю другой универсальный формат для JSON и BERT протоколов
я с радостью рассмотрю любые драфты
Andy
@m-2k
Sep 09 2015 18:57
я ж говорю t прятать в сам объект
Namdak Tonpa
@5HT
Sep 09 2015 18:57
это и есть сам объект блядь
Andy
@m-2k
Sep 09 2015 18:57
нет
Namdak Tonpa
@5HT
Sep 09 2015 18:57
только без ебалы prototype
Andy
@m-2k
Sep 09 2015 18:57
это контейнер объекта
Namdak Tonpa
@5HT
Sep 09 2015 18:58
какая разница, внутри это одно и тоже
так быстрее еще может быть чем через prototype
то только для конструкторов
Andy
@m-2k
Sep 09 2015 18:58
x.[0][6] - value
x.[0][6].t - type
Namdak Tonpa
@5HT
Sep 09 2015 18:59
ну и у тебя будет простыня прототайпов
Andy
@m-2k
Sep 09 2015 18:59
:worried:
Namdak Tonpa
@5HT
Sep 09 2015 18:59
есть такой фреймворк прототайп блядь
по этоуй хуйне чуваки упарывались еще до jQuery :-)
счас все нахуй выбросили
бо тормозило
ООП там строили
:_)
ты идешь на поводу у джаваскрипт ебанатов
и совершаешь коренное падение :-)
Andy
@m-2k
Sep 09 2015 19:01
ну лан
короче померял скорость ща
Namdak Tonpa
@5HT
Sep 09 2015 19:01
и шо ?
Andy
@m-2k
Sep 09 2015 19:02
что через двойную конвертацию в строку и обратно что на arraybuffer - похуй, 99.9 процессорного времени ест bpg.js
Namdak Tonpa
@5HT
Sep 09 2015 19:02
:-)
ты не bpg.js меряй
а просто создавай рендомом BERT пакеты и декодируй их
мерятель :-)
удивил )
соклько пакетов в секунды и мегабайт в секунду
Andy
@m-2k
Sep 09 2015 19:03
хули оно такое медленное блядь
function bin(o)    { return {t:109,v:utf8_toByteArray(o)}; }
уж если бинарь так бинарь
зачем конвертировать?
если чел хочет послать строку то пусть она как строка и приезжает
если бинарь - то raw data
Namdak Tonpa
@5HT
Sep 09 2015 19:08
ну я счас пытаюсь сделать что-бы сайт заработал
не исключено что придется wf_event.erl менять :-(
хотелось бы этой хуйни избежать
а потом уже в следующей версии смотреть
я не хочу в 2.9 все нахуй переписать
по чуть чуть
и так уже на меня смотрят как на ебаната
история N2O это непрерывный поток совместимости :-)
Andy
@m-2k
Sep 09 2015 19:11
мне норм
я вижу что становится проще и понятнее
кстати
Andy
@m-2k
Sep 09 2015 19:16
var _appendBuffer = function(buffer1, buffer2) {
  var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
  tmp.set(new Uint8Array(buffer1), 0);
  tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
  return tmp.buffer;
};
Namdak Tonpa
@5HT
Sep 09 2015 19:17
не факто что это быстрее чем мой blob flat
эта функция больше чем flat :-)
Andy
@m-2k
Sep 09 2015 19:18
надо переписать flat
Namdak Tonpa
@5HT
Sep 09 2015 19:18
только стенд напиши скорости
и только после этого переписывать
я хочу видеть таблицы
чтобы показывало Msgs/s MB/s
без этого это пееписывание это хуйня
Andy
@m-2k
Sep 09 2015 19:19
)))
да не, кстати норм
все так и должно работать
заебись, мне нравится
20 строк
Namdak Tonpa
@5HT
Sep 09 2015 19:21
ну наконец то
пиши бенчмарки!
надо ж для поста в блоге
никто не будет читать как ты скобочки переставляешь пока не покажешь рейты
Andy
@m-2k
Sep 09 2015 19:22
ну оно стабильно?
Namdak Tonpa
@5HT
Sep 09 2015 19:22
декодер да
вот енкодер не работает :-(
Andy
@m-2k
Sep 09 2015 19:22
ну как энкодер запилишь в мастер тогда и потестируем
почему не работает
Namdak Tonpa
@5HT
Sep 09 2015 19:23
на пиздежь с тобой отвлекаюсь
Andy
@m-2k
Sep 09 2015 19:23
ок :smile:
Namdak Tonpa
@5HT
Sep 09 2015 19:55
блядь
у arguments нету map
Andy
@m-2k
Sep 09 2015 19:56
а чо из него список нельзя сделать?
nponeccop
@nponeccop
Sep 09 2015 19:57
Ээээ, есть стандартный хак
Array.prototype.map.call(arguments, function () {})
Namdak Tonpa
@5HT
Sep 09 2015 19:57
да впизду блядь for напишу
nponeccop
@nponeccop
Sep 09 2015 19:57
ага
Namdak Tonpa
@5HT
Sep 09 2015 19:57
слова prototype в n2o не будет :-)
Andy
@m-2k
Sep 09 2015 19:58
ПРОТОТАЙПЪ АТАТАТАЙП
да вот, map call - это js-way
nponeccop
@nponeccop
Sep 09 2015 19:58
тут надо учитывать ещё, что у .map хреновая семантика, из-за чего for потенциально может работать быстрее
Namdak Tonpa
@5HT
Sep 09 2015 19:59
мы байтойобы
nponeccop
@nponeccop
Sep 09 2015 19:59
(и когда-то действительно был быстрее)
Andy
@m-2k
Sep 09 2015 19:59
for в 100 раз быстрее map
Namdak Tonpa
@5HT
Sep 09 2015 19:59
while (i--) r[sz-i-1]=din(); !
впизду ваши прототайпы и return new Function(code).apply()
я кстати хочу на этой хуйне потом сделать консольную утилиту
для ноды
чтобы можно было файлы на n2o сервер так заливать
node upload.js TheMovie.avc
Andy
@m-2k
Sep 09 2015 20:18
не понял сначала при чем тут нода :smile:
Namdak Tonpa
@5HT
Sep 09 2015 20:19
ну а кто еще может джаваскрипт который я пишу исполнять не в браузере
кстати надо io.js попробовать
$ brew install iojs
Andy
@m-2k
Sep 09 2015 20:19
а какой профит в заливке файлов через консоль?
Namdak Tonpa
@5HT
Sep 09 2015 20:20
чтобы не писать контрольный элемент
и красиво выводить в текстовом режиме таблицы бенчмарков
Andy
@m-2k
Sep 09 2015 20:20
всё же ты про локалхост
Namdak Tonpa
@5HT
Sep 09 2015 20:21
при чем тут локалхост?
Andy
@m-2k
Sep 09 2015 20:21
для тестов в общем
Namdak Tonpa
@5HT
Sep 09 2015 20:22
а ну да
Andy
@m-2k
Sep 09 2015 20:22
потом я его возьму и буду серваки на n2o ддосить :smile:
Namdak Tonpa
@5HT
Sep 09 2015 20:22
$ ./node -v
v3.0.0
так у нас будет QoS
Andy
@m-2k
Sep 09 2015 20:22
скок весит нода?
я давно ставил както
я ща bpgenc из сорцов скомпилял
Namdak Tonpa
@5HT
Sep 09 2015 20:23
$ du -hs iojs
15M iojs
Andy
@m-2k
Sep 09 2015 20:23
год назад не получилось, ебался сутки
15 м - это ок
Namdak Tonpa
@5HT
Sep 09 2015 20:24
$ du -hs node
36M node
просят npm вырубить чтобы свой поставить
Andy
@m-2k
Sep 09 2015 20:25
по js решил упороться?
поможешь мне bpg оптимизировать?
Namdak Tonpa
@5HT
Sep 09 2015 20:25
ебануться даже на украинском есть
Andy
@m-2k
Sep 09 2015 20:26
emscripten надо ток заучить
очікують від io.js?
лол
скомпилял bpgenc с x265
ща потестим!
Andy
@m-2k
Sep 09 2015 21:00
стать что ли майнтейнером bpg
че этот патрик приуныл
ему надо было сделать PR к прошивке Canon Magic Lantern Firmware
чтобы гики вместо jpg фоткали в bpg
которым неохота равками винт засирать
и всё блядь
уверен для всяких acdsee можно плагины писать
а про человеческие просмотровщики никто и не знает
глядишь - через 5 лет и в браузерах появится нативная поддержка
Namdak Tonpa
@5HT
Sep 09 2015 21:05
твой стартап под угрозой
я уже три часа не могу енкодер написать :-)
Andy
@m-2k
Sep 09 2015 21:06
так не байтоёбствуй
пиши по-человечески )
могу у себя развернуть, если пришлешь архив
Namdak Tonpa
@5HT
Sep 09 2015 21:10
есть
счас закомичу полурабочий вариант
а от тебя я хочу бенчмарки на iojs
там же ES6
хочу быть ультрахипстером
Andy
@m-2k
Sep 09 2015 21:11
ES7 может?
Namdak Tonpa
@5HT
Sep 09 2015 21:11
Version 3.3.0 of io.js ships with V8 4.4.63.30, which includes ES6 features well beyond version 3.28.73 that ship with Node.js™ 0.12.x.
Andy
@m-2k
Sep 09 2015 21:12
это не ультра
ECMAScript 7 is the next evolution of the ECMA-262 standard (commonly referred to as JavaScript). Even before ECMAScript 6 was finalized on June 17, 2015
а, эта только в разработке
тогда да
mad надо пофиксать чтобы не компилял папку static
Namdak Tonpa
@5HT
Sep 09 2015 21:16
$ npm version
{ npm: '2.13.3',
  ares: '1.10.1-DEV',
  http_parser: '2.5.0',
  modules: '45',
  node: '3.3.0',
  openssl: '1.0.2d',
  uv: '1.7.3',
  v8: '4.4.63.30',
  zlib: '1.2.8' }
я мегахипстер
Namdak Tonpa
@5HT
Sep 09 2015 21:38
@m-2k смотри на панель справа ;-)
Andy
@m-2k
Sep 09 2015 21:40
fl - ЖИР )))
80 lvl
Namdak Tonpa
@5HT
Sep 09 2015 21:42
так
Andy
@m-2k
Sep 09 2015 21:42
+function bin(o) { return {t:109,v:utf8_toByteArray(o).v}; }
Namdak Tonpa
@5HT
Sep 09 2015 21:42
да расслабся
Andy
@m-2k
Sep 09 2015 21:42
это смищно разве?
:smile:
Namdak Tonpa
@5HT
Sep 09 2015 21:42
это же из строки оно его делает
хочешь делай бинарник сам {t:109,v:...}
это конструктор для ивентов N2O
а не для BPG
там стрoки туда на вход всегда в bin счас приезжают джаваскриптовые
из контролов
а там текст в UTF8
Andy
@m-2k
Sep 09 2015 21:44
надо сделать функцию чтобы она сама {t:109,v:...} делала
blob() напрмер
Namdak Tonpa
@5HT
Sep 09 2015 21:44
типа того
в bpg.js :-)
Andy
@m-2k
Sep 09 2015 21:45
гггг
нет у тебя
Namdak Tonpa
@5HT
Sep 09 2015 21:45
я не против шото сделать
Andy
@m-2k
Sep 09 2015 21:46
в книге есть туториал как validation.js юзать?
Namdak Tonpa
@5HT
Sep 09 2015 21:46
но сначала хочу посмотреть на бенчмарки
будет как раз отложил написание книги
пушо уперся в каличные протоколы
бросил книгу пришел сюда bert.js переписывать
уже можно возвращаться к книге
хочу написать 1 раз чтобы потом книгу по 10 раз не переписывать
вот думаю писать унификацию JSON и BERT или нет
в этом контейнере {t,v}
Andy
@m-2k
Sep 09 2015 21:49
да
Namdak Tonpa
@5HT
Sep 09 2015 21:50
ну ок
Andy
@m-2k
Sep 09 2015 21:53
Снимок экрана 2015-09-10 в 0.53.35.png
я тут статикой index.html отдаю
такая хрень
<script>var transition = {pid: '', host: 'localhost', port:'8010'};</script>
Namdak Tonpa
@5HT
Sep 09 2015 21:55
у меня работает пример
Andy
@m-2k
Sep 09 2015 21:55
лол
порт разный
wf_convert:BERT {io,_,_}: <<"document.cookie='site-sid=fb1684e456bd0863c6662e718f64f69b; path=/; expires=Tue, 28-Sep-2083 04:10:26 GMT';">>
Namdak Tonpa
@5HT
Sep 09 2015 21:57
текналаджи :-)
Namdak Tonpa
@5HT
Sep 09 2015 22:21
сделал
Andy
@m-2k
Sep 09 2015 22:22
ну ты скоростной
Namdak Tonpa
@5HT
Sep 09 2015 22:22
ну там можно рефакторить
но eval который происходит теперь происходит в одном месте для BERT и JSON
так шо я свою работу сделал
jsone:encode([{t,104},{v,[[{t,100},{v,io}],
                          [{t,109},{v,io(Eval)}],
                          [{t,109},{v,list(Data)}]]}]);
я пофиксал прямо Эрланг, чтобы на джаваскрипте ничего не писать
никаких конверторов
ну что
Andy
@m-2k
Sep 09 2015 22:24
:+1:
Namdak Tonpa
@5HT
Sep 09 2015 22:24
кто напишет MessagePack форматтер?
Andy
@m-2k
Sep 09 2015 22:25
нафиг?
Namdak Tonpa
@5HT
Sep 09 2015 22:25
ну как для промоушена
Andy
@m-2k
Sep 09 2015 22:25
а люик свой формат прикрыл?
Namdak Tonpa
@5HT
Sep 09 2015 22:25
ага
Andy
@m-2k
Sep 09 2015 22:25
не говорил почему?
Namdak Tonpa
@5HT
Sep 09 2015 22:25
ну там у него в инете были открыты идеи
можно их спиздить и написать форматтер
или сказать что бы тупо BED суппортим
я все сделал со своей стороны
пишите форматтеры блядь
Andy
@m-2k
Sep 09 2015 22:26
так а какой от них профит?
чтобы было больше смузи и старбаксов на канале?
Namdak Tonpa
@5HT
Sep 09 2015 22:27
демонстрация превосходства над рубиподобной мерзостью
Andy
@m-2k
Sep 09 2015 22:27
лiл
Namdak Tonpa
@5HT
Sep 09 2015 22:28
я серйозно давай возьмем BED и сделаем передачу в этом формате
или MessagePack
надо ж проверить охуенно ли или нет :-)
там придется ж цикл этот в n2o.js переписать
пушо там Blob читаются через колбеки
и поэтому все бинарные форматы в этом цикле будут жить
придется писать dec_bert и dec_mp и проверять статусы
а все текстовые форматы должны парсатся синхронно до бинарных
такая ебала с этим вашим FileReader и Blob
Namdak Tonpa
@5HT
Sep 09 2015 22:36
нада про это в книге написать
чотбы не забыть самому ))
Andy
@m-2k
Sep 09 2015 22:38
калбэки чтобы не тормозило
можно это говно в воркер вынести )
Namdak Tonpa
@5HT
Sep 09 2015 22:38
ну понятно ну просто получается что нельзя красива в одном цикле крутить и текстовые и бинарные
Andy
@m-2k
Sep 09 2015 22:38
с bed и MP много алгебры и байтоёбства (
Namdak Tonpa
@5HT
Sep 09 2015 22:39
надо сначала пытаться парсить JSON и только потом запускать калбек с бинарными протоколами
только так
поэтому если поставить protos = [ $bert, $client ]; то нихуя работать не будет
если JSON включишь
Andy
@m-2k
Sep 09 2015 22:39
а в чем проблема текстовые тоже в колбек слать?
Namdak Tonpa
@5HT
Sep 09 2015 22:39
так тогда еще хуже!
тогда всегда толко один будет работать
либо текстовые либо бинарные
почитай внимательно что я написал
и код посмотри
Andy
@m-2k
Sep 09 2015 22:44
а, ну как и раньше было
чекало на json иначе bin
Namdak Tonpa
@5HT
Sep 09 2015 22:44
ага
т.е. этот цикл который я там хотел сделать он лишний
можно в мегамот это все написать
так кода будет меньше
Andy
@m-2k
Sep 09 2015 22:45
wtf мегамот
Andy
@m-2k
Sep 09 2015 22:49
)