
Никита
23.03.2018
16:45:09
третий дергает юзера
и получится гардиан)))
plug(Guardian.Plug.VerifyHeader)
plug(Guardian.Plug.EnsureAuthenticated)
plug(Guardian.Plug.LoadResource)

Dmitry
23.03.2018
16:48:04

Google

$ergi0
23.03.2018
16:56:19
Не, ну если хочется все самому
Хочется понять можно ли это сделать по-другому. Разбить на три плага или использование гардиана не проблема. Но такая же проблема вылезет в следующем месте.

Никита
23.03.2018
16:58:09
$ergi0 так проблема то как раз в том, что ты хочешь много функционала напихать в одно место. Хотя лучше сделать (ну на мой нубский взгляд) - 3 простых функции, каждая из которых будет делать свое маленькое дело, но хорошо, чем одну сложную, в коде которой можно и запутаться)

$ergi0
23.03.2018
17:00:01
Ну хорошо, как получить значение, если оно нил, то вернуть ошибку, а если нет, то передать в другую функцию

Никита
23.03.2018
17:00:31
да очень просто) патерн матчингом)

$ergi0
23.03.2018
17:00:48
Переменная не из-за функционала вылазит

Никита
23.03.2018
17:01:37
def first(nil), do: :error
def first(abce), do: :ok

$ergi0
23.03.2018
17:01:56
О!

Никита
23.03.2018
17:02:02
first - это твоя следующая функция) если в нее прилетит нил - будет ошибка, если нет, будет ок
также и ветвление можно делать)

Evgeny
23.03.2018
17:39:36
кстати, в эрланге так можно?

Никита
23.03.2018
17:42:31
6> B = 1.
1
7> B = B + 1.
** exception error: no match of right hand side value 2
8>

$ergi0
23.03.2018
18:01:46

Google

Evgeny
23.03.2018
18:02:37

Никита
23.03.2018
18:03:28
мож оно и правильно, что низя)

Evgeny
23.03.2018
18:03:58

Aldar
23.03.2018
18:04:43

Dmitry
23.03.2018
18:11:40
В Erlang-е была библиотека, в которой можно было переменные делать как в Elixir-е: @Var = @Var + 1
Через parse_transform, который потом генерировали вот такой код Var1 = Var0 + 1 из этого.
Либо вручную часто 0-1-2 писали.
В некоторых местах до 7 и больше доходило, если это cowboy, к примеру.

Evgeny
23.03.2018
18:13:10
с другой стороны тут вот аффтар оправдывается http://blog.plataformatec.com.br/2016/01/comparing-elixir-and-erlang-variables/
и, надо признать, трудно с ним не согласиться

Dmitry
23.03.2018
18:18:26
Eugene Хорошая статья.

Evgeny
25.03.2018
11:31:05
Запилил тут на днях имплементацию AVL-дерева, ноды были представлены в виде структур
Потом перепилил ноды на Record и, опаньки, вставка стала на 30% быстрее.

$ergi0
25.03.2018
16:02:39
А какой код оно генерит можно посмотреть?
Откуда такая разница

Evgeny
25.03.2018
16:16:49

Alex
25.03.2018
16:42:18
Доступ по индексу в таплах тоже заметно дешевле

Evgeny
25.03.2018
17:39:12

Dmitry
25.03.2018
20:01:26
Вроде, кол-во таплов должно быть статичным или контролируемым? Или это только об атомах?

Evgeny
25.03.2018
20:09:43

$ergi0
25.03.2018
20:47:11

Google

Alex
25.03.2018
20:48:04

$ergi0
25.03.2018
20:49:03
Ну, как минимум, чтобы было быстрее
30% это нездраво

Alex
25.03.2018
20:51:23
Никто никому ничего не должен. Приняли мапы как основной композитный тип - платите оверхед за мапы.

$ergi0
25.03.2018
20:58:09
Есть где-то тыща языков, где это сделано, не обязательно как в пхп делать

Alex
25.03.2018
21:01:04
Тю, ну отказаться от мапов для структур :)
Ну это мощная идея, конечно. Только это уже breaking change. Потому что структуры можно использовать как простые мапы, и я уверен, что я не один в структуры пихаю произвольные незадекларированные поля
С рекордами, например, не работают протоколы, что тоже интересная история

$ergi0
25.03.2018
21:03:11
Там смотря как пихается
Если не из user input берётся, то соптимизить не проблема
Да понятно, что никто менять не будет, просто удивительно

Alex
25.03.2018
21:04:58
Ну и вообще, на самом деле эти 30% не так уж важны. В любом случае, все данные под скорость доступа рано или поздно окажутся в ets.
А ordered set ets это и есть avl tree со всякими оптимизациями

Evgeny
25.03.2018
21:12:42

Alex
25.03.2018
21:13:48

Evgeny
25.03.2018
21:16:27
но на самом деле меня эти 30% не особо волновали, просто было любопытно. И, кстати, рекорды - прикольная штука.

$ergi0
26.03.2018
01:43:11
Переделал плаги :)
Уже нормально, или ещё что-то пилить?
https://glot.io/snippets/ezih726ys1

Vladimir
26.03.2018
02:20:58

Google

Vasily
26.03.2018
02:29:16
кейсы заменить паттерн матчингом

Vladimir
26.03.2018
02:32:51
+ раз уж Plugs.HeadersCheck в &call/2 проверяет наличие всех хедеров, как вариант их можно заассайнить, и потом доступаться к ним сразу в conn, без вышеупомянутого hd(get_req_header())

$ergi0
26.03.2018
02:35:38

Vladimir
26.03.2018
02:47:33
Например?
видимо
defp check_signature(calculated, conn) do
case Plugs.HeadersCheck.hdr_client_signature(conn) == calculated do
true -> conn
false -> send_fail_response(conn, "incorrect client signature")
end
end
->
defp check_signature(calculated, conn),
do: compare_header(conn, Plugs.HeadersCheck.hdr_client_signature(conn), calculated)
defp compare_header(conn, signature, calculated) when signature == calculated, do: conn
defp compare_header(conn, _, _), do: send_fail_response(conn, "incorrect client signature")

Dmitry
26.03.2018
07:53:43
Никто случайно не ищет проект потренироваться в Эликсире? Есть OSS проект, большой и крутой

foracall
26.03.2018
07:54:03

Dmitry
26.03.2018
07:55:04
Нужно сделать вот это на эликсире, да ещё так чтобы можно было интегрировать в существующий феникс апп
https://github.com/chihaya/chihaya
https://github.com/gausby/tracker#tracker
Можно вот это взять для заготовки
Хотя врядли поможет

Dmitry
26.03.2018
08:06:02

Dmitry
26.03.2018
08:06:55
Потому что чел 2 года назад делал последний комит
Elixir 1.2-rc
Легче переделать

Dmitry
26.03.2018
08:09:41
C Elixir 1.2-rc легче продолжить... Другой вопрос, если уже есть в Go то что нужно, зачем делать для Elixir?

Александр
26.03.2018
09:49:08
3. несмотря на то что он простой и много кто на нём пытается писать, код ужасный у большинства пейсателей

Alex
26.03.2018
09:58:30
а что тебе нужно, что Chihaya не умеет?
про "тяжело эмбедится" я вообще даже говорить не буду, это ИМХО очень странная позиция. я вообще уже очень давно не видел необходимости в эмбединге.

Google

Dmitry
26.03.2018
10:02:57
Мне другое интересно, зачем на эликсире торрент-трекер
и чем он будет лучше аналогов на других языках
или это либа ради либы?

$ergi0
26.03.2018
10:03:51

Alex
26.03.2018
10:05:56

Александр
26.03.2018
10:06:41
найти голангиста или эликсирщика легче (и он будет дешевле) чем и того и другого в одном лице

Alex
26.03.2018
10:07:37
ну, я так не считаю. на го может писать любая обезьяна, имхо
у меня был раньше некий тулинг на го, так я каждый раз, когда его трогал просто учил заново язык.
потому что трогал я его реже чем раз в месяц

Александр
26.03.2018
10:10:06
не у всех есть столько свободного времени и желания
и задач где Go реально нужен

Dmitry
26.03.2018
10:10:34
Мне почему-то кажется, что такой проект был бы попаданием в целевую нишу эликсира

Александр
26.03.2018
10:10:46
для torrent клиента вполне допускаю что Го хорошо заходит, если что ?

Dmitry
26.03.2018
10:11:24
А что касается "зачем делать то, что уже есть", то зачем вообще писать на эликсире...
Вернее, зачем было делать эликсир)