@proelixir

Страница 897 из 1045
Dmitry
04.03.2018
17:58:34
Можно использовать пром стандартные mqtt

Или кластер редис

И не трахать мозг

Короче загадка

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

Артем
04.03.2018
17:59:21
Короче загадка
все крипто биржи отдают данные в реалтайме по ws

такая вот беда

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
И у кого-то поворачивается язык говорить (ладно, утрирую, тут только 1 из 5 высказавшихся считает n2o удобнее феникса, остальные 4-е единоглассно другого мнения).
lol я тоже не смог в парс_трансформ, ну так и фиг с ними можно вот так сделать https://github.com/221V/ublog/blob/master/apps/ublog/src/main_rest.erl

Просто n2o ничего не даёт, ничего не делает по умолчанию, везде велосипед. Т.е. если нужно, чтобы аппликация хоть какие-то ошибки возвращала? Делай свой велосипед....
дает больше чем феникс для начала — при работе с вебсокетами прозрачный js, прозрачный erl пару строчек и все работает а в фениксе еще надо сидеть курить и курить доки

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
Мне такое поведение точно не подходит.
https://hexdocs.pm/websockex/WebSockex.html#t:option/0

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 и писать все на ковбое.

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

Dmitry
05.03.2018
09:32:32
@TTaraskin "можно вот так сделать https://github.com/221V/ublog/blob/master/apps/ublog/src/main_rest.erl" => Просто выкинуть n2o и писать все на ковбое.
В Эрланг коде ещё можно жестко прописывать классы дивов ) От PHP 3 не далеко ушли похоже :)

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
В Эрланг коде ещё можно жестко прописывать классы дивов ) От PHP 3 не далеко ушли похоже :)
проще в паре файлов в эрланге чем раскидать на очень много шаблонов

abc
05.03.2018
10:02:50
@zeroweb https://github.com/ericmj/ex2ms
Спасибо ) Тут тоже наркомании хватает, например что такое v(2) и откуда оно взялось не понятно ) Но вроде бы меньше чем в ets

Артем
05.03.2018
10:05:14
Evgeny
05.03.2018
10:05:51
рекорд быстрее мапа
имеется в виду чем он лучше обычного кортежа? Этож собственно и есть кортеж

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

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
А структуры, насколько я понял те же мапы. То есть доступ к полю, происходит также как и доступ к записи в мапе?
насколько я помню, разница опять-таки в скорости. мапы подразумевают добавление/удаление элементов и не зафиксированы на этапе компиляции

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
Спасибо ) Тут тоже наркомании хватает, например что такое v(2) и откуда оно взялось не понятно ) Но вроде бы меньше чем в ets
полгода назад трахался с ex2ms, были какие-то баги, не все функции умел правильно собирать в паттерны, если используются рекорды. В итоге сделал отдельный эрланговый файлик который использовал ets:fun2ms и его вызывал.

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

Andrey
05.03.2018
10:26:48
наверно, тут есть кто-то, кто точно может сказать, я читал почти 2 месяца назад
Там используется HAMT (http://infoscience.epfl.ch/record/64398/files/idealhashtrees.pdf)

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 у нас фактически массив, если большой то дерево

Страница 897 из 1045