@proelixir

Страница 915 из 1045
Никита
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
Ты прав. Я имею ввиду матчинг через знак = в отдельной строке под «переменной»
ну тады и a = a + 1 это "без переменных" ведь = это не присваивание, а матчинг :)

кстати, в эрланге так можно?

Никита
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
6> B = 1. 1 7> B = B + 1. ** exception error: no match of right hand side value 2 8>
круто, а в элипсире можно, печаль

Никита
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
Вроде, кол-во таплов должно быть статичным или контролируемым? Или это только об атомах?

$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
А ordered set ets это и есть avl tree со всякими оптимизациями
С одним огромным минусом - нельзя задать свою функцию сравнения. Собсно поэтому я и городил велосипед

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())

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 проект, большой и крутой

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
https://github.com/gausby/tracker#tracker Можно вот это взять для заготовки
Зачем делать своё, если можно челу помочь?

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
C Elixir 1.2-rc легче продолжить... Другой вопрос, если уже есть в Go то что нужно, зачем делать для Elixir?
затем что: 1. мешать много языков и технологий без серьёзной причины - к большим проблемам в будущем 2. Go тяжело эмбеддится в другие языки

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

Alex
26.03.2018
09:58:30
а что тебе нужно, что Chihaya не умеет?

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

Google
Dmitry
26.03.2018
10:02:57
Мне другое интересно, зачем на эликсире торрент-трекер

и чем он будет лучше аналогов на других языках

или это либа ради либы?

$ergi0
26.03.2018
10:03:51
Александр
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
А что касается "зачем делать то, что уже есть", то зачем вообще писать на эликсире...

Вернее, зачем было делать эликсир)

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