
Dmitry
04.03.2018
17:58:34
Можно использовать пром стандартные mqtt
Или кластер редис
И не трахать мозг
Короче загадка

Google

Dmitry
04.03.2018
17:58:56
@Virviil Ну, мы только один компонент системы пишем, а у них уже в другом компоненте ws был.

Артем
04.03.2018
17:59:21
такая вот беда

Dmitry
04.03.2018
18:00:08
И по ws они отдают и на фронтенд и на другие бекэнды нотификации.
Зачем дополнительно другой транспорт??
Он там к kafka подключен.

Dmitry
04.03.2018
18:01:17
Криптобиржи наверное...
Аххахаа
Криптобиржи закрываются быстрее чем успеваешь сделать даже демо
Причём закрываются со всеми твоими бабками )₽

Артем
04.03.2018
18:02:52
жизнь - боль
но вообще по итогам работы с hackney и парой вебсокет лип появилось желание забить на них, взять gen_tcp и написать своё

Dmitry
04.03.2018
18:10:57
У нас самая настоящая microservice - архитектура, в которой больше половины компонентов на Java и только наш core компонент на Elixir-е. И что и по каким каналам соединено между собой, уже решено было давно - это rest и ws. Так что с этим приходиться жить.

Google

Dmitry
04.03.2018
18:11:41
Даже у websocket_client-а, хотя - это пока лучшее, что есть - минус нельзя между connect-ами менять URL
А это нужно, если token обновился. Поэтому приходится ставить таймаут и вместо reconnect-а убивать процесс, чтобы его супервизор перезапустил. Работает, а вообще, если кому-то ещё такое понадобиться - надо сконтрибьютить в библиотеку.

Артем
04.03.2018
18:14:51
токен в урле так себе решение
надо завтра попробовать клиентик


Dmitry
04.03.2018
22:30:01
n2o - это тихий ужас, после попыток читать документацию, чтобы сразу интегрировать в свой проект, решил поэкспериментировать на примере. Смотрю, в коде примера есть:
{"/rest/:resource", rest_cowboy, []}
О, класс - протестирую ресурс... начал искать, как же этот ресурс называется? Где задаётся имя ресурса?
Оказывается нигде, ищется просто модуль с таким же именем. Привет привязка имени модуля к ресурсу, прощай организация кода.
И у кого-то поворачивается язык говорить (ладно, утрирую, тут только 1 из 5 высказавшихся считает n2o удобнее феникса, остальные 4-е единоглассно другого мнения).
Просто n2o ничего не даёт, ничего не делает по умолчанию, везде велосипед. Т.е. если нужно, чтобы аппликация хоть какие-то ошибки возвращала? Делай свой велосипед....
И это я ещё не смог успешно выполнить запрос к ресурсу из примера n2o
Отдаёшь неправильные данные:
HTTPoison.put! "http://localhost:8000/rest/users/test", "{}", ["content-type": "application/json"]
- крэшится и ошибку не показывает.
Создал пользователя - (выдал 201), почему-то get возвращает 404.
Я потратил полтора часа времени на то, чтобы попытаться разобраться как работает rest в n2o (так как писать сразу интеграцию понятно было, что бесмысленно - ибо документация просто никакая)... В конечном итоге, прежде чем я хоть что-то (оно пока до сих пор не возвращает мне созданного пользователя) начинал понимать в том как оно работает - мне пришлось залезать в код n2o и rest-а, чтобы понять почему он не работает. На неправильные данные (в каком формате он их ожидает - пока не понятно, но судя по-всему не в виде json object, WTF??? ибо крэшится, никакой ошибки не показывая - по трейсу я конечно вижу, где крэшится). Вообще чуть ошибка, он тебе либо 404, либо 500 без какой-либо подсказки, что же пошло не так. Ни один эликсировский фреймворк (и феникс в том числе) не заставлял меня в первый час попыток запустить и попробовать какой-нибудь rest пример, при том - чтобы понять - лезть ещё и в код самого фреймворка и трейсить его, а так же не показывать ошибок в консоли.
В конечном итоге, что мы имеем - нужен middleware - ищи в коде, нужна обработка ошибок, да хотя бы callback-и как фениксе - велосипедь сам, нужна проверка (и другие полезные функции, которые приносит phoenix) - велосипедь сам, нужно чтобы парсинг данных работал (соединение параметров из url и body, который plug из коробки поддерживает ) - выбрасывай rest_cowboy и пиши сам.
@TTaraskin Не удивительно, что там всё якобы работает. Просто всё, что нужно делать - делай сам, велосипедь сам. Нужен middleware - велосипедь сам, нужен корс, добавь + 50 (как минимум) строк на реализацию(вместо 1-ой строки plug-а из уже существующих), нужны ошибки, всё ручками и снова велосипед, framework n2o - кроме тихого 404 и 500 на каждый неправильный чих ничего не делает вообще и никаких инструментов не даёт. И чтобы выяснить что же не так, тут сразу же нужно лезть либо в сорс код, либо трейсить (для запуска примера пришлось делать и то и другое). Нужно, чтобы как все типичные REST парсеры работали (plug из коробки так парсить может) с соединением параметров из url и body - выкидываешь дефолтную реализацию rest под n2o (она этого не умеет, посмотрел по source-коду) и велосипедишь СНОВА сам. Phoenix - не идеальный, но в нём есть многое нужное из коробки и оно работает. Я не знаю, как люди после phoenix - могут писать на n2o. Даже если шаблоннер в Elixir-е баговский или там ошибку как не так показывает, можно прикрутить erlydtl к фениксу в крайнем случае, но имплементировать совсем базовые вещи с нуля, часть которых plug умеет из коробки, не говоря про phoenix. Здесь просто простыню на простыне кода прийдётся писать, прежде чем дойдёшь до стадии того, что в phoenix/plug-е работает из коробки или занимает одну строчку. (СС: Для информации @artem_pankov @Virviil @nwalker ).
Я предполагал, что всё так ужасно, но теперь убедился на собственной шкуре.


Alexey
05.03.2018
01:11:11
эликсир/феникс не вызывает проблем у тех кто приходит из рубей, т.к. там норма магия и не написание с нуля кода, а допил/установка гемов. Людям которые приходят из других языков это может быть сложнее, потому что нормальных библиотек нет и все приходится/выгоднее писать самому
не раз замечал как java/php/python разработчики используют другие либы чисто чтоб подсмотреть реализацию, а в итоге пилят сами с 0

Taras ?
05.03.2018
03:22:59

Google


Taras ?
05.03.2018
03:27:11
@TTaraskin Не удивительно, что там всё якобы работает. Просто всё, что нужно делать - делай сам, велосипедь сам. Нужен middleware - велосипедь сам, нужен корс, добавь + 50 (как минимум) строк на реализацию(вместо 1-ой строки plug-а из уже существующих), нужны ошибки, всё ручками и снова велосипед, framework n2o - кроме тихого 404 и 500 на каждый неправильный чих ничего не делает вообще и никаких инструментов не даёт. И чтобы выяснить что же не так, тут сразу же нужно лезть либо в сорс код, либо трейсить (для запуска примера пришлось делать и то и другое). Нужно, чтобы как все типичные REST парсеры работали (plug из коробки так парсить может) с соединением параметров из url и body - выкидываешь дефолтную реализацию rest под n2o (она этого не умеет, посмотрел по source-коду) и велосипедишь СНОВА сам. Phoenix - не идеальный, но в нём есть многое нужное из коробки и оно работает. Я не знаю, как люди после phoenix - могут писать на n2o. Даже если шаблоннер в Elixir-е баговский или там ошибку как не так показывает, можно прикрутить erlydtl к фениксу в крайнем случае, но имплементировать совсем базовые вещи с нуля, часть которых plug умеет из коробки, не говоря про phoenix. Здесь просто простыню на простыне кода прийдётся писать, прежде чем дойдёшь до стадии того, что в phoenix/plug-е работает из коробки или занимает одну строчку. (СС: Для информации @artem_pankov @Virviil @nwalker ).
вас начать читать — так феникс все сам пишет, пока программист кофе пьет))
да, надо что-то самому писать
и нет, вопросов "что это за фиговый код и что он делает" нету
эликсир/феникс не вызывает проблем у тех кто приходит из рубей, т.к. там норма магия и не написание с нуля кода, а допил/установка гемов. Людям которые приходят из других языков это может быть сложнее, потому что нормальных библиотек нет и все приходится/выгоднее писать самому
ну блин) в n2o можно или самому в исходник посмотреть, или авторов спросить совета — помогут понятным языком
с фениксом — в исходниках хрен разберешься, делать по книге — хрен, уроки устаревают быстрей чем книгу издадут,
делать по нагугленных статьях — хрен, все статьи на 10 страниц гугла — как братья-близнецы с ксерокса, всюду пишет "делай вот так и будет збс", делаешь - ошибка и нифига
не знаю, возможно за год ситуация улучшилась
Диме вот хорошо — он в макросах как рыба в воде,
так ведь не каждый так умеет
мне так же комфортно в чистых функциях, с максимум двойной вложенностью
максимальная простота, читабельность
просто добавлять, просто рефакторить
что в js что в erl


Артем
05.03.2018
06:10:44
async + handle_initial_conn_failure
интересно, зачем оно по дефолту не так
не могу себе представить ситуации когда приложение может не стартовать

Dmitry
05.03.2018
09:02:17
@TTaraskin Дело не в парстрансформе - он только за json => record трансформацию отвечает, не больше. Она тут вообще не причем.
@TTaraskin "можно вот так сделать
https://github.com/221V/ublog/blob/master/apps/ublog/src/main_rest.erl" => Просто выкинуть n2o и писать все на ковбое.

Sergey
05.03.2018
09:07:11
ну блин) в n2o можно или самому в исходник посмотреть, или авторов спросить совета — помогут понятным языком
с фениксом — в исходниках хрен разберешься, делать по книге — хрен, уроки устаревают быстрей чем книгу издадут,
делать по нагугленных статьях — хрен, все статьи на 10 страниц гугла — как братья-близнецы с ксерокса, всюду пишет "делай вот так и будет збс", делаешь - ошибка и нифига
не знаю, возможно за год ситуация улучшилась
Тарас, а если не секрет, в каких проектах ты применя n2o и насколько они были продакшен?

Максим
05.03.2018
09:22:59
Всем привет! Есть модуль на GenStateMachine в режиме callback_mode: :state_functions можно ли как-то отлавливать события, которые не попадают ни в один колбэк?

Dmitry
05.03.2018
09:32:32

Evgeny
05.03.2018
09:45:52
Народ, кто использовал, это вот годнота?
https://github.com/whitfin/cachex

Dmitry
05.03.2018
09:49:58
https://github.com/melpon/memoize это использовал
легкая в использовании и настройке либа
в конце бенчмарки, но верить им или нет - дело каждого)

Evgeny
05.03.2018
09:53:40
ну у меня не сильно нагруженный кэш
лишь бы не глючило

Dmitry
05.03.2018
09:54:42
ну я про то, что в бенчмарке странные цифры, 19,468 ms ~ 20 секунд, или 20 ms

Google

Dmitry
05.03.2018
09:55:12
20 секунд как-то слишком нереально, а миллисекунды так никто не пишет
но это придирки, а либа норм

Evgeny
05.03.2018
09:55:30
и еще один нубский вопрос. если у меня в состоянии генсервера скажем 5 полей, то что советует применять BP кортежи или таки мапы?
Я решил, что кортежи пошустрее, но легко перепутать порядок полей

Dmitry
05.03.2018
09:56:20
мапы проще поддерживать в разных частях приложения

Dmitry
05.03.2018
09:56:37
Тупл больше 2-3 полей лучше превращать либо в Record, либо в мэп.

Evgeny
05.03.2018
09:56:57
а чем рекорд лучше? этож тот же тупл

abc
05.03.2018
09:56:58
как разобраться в накоманском синтаксисе :ets.match ? ) нужно просто искать по значению в ets

Dmitry
05.03.2018
09:57:32
@zeroweb https://github.com/ericmj/ex2ms

Taras ?
05.03.2018
10:02:16

abc
05.03.2018
10:02:50

Артем
05.03.2018
10:05:14

Evgeny
05.03.2018
10:05:51
А структуры, насколько я понял те же мапы. То есть доступ к полю, происходит также как и доступ к записи в мапе?

Артем
05.03.2018
10:06:24

Dmitry
05.03.2018
10:06:56
@zeroweb v(2) - это функция шела, позволяющая доступится к значениям определенной строки.

abc
05.03.2018
10:07:27
ох ок. не пользовался таким трюком еще)

Dmitry
05.03.2018
10:07:43
v(2) возвращает то, что выдало iex(2)>

Артем
05.03.2018
10:07:50

Evgeny
05.03.2018
10:08:36

Google

Артем
05.03.2018
10:08:38
а так насколько я помню мапы внутри тоже кортежи

Evgeny
05.03.2018
10:09:02
хотя маленькие могут быть и кортежами

Артем
05.03.2018
10:09:39
наверно, тут есть кто-то, кто точно может сказать, я читал почти 2 месяца назад

Evgeny
05.03.2018
10:09:43
Я заметил, что мапа сортирует свои поля

Артем
05.03.2018
10:09:53
и если честно думаю что разница в скорости непринципиальна

Evgeny
05.03.2018
10:10:33

Артем
05.03.2018
10:12:27
лично я всегда в стейтах храню мап, так как кортеж опасно а рекорд геморно

Evgeny
05.03.2018
10:15:33
я вот тоже так думаю. мапы или структуры

Vladimir
05.03.2018
10:16:36

abc
05.03.2018
10:17:25

Dmitry
05.03.2018
10:25:30
Eugene Открытые issue есть? https://github.com/ericmj/ex2ms/issues Нету.

Andrey
05.03.2018
10:26:48

Evgeny
05.03.2018
10:27:46

Dmitry
05.03.2018
10:28:28
"были какие-то баги" => Но при этом не открыто ни одного bug репорта.

Evgeny
05.03.2018
10:28:46
Это не я говорил :)

Dmitry
05.03.2018
10:29:29
А, сорри.

Evgeny
05.03.2018
10:29:29
Ты меня с кем-то попутал.

Andrey
05.03.2018
10:29:57
пока он маленький https://github.com/erlang/otp/blob/master/erts/emulator/beam/erl_map.h#L75 у нас фактически массив, если большой то дерево

Артем
05.03.2018
10:30:13
проект с 3 issues и коммитом год назад