These are chat archives for synrc/n2o

27th
Dec 2015
heiheshang
@heiheshang
Dec 27 2015 08:45
./mad start запускает приложение, а вот ./mad stop не останавливает
Namdak Tonpa
@5HT
Dec 27 2015 09:51
это да :-)
напишите уже кто-то unix строку которая работает нан всех юниксах))
там надо искать beam.smp процесс
и убивать его
красивый код все равно не получится
Andy
@m-2k
Dec 27 2015 10:10
Да он и не нужен, вдруг beam завис адово. Kill -9 и норм :3
Перед этим конечно можно попробовать аттачнутся и остановить из ВМ
Namdak Tonpa
@5HT
Dec 27 2015 10:11
да нужен конечно
хотябы kill -9 автоматизировать
Andy
@m-2k
Dec 27 2015 10:11
Чтобы не проебать транзакции
Namdak Tonpa
@5HT
Dec 27 2015 10:11
приложение должно быть написано так чтобы транзакции не проебались даже если ты компьютер водой зальешь
иначе это не транзакции
Andy
@m-2k
Dec 27 2015 10:12
Такое даже в драйвере к дисковой подсистеме трудно реализовать
Namdak Tonpa
@5HT
Dec 27 2015 10:19
ну теряется только последняя незакомиченная
остальные потерятся не могут :-)
транзакция считается успешной после fsync
если fsync syscall отработал то считается что на диске оно записано
Andy
@m-2k
Dec 27 2015 10:21
А, да, чот я ваще не о том запизделася
ютуп атупляет
надо воды хотя бы попить
Andy
@m-2k
Dec 27 2015 10:28
кстати про хуево спроектированные приложения
я тут запись через kvs удалил так она за собой половину цепочки похерила
range какой-то, что там теперь вообще происходит
должно же быть удаление элемента и слинковка соседних
Andy
@m-2k
Dec 27 2015 10:39
реньше ж все норм было, делет удалял из фида, ремув прост тер как пут. кто это закомитил блеадь
Namdak Tonpa
@5HT
Dec 27 2015 11:28
ты как удалял kvs:remove или kvs:delete ?
где это такое покаж?
я вижу do_remove делает relink все ок
так шо революция отменяется пока :-)
heiheshang
@heiheshang
Dec 27 2015 12:06
подскажите что я делаю не так
'''
ws.send(enc(tuple(atom('message'),
tuple(atom('name'),utf8_toByteArray($('#callback2 input[name=name]').val())))));
'''
отсылаю с морды сообщение, но в бэкэнде не могу поймать его.
'''
event(Event) ->
io:format(Event);
ok.
'''
Namdak Tonpa
@5HT
Dec 27 2015 12:33
может не на ту страницу
или val закрешился
heiheshang
@heiheshang
Dec 27 2015 12:46
а где тут страница указывается ?
heiheshang
@heiheshang
Dec 27 2015 12:59
вот так работает ws.send(enc(tuple(atom('direct'),atom('message'))));
Namdak Tonpa
@5HT
Dec 27 2015 13:02
а ну протокол нужно соблюдать, да
только {client,_} сообщеия слать
вместо message поставь client и все заработает
direct это немного для другого но тоже доедут
директ сообщения в продакшине лучше не использовать
или полностью брать на себя отвественность
что враг не пролезет через сигнатуры event
неясна судьба протокола {direct,_}
heiheshang
@heiheshang
Dec 27 2015 13:10
не понял что на что менять ws.send(enc(tuple(atom('client'),atom('message')))); так что ли ?
Namdak Tonpa
@5HT
Dec 27 2015 13:11
ws.send(enc(tuple(atom('client'),
tuple(atom('name'),utf8_toByteArray($('#callback2 input[name=name]').val())))));
сразу так
Andy
@m-2k
Dec 27 2015 13:16
@5HT ты чо мне пиздишь? :smile:
Namdak Tonpa
@5HT
Dec 27 2015 13:16
всмысле?
ты шо там попух
попух? :smile:
Namdak Tonpa
@5HT
Dec 27 2015 13:17
ты шо вася?
Andy
@m-2k
Dec 27 2015 13:17
ты там затраллелся? ))
Namdak Tonpa
@5HT
Dec 27 2015 13:17
delete это удаление без перелинковки
remove юзай, васьок
Andy
@m-2k
Dec 27 2015 13:18
а оно по другому работает?
Namdak Tonpa
@5HT
Dec 27 2015 13:18
конечно
писал же тебе
Andy
@m-2k
Dec 27 2015 13:19
remove(Record, Id,#kvs{mod=store_mnesia}=Driver) -> store_mnesia:remove(Record,Id);
не вижу нихуя чот
Namdak Tonpa
@5HT
Dec 27 2015 13:19
на строчку ниже глаза переведи
слепота блядь
remove -> takeoff -> do_remove -> relink
блядь ты доку читал вообще по kvs ?
Andy
@m-2k
Dec 27 2015 13:21
а это зачем mod=store_mnesia
Namdak Tonpa
@5HT
Dec 27 2015 13:22
нахуя отвечать ты все равно забудешь :-)
Andy
@m-2k
Dec 27 2015 13:22
АХХАХАХААХАХ
ща я ясам догоню
{kvs, [{dba,store_mnesia},
-define(DBA, kvs:config(dba)).
remove(Table,Key) -> remove (Table, Key, #kvs{mod=?DBA}).
WAT?!
Namdak Tonpa
@5HT
Dec 27 2015 13:26
remove/3 это новое API
а remove/2 это старое
и так для всего API есть
mod=store_mnesia означает что это экспериментальная фича на мнезии только тестировалась
нужно исправить
Andy
@m-2k
Dec 27 2015 13:28
я понимаю что есть /2 и /3
ну вот ты ж сам ща и обосрался
нет?
Namdak Tonpa
@5HT
Dec 27 2015 13:29
нет
там все заебись
Andy
@m-2k
Dec 27 2015 13:30
так почему не работает?
у меня n2o и мнезия через kvs, mod не указываю и юзаю олдскульные ф-ии /2
Namdak Tonpa
@5HT
Dec 27 2015 13:30
mod=store_mnesia только шорткат для fold
что неработает?
у нас везде все работает
примеры приложений
все доступно :-)
Andy
@m-2k
Dec 27 2015 13:32
а, теперь вижу
remove(Record,Id) -> mnesia:activity(context(),fun() -> kvs:takeoff(Record,Id,#kvs{mod=?MODULE}) end).
какой-то круговорот таплов в биндингах
я на самом деле наебал что не работает :smile:
прост доебаться хотел 0000))))) азаза
@5HT кстати на счет ивентов
Namdak Tonpa
@5HT
Dec 27 2015 13:36
давай быстро только
Andy
@m-2k
Dec 27 2015 13:36
@denys-potapov включи {pickler,secret} а то у тебя мессаги не шифруются
@5HT в общем как вешать на элементы события
например есть bind
Namdak Tonpa
@5HT
Dec 27 2015 13:37
да нахуй тот секрет там если все по SSL все равно
bind — это пример
если надо там шото изменить то покажи шо
Andy
@m-2k
Dec 27 2015 13:37
ну чтобы не ддосить на уровне приложений
Namdak Tonpa
@5HT
Dec 27 2015 13:37
ну события надо на джаваскрипте писать
чтобы их вешать
поэтому либо на #jq либо на shen
Andy
@m-2k
Dec 27 2015 13:38
не помню точно, в общем например навесить ивент focusout на элемент и чтобы он отсылал тапл и вынимал value из форм
кароч postback но не для click
и с кастомным js если надо
Namdak Tonpa
@5HT
Dec 27 2015 13:38
ну можно попытаться такое на эрланге написать чтобы оно компилировалось в джаваскрипт
напиши шаблон
Andy
@m-2k
Dec 27 2015 13:39
да не, основная проблема как я поимню в создании #event
чтобы он то что надо отсылал на сервае
Namdak Tonpa
@5HT
Dec 27 2015 13:39
чего
прото надо наху эти все пиклеры убрать оттуда нахуй
Andy
@m-2k
Dec 27 2015 13:40
ну бля чтобы пиклил ивент и id форм прописывал с которых надо значения получить
Namdak Tonpa
@5HT
Dec 27 2015 13:40
и тупо бинарь туда тулить
пикл хуикл
это все хуйня придумали чтобы по urlencode слать
нахуй это все в n2o не нужно
Andy
@m-2k
Dec 27 2015 13:41
ну я например не хочу данные из бд светить
коротые на postback вешаю
и которые обратно на сервак приезжают
Namdak Tonpa
@5HT
Dec 27 2015 13:41
ну придумай свой протокол
Andy
@m-2k
Dec 27 2015 13:42
нах мне придумывать
мне прост надо ивент делать по заказу
а то ща ивент создается автоматом и он очень ограничен в параметрах
в этом и вся проблема
хотелось бы указывать событие, из каких форм данные брать, из каких значений (.value или еще какие) и кастомный js вначале и вконце
Namdak Tonpa
@5HT
Dec 27 2015 13:43
wf_event:new же создает ивенты
Andy
@m-2k
Dec 27 2015 13:43
да, но оно вызывается автоматичеки
Namdak Tonpa
@5HT
Dec 27 2015 13:43
но ты можешь его сам вызвать и передать в #bind
сформировать JavaScript строку для bind всмысле автоматически
Andy
@m-2k
Dec 27 2015 13:45
ну эт мне придется wf_event скопировать почти полностью
Namdak Tonpa
@5HT
Dec 27 2015 13:45
ну типа того можно потом будет общие черты посмотреть
и что-то универсальное написать
Andy
@m-2k
Dec 27 2015 13:45
и так же хотелось бы к элементам применять сразу как postback
Namdak Tonpa
@5HT
Dec 27 2015 13:45
кого применять сразу ?
это ж и есть bind
Andy
@m-2k
Dec 27 2015 13:46
ну тип #link{events=[#event{type=focusout, ... }]}
Namdak Tonpa
@5HT
Dec 27 2015 13:46
что в байнд передаш как Code все применяется
а это
Andy
@m-2k
Dec 27 2015 13:46
я не могу бинд юзать
Namdak Tonpa
@5HT
Dec 27 2015 13:47
ну это если ты сам не напишешь то никто не напишет
Andy
@m-2k
Dec 27 2015 13:47
у меня wf:update(render/2)
Namdak Tonpa
@5HT
Dec 27 2015 13:47
у меня счас нет времени вообще
Andy
@m-2k
Dec 27 2015 13:47
если я пихну бинд в рендер то бинд приедет для несуществующих объектов
ну я не ща грю, на будущее
Namdak Tonpa
@5HT
Dec 27 2015 13:47
ну не все там плохо
я же аплоад демо на bind как-то написал
Andy
@m-2k
Dec 27 2015 13:47
прост уже 2 месяца прошло как я те в прошлый раз это говорилл
Namdak Tonpa
@5HT
Dec 27 2015 13:47
и там все ок приездает
рейсов нет
Andy
@m-2k
Dec 27 2015 13:48
аплоад работает потому что там кастомный элемент
Namdak Tonpa
@5HT
Dec 27 2015 13:48
ну и ты кастомный сделай
Andy
@m-2k
Dec 27 2015 13:48
ну каждый раз не хочется элементы копировать для одного бинда
у меня ща так и работает на кастомных но там пиздец ад
кароч new_event и postback эт ваще детский сад ток чтобы кнопочки работали
скучно
Namdak Tonpa
@5HT
Dec 27 2015 13:50
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}).
шо ты нагнетаешь
покажи что тут не так?
Andy
@m-2k
Dec 27 2015 13:51
то что надо элемент скопировать полностью чтобы можно было на него вешать свои бинды
Namdak Tonpa
@5HT
Dec 27 2015 13:51
куда скопировать?
Andy
@m-2k
Dec 27 2015 13:51
прост
Namdak Tonpa
@5HT
Dec 27 2015 13:51
при добавляении элемента вешай бинды
непонимаю что ты пиздишь
вот пример!
Andy
@m-2k
Dec 27 2015 13:51
мне надо link расширить бля
Namdak Tonpa
@5HT
Dec 27 2015 13:51
в этом примере есть все
Andy
@m-2k
Dec 27 2015 13:51
и другие например
Namdak Tonpa
@5HT
Dec 27 2015 13:52
какие например ?
Andy
@m-2k
Dec 27 2015 13:52
для этого я копирую element_link и хуячу туда код бля копируя wf_event.erl в него.
Namdak Tonpa
@5HT
Dec 27 2015 13:52
а
Andy
@m-2k
Dec 27 2015 13:52
нахуя мне это делать каждый раз
Namdak Tonpa
@5HT
Dec 27 2015 13:52
типа ты хочешь чтобы каждый элеменет
Andy
@m-2k
Dec 27 2015 13:52
да
Namdak Tonpa
@5HT
Dec 27 2015 13:52
брал из какого-то поля
Andy
@m-2k
Dec 27 2015 13:52
умел больше
Namdak Tonpa
@5HT
Dec 27 2015 13:52
например binds
всю эту хуету и при рендере ее автоматически навешивал если она там есть в #element.binds ?
Andy
@m-2k
Dec 27 2015 13:53
ну я модель событий хочу расширить завязанную ща только на click и вынимания только .value из форм и не умеющую в кастомный js
да да
Namdak Tonpa
@5HT
Dec 27 2015 13:53
ну так хули тут делать
тут 4 строки кода поменять
просто нужно подумать где что изменить
Andy
@m-2k
Dec 27 2015 13:54
ну так коре, ты и ебись )
да, подумать неплохо бы
Namdak Tonpa
@5HT
Dec 27 2015 13:55
я прямо счас закомичу а если не заработает сразу у тебя тогда разберешься сам
что где подправить
Andy
@m-2k
Dec 27 2015 13:55
не
Namdak Tonpa
@5HT
Dec 27 2015 13:55
да
Andy
@m-2k
Dec 27 2015 13:56
ты опять 100 строк удалишь и одну напишешь
хорошо бы еще подумать как бы qs юзать а не только qi
Namdak Tonpa
@5HT
Dec 27 2015 13:58
а #element.actions посмотри счас используется ?
а используется
Andy
@m-2k
Dec 27 2015 13:58
то есть надо чтобы #ивент{} умел
  • id элемента
  • тип события
  • js код до ивента
  • ивент ({client,sas} например)
  • js код после
  • id элементов для вынимания значений и названия полей из которых их надо вынимать
Namdak Tonpa
@5HT
Dec 27 2015 13:58
wire делается всем экшинам
не не эту хуету сам пиши если тебе нада
я просто сделаю чтобы бинды биндились
или покажу тебе как оно делается
Andy
@m-2k
Dec 27 2015 13:59
а они не биндятся что ли
Namdak Tonpa
@5HT
Dec 27 2015 13:59
автоматически при рендере как ты хочешь нет
хотя нет
Andy
@m-2k
Dec 27 2015 14:00
ну давай так
Namdak Tonpa
@5HT
Dec 27 2015 14:00
счас тебе покажу
счас покажу как #link сделать
в n2o все есть!
Andy
@m-2k
Dec 27 2015 14:00
да я понимаю что все есть прост копипаст заебал
Namdak Tonpa
@5HT
Dec 27 2015 14:00
#link{actions=[#bind{},#bind{},#bind{}]}
попробуй
Andy
@m-2k
Dec 27 2015 14:01
я ща нимагу :(
Namdak Tonpa
@5HT
Dec 27 2015 14:02
ну кароче все будет работать
как ты хочешь
это было возможно с самого начала фреймфорка
#element.actions это и есть список всего что должно завайрится до рендера
Andy
@m-2k
Dec 27 2015 14:03
нахуй мне до рендера
Namdak Tonpa
@5HT
Dec 27 2015 14:04
ну в правильном порядке типа
как в upload
в upload же работает
Andy
@m-2k
Dec 27 2015 14:04
хм, потестю
Namdak Tonpa
@5HT
Dec 27 2015 14:04
а в upload bind вайры вызываются в самом начале рендера
т.е. до рендера
Andy
@m-2k
Dec 27 2015 14:05
там же фишка в том что одни actions цепляются как ++A а другие как [A|...]
Namdak Tonpa
@5HT
Dec 27 2015 14:05
это не process.actions
это #element.actions
как ты положешь
в таком порядке оно и вызовится при рендере
Andy
@m-2k
Dec 27 2015 14:05
смари. ну хотя пофек. потестю потом буду филосовствовать
heiheshang
@heiheshang
Dec 27 2015 15:03
можно так вьюху подключать

dtl{file = "/admin/login", app=review,bindings=[]}

?
heiheshang
@heiheshang
Dec 27 2015 15:12
все нашел как, через folder
Denys
@denys-potapov
Dec 27 2015 16:12
доделал вторую часть http://habrahabr.ru/post/274107/
heiheshang
@heiheshang
Dec 27 2015 16:20
класс, то что нужно мне
Roman
@AstRonin
Dec 27 2015 16:46
все таки впихнул mnesia :)))
Denys
@denys-potapov
Dec 27 2015 16:50
я же сделал и написал до того, как почитал комментарии, решил не переделывать
Roman
@AstRonin
Dec 27 2015 16:53
кто будет переходить на erlang (или добавлять erlang) уже имеет другие базы в своих проектах и надобности в мнезии ни какой нет, так что и описывать это надобности нету...
ну про другую базу можно дописать дальше в статье
Denys
@denys-potapov
Dec 27 2015 16:56
я хочу свой настоящий проект задеплоить на хероку с монгой, вот когда разберусь - напишу апдейт
Ram Kumar
@ramka001
Dec 27 2015 18:20
This message was deleted
Ram Kumar
@ramka001
Dec 27 2015 18:26

Hi, I'm having a problem with the DB update. Using the user.hrl and users.erl sample I am able to store the data successfully, but when I try to increment data, instead of incrementing and adding new rows, the existing row, is overwritten. So, it ends up with only one row. This is the header (same as the example)

-define(USER_HRL, true).

-include_lib("kvs/include/kvs.hrl").

-ifndef(USER_EXT).
-define(USER_EXT, email).
-endif.

-record(user, {?ITERATOR(feed, true), ?USER_EXT,
        firstName,
        lastName,
        display_name,
        username,
        password,
        date_of_birth,
        gender,
        register_date,
        tokens = [],
        images,
        date,
        status,
        zone,
        type }).

-endif.

And this is the erl file:-

-module(users).
-behaviour(rest).
-compile({parse_transform, rest}).
-include_lib("user.hrl").
-include_lib("stdlib/include/qlc.hrl").
-export([init/0, populate/1, exists/1, get/0, get/1, post/1, delete/1]).
-rest_record(user).
-compile(export_all).

init()               -> ets:new(users, [public, named_table, {keypos, #user.id}]).
populate(Users)      -> ets:insert(users, Users).
exists(Id)           -> ets:member(users, wf:to_list(Id)).
get()                -> ets:tab2list(users).
get(Id)              -> #user{id=Id}.
delete(Id)           -> ets:delete(users, wf:to_list(Id)).
post(#user{} = User) -> ets:insert(users, User);
post(Data)           -> post(from_json(Data, #user{})).

to store the data I'm using

  Email = wf:q(eMail),
  FirstName = wf:q(fName),
  LastName = wf:q(lName),
  Password = wf:q(pWord),

  {{Current_Year, Current_Month, Current_Day}, {Current_Hour, Current_Min, Current_Second}} = calendar:local_time(),
  Current_Date = {{Current_Year, Current_Month, Current_Day}, {Current_Hour, Current_Min, Current_Second}},

  <<PasswordDigest:160>> = crypto:sha(Password),
  DOB = wf:q(dobDatePicker),

  USER = #user{email=Email, firstName=FirstName, lastName=LastName, password=PasswordDigest,
                 date_of_birth=DOB, register_date=Current_Date },

  users:populate(USER);
Denys
@denys-potapov
Dec 27 2015 23:52
@ramka001 i don't know what you want to do, but the code works correctly
ets:insert/2 If the table is a set and the key of the inserted objects matches the key of any object in the table, the old object will be replaced
your key is #user.id, that is undefined for every newly created user