
Buckler
06.10.2017
14:10:55
Hello, Alex!
Please, calculate:
94+57=...
If you don't answer - you'll get banned from the channel...
Good luck!

Максим
06.10.2017
14:28:55
151

Sergey
06.10.2017
14:29:26
не посказывай

Alexander
06.10.2017
14:48:17
Надо ещё иногда логарифм давать, и инвертировать логику: если ответил - то бот

Google

Vildulv
06.10.2017
14:51:03
вот кстати да

Vladimir
06.10.2017
14:55:27
интеграл посчитать =)

Vildulv
06.10.2017
14:57:40
Please, calculate:
log2004tan45° +log[ 1/2]cos45°.
If you don't answer - you'll get banned from the channel...
Good luck!

Vladimir
06.10.2017
14:58:49
если решит за 5 секунд - бот :)

Vita
06.10.2017
15:00:36
ответ на «главный вопрос Жизни, Вселенной и Всего Остального».

Igor
06.10.2017
15:00:58
боты долговато считать будут

Nikolay
06.10.2017
15:08:59

Nikolay
06.10.2017
15:09:50
насколько я знаю это уже пофикшена, но еще не задеплоено

Vildulv
06.10.2017
15:23:58
лучше бы он спрашивал чё-нить по языку, как на одном из сайтов такое видел , типа дописать функцию или чёт в таком роде

Igor
06.10.2017
15:33:19
Такой антиспам - зло. Лучше б ничего не писал вообще. А то по несколько раз на дню открываешь чат ради того, чтоб увидеть очередную капчу. И ведь даже не пишет интересные факты из мира эликсира.

Антон
06.10.2017
15:33:26

Roman
07.10.2017
01:18:12

Yuri
07.10.2017
10:11:30
подскажите админку для феникса, типо активадмина

Google

Yuri
07.10.2017
10:12:06
ex_admin - очень много надо танцев с бубнами для 1.3
альтернатив не много )
почему через HTTPoison так долго скачивать файлы ?
рельсовый open скачивает в десятки раз быстре, что я делаю не так?

Dmitry
07.10.2017
18:47:08
А какого размера файлы?

Yuri
07.10.2017
18:56:28
20 мегов )
мой браузер скачивает быстрее )
хотя может я ошибаюсь

Buckler
07.10.2017
21:07:32
Hello, Вася!
Please, calculate:
53+1=...
If you don't answer - you'll get banned from the channel...
Good luck!

Ruslan
07.10.2017
22:34:56
Как можно лучше написать этот метод?
def find_or_create_user(attrs \\ %{}) do
if String.ends_with?(attrs.email, "@10сlouds.com") do
user = Repo.get_by(User, %{email: attrs.email})
if user do
{:ok, user}
else
create_user(attrs)
end
else
{:error, :invalid_email_domain}
end
end
чет через case не пойму как написать ?

The mirror
07.10.2017
22:48:06

Ruslan
07.10.2017
22:48:39
ну вот и я с руби перехожу и для меня норм, но подобного кода в гайдах не видел ?
там всегда через case делают

Alexander
07.10.2017
22:56:32
if String.ends_with?(attrs.email, "@10сlouds.com") do
case Repo.get_by(User, %{email: attrs.email}) do
{:ok, user} -> user,
nil -> create_user(attrs),
_ -> {:error, :invalid_email_domain}
end
end
так?
я правда не помню, возвращает ли get_by - nil, чтобы сматчить

Alexey
07.10.2017
22:59:29
{:error, :invalid_email_domain} относится к первому условию

Alexander
07.10.2017
23:00:39
ну тогда просто выкинуть последную _

Alexey
07.10.2017
23:02:13
жалко, в эликсире нельзя матчить по окончаниям строк, так было бы проще всего разбить функцию на 2 клозы..

Google

Ruslan
08.10.2017
08:04:16

Alex
08.10.2017
09:16:35
там всегда через case делают
if, как пишут в документации, позволяет проверить только одно условие: { if true, do: "sfsfsfd" }, те else не надо писать. Но я где-то читал совет, чтобы код был менее глючным в нем должно быть меньше неявностей и поэтому там советуют у любого if всегда писать else. вплоть до того: { if true do operation else IO.puts "unreachable!" }. Поэтому если всегда обрабатывать неявности и неважности, то без разницы что использовать if или case. Но if это макрос. Если не изменяет память он реализован через case. Тогда к чему писать макрос if если сразу можно заюзать case? Case вынуждает продумывать все варианты, а главное, писать какой-никакой код, который явно их обработает. На мой взгляд if - это дань другим языкам, уменьшает порог входа в Elixir.

Dmitry
08.10.2017
09:22:40
@midster Вместо if можно использовать cond тоже

Alex
08.10.2017
09:26:39

Dmitry
08.10.2017
09:34:22
Нужно все через with обернуть
И сразу все становиться пронятое
with true <- String.ends_with...,
{:ok, user} <- Repo.get....
do
....
else
{:error...}
end

Ruslan
08.10.2017
10:16:12
файл - https://github.com/ruslansavenok/lib_ten/blob/master/lib/lib_ten/accounts/accounts.ex
тесты - https://github.com/ruslansavenok/lib_ten/blob/master/test/lib_ten/accounts/accounts_test.exs#L25-L43

Dmitry
08.10.2017
10:19:24
Я с мобилы
Тяжело набрать код
Но для Repo.one или get_by пишется так
user when not is_nil(user) <- ...
И в else для with
nil -> no_user_in_bd_error

Alex
08.10.2017
10:46:47
можно и так
with true <- String.ends_with?(attrs.email, "@10сlouds.com"),
user <- Repo.get_by(User, %{email: attrs.email}) do
user && {:ok, user} || create_user(attrs)
else
false-> {:error, :invalid_email_domain}
end
или
case String.ends_with?(attrs.email, "@10сlouds.com") do
true ->
user = Repo.get_by(User, %{email: attrs.email})
user && {:ok, user} || create_user(attrs)
false ->
{:error, :invalid_email_domain}
end
ну и желательно чтобы create_user(attrs) возвращало {:ok, user} или {:error, reason}

Dmitry
09.10.2017
09:47:02

Google

Dmitry
09.10.2017
09:47:49
Знаю парочку JS товарищей, считающих что это круто, но нет...
Именно поэтому в большинстве методов stdlib в эликсире, которые фетчат данные, которые могут быть nil есть опциональный третий параметр с дефолтным значением

Alex
09.10.2017
10:20:12

Dmitry
09.10.2017
10:23:27
Дейкстра считает Short-circuit evaluation проблемной
А в эрланге вообще && и || не работают
Там and и or
Так что полагаться на то, что эликсир их правильно обернёт в этой и последующих своих версиях
И без скрытых багов
Очень рискованно
И не оправдано при использовании функциональной парадигмы программирования

Alex
09.10.2017
10:29:46
а вон оно че, ну может быть хотя сами они использують
behaviour = options[:for] || raise ArgumentError, ":for option is required on defmock"
https://github.com/plataformatec/mox/blob/master/lib/mox.ex

Dmitry
09.10.2017
10:30:24
Ну в код мэинтейнеров эликсира лучше не смотреть
Также как и в код любых мэинтейнеров любых языков и библиотек

Dmitry
09.10.2017
16:35:03
"options[:for] || raise ArgumentError, ":for option is required on defmock""
Не знаю, как другие, но одиночный || использую очень часто.

Alex
09.10.2017
16:39:30
As a rule of thumb, use and, or and not when you are expecting booleans. If any of the arguments are non-boolean, use &&, || and !.

Dmitry
09.10.2017
16:49:49
Ну, вот остальные как-то не используются вне условий if, обычно вот так: if user && password, do: а вот || действительно хорошо использовать, в основном под raise.
Хорошо использовать сам по себе.

Ivan
09.10.2017
19:11:28
Товарищи
Всем приветы

Google

Ivan
09.10.2017
19:11:38
а ex_admin нормес, живет?
а то последние коммиты 4 месяца назад и 100+ ишшу

Buckler
09.10.2017
21:16:28
Hello, Aleksei!
Please, calculate:
74+98=...
If you don't answer - you'll get banned from the channel...
Good luck!

عاصم بن حارث
09.10.2017
21:18:01
ATTENTION, UNAUTHORIZED ACCESS DETECTED!
74+98=...

Alexander
09.10.2017
22:09:25
в эликсире репа где год никто ничего коммитил - ок