Size: a a a

2020 August 19

РР

Рома Раевский... in pro.elixir
Tharin
К слову: что посоветуете по углублению в функциональный подход? Какие-нибудь крутые книги? Нашёл вот такую: Ричард Берд "Жемчужины проектирования алгоритмов. Функциональный подход" (2015)
я не знаю ФП, но может найти серьезный софт на каком-то ФП-языке и разбираться, как в нем что устроено, то есть типа обратный инжиниринг (reverse engineering)
источник

MG

Mikhael Gaydamaka in pro.elixir
Здравствуйте, товарищи!
#вакансия
#Разработчик #Erlang #Elixir
#Новосибирск
#fulltime
#офис
Занятость: полная
Зарплата: от 100 т.р.
ООО «Предприятие «ЭЛТЕКС» https://eltex-co.ru/ - крупнейший российский разработчик и производитель телекоммуникационного оборудования.
Мы являемся высокотехнологичным предприятием полного цикла.
Мы выпускаем широкую линейку телекоммуникационного оборудования - PON, Ethernet, Wi-Fi, VoIP, IPTV, домашние роутеры, промышленные контроллеры (IoT). Наше оборудование получает сертификаты ТОРП и ФСТЭК.
Включены в список системообразующих предприятий https://data.economy.gov.ru/analytics/facilities/region/105/industry/129
География наших поставок давно вышла за пределы российского рынка. Она включает страны СНГ, Европы, Северной и Южной Америки, Юго-Восточной Азии, Ближнего Востока и некоторые регионы Африки.
Наши партнеры - операторы связи, гос. заказчики, крупные корпоративные клиенты.
Один из ключевых продуктов направления VoIP "SOFTSWITCH ECSS-10" https://eltex-co.ru/catalog/platform_and_infrastrukture/ ищет разработчиков Erlang/Elixir.
Ключевые навыки: Erlang/Elixir, Linux, Docker, k8s, SQL/NoSQL, ТСР/IP, понимание работы протоколов сигнализации (SIP, H.248, SIGTRAN, SS7, DSS1).
Если вам интересно работать в этой области, откликайтесь на https://novosibirsk.hh.ru/vacancy/38666107.
источник

MG

Mikhael Gaydamaka in pro.elixir
Спасибо, @Virviil
источник

LL

Lama Lover in pro.elixir
Чтобы код был моноширинным, окружайте его в "`"
Три сверху, три снизу и можно будет прочесть код
источник

ev

eugene vikulov in pro.elixir
пардон, минутку
источник

ev

eugene vikulov in pro.elixir
Добрый день, вопрос по макросам. Есть следующий код:

  alias CIP.Common.CommonServices.{
   Find_Next_Object_Instance,
   GroupSync
 }

services(optionalServices([], [
   GroupSync,
   Find_Next_Object_Instance
 ]))
...

defmacro services(serviceList) do
   IO.inspect(serviceList)
   quote do
     def supportedServices() do
       unquote(serviceList) |> Enum.map(fn service -> {service.serviceCode(), service} end)
     end
   end
 end


При компиляции получаю:
mix compile
Compiling 2 files (.ex)
{:optionalServices, [line: 37],
[
  [],
  [
    {:__aliases__, [line: 38], [:GroupSync]},
    {:__aliases__, [line: 39], [:Find_Next_Object_Instance]}
  ]
]}

При выполение:
iex -S mix
Erlang/OTP 23 [erts-11.0.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.10.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> CIP.Objects.IdentityInstance.supportedServices()
[
 {26, CIP.Common.CommonServices.Insert_Member},
 {27, CIP.Common.CommonServices.Remove_Member},
 {28, CIP.Common.CommonServices.GroupSync},
 {17, CIP.Common.CommonServices.Find_Next_Object_Instance}
]


Результат то верный, но способ его получения явно не оптимальный. Как можно это список получить на этапе выполения макроса, чтобы его вставить в результат выполнения функции?
источник

LL

Lama Lover in pro.elixir
eugene vikulov
Добрый день, вопрос по макросам. Есть следующий код:

  alias CIP.Common.CommonServices.{
   Find_Next_Object_Instance,
   GroupSync
 }

services(optionalServices([], [
   GroupSync,
   Find_Next_Object_Instance
 ]))
...

defmacro services(serviceList) do
   IO.inspect(serviceList)
   quote do
     def supportedServices() do
       unquote(serviceList) |> Enum.map(fn service -> {service.serviceCode(), service} end)
     end
   end
 end


При компиляции получаю:
mix compile
Compiling 2 files (.ex)
{:optionalServices, [line: 37],
[
  [],
  [
    {:__aliases__, [line: 38], [:GroupSync]},
    {:__aliases__, [line: 39], [:Find_Next_Object_Instance]}
  ]
]}

При выполение:
iex -S mix
Erlang/OTP 23 [erts-11.0.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.10.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> CIP.Objects.IdentityInstance.supportedServices()
[
 {26, CIP.Common.CommonServices.Insert_Member},
 {27, CIP.Common.CommonServices.Remove_Member},
 {28, CIP.Common.CommonServices.GroupSync},
 {17, CIP.Common.CommonServices.Find_Next_Object_Instance}
]


Результат то верный, но способ его получения явно не оптимальный. Как можно это список получить на этапе выполения макроса, чтобы его вставить в результат выполнения функции?
А как работает функция supportedServices ? Что вообще за задачу пытаетесь решить?
источник

ev

eugene vikulov in pro.elixir
Lama Lover
А как работает функция supportedServices ? Что вообще за задачу пытаетесь решить?
На самом деле код выше - упрощение задачи. Но если будет результат, то в итоге получится группа функций
service(numericCode)::module
источник

ev

eugene vikulov in pro.elixir
надо чтобы класс сам резолвил числовой код в атом
источник

ev

eugene vikulov in pro.elixir
протоколы не подходят, у разных классов могут быть разные сервисы с одинаковыми кодами
источник

LL

Lama Lover in pro.elixir
eugene vikulov
надо чтобы класс сам резолвил числовой код в атом
Что?
Какой класс?
источник

LL

Lama Lover in pro.elixir
Опишите задачу, я пока что никак не могу связать ваши сообщения в общую картину
источник

ev

eugene vikulov in pro.elixir
ок, в терминологии elixir модуль
источник

ev

eugene vikulov in pro.elixir
есть макрос, куда передаётся список модулей - services, хочется получить результат выполения функции supportedServices() на этапе компиляции
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Так надо сперва посчитать сервисы, а потом сдела def внутри макроса
источник

ŹR

Źmićer Rubinštejn in pro.elixir
В чем проблема?
источник

LL

Lama Lover in pro.elixir
eugene vikulov
есть макрос, куда передаётся список модулей - services, хочется получить результат выполения функции supportedServices() на этапе компиляции
А зачем именно макрос?
Берёте и пишете
defmodule X do
 @services [:service1, :service2]
 def supportedServices() do
   @services
 end
end
источник

ev

eugene vikulov in pro.elixir
не уверен, что я вас правильно понял. можно пример кода?
источник

LL

Lama Lover in pro.elixir
eugene vikulov
не уверен, что я вас правильно понял. можно пример кода?
Какую задачу вы пытаетесь решить? Очень похоже что это какие-то ненужные оптимизации, и разговор тут должен идти не о макросах, а об изначальной задаче.
источник

ev

eugene vikulov in pro.elixir
Lama Lover
А зачем именно макрос?
Берёте и пишете
defmodule X do
 @services [:service1, :service2]
 def supportedServices() do
   @services
 end
end
можно и так, безусловно. Но вставка сервисов по умолчанию - optianlServices() тогда уже не выглядит изящно чтоли)
источник