These are chat archives for synrc/n2o

19th
Oct 2015
Oleg Zinchenko
@cystbear
Oct 19 2015 08:12
@serpentk если заюзать секондари индексы, то потом не все базы будут подходить
Namdak Tonpa
@5HT
Oct 19 2015 08:18
да, секондари индексы это чтобы имитировать поведение SQL баз где часто используется выборка по составным ключам. Но природа KVS такая, что это просто систама хранения двусвяхных списков в KV хранилищах с геттерами и сеттерами () -> T и T -> (), которые в общем случае могут быть деревьями или другими хранимыми структурами по которым можно делать fmap.
KVS хранит в полях next prev ссылки на id элементов стоящих в определенном порядке в цепочке. По умолчанию KVS представляет именно семантику двусвязных списков. В обратную сторону мы держим связи для функций франсорфмации которые обратные к прямым f^(-1)
Вооще-то эти функции это Action: M * S -> S образуют полугруппу над множеством M которое называется протоколом приложения, а S — множество всех состояний системы.
каждое приложение synrc определяет такую полугруппу A: M * S -> S только для каждого приложения свой протокол M, для KVS например это put get add remove delete index
для N2O это io client server ftp pickle
Namdak Tonpa
@5HT
Oct 19 2015 08:23
A в каждом приложении тоже свое: для N2O это event/1, для BPE это action/2 для протоколов N2O это info/2. Для KVS нет такой функции потому что KVS не предоставляет процессов, это просто набор функций которые ничего не знаю про состоянии цепочки. Для KVS нужно запускать для каждой головы цепочки процесс, который будет контроллировать операции модификации в цепочке, линеаризируя их в своей очереди. Это может быть gen_server, n2o_async или любой процесс. Для каждого id цепочки нужен свой такой guard процесс, если мы хотим согласованно изменять эту цепочку. Этот процесс может быть например WebSocket процессом пользователя.
Задавайте вопросы.
Namdak Tonpa
@5HT
Oct 19 2015 08:30
надо наверно в KVS включить n2o_async
и написать на нем feeds
прямо в kvs, а не отдельным приложением как сейчас, которого к тому же нет
Ilya Gorskin
@Revent
Oct 19 2015 08:47
@5HT у меня относительно kvs такой вопрос есть, у меня есть несколько таблиц в контейнере, много таблиц разных пусть будет трех типов, все это как то прикручено в граф, могу я как то на автомате в контейнере помечать какая же это таблица? что-бы в дальнейшем на основании этого строить запросы? т.е. искать например id в контейнере -> узнавать его тип -> запрашивать соответствующий рекорд?
Namdak Tonpa
@5HT
Oct 19 2015 08:53
типа в цепочке могут находится рекорды разных типов ?
ты можешь сделать кастомный контейнер и держать там что хочешь
Ilya Gorskin
@Revent
Oct 19 2015 08:54
да рекорды разных типов,
Namdak Tonpa
@5HT
Oct 19 2015 08:54
ну это ок
это просто означает что тип в контейнере это сумма типов
у меня есть тоже такие kvs конфигурации
Ilya Gorskin
@Revent
Oct 19 2015 08:55
дай пример такого контейнера
Namdak Tonpa
@5HT
Oct 19 2015 08:55
да но там ничего нет
я ничего такого не считаю
я к тому что если ты хочешь что-то высчитывать при каждом add или remove
Ilya Gorskin
@Revent
Oct 19 2015 08:56
нет мне не надо ничего считать :)
Oleg Zinchenko
@cystbear
Oct 19 2015 08:56

типа в цепочке могут находится рекорды разных типов ?

шото не могу придумать юзкейс где это юзается?

Namdak Tonpa
@5HT
Oct 19 2015 08:56
то ты себе заэнричь рекорд контейнера необходимыми аггрегациями
@cystbear например в одном фиде рекорды разных версий
feed A of [ #user | #user2 ]
Oleg Zinchenko
@cystbear
Oct 19 2015 08:56
ака user и user2
понял тебя Макс
Namdak Tonpa
@5HT
Oct 19 2015 08:57
но могут быть и совершенно разные рекорды
как например история операций
Oleg Zinchenko
@cystbear
Oct 19 2015 08:57
record record2 record3 -- хреновые миграции, но лучше я не придумал
Namdak Tonpa
@5HT
Oct 19 2015 08:57
там могут быть рекорды протокола, а они ведь все разные
Oleg Zinchenko
@cystbear
Oct 19 2015 08:58
просто вопрос как потом такой фид обрабатывать
Ilya Gorskin
@Revent
Oct 19 2015 08:58
ну вот например в фиде у тебя есть aclver как его использовать уже в таблице?
Namdak Tonpa
@5HT
Oct 19 2015 08:58
смотри в коннейре все поля это то что ты передаешь в fold как акумулятор
сейчас в контейнере есть только один акумулятор
count
количество записей в фиде
но может быть напирмер sum
или другие аггрегаторы
вот их ты и вычисляешь каждый раз когда делаешь add/remove
ложишь в контейнер и перезаписываешь его
естественно все в трназакции какой-то в каком-то процессе
можно в таком контейнере фида держать например статистику рекордов разных типов
user - 12, user2 - 38, user3 - 0
типа сколько раз встречаются рекорды разных типов в этой цепочке
этот proplists может хранится например в контейнере
и при каждом add/remove ты аптейдишь это поле в контейнере
по сути изменяешь аккумулятор
Ilya Gorskin
@Revent
Oct 19 2015 09:03
ну примерно понял куда копать
Namdak Tonpa
@5HT
Oct 19 2015 09:03
все аггрегаторы которые тебе нужны для этой цепочки ты помещаешь как поле в кастомный контенер лдя этой цепочки
Oleg Zinchenko
@cystbear
Oct 19 2015 09:18
@5HT Макс, а можно ли в рамках одного инстанса kvs работать с несколькими базами ,несколькими ВИДАМИ конекшенов к одному ВИДУ или разным Видам БД ?
Namdak Tonpa
@5HT
Oct 19 2015 09:18
нету такого понятия инстанс kvs
хоть 1000 инстансов
в kvs же нет ген_серверов
любая функция kvs поддерживает последним параметром #kvs{mod=store_mnesia}
kvs:get(1,process, #kvs{mod=store_mnesia}).
kvs:get(1,process, #kvs{mod=store_mongo}).
вот тебе в две базы
там еще есть #kvs.cx для хранения строки доступа к базе
но
это уже на усмотрение разработчика бекенда как его заполнять и использовать
Oleg Zinchenko
@cystbear
Oct 19 2015 09:39
понял, для того что бы заюзать 2 разных монги надо #kvs.cx юзать
спасибо
Namdak Tonpa
@5HT
Oct 19 2015 09:40
да, и там держать состояние соединения
pid процесса или что-угодно
в #kvs.cx
ваш драйвер вроде пока не юзает #kvs.cx
Maxim Ivanov
@redbaron
Oct 19 2015 09:55
gitter наудивление удобная штука оказалась
Namdak Tonpa
@5HT
Oct 19 2015 09:55
а вы чем на работе пользуетесь?
Maxim Ivanov
@redbaron
Oct 19 2015 09:56
slack
Namdak Tonpa
@5HT
Oct 19 2015 09:56
ну слек такой же только чуть другой
LimeChat и FreeNode
вот классика
Maxim Ivanov
@redbaron
Oct 19 2015 09:56
"удобная" в значении, что удобно иметь обсуждение прямо рядом с кодом на гитхабе, а не где-то в рассылках
в один клик
Namdak Tonpa
@5HT
Oct 19 2015 09:57
это да, чем больше интеграции с гитхабом тем лучше
Maxim Ivanov
@redbaron
Oct 19 2015 09:57
на чем зарабатывают они только непонятно. расчитывают продаться гитхабу может
Namdak Tonpa
@5HT
Oct 19 2015 09:58
на корпоративных чатах
там достаточно 1 клиента большого :-)
тут просто для нас гиттер историю не хранит всю
а для платных хранит
ну у нас тоже код бесплатный и сервис тоже почти :-)
Maxim Ivanov
@redbaron
Oct 19 2015 10:00
увидел в глубоко зарытом меню "billing" что есть какие-то планы. кто ж так продает :)
Namdak Tonpa
@5HT
Oct 19 2015 10:01
я создал новую комнату: https://gitter.im/synrc/kvs
:-)
Maxim Ivanov
@redbaron
Oct 19 2015 10:03
гитхаб просто обязан их купить и предлагать чат для всех реп прямо в интерфейсе.
был недавно неприятно удивлен, что в Uber общение с водителями по СМС, а не встроеным чатом. особенно "рад" был обнаружить это находясь в другой стране без местной симки :)
Namdak Tonpa
@5HT
Oct 19 2015 10:06
в какой стране?
Maxim Ivanov
@redbaron
Oct 19 2015 11:20
когда обнаружил, что звонки/сообщения в убере идут через сотового оператора? в США
Namdak Tonpa
@5HT
Oct 19 2015 11:23
ну симку я покупаю выходя из метро сразу в любой стране
Andy
@m-2k
Oct 19 2015 11:31
@5HT если ты подумал что на видосе bpg live streaming то это не так )
Namdak Tonpa
@5HT
Oct 19 2015 11:31
бля
а че?
Andy
@m-2k
Oct 19 2015 11:31
драв фреймов в канвас
если даже рендерить каждый фрейм в js то это выйдет дольше чем 1/30c
ну и для видео есть свои форматы
Rado Kozmer
@rkozmer
Oct 19 2015 20:50
Hi! Me again. I have some trouble with rendering of apostrophes. #span{body="d'immeubles"}. How do you escape it? Thanks!
Namdak Tonpa
@5HT
Oct 19 2015 20:51
> wf:to_binary(wf:render( #span{body="d'immeubles"})).
<<"<span>d'immeubles</span>">>
you may try to use wf:jse and wf:html_encode
Rado Kozmer
@rkozmer
Oct 19 2015 20:57
Yes. wf:html_encode solved it. Thank you!