@proelixir

Страница 759 из 1045
Alexey
16.10.2017
08:30:57
однако

Alex
16.10.2017
08:35:49
http://www.bards.ru/archives/part.php?id=35003

Dmitry
16.10.2017
08:37:06
Кстати, философский вопрос: Как определить нормальная или ненормальная контора?

abc
16.10.2017
08:37:41
Пообщаться с работниками местными

Google
Fedor
16.10.2017
08:37:46
по отзывам знакомых сотрудников

abc
16.10.2017
08:38:06
Если дерганые или онлайн на работе в выходные, то это звоночек )

Alexey
16.10.2017
08:38:14
надо делать аналог market.yandex.ru с отзывами о компаниях )

Fedor
16.10.2017
08:38:22
бесполезно

Alexey
16.10.2017
08:38:35
будут накрутки рейтингов?

Fedor
16.10.2017
08:38:48
будут ботов плоидить и накручивать, конкруентов валить, заставялть сотрудников хорошие отзывы писать...

Alexey
16.10.2017
08:38:49
как на маркете

Dmitry
16.10.2017
08:38:52
Есть какой-то сервис англоязычный с анонимными отзывами сотрудников.

Alexey
16.10.2017
08:39:04
блина. всё тлен

кстати, есть такой сайтец. гребаное айти. там вроде б как раз особо пострадавшие отмечаются

Igor
16.10.2017
08:39:29
> анонимными отзывами сотрудников лучше всего работает в компаниях до 10 человек ?

Dmitry
16.10.2017
08:43:30
https://www.glassdoor.co.uk/

Вот здесь такое было

Google
Dmitry
16.10.2017
08:44:05
Маленьких компаний, правда помойму наоборот нет

Но был какой-то другой сервис

https://www.kununu.com/

А кажется вот он

Nikolay
16.10.2017
08:54:17
Ищем backend разработчиков с навыками в • Kubernetes • Docker

Dmitry
16.10.2017
08:54:52
А там нужны особые навыки?

Nikolay
16.10.2017
08:55:45
наверно, т.к. devops-ить будешь ты

Dmitry
16.10.2017
08:57:36
Ну, в небольших agile коммандах девопсить - это почти норма(по крайней мере я не видел, чтобы было по-другому). Моя комманда в прошлой фирме, в целом ещё и тестовое окружение в kubernetes разворачивает и там многодневные нагрузочные тесты прогоняет сама.

abc
16.10.2017
08:57:43
куб вроде с докером сейчас хочет порвать дружбу. они какой-то свой докер теперь пилят

Максим
16.10.2017
09:25:24
вместо всех отзывов показывать 2 рандомных

один положительный один отрицателньый

Roman
16.10.2017
10:42:49
Неужели %{from: %User{first_name: name}} выглядит лучше чем %{from: %{first_name: name}}
имхо, зависит от контекста. я например делаю match по вхождению типа. плюс со структурой читабельней вывод там, код и все такое

Dmitry
16.10.2017
10:58:47
имхо, зависит от контекста. я например делаю match по вхождению типа. плюс со структурой читабельней вывод там, код и все такое
В качестве примера того, как по моему мнению должна вестись разработка бота можно привести Buckler ;)

Последнюю ветку мы даже причесали

https://github.com/BucklerBot/buckler/tree/adding-attempts?files=1

Nikolay
16.10.2017
11:07:32
я даже тесты на эту ветку написал

но я вам их не покажу (с) Печкин

Alexey
16.10.2017
11:10:48
потому что у нас документов нет?

Google
Roman
16.10.2017
11:10:52
спасибо

Nikolay
16.10.2017
11:12:11
Вопрос на миллион - кто как тестирует handle_cast\info методы у GenServer’ов?

Dmitry
16.10.2017
11:18:39
Вопрос на миллион - кто как тестирует handle_cast\info методы у GenServer’ов?
2 варика - либо тестируем генсервер интеграционно как апи либо как чистую функцию

Но юнит я считаю плохой практикой

Dmitry
16.10.2017
11:18:54
Через внешний интерфейс. Все GenServer.call обычно находятся в том же модуле и экспортируют, к примеру def put(a, b), do: GenServer.call(....) его и тестирую.

Тестировать внутренности имплементации не очень хорошо, как помойму.

Alex
16.10.2017
11:20:02
ну а если логику из них перенести в модули, модули мокать чтобы при запуске теста они подменялись?

Dmitry
16.10.2017
11:20:03
В плане cast и info - тоже самое.

Alex
16.10.2017
11:20:39
тогда можно тестить логику отдельно ну и работу genserver отдельно

можно при старте GenServer отдавать ему модули с которыми он работает, и при тестовом запуске также передавать ему моки

Nikolay
16.10.2017
11:22:57
ну а если логику из них перенести в модули, модули мокать чтобы при запуске теста они подменялись?
мокать в эликсире не тру жи…но вообще так и сделал, конечно - бизнес логика отдельно но это не отменяет того, что в cast проихсодят 2-3 строчки на матчинг результата модуля, и хорошо бы из тоже оттестить…

Alex
16.10.2017
11:24:46
как я понял не тру - мокать рабочие модули(?), а если у каждого модуля определять behaviour и в моках его реализовывать то это вроде норм http://blog.plataformatec.com.br/2015/10/mocks-and-explicit-contracts/

Nikolay
16.10.2017
11:26:55
aa, я не так понял значит тебя - я везде так делаю на границах системы, да, через Mock модули

прост не подумал что с генверсерами так же можно намутить

Alex
16.10.2017
11:31:55
ага, можно всю логику из него вынести в модуль, чтобы он тупо дергал его методы и все. ну или максимально стремится к этому. чтобы код в генсервере делал только генсерверную работу ))

по идее можно в генсервере вообще сделать по одному методу def handle_call(request, from, state), do: MyModule.call(request, from, state) def handle_cast(request, state), do: MyModule.cast(request, state) def handle_info(msg, state), do: MyModule.info(msg, state) и весь мачинг перенести в MyModule MyModule.call(:request_1, from, state) MyModule.call(:request_2, from, state) и тд тогда, по идее генсервер вообще можно и не тестить а тестить только MyModule

Nikolay
16.10.2017
13:44:41
чет я такого не видел примера использования)

Alex
16.10.2017
13:46:07
ну надо же кому то начинать )))

Google
Dmitry
16.10.2017
13:46:22
По идее - можно как угодно извращаться ? Но лучше всего, когда при использовании GenServer-а есть у него публичное API, которым пользуются и его и тестировать. И не тестировать внутренности и не мокать внутренности.

Если конечно речь не о коммуникации со сторонним удаленным сервисом.

Но здесь тогда мок всего генсервера, просто другой процесс или модуль.

Alex
16.10.2017
14:06:48
какой?

Dmitry
16.10.2017
14:07:16
module

Можно сделать GenServer в двух разных файлах

Alex
16.10.2017
14:15:15
и что в них будет?

Dmitry
16.10.2017
14:17:58
Ну в общем то в одном будет АПИ, а в другом - только хэндлы

Т.е. defmodule MyServerApi do def start_link(...) GenServer.start_link(MyServerCallbacks, ...) end def foo(pid), do: GenServer.call(pid, :foo) end defmodule MyServerCallbacks do use GenServer def handle_call(:foo, from, state), ... end

А обычно все пишут GenServer.start_link(__MODULE__, ...)

Ну и конечно можно этот module параметр замокать на этапе любом

Но лучше компиляции

Через Application.get_env(:my_genserver_implimentation)

Alex
16.10.2017
14:27:11
а ну вот мозг и зашорился. так вот и надо делать тут можно MyServerCallbacks перетестить вдоль и поперек

Dmitry
16.10.2017
14:27:39
Можно, но не нужно

Потому что в otp app генсервер - это смысловая единица

И тестить надо только MyServerApi

Alex
16.10.2017
14:30:46
а генсервер это что? Модуль?

Dmitry
16.10.2017
14:31:20
Генсервер? Смысловая единица

Google
Alex
16.10.2017
14:31:29
а что это такое?

Dmitry
16.10.2017
14:31:33
Архитектурная единица

Если так проще

Детали реализации не важны с архитектурной точки зрения

Alex
16.10.2017
14:32:30
а с точки зрения парадигмы функционального программирования?

Dmitry
16.10.2017
14:33:09
С точки зрения функционального программирования ГенСервер - это конечно же функция

В базовом смысле - получил вопрос - отдал ответ

Может не отдать

Тогда это какая-то там монада

Хотя я наврал

Он хранит состояние, значит он и сам монада какая-то

Но это не так важно Ж)

illiatshurotshka❄️
16.10.2017
14:35:33
нет монад

Alex
16.10.2017
14:35:58
просто если писать генсервер так как ты написал то тестить можно только MyServerCallbacks

причем тесты могут быть асинхронными

Dmitry
16.10.2017
14:36:36
Ну если в тесте ты напишешь MyServerApi.foo

Alex
16.10.2017
14:36:36
а апи нефиг вообще тестить... чет там тестить то?

Dmitry
16.10.2017
14:36:44
То ты его и протестишь

Alex
16.10.2017
14:37:39
не не... я напишу MyServerCallbacks.foo1 MyServerCallbacks.foo2 и запущу тесты сразу в двух потоках. независимо

Dmitry
16.10.2017
14:37:40
А он под капотом вызовет MyServerCallbacks

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