• Борьба за качество решений на Erlang/Elixir
    0

    Если говорить про англоязычные источники, то можно попробовать эти:



    В рунете почему-то все не так радужно:



    Буду рад дополнениям моего списка!

  • Борьба за качество решений на Erlang/Elixir
    0
    Спасибо за полезные дополнения
  • Борьба за качество решений на Erlang/Elixir
    0

    Практически в каждом проекте где есть нотификации. Я использую erlydtl в качестве шаблонизатора, он как раз компилирует шаблон в модуль: erlydtl:compile_template(Template, ModName, [{out_dir, false}]), где Template — собственно сам шаблон нотификации.
    А вот, чтобы именно с помощью erl_syntax сгенерировать какой-то код и скомпилировать его в рантайме, пожалуй что очень редко.

  • Борьба за качество решений на Erlang/Elixir
    0
    Благодарю за проявленный интерес и время! В планах масса тем для освещения, надеюсь загрузка на работе будет позволять регулярно выпускать статьи)
  • 10 неочевидных преимуществ использования Rust
    +7
    Я стал использовать Rust больше года назад. До этого писал в основном на функциональных языках. Пока что он прижился у меня, как средство оптимизации Erlang/Elixir приложений и инструмент реализации сложных алгоритмов. Язык собрал в себе множество концепций, и если вы с ними сталкивались в других языках, думаю начать писать не составит особого труда. Многие коллеги жалуются на синтаксис Rust, но у меня такой проблемы не было, впрочем, с Erlang тоже проблем с синтаксисом языка не испытывал.
    Резюмируя, лично меня Rust привлекает целостной экосистемой языка, приемлемым уровнем производительности, удобством интеграции в уже существующие проекты. На нем действительно можно писать как большие системы, так и маленькие низкоуровневые блоки.
  • Aрифметика произвольной точности в Erlang
    0
    Про внутренности самого биткоина увы ничего не могу сказать, но вполне допускаю случай, когда покупка была на какой либо бирже, где считают в лоб. Большие ордера закрываются множеством мелких (частичное заполнение) и в этом случак возможно накопление ошибки.
  • Rocker — rocksdb драйвер для Erlang
    0
    Нас уже трое, значит статье про Arbitrary-precision arithmetic быть)
  • Безопасно ускоряем Erlang приложение c помощью NIF на Rust
    0
    Думаю, nifs можно разделить на две группы: 1) процесс исполнения можно поделить на мелкие порции укладывающиеся в 1мс по времени. 2) для которых такую оптимизацию применить нельзя.
    Детали реализации первой группы можно найти изучив информацию по enif_schedule_nif и enif_send. Вторые точно нужно выносить под DS, чтобы не случился scheduler-collapse.
    Также, в свое время я находил вот эту публикацию по данной теме: medium.com/@jlouis666/erlang-dirty-scheduler-overhead-6e1219dcc7
  • Безопасно ускоряем Erlang приложение c помощью NIF на Rust
    +1
    Если кратко, то существующую проблему пытаются решить через dirty scheduler. Можно выставить флаги ERL_NIF_NORMAL_JOB = 0,
    ERL_NIF_DIRTY_JOB_CPU_BOUND = 1,
    ERL_NIF_DIRTY_JOB_IO_BOUND = 2
    В rustler есть обработка этого функционала через
    pub enum SchedulerFlags {
    Normal = 0,
    DirtyCpu = 1,
    DirtyIo = 2,
    }
    При объявлении наших обработчиков пишем что-то подобное:
    («dirty_cpu», 0, dirty_cpu_fun, SchedulerFlags::DirtyCpu),
    («dirty_io», 0, dirty_io_fun, SchedulerFlags::DirtyIo),
  • Грузите апельсины бочках. Релизы в Golang проектах
    0
    Про баг интересно. Насчет упаковщиков, зависит от требований, если память и время запуска не являются узким местом, можно использовать.
  • Готовим рабочее окружение для Erlang проекта
    0
    Спасибо за конструктивный ревью!
    1) Метрики в таком виде были написаны в далеком 2011 году. Сначала просто, как индикатор, т.е открываем tail -f metrics_file и смотрим счетчики, а потом в некоторых проектах эти файлы обрабатывались на узлах агентами и отрпавлялись в zabbix. В статью импортировал этот код для того, чтобы показать, как работает метапроект из нескольких приложений.
    Если выбирать из существующих библиотек, то folsom или exometer вполне решают данную задачу.
    Так же хочется отметить, что в примере приложения нет логгера. Про подходы к логгированию и анализу логов тоже можно написать статью. В качестве практики для интересующихся, можно попробовать прикрутить lager (c вынесением в заголовочный файл макросов с уровнями от DEBUG до FATAL).
    2) Убрал повторяющийся паттерн. Только добавил Req и State к Status, Body. Так как в обработчике могут поставить например cookie. Ну и State необходим, например для долгоживущих обработчиков (websocket, http-streaming)
    3) Согласен, как раз в статье про внешние хранилища данных этот код модернизируется, и детали реализации хранилища спрятаны в общем интерфейсе: сначала добавляется класс обслуживания основанный на tarantool, а затем класс обслуживания на riak. Поправил интерфейс.
    4) Catch убрал из реализации. Действительно за ним не было видно проблемы. Catch в erlang не стоит использовать, только совсем уж в крайних случаях.
    Исходную проблему можно было отловить с помощью дополнительного теста проверяющего, что данные восстановились.
  • Готовим рабочее окружение для Erlang проекта
    0
    Изначально код взят из metrix (доступно в релизе), там обновления идут через вызовы gen_server. Gen_server решил оставить для явного указания owner у ETS таблички. Плюс наглядно показана механика trap_exit.
    Но реализовать на уровне application:start и application:stop тоже можно.
  • Готовим рабочее окружение для Erlang проекта
    0
    Благодарю за приятный комментарий. Следующая статья уже в работе
  • Герман Клименко: «Нам всего-навсего осталась одна большая история — это деанонимизация»
    0
    Для улучшения системы гос.управления следует вводить контроль за механизмами этой системы. Т.е все чиновники должны быть строго контролируемы, как школьники на ЕГЭ. В кабинетах, коридорах и прочих помещениях должна вестись видео и аудио фиксация. Строгие формы отчетности для всех служащих: что, когда и почему делал или не делал.
    Все отчеты должны доступны обществу, а видео и аудио записи исполнительным органам.
    Пока нет контроля, ничего не изменится.
  • Запуск worker'ов сервиса с помощью systemd
    0
    Еще удобно использовать monit для этих целей. Поднимет, если упадет и отправит уведомление админам.