Size: a a a

2019 December 16

ВК

Василий Кузнецов in pro.elixir
Да, тут согласен. вещей может быть и больше гораздо.
источник

ВК

Василий Кузнецов in pro.elixir
и в правильном случает каждый из методов типа insert_or_ignore, add_to_map лучше бы дергал внешний чей то интерфейс внутри себя
источник

ВК

Василий Кузнецов in pro.elixir
Совсем недавно был у меня кейс, где нужно протестировать метод, который просто состоит из цепочки пайпов к внешним методам. Я так и не смог понять что тестировать в нем. решил не делать
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Функции в цепочке пайпов по сути либо являются обертками к нормальному api, получается такая себе велосипедная композиция, либо это builder паттерн - как например в changeset или multi
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Шанс что у тебя такая красивая цепочка пайпов и ты не просто понторез, который вчера узнал про этот синтаксис и везде его суёшь стремится к нулю
источник

ВК

Василий Кузнецов in pro.elixir
цепочка пайпов дает хорошую читаемость, в ущерб(в рассмотренном случае) правильному интерфейсу функций.
источник

V

V in pro.elixir
Evgenia evgenia
#вакансия #Elixir #fullstack #JS  #fulltime #Москва #офис
Всем доброго дня!
Ищем в команду опытного Elixir разработчика (Fullstack)
Компания - Разработчик и поставщик решений для создания самой современной в мире экосистемы продвижения услуг операторов связи . Работа в Москве, фултайм.
Задачи: Разработка frontend/backend частей систем для конфигурации и управления высоконагруженных телеком-приложений.
З/п 200-250K
От вас ждем: Опыт создания и поддержки проектов на Elixir Phoenix
Уверенное владение нативным JavaScript (ES5/ES6/ES7). Знание HTML, CSS
Опыт разработки веб-интерфейсов и SPA-приложений на React/Redux или Vue.js
Знание принципов разработки REST API
Знание PostgreSQL или другич систем управления базами данных
Большой плюс — знание Erlang OTP
Сылка на НН  https://hh.ru/vacancy/34962433
Буду рада пообщаться более подробно @ekudriavtseva
@Virviil это можно закрепить в шапке вместо текущей неактуальной вакансии
источник

SM

Sergei Maximov in pro.elixir
V
Котаны, как вы отключаете периодические задачи при тестировании?
Например, пишу MyApp.Scheduler, который запускает джобу сразу при инициализации и дальше через час.
Кладу её в дерево супервизора феникса:
children = [
 MyApp.Repo,
 MyApp.Endpoint,
 MyApp.Scheduler
]
В dev-режиме оно работает нормально. А вот когда делаю mix test - этот Scheduler начинает выполнять свою работу, которая не нужна. Как отключить именно его в режиме тестирования? mix test --no-start отключает всё дерево, а тестам нужно чтоб Repo была поднята.
  def start(_type, _args) do
   children = common_children() ++ env_specific_children()
   Supervisor.start_link(children, strategy: :one_for_one, name: MyApp.Supervisor)
 end

 defp common_children do
   [
     MyApp.Repo,
     MyAppWeb.Endpoint,
     # ...
   ]
 end

 case Mix.env() do
   :dev ->
     defp env_specific_children do
       [
         # ...
       ]
     end
   
   :test ->
     defp env_specific_children, do: []

   :prod ->
     defp env_specific_children do
       [
         # ...
       ]
     end
   end
 end
источник

SM

Sergei Maximov in pro.elixir
V
children = 
 [
   MyApp.Repo,
   MyApp.Endpoint
 ] ++
   case Mix.env() do
     :test -> []
     _ -> [MyApp.Scheduler]
   end
Такой код не будет работать с релизами (в рантайме), т.к. там Mix не доступен обычно (если конечно этот код не выполняется при компиляции модуля)
источник

V

V in pro.elixir
Sergei Maximov
Такой код не будет работать с релизами (в рантайме), т.к. там Mix не доступен обычно (если конечно этот код не выполняется при компиляции модуля)
А предложенный тобой - будет? Там тоже используется Mix.env
источник

SM

Sergei Maximov in pro.elixir
V
А предложенный тобой - будет? Там тоже используется Mix.env
Будет, так как там Mix дёргается во время компиляции, а не во время выполнения
источник

SM

Sergei Maximov in pro.elixir
Sergei Maximov
Будет, так как там Mix дёргается во время компиляции, а не во время выполнения
У тебя просто в зависимости от окружения после компиляции будут разные функции env_specific_children
источник

V

V in pro.elixir
Sergei Maximov
Будет, так как там Mix дёргается во время компиляции, а не во время выполнения
ага, понял разницу
источник

#@

# @ in pro.elixir
Evgenia evgenia
#вакансия #Elixir #fullstack #JS  #fulltime #Москва #офис
Всем доброго дня!
Ищем в команду опытного Elixir разработчика (Fullstack)
Компания - Разработчик и поставщик решений для создания самой современной в мире экосистемы продвижения услуг операторов связи . Работа в Москве, фултайм.
Задачи: Разработка frontend/backend частей систем для конфигурации и управления высоконагруженных телеком-приложений.
З/п 200-250K
От вас ждем: Опыт создания и поддержки проектов на Elixir Phoenix
Уверенное владение нативным JavaScript (ES5/ES6/ES7). Знание HTML, CSS
Опыт разработки веб-интерфейсов и SPA-приложений на React/Redux или Vue.js
Знание принципов разработки REST API
Знание PostgreSQL или другич систем управления базами данных
Большой плюс — знание Erlang OTP
Сылка на НН  https://hh.ru/vacancy/34962433
Буду рада пообщаться более подробно @ekudriavtseva
Работа только офис, удаленку не рассматриваете?
источник

Ee

Evgenia evgenia in pro.elixir
Офис))
источник

Ee

Evgenia evgenia in pro.elixir
Потом возможно, частично
источник

AK

Aleksey Kudrenko in pro.elixir
Большое спасибо за советы, ребята.
Действительно, нужно было больше бэкграунда от меня в самом начале.
Повторюсь, что фп и elixir для меня вновинку, не больше двух недель с ними ознакамливаюсь.
Если более глобально по задаче, то алгоритм сервиса примерно следующий: parse_data |> get_or_create_city |> insert_data |> get_another_info_from_api.
Делал логику через pipeline для удобочитаемости, но это добавило задачу обработки ошибок. try/rescue не рассматривал, т.к. помещать всю логику в один большой блок try - моветон. Поэтому информацию передаваемую между функциями завернул в {:ok | :error, %{}}. Пришлось, конечно, используя pattern matching, добавлять конструкции типа foo({:error, _error}) для всех функций цепочки, но другого метода тогда я не придумал. Сейчас цепочку разорвал и таких конструкций в коде поубавилось, но они всё равно есть.
Касательно самого вопроса по созданию city. Да, в конечно итоге пришёл к get_or_create_city, код на скрине.
источник

AF

Alexander Fyodorov in pro.elixir
Aleksey Kudrenko
Большое спасибо за советы, ребята.
Действительно, нужно было больше бэкграунда от меня в самом начале.
Повторюсь, что фп и elixir для меня вновинку, не больше двух недель с ними ознакамливаюсь.
Если более глобально по задаче, то алгоритм сервиса примерно следующий: parse_data |> get_or_create_city |> insert_data |> get_another_info_from_api.
Делал логику через pipeline для удобочитаемости, но это добавило задачу обработки ошибок. try/rescue не рассматривал, т.к. помещать всю логику в один большой блок try - моветон. Поэтому информацию передаваемую между функциями завернул в {:ok | :error, %{}}. Пришлось, конечно, используя pattern matching, добавлять конструкции типа foo({:error, _error}) для всех функций цепочки, но другого метода тогда я не придумал. Сейчас цепочку разорвал и таких конструкций в коде поубавилось, но они всё равно есть.
Касательно самого вопроса по созданию city. Да, в конечно итоге пришёл к get_or_create_city, код на скрине.
👍
источник

AF

Alexander Fyodorov in pro.elixir
если на инсерт ошибка будет (unique constraint, например) как обрабатывается? (или неактуально?)
источник

SM

Sergei Maximov in pro.elixir
Aleksey Kudrenko
Большое спасибо за советы, ребята.
Действительно, нужно было больше бэкграунда от меня в самом начале.
Повторюсь, что фп и elixir для меня вновинку, не больше двух недель с ними ознакамливаюсь.
Если более глобально по задаче, то алгоритм сервиса примерно следующий: parse_data |> get_or_create_city |> insert_data |> get_another_info_from_api.
Делал логику через pipeline для удобочитаемости, но это добавило задачу обработки ошибок. try/rescue не рассматривал, т.к. помещать всю логику в один большой блок try - моветон. Поэтому информацию передаваемую между функциями завернул в {:ok | :error, %{}}. Пришлось, конечно, используя pattern matching, добавлять конструкции типа foo({:error, _error}) для всех функций цепочки, но другого метода тогда я не придумал. Сейчас цепочку разорвал и таких конструкций в коде поубавилось, но они всё равно есть.
Касательно самого вопроса по созданию city. Да, в конечно итоге пришёл к get_or_create_city, код на скрине.
Use with, Luke!
источник