@proelixir

Страница 168 из 1045
Can
10.11.2016
11:47:17
Это же как объект со стейтом

Допустим я хочу сделать тазовый генсервер а потом его расширять

Как вот такую кодобазу тянуть за собой?

Eugene
10.11.2016
11:47:54
use use use

Google
Eugene
10.11.2016
11:47:59
делаешь что-то базовое

в нем описываешь макрос __using__

__using__ = когда меня юзают, выполнить в контексте модуля который меня юзает вот что: _внутренность_макроса_

Andrey
10.11.2016
11:49:16
Он не про то же

Can
10.11.2016
11:49:29
Про то

Eugene
10.11.2016
11:50:24
по сути когда ты пишешь use GenServer, ты «наследуешься» (если так угодно…) от модуля GenServer из эликсира

Dmitry
10.11.2016
11:50:39
Надо запихивать в __using__

Eugene
10.11.2016
11:50:55
только я бы называл это своими словами, т.е. «композиция»

цепочку таких композиций (один модуль use другой) – можно навкладывать друг в друга бесконечно

и получится свое homegrown наследование)

Can
10.11.2016
11:52:30
Просто в целом такая вещь, есть зависимость, в которой на каждого пользователя создаётся генсервер и хочется что то построить на этом всем доп функционал

И не хочется ещё по генсерверу своему добавлять

И не хочется в дебри библиотеки лезть чтобы новые обработчики вкрутить

Google
Alex
10.11.2016
12:43:37
нубский вопрос Создал модуль(MyApp.Plug.MyPlug), потом когда в контроллере добавляю plug MyApp.Plug.MyPlug - получаю module MyApp.Plug.MyPlug is not available

что я делаю не так?

Dmitry
10.11.2016
12:44:21
Например создал модуль exs...

Или забыл после defmodule написать do

Alex
10.11.2016
12:45:20
в роутере, не в котроллере

ошибок синтаксиса нет

Dmitry ?
10.11.2016
15:02:39
Попробуй MyApp опустить

Alex
10.11.2016
17:12:49
не помогло

Dmitry
10.11.2016
17:13:19
У тебя где то синтаксическая ошибка стопудово

Alex
10.11.2016
17:14:07
нужно ли в роутере делать импорт модуля с плагом?

Dmitry ?
10.11.2016
17:14:19
Покажи код в роутере

И объявление модуля

Dmitry
10.11.2016
17:15:39
У меня такое было когда я сделал файл с расширением exs

И ещё - когда букву перепутал

Alex
10.11.2016
17:16:08
http://pastie.org/private/kqjek5jbewwqjipte9ftzg

файл - *.ex

Dmitry
10.11.2016
17:17:31
import точно не нужен

Dmitry ?
10.11.2016
17:17:33
Всё ок выглядит

Alex
10.11.2016
17:18:02
а есть разница где положить файл?

Dmitry ?
10.11.2016
17:18:12
А где положил?)

Google
Alex
10.11.2016
17:18:18
у меня лежит в lib/blog/authentication.ex

Dmitry ?
10.11.2016
17:18:35
Норм по идее. Другие же модули подхватываются?

Dmitry
10.11.2016
17:18:42
у меня лежит в lib/blog/authentication.ex
Не должно быть проблем

Alex
10.11.2016
17:18:47
там endpoint.ex, repo.ex

Dmitry ?
10.11.2016
17:19:00
Как запускаешь?

iex -S mix phoenix.server

Alex
10.11.2016
17:19:51
mix phoenix.server

Dmitry ?
10.11.2016
17:20:56
Ну не знаю, попробуй rm -rf _build rm -rf deps mix deps.get mix deps.compile mix compile mix phoenix.server

Еще, покажи mix.exs

Есть ли там defp elixirc_paths(_), do: ["lib", "web"]

Alex
10.11.2016
17:22:50
>mix compile  упало с той же ошибкой

>Есть ли там defp elixirc_paths(_), do: ["lib", "web"] есть

Alex
10.11.2016
17:36:39
кстати если убрать из роутера упоминание этого модуля, и потом сделать iex -S

и там дернуть функции модуля - то все норм, и модуль видно и функции работают

глючит Phoenix.Controller.redirect()

если убрать его - то все работает как нужно

>use Blog.Web, :controller это вызвало проблему

Dmitry ?
10.11.2016
18:43:29
?

Taras ?
11.11.2016
05:43:57
всем привет! у меня вопрос насчет эрланга - https://github.com/yzh44yzh/practical_erlang/blob/master/05_kv/solution/short_link.erl функция init() сдесь —- init() -> %% init randomizer <<A:32, B:32, C:32>> = crypto:rand_bytes(12), random:seed({A,B,C}), {#{}, #{}}. зачем там эти строчки с рандом байтами? почему просто не вернуть init() -> {#{}, #{}}. ? что я не понимаю с этого примера?

Google
Taras ?
11.11.2016
06:05:43
но ведь там возвращается только {#{}, #{}} ? ведь будет работать и без этих рандом байтов?

Aldar
11.11.2016
06:06:25
там же запятая вроде

Taras ?
11.11.2016
06:07:54
и что? 90> S1 = short_link:init(). {#{},#{}}

Aldar
11.11.2016
06:08:26
на предпоследней строчке

Vladimir
11.11.2016
06:09:10
дело не в том, что возвращает, а в том что подаётся в random:seed.

http://erlang.org/doc/man/random.html#seed-0

Taras ?
11.11.2016
06:09:47
а это уже читал, не понял - поэтому решил тут спросить

Admin
ERROR: S client not available

Vladimir
11.11.2016
06:10:26
генератор потому и называется псевдослучайным генератором, потмоу как там не по-настоящему случайны числа, а просто длинная последовательность их.

seed делает "посев", чтобы начать последовательность с другого числа, грубо говоря

The following is an easy way of obtaining a unique value to seed with: random:seed(erlang:phash2([node()]), erlang:monotonic_time(), erlang:unique_integer())

Тут чуваки совсем заморочились, но принцип тот же

Taras ?
11.11.2016
06:18:41
тоесть, грубо говоря, crypto в init есть для прогрева стандартного рандома, чтобы в следующий вызов - значение рандома было менее прогнозированным, и все?

[Anonymous]
11.11.2016
06:24:43
привет! мы ищем спикеров на http://elixir-lang.moscow, желающие - пишите мне в личку.

Aldar
11.11.2016
06:36:11
Обычно сид делают зависящим от времени

Eugene
11.11.2016
12:12:58
@OSamorai ?

Oleh
11.11.2016
12:14:50
@pirogov ??

Roman
11.11.2016
13:26:13
@pirogov @OSamorai ?

Dmitry ?
11.11.2016
13:51:45
А как в ecto нормально писать where уловия, если подставляемое значение может быть nil? val = (может быть nil) where: p.col != ^val

Google
Dmitry ?
11.11.2016
13:52:44
В рантайме это упадет с comparison with nil is forbidden as it is unsafe. If you want to check if a value is nil, use is_nil/1 instead

Приходится писать в expressions стиле и городить такое query = if val == nil do where(query, [p], not(is_nil(p.col))) else where(query, [p], p.col != ^val) end

Oleh
11.11.2016
13:55:31
Почему бы не привести val к нужному формату? Через def get_val(val) is_nil(val), do: "" def get_val(val), do: val

Dmitry ?
11.11.2016
13:55:52
Но в базе то null

Я не могу просто так заменить на пустую строку, тогда находиться не будет

Nikita
11.11.2016
13:58:20
не знаю как прям правильно, но я вот так делаю например device_type = params["device_type"] query = from u in User, offset: ^offset, limit: ^limit query = case device_type do nil -> query _ -> from q in query, where: q.device_type == ^device_type end

Dmitry ?
11.11.2016
13:58:47
Ну вот хрень какая-то

Какая вообще причина comparison with nil is forbidden as it is unsafe?

Oleh
11.11.2016
13:59:54
Ну по полю с NULL в базе даже индекс хороший не построишь

Nikita
11.11.2016
14:00:25
в SQL же вроде нельзя делать сравнение с NULL

можно только IS NOT NULL например

Dmitry ?
11.11.2016
14:00:43
Хм, а точно

Nikita
11.11.2016
14:00:48
поэтому и ругается

Dmitry ?
11.11.2016
14:02:17
Спасибо, теперь я понял

Aldar
11.11.2016
18:02:52
NULL != NULL вроде

Alex
11.11.2016
20:50:10
Не понять как заставить brunch генерить digest для ассетов внутри цсс файлов. Судя по всему phoenix.digest делает это, но в итоге у меня остаются пути без md5 внонце

Aldar
11.11.2016
21:07:41
https://www.youtube.com/playlist?list=PLR812eVbehlwEArT3Bv3UfcM9wR3AEZb5

Немного ФП на эрланге в хату

https://www.cs.kent.ac.uk/ErlangMasterClasses/#class1

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