These are chat archives for synrc/n2o

29th
Sep 2015
Maxim Ivanov
@redbaron
Sep 29 2015 09:58
Какие отношения у n2o с react.js, elm и прочими фронтенд фреймворками? Работает вместе или делает их ненужными?
Namdak Tonpa
@5HT
Sep 29 2015 10:03
n2o+nitro = делает их не нужными
n2o+react = работает вместе
nitro — это отдельный проект где рендеринг элементом происходит
его не обязательно с n2o использовать
можно рендерить на клиенте с помощью template.js (часть n2o) но и он не обязательный
можно брать react и им рендерить
Maxim Ivanov
@redbaron
Sep 29 2015 10:06
на канвасе рисовать удобно?
Namdak Tonpa
@5HT
Sep 29 2015 10:06
не очень
DOM удобнее
SVG тот же DOM
ивенты вот это все
анимации
Maxim Ivanov
@redbaron
Sep 29 2015 10:08
мне надо визуализацию сделать конвеера. вот чешу репу на чем. Сама модель на эрланге, опыта во фронтенде - аккордеоны на jquery лепить несколько лет назад и больше не хочется как-то :) Штуки вроде http://elm-lang.org/examples/mario выглядят заманчиво и кода мало
Namdak Tonpa
@5HT
Sep 29 2015 10:09
ну elm и n2o подружить будет просто
там же есть рядом haskell counterpart
его переписать просто да и все
n2o_elm протокол просто написать для n2o
Maxim Ivanov
@redbaron
Sep 29 2015 10:11
интересно, попробую
Andy
@m-2k
Sep 29 2015 10:12
canvas быстрее svg кмк
Namdak Tonpa
@5HT
Sep 29 2015 10:12
он быстрее но неудобнее
Andy
@m-2k
Sep 29 2015 10:12
смотря для каких задач, так то согласен что неудобнее
Namdak Tonpa
@5HT
Sep 29 2015 10:12
для 2D игр SVG хватит
для Final Fantasy нет
Andy
@m-2k
Sep 29 2015 10:13
для игр да, перерисовок дофига всяких будет, кода море
Namdak Tonpa
@5HT
Sep 29 2015 10:20
всмысле для канваса больше кода
у нас кстати в N2O начали вкатывать SVG элементы
Andy
@m-2k
Sep 29 2015 10:21
больше js кода
вот тут
Andy
@m-2k
Sep 29 2015 10:29
а, элементы - да, заметил в nitro
Namdak Tonpa
@5HT
Sep 29 2015 10:30
написал там сообщение минуту назад
Andy
@m-2k
Sep 29 2015 10:31
мне на почту пришло )
Namdak Tonpa
@5HT
Sep 29 2015 11:24
а я там редактировал, тебе редакция тоже пришла?
Andy
@m-2k
Sep 29 2015 11:26
Ток сообщения
И pr от других
Konstantin
@lexplua-y
Sep 29 2015 11:38
Привет ! А тут можно спрашивать свои ответы про n2o ?
Или тут только чат разработчиков ?
Namdak Tonpa
@5HT
Sep 29 2015 11:39
шо хочешь можно спрашивать до определенного момента :-)
Konstantin
@lexplua-y
Sep 29 2015 11:53
Ясно. Я вот только завёл приложение sample, пытаюсь понять, что к чему. Насколько я понял, точка входа в приложение - review.erl. В config.erl мы указываем, какие модули нужно загрузить ещё. А где подтягиваются роуты из routes.erl ?
Andy
@m-2k
Sep 29 2015 11:54
sys.config {route, routes},
Konstantin
@lexplua-y
Sep 29 2015 11:54
Ага, спасибо
Namdak Tonpa
@5HT
Sep 29 2015 11:55
я для самопроверки буду находить разделы в документации где это описано
:-)
даже два места
Andy
@m-2k
Sep 29 2015 11:57
@lexplua-y log_modules() -> [ login, index ]. – это не подгружаемые модули )
Namdak Tonpa
@5HT
Sep 29 2015 11:57
это те модули от которых выводить в консоль лог
подгружаемые модули находятся автоматически и хранятся в OTP дескрипторе приложения: review/ebin/review.app в разделе modules
но при этом любой модуль положеный в ebin станет автоматически подгружаемым
более того любой исходник положенный в src при включенном приложении active станет тоже автоматически компилируемым и подгружаемым
Andy
@m-2k
Sep 29 2015 12:00
а чо какие проблемы active с mad смержить?
мож кому нинадо - это ж трололо какое-то
Namdak Tonpa
@5HT
Sep 29 2015 12:00
можно не выключая приложение просто изменить routes.erl и положить новую страницу в src и все станет работать.
Andy
@m-2k
Sep 29 2015 12:00
сделать опцию на хот релоад и все
Namdak Tonpa
@5HT
Sep 29 2015 12:00
ага, чтобы mad сервер запускал
там еще у mad буду другие сервера по плану
не только active но и другие
деражть их отдельно друг от друга в виде планигов — это не плохо
но и мерж тоже ничего плохого не несет
поэтому ничего делать не будем вообще
Andy
@m-2k
Sep 29 2015 12:01
да, лучше ftp займись )
ковбой еще не переписал?
Namdak Tonpa
@5HT
Sep 29 2015 12:02
создал папку synrc/ws
там будет только вебсокет эндпойнт
там не будет HTTP/1
статику я буду сервить через inets
Andy
@m-2k
Sep 29 2015 12:03
ковбой выкинешь?
Namdak Tonpa
@5HT
Sep 29 2015 12:03
все равно это только для девелопмент режима, а в продакшине через nginx сервится
выкину, хуле
Andy
@m-2k
Sep 29 2015 12:03
ага
с льюиком совсем разосрался?
Namdak Tonpa
@5HT
Sep 29 2015 12:05
когда я напишу ws тогда можно будет сказать что весь synrc меньше чем ranch/cowboy/cowlib
Andy
@m-2k
Sep 29 2015 12:06
и быстрее? )
Namdak Tonpa
@5HT
Sep 29 2015 12:06
быстрее тоже будет, обещаю
ковбой один занимает 6K LOC, а это 8 приложений synrc, kvs/n2o/bpe/mad/nitro/fs/sh/active это все занимает 6K LOC
ws будет занимать не больше 1K LOC
но он будет на ranch
ranch занимает 1K это ок
но потом может и ranch вкатаю в ws в 1K
Andy
@m-2k
Sep 29 2015 12:10
как те мапы?
оно как proc state?
тип замена проплистов ток без сканирования списка
Namdak Tonpa
@5HT
Sep 29 2015 12:14
как прок стейт памы годятся
но proc стейт это ж обычно рекорды, рекорды же ничем не хуже
даже лучше
быстрее так точно
это реально только для проплистов замена
но в n2o их же нет :-)
а erlang:put erlang:get быстрее работает чем даже erlang:element у рекордов
ну хотя фиг знает, может также быстро
Andy
@m-2k
Sep 29 2015 12:18
я к тому что динамический список чтобы в стейт не запихивать можно мапы юзать
я раньше думал что эт очередная обертка
Konstantin
@lexplua-y
Sep 29 2015 12:18
А ещё один вопрос - есть ли способ создать пустое приложение, которое будет содержать все минимально необходимые для вывода "Hello, word" файлы и иметь какую-то стандартную структуру каталогов, чтобы потом его расширять и дописывать нужное ? Типа rebar create template=n2oapp или вроде того
Andy
@m-2k
Sep 29 2015 12:18
но после найденной ошибки в хэшах уже нет
Namdak Tonpa
@5HT
Sep 29 2015 12:19
@lexplua-y вот так делай:
./mad app sample
он создаст каталог sample
Andy
@m-2k
Sep 29 2015 12:19
выкини все из review ненужное да и все
опять же, пользуясь случаем, ссылка на документацию
тот mad который в n2o/samples в PATH лучше пропиши
или лучше его возьми так:
# curl -fsSL https://raw.github.com/synrc/mad/master/mad > mad \
         && chmod +x mad \
         && sudo cp /usr/local/bin
Konstantin
@lexplua-y
Sep 29 2015 12:22
Ок, спасибо. Просто неочевидно, что для того, чтобы найти ,как создать n2o приложение с шаблона, нужно смотреть доку по mad )
Namdak Tonpa
@5HT
Sep 29 2015 12:22
здесь он самый свежий
ну ты же сам говорил как в ребаре
в ребаре же в доке по ребару будет как создавать темплейты приложений
тут тоже в доке по mad
где логика?
Andy
@m-2k
Sep 29 2015 12:24
This message was deleted
да блин
Namdak Tonpa
@5HT
Sep 29 2015 12:25
ты какую-то гадость написал
я видел :-)
Andy
@m-2k
Sep 29 2015 12:25
я хотел _ пофиксать и промахнулся )
Konstantin
@lexplua-y
Sep 29 2015 12:28
Во, агонь, всё завелось как надо
Спасибо, пошел разбираться
Namdak Tonpa
@5HT
Sep 29 2015 12:28
Enjoy
Andy
@m-2k
Sep 29 2015 12:29
это моя фраза
Namdak Tonpa
@5HT
Sep 29 2015 12:29
хорошо что ты не можешь удалить мое сообщение
Andy
@m-2k
Sep 29 2015 12:29
сук :smile:
в доке есть что-нибудь про n2o_async?
Namdak Tonpa
@5HT
Sep 29 2015 12:33
все есть что нужно настоящему индейцу
давай я научу тебя пользоваться докуменатцией
$ find *.tex -type f -exec grep -H 'n2o_async' {} \;
api.tex:                   n2o_async:send("counter",up).
api.tex:        [n2o_async]}]
api.tex:    > n2o_async:send("ho!","hola").
index.tex:                   n2o_async:send("looper",{chat,User,Message}).
:-)
Andy
@m-2k
Sep 29 2015 12:38
да, надо бы заняться поиск запилить
пока ты ftp мне чинишь
Namdak Tonpa
@5HT
Sep 29 2015 12:38
сделай поиск по tex файлам
по документации
Andy
@m-2k
Sep 29 2015 12:38
?
Namdak Tonpa
@5HT
Sep 29 2015 12:38
или по htm файлам
Andy
@m-2k
Sep 29 2015 12:38
не по бд а по файлам?
Namdak Tonpa
@5HT
Sep 29 2015 12:38
да по файлам грепом, чтобы нажимаешь в текстбоксе n2o_async
а оно тебе ссылки на #sec на параграфы в документации выводит
грепом потому что он отлично для полнотекстового подходит, тебе не нужно ничего делать, а файлов всегда немного максимум одна библиотека какая-то
да и даже если база бы была
все равно нужно по тексту искать ближайшую секцию
а тут можно вроде даже regex какой зафигачить
через perl/awk/sed/grep
ну perl и awk не хочется
Andy
@m-2k
Sep 29 2015 12:42
понятное дело
Namdak Tonpa
@5HT
Sep 29 2015 12:42
а вот grep find sed достаточно
Namdak Tonpa
@5HT
Sep 29 2015 12:43
дока по n2o в проекте n2o
а не в проекте сайт компании
у меня overlay файловая система из разных проектов на гитхабе
Andy
@m-2k
Sep 29 2015 12:44
теперь понятно что оверлей
Namdak Tonpa
@5HT
Sep 29 2015 12:45
на моем компе spawnproc, synrc и voxoz подмаунчены в одну точку ~/depot
это требование для сборки документации чтобы synrc.com, n2o и другие проекты были в одной папке, в данном случае synrc
в папке с названием организации
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
    }
    return "";
}
это что я должен такое написать, чтобы проверить n2o-sid ?
Andy
@m-2k
Sep 29 2015 12:49
ты откуда это взял
Andy
@m-2k
Sep 29 2015 12:49
лол
Namdak Tonpa
@5HT
Sep 29 2015 12:49
function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length == 2) return parts.pop().split(";").shift();
}
вот вродле получше
или
window.getCookie = function(name) {
  match = document.cookie.match(new RegExp(name + '=([^;]+)'));
  if (match) return match[1];
}
Andy
@m-2k
Sep 29 2015 12:50
function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}
Namdak Tonpa
@5HT
Sep 29 2015 12:51
мой последний лучший
Andy
@m-2k
Sep 29 2015 12:51
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/gнаверн нинужон да
Namdak Tonpa
@5HT
Sep 29 2015 12:53
function getCookie(name) { 
    match = document.cookie.match(new RegExp(name + '=([^;]+)'));
    if (match) return match[1]; }
добавляю такое в ftp.js
или в n2o.js прямо добавить
ws.onopen = function() { 
       if (!active) {
          ws.send('N2O,'+getCookie('n2o-sid'));
          active=true; } };
Andy
@m-2k
Sep 29 2015 12:54
n2o.js, return match ? match[1] : undefined;
Namdak Tonpa
@5HT
Sep 29 2015 12:54
чтобы n2o реконектился к своим async процессам
по sid
Maxim Ivanov
@redbaron
Sep 29 2015 12:55
http://learnyousomeerlang.com/maps пишет что как стейт они не лучший вариант
Andy
@m-2k
Sep 29 2015 12:55
n2o-sid может быть переопределен на другое имя
Namdak Tonpa
@5HT
Sep 29 2015 12:55
может быть
Andy
@m-2k
Sep 29 2015 12:55
так что хардкодить низя
Namdak Tonpa
@5HT
Sep 29 2015 12:55
ну значит глабальная перменная в n2o
session
как active, protos
Andy
@m-2k
Sep 29 2015 12:56
@redbaron почему
ws.sid = function() {}; ? :smile:
Namdak Tonpa
@5HT
Sep 29 2015 12:57
ладно
в onopen не буду пока
так в какой файл добавлять?
в n2o.js ?
или sessions.js сделать?
Andy
@m-2k
Sep 29 2015 12:58
n2o
написал ж
Maxim Ivanov
@redbaron
Sep 29 2015 13:01
@m-2k , потому что медленнее и с рекордами ошибки мол сразу вылавливаются, если что не так при обновлении (не знаю не проверял)
Keys being known at compile time brings advantages with fast access to specific values (faster than what is possible dynamically), additional safety (crash early rather than corrupting state), and easier type checking. These make records absolutely appropriate for a process' internal state, despite the occasional burden of writing a more verbose code_change function.
на элексир стоит смотреть?
Namdak Tonpa
@5HT
Sep 29 2015 13:04
 {ftp,<<"mBQeLumAwo+zIwNwC3BfRA==">>,<<"40.tiff">>,3,4,5,
                    81788928,818725524,<<>>,<<"send">>,262144,11}
передается уже сессия
на элексир стоит смотреть, чтобы знать что это такое. писать на нем совершенно не обязательно.
Andy
@m-2k
Sep 29 2015 13:08
nitro заебись, если ты об этом
Namdak Tonpa
@5HT
Sep 29 2015 13:08
именно поэтому в kvs n2o и везде в наших продуктах все на рекордах, так как это самый быстрый вариант доступа, C- структуры по сути
я бы мог сказать что Elixir хуета но я это уже говорил
Andy
@m-2k
Sep 29 2015 13:11
а реакт?
Namdak Tonpa
@5HT
Sep 29 2015 13:11
нитро лучше реакта хули тут стесняться
если б реакт был круче я бы на реакте писал
шо я долбоеб
писать на хуйне
Andy
@m-2k
Sep 29 2015 13:12
ок
ты как-то говорил что он ок
Namdak Tonpa
@5HT
Sep 29 2015 13:12
напишите мне на ректе upload контрол круче моего нитровского
сразу на реакт перейду :-)
react самый лучший из всех джаваскрипт рендереров
если бы я генерировал клиентов через shen я бы в реак рендерил
ну или во что-то похожее счас аналогов реакта куча же
react не самый удобный для генерации из эрланга
вот такая хуйня например есть
но это все равно большое
я могу сам виртуальный дом написать
и меньше
Maxim Ivanov
@redbaron
Sep 29 2015 13:17
elm!
Namdak Tonpa
@5HT
Sep 29 2015 13:17
в elm есь коре написанный на джаваскрипте или все из elm генерируется?
пушо я хочу у себя чтоб кор был написан на джаваскрипте
Maxim Ivanov
@redbaron
Sep 29 2015 13:19
я не знаю :( он просто секси выглядит :)
они говорят у них рендер быстрее реакта
используют вот это: https://github.com/Matt-Esch/virtual-dom
Namdak Tonpa
@5HT
Sep 29 2015 13:25
function render(count)  {
    return h('div', {
        style: {
            textAlign: 'center',
            lineHeight: (100 + count) + 'px',
            border: '1px solid red',
            width: (100 + count) + 'px',
            height: (100 + count) + 'px'
        }
    }, [String(count)]);
}
вот это мне нравится
ну кароче это все можно на nitro написать
сделать virtual-dom backend к nitro элементам
так то elm мне неинтересен
так этот еще один язык
у нас тема что все на одном языке написано
не нужно ничего другого учить
так шо если кто-то хочет elm мы не против
пишите n2o_elm и примеры и мы включим в n2o
Namdak Tonpa
@5HT
Sep 29 2015 13:49
@m-2k закомитил оповещение о завершении FTP сессии
4 files changed. 12 additions, 2 deletions.
priv/ftp.js
priv/n2o.js
src/handlers/n2o_session.erl
src/protocols/n2o_file.erl
Andy
@m-2k
Sep 29 2015 13:49
збс
а нах те поиск по файлам в n2o?
Namdak Tonpa
@5HT
Sep 29 2015 13:50
для synrc.com сайта
для поиска по документации
Andy
@m-2k
Sep 29 2015 13:50
я в login.erl делаю
Namdak Tonpa
@5HT
Sep 29 2015 13:50
upload в login.erl ? :-)
Andy
@m-2k
Sep 29 2015 13:50
поиск
Namdak Tonpa
@5HT
Sep 29 2015 13:51
поиск чего?
пользователей?
Andy
@m-2k
Sep 29 2015 13:51
по докам блин
Namdak Tonpa
@5HT
Sep 29 2015 13:51
в login.erl не надо делать
делай doc.erl
ты понял задачу?
Andy
@m-2k
Sep 29 2015 13:53
да
Namdak Tonpa
@5HT
Sep 29 2015 13:53
я хочу чтобы ты искал по .htm/.tex а потом искал до ближайшего \section или \subsection и в выдаче выдавал все такие #secNN в HTM. Результат поиска это список #link элементов должен быть.
лучше конечно по htm
нам же надо в выдаче анчоры #sec показывать
и ты клацая на блоки текста где было шото найдено
сразу попадаешь на соотвествующий раздел в документации
будет круто
и reusable
пофиг же шо искать главное где и формат хуйни до которой откручивать назад
поиск контекста типа
Namdak Tonpa
@5HT
Sep 29 2015 14:05
я посмотрел на virtual-dom
это полностью соотвествует нашим стандартам
кода мало
от 1 до 3 функций на файл
размер правда все равно 1000 LOC
но думаю это все можно ужать
Maxim Ivanov
@redbaron
Sep 29 2015 16:20
как getCookie?
Namdak Tonpa
@5HT
Sep 29 2015 16:23
гет куки уже не гет куки а co
Andy
@m-2k
Sep 29 2015 16:24
byte-fuckers
Namdak Tonpa
@5HT
Sep 29 2015 16:24
гг
Maxim Ivanov
@redbaron
Sep 29 2015 16:25
оно развалится если в значении какой-нибудь куки будет еще одна key=value строка
Namdak Tonpa
@5HT
Sep 29 2015 16:25
ну на n2o куках работает, а за остальные мы не отвечаем
если есть конкретные предложения мы во внимании
bin(co(session)) вот так выглядит эрланговая сессия на джаваскрипте
я понял
надо привязать avz к сессиям и чтобы это было прямо в n2o_session с авторизационными бекендами
Ilya Gorskin
@Revent
Sep 29 2015 16:32
@5HT это надо ага :) я хочу полновесную авторизацию через ldap :)
Namdak Tonpa
@5HT
Sep 29 2015 16:34
ну n2o сессия может и не место этому
это лучше avz плагином
нужна конкретная строка для eldap клиента
как проверять что inetOrgPerson есть в базе и пароль правильный
для какого ldap сервера ты хочешь это использовать?
Maxim Ivanov
@redbaron
Sep 29 2015 16:41
иногда LOC не просто так. Не знаю что страшного, что какие-то куки не так распарсятся, но вот тут кто-то заморочился с тем какие могут быть куки: https://github.com/Pylons/webob/blob/master/webob/cookies.py#L304
Namdak Tonpa
@5HT
Sep 29 2015 16:41
та это ебанизм, господа
мне просто нужно гарантировать что сервер выставлявет куки и клиент их может распарсать
если клиент хочет угробить эту куки или подсунуть хуйню мне на сервере похуй
пусть хоть компьютер у себя сожжет
    wf:wire(wf:f("document.cookie='~s=~s; path=/; expires=~s';",
                [wf:to_list(session_cookie_name(From)),
                 wf:to_list(SessionKey),
                 cookie_expire(2147483647)])),
экспирейшин кук контролируется на сервере
      expired(_Issued,Till) -> Till < calendar:local_time().
Namdak Tonpa
@5HT
Sep 29 2015 16:47
cookie_expire(SecondsToLive) ->
    Seconds = calendar:datetime_to_gregorian_seconds(calendar:local_time()),
    DateTime = calendar:gregorian_seconds_to_datetime(Seconds + SecondsToLive),
    cow_date:rfc2109(DateTime).
Maxim Ivanov
@redbaron
Sep 29 2015 16:47
Я что, спорю что ли? :) Но ведь страшно жить, иногда параноя нахлестывает через что пролазят. Вот тут вытаскивают секретные куки только благодаря тому, что они сжимаются перед попадачей на шифрование: https://en.wikipedia.org/wiki/CRIME
после такого смотришь на happy path и параноишь и в итоге рождаются те монстры как по первой ссылке, хоть и они не гарантируют ничего
Namdak Tonpa
@5HT
Sep 29 2015 16:48
это как бы пофиг так как куки устанавливаются поверх SSL соединения
и это единственная штука которая передается кроме вебсокета
и то в виде джваскрипта по вебсокету
так шо весь этот крайм до пизды
это все эвалуйтится на странице из текста из вебсокета
через парсер HTTP заголовков не проходит никак
сила вебсокетов!
хуйня не работает :-)
Maxim Ivanov
@redbaron
Sep 29 2015 16:53
я ж не говорю "если парсить куки по ; то все пропало", а спашиваю "неужели не страшно"? :)
Namdak Tonpa
@5HT
Sep 29 2015 16:54
не страшно, что?
Maxim Ivanov
@redbaron
Sep 29 2015 16:54
кодить happy path only
Namdak Tonpa
@5HT
Sep 29 2015 16:54
все равно надо передавайть байты
happy path only в эрланге называется let it crash philosophy
в чем кокретно претензия несекурности наших кукисов или шо?
можешь кастомные выдывать у нас есть AES/CBC 128 пиклер
но все равно ты этот ключ отдаешь по SSL каналу
и если кто-то любой ключ получит он сможет зайти
можно ключи по ip биндить и повер еще авторизации строить как avz
это все просто разные уровни, тут кукисам вообще пофиг это все они тебе ничего не открывают, а нужны только идентификации клиента
если сервис открытый, то почему мы должны быть против аутентификации?
Ilya Gorskin
@Revent
Sep 29 2015 16:59
@5HT ну в идеале для любого, но в данный момент интересует openldap
Namdak Tonpa
@5HT
Sep 29 2015 17:00
а на маке он же стоит?
как его включить?
Maxim Ivanov
@redbaron
Sep 29 2015 17:00
нет претензий нет, вопрос в том как писать код и не потерять сон :) когда напишешь простыню, ощущение что сделал пусть не все, но хоть что-то чтобы отловить всякие неопределнности. а когда пишешь у себя s.split(";"), а у других видешь простыню неуютно же, не?
Namdak Tonpa
@5HT
Sep 29 2015 17:01
неуютно?
у меня же все рабоет
в чем проблемы?
Maxim Ivanov
@redbaron
Sep 29 2015 17:02
так у всех все работает, пока хитрый жук не придумает как пользу извлечь :)
Namdak Tonpa
@5HT
Sep 29 2015 17:02
ну придумай хули
Maxim Ivanov
@redbaron
Sep 29 2015 17:02
я не хитрый жук
Namdak Tonpa
@5HT
Sep 29 2015 17:02
n2o пиклеры прошли review
pickle(Data) ->
    Message = term_to_binary({Data,os:timestamp()}),
    Padding = size(Message) rem 16,
    Bits = (16-Padding)*8, Key = secret(), IV = crypto:rand_bytes(16),
    Cipher = crypto:block_encrypt(aes_cbc128,Key,IV,<<Message/binary,0:Bits>>),
    Signature = crypto:hmac(sha256,Key,<<Cipher/binary,IV/binary>>),
    base64:encode(<<IV/binary,Signature/binary,Cipher/binary>>).
на покажи касперскому :-) гг
а за XSS в приложениях мы гарантировать не можем что ваши программисты напишут
используейте wf:jse/1 и wf:html_encode/1 функции
в review sample все это есть в примере
вообщем можно выдавать секюрные токены реальные шифры
Namdak Tonpa
@5HT
Sep 29 2015 17:07
и все это по websocket каналу
никаких йобаных HTTP заголовков
n2o приложения вообще не реагируют на HTTP заголовки
Namdak Tonpa
@5HT
Sep 29 2015 17:14
так что у нас на вебсокете все уютно
что что передается по каналу строго описано
Maxim Ivanov
@redbaron
Sep 29 2015 17:22
вебсокет через nginx уже научился пролазить? был сторонний патч когда-то, но с тех пор не следил
Namdak Tonpa
@5HT
Sep 29 2015 17:24
специально для тебя мы сделали страницу
тут все написано
Maxim Ivanov
@redbaron
Sep 29 2015 17:26
шикарно
Andy
@m-2k
Sep 29 2015 17:56
@redbaron чо за параноя? куки передаются после того создания WS, а оно поверх SSL
не отдавай ничего по 80 порту и всё
Ilya Gorskin
@Revent
Sep 29 2015 17:57
@5HT на счет мака не знаю :)
Namdak Tonpa
@5HT
Sep 29 2015 17:59
кстате ты вкурсе что у нас есть свой LDAP сервер?
Ilya Gorskin
@Revent
Sep 29 2015 18:10
ага ты уже говорил :) но у нас уже openldap внедрен
Namdak Tonpa
@5HT
Sep 29 2015 18:22
ладно счас насетаплю openldap
Andy
@m-2k
Sep 29 2015 19:44
как в регекспах заменить .*? на тоже самое только с пропуском слова
типа word a word b word c word c
надо нати word c
то есть чтобы не захватывало целиком word a word b word c
Namdak Tonpa
@5HT
Sep 29 2015 19:50
I have no idea :-)
Andy
@m-2k
Sep 29 2015 19:50
так, вроде нашел
осталось переписать километровую регулярку
Namdak Tonpa
@5HT
Sep 29 2015 19:51
и шо ищет покажи вывод по слову web например :-)
Andy
@m-2k
Sep 29 2015 19:51
стрижка тока начата ©
Namdak Tonpa
@5HT
Sep 29 2015 19:52
только нада чтобы оно и название секции выкусывало
вообще говоря можно xmerl взять
быстрее было бы
Andy
@m-2k
Sep 29 2015 19:52
выкусывает
Namdak Tonpa
@5HT
Sep 29 2015 19:52
или нет?
Andy
@m-2k
Sep 29 2015 19:52
я хз что это
квест следующего уровня - не учитывать поиск в тегах
Namdak Tonpa
@5HT
Sep 29 2015 19:55
сколько строчек у тебя получилось? старый добрый перл
Andy
@m-2k
Sep 29 2015 19:55
прикол не прокатил
10 строчек
Namdak Tonpa
@5HT
Sep 29 2015 19:58
если то что ты напишешь будет охуенно я поставлю это на synrc.com/index.htm
большой текстбокс поисковый и выдачу
и чтобы оно вообще по всем докам искало fulltext
Andy
@m-2k
Sep 29 2015 19:58
да эти блядовы жадные регекспы чот зашкварили ме моск
159> login:search(n2o,<<"async">>,fun(Q)-> <<"(?>(?!<h[^>]+>)).*?<h\\d[^>]*?\\ id=[\'\"]sec(\\d{1,3})[\'\"][^>]*?>(.*?)<\\/h\\d>.*?",Q/binary>> end).
[{"api.htm",
  [[<<"1">>,<<"TOC">>],
   [<<"14">>,
    <<"<span style=\"font-weight:bold\">Custom Registrator</span>">>],
   [<<"15">>,
    <<"Async Processes <span style=\"font-weight:bold\">wf:async</span> and <span style=\"font"...>>],
   [<<"16">>,
    <<"<span style=\"font-weight:bold\">Process Naming</span>">>],
   [<<"17">>,
    <<"Parse URL and Context parameters <span style=\"font-weight:bold\">wf:q</span> "...>>],
   [<<"999">>,
    <<" WRONG <span style=\"font-weight:bold\">">>]]}]
вместо [<<"1">>,<<"TOC">>],должно быть 13
Namdak Tonpa
@5HT
Sep 29 2015 19:59
Async Processes <span style=\"font-weight:bold\">wf:async</span> and
а это как в toText делать?
Andy
@m-2k
Sep 29 2015 20:00
регуляркой теги убираешь и все
либо так выводишь
сохранится форматирование
Namdak Tonpa
@5HT
Sep 29 2015 20:00
ну в принципе да
Andy
@m-2k
Sep 29 2015 20:11
помог бы
(?<=шаблон) Позитивный просмотр назад
но он не поддерживается
Namdak Tonpa
@5HT
Sep 29 2015 20:19
перлойобство
Andy
@m-2k
Sep 29 2015 20:58
решение оказалось пиздецки простым
Andy
@m-2k
Sep 29 2015 21:21
это не баг, это фича
перлопидоры
Andy
@m-2k
Sep 29 2015 21:35
@5HT пофиксай
http://synrc.com/apps/n2o#sec9 не работает
Andy
@m-2k
Sep 29 2015 21:36
ок
Namdak Tonpa
@5HT
Sep 29 2015 21:37
там в тегах не может быть без ".htm" вконце
не пизди
Andy
@m-2k
Sep 29 2015 21:37
в каких тегах
Namdak Tonpa
@5HT
Sep 29 2015 21:37
в которых ты ищешь
href
Andy
@m-2k
Sep 29 2015 21:37
я знаю
думал index.htm забанен
ссылки с apps не ведут ж на него
Namdak Tonpa
@5HT
Sep 29 2015 21:39
ты же ищешь в папках doc/web
там нет ссылок из apps/index.htm
там сгенерированные роботами
полные
Andy
@m-2k
Sep 29 2015 21:39
да всё
Namdak Tonpa
@5HT
Sep 29 2015 21:39
а в apps/index.htm ссылки человеком вручную записанные в apps.tex
Andy
@m-2k
Sep 29 2015 21:46
Снимок экрана 2015-09-30 в 0.45.29.png
Namdak Tonpa
@5HT
Sep 29 2015 21:52
смотри
Namdak Tonpa
@5HT
Sep 29 2015 21:52
теперь сделай чтобы в конфиге можно было указать каталог /synrc/apps/ где хранятся все проекты /synrc/apps/n2o/doc/web/*.htm
ладно счас сам вставлю
а doc.html ?
Andy
@m-2k
Sep 29 2015 21:54
возьми login.html
Namdak Tonpa
@5HT
Sep 29 2015 22:02
работает
Andy
@m-2k
Sep 29 2015 22:02
еще бы
Namdak Tonpa
@5HT
Sep 29 2015 22:07
немного неправильно написано
так как Apps может быть какой угодно
Andy
@m-2k
Sep 29 2015 22:07
не понел
Namdak Tonpa
@5HT
Sep 29 2015 22:08
ну ты только в каталоге n2o ищешь
Andy
@m-2k
Sep 29 2015 22:08
ну да
ищи в каких надо
сделай LC )
одна строка в event(search)
медленно шото ищет
надо сразу выводить что нашло а не ждать пока все найдет
ладно закомичу это в review
Andy
@m-2k
Sep 29 2015 22:42
Так то и кнопка не нужна
Интервал в 50 мс навесить на текстбокс
Namdak Tonpa
@5HT
Sep 29 2015 22:45
после отпускания клавиши
должно пройти 100мс
и тогда слать запрос
если три и более символа в текстбоксе
Andy
@m-2k
Sep 29 2015 22:48
Я про это же
Namdak Tonpa
@5HT
Sep 29 2015 22:48
так шото медленно все равно
с find быстрее было бы
Andy
@m-2k
Sep 29 2015 22:59
С финд сам ебись :-)
Регексп я написал
Konstantin
@lexplua-y
Sep 29 2015 23:12

ну на n2o куках работает, а за остальные мы не отвечаем

@5HT это что, если я пишу сервис и мне понадобилось сохранять на время какой-то стейт у клиента, то храня этот стейт в куке я огребу проблем с тем, что это сломает логику фреймворка ?

Namdak Tonpa
@5HT
Sep 29 2015 23:23
все что ты сохранишь через n2o будет работать
везде
если n2o не читает какой-то куки который составлен по RFC
куки в студию
сделал асинхронную выдачу
вбейте туда n2o или synrc
site-sid этот куки принадлежит n2o
если какой-то долбоеб его удаляет по таймеру 50 раз в секунду на странице
или заполняет его какой-то не RFC хуйней
нам похуй
тикие чуваки сразу идут нахуй
этот куки читает только код n2o.js и заполняет код n2o_session.erl
Namdak Tonpa
@5HT
Sep 29 2015 23:28
к чему вы доебались ребятишки?
наша система кукисов работает в банках
и прошла все мыслимые тесты и верефикации
Namdak Tonpa
@5HT
Sep 29 2015 23:35
function co(name) { 
       match=document.cookie.match(
                 new RegExp(name+'=([^;]+)'));
       return match?match[1]:undefined; }
эта функция некошерная или че?
если у вас есть пример проекта на гитхабе где что-то неработает мы рассмотрим любые предложения
Namdak Tonpa
@5HT
Sep 29 2015 23:42
> document.cookie = 'counter=200; path=/;  expires=Mon, 18-Oct-2083 05:55:15 GMT';
< "counter=200; path=/;  expired: Mon, 18-Oct-2083 05:55:15 GMT"
> co('counter');
< "200"
> document.cookie = 'max-sid=1; path=/;  expires=Mon, 18-Oct-2083 05:55:15 GMT';
< "max-sid=1; path=/;  expired: Mon, 18-Oct-2083 05:55:15 GMT"
> co('max-sid');
< "1"
> co(session);
< "c1fdd42632b10b9485f72721f713849f"
в чем проблемы?
Namdak Tonpa
@5HT
Sep 29 2015 23:52
то HTTP заголовки то кукисы :-)
sections(Path,Match,Pid)  ->
    Page=filename:basename(Path),
    App = lists:nth(4,lists:reverse(filename:split(Path))),
    Forms=#panel{body=[
          #h5{body=Page}, [ begin
              Url=["http://synrc.com/apps/",
                   wf:to_binary(App),"/doc/web/",Page,$#,Sec],
              #panel{body=#link{body=T,href=Url,target="_blank"}}
          end||[Sec,T] <- Match]]},
    Pid ! {client,Forms}.
Namdak Tonpa
@5HT
Sep 29 2015 23:57
да это прикольный поиск
re(Q) -> <<"(?:<h\\d[^>]*?\\ id=[\'\"](sec\\d{1,3})[\'\"][^>]*?>(.*?)"
          "<\\/h\\d>.*?)+",Q/binary,"[^>]+<">>.

search(Pid,Q) ->
    lists:map(fun(Path) -> spawn(fun() ->
        {ok,Bin}=file:read_file(Path),
        case re:run(Bin,re(Q),[unicode,global,{capture,[1,2],binary},dotall,caseless]) of
            {match,Match} -> sections(Path,Match,Pid);
            nomatch -> [] end end) end,
    filelib:wildcard(application:get_env(n2o,search,
   "/var/www/sites/synrc.com/apps/*/doc/web/*.htm"))).