Как стать автором
Поиск
Написать публикацию
Обновить
0

Erlang/OTP *

Функциональный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Elixir и Angular 2 безо всяких Hello, world!, или Реализуем работу с древовидным справочником, часть 1

Время на прочтение64 мин
Количество просмотров12K

КПДВ


Функциональный язык программирования Elixir набирает популярность, а один из последних фреймворков для создания одностраничных приложений — Angular 2 — недавно вышел в релиз. Давайте познакомимся с ними в паре статей, создав с нуля полноценный back-end на Elixir и Phoenix Framework, снабжающий данными клиентское приложение-frontend на базе Angular 2.


Hello, world — не наш вариант, поэтому сделанное при необходимости можно будет применить в реальных проектах: весь представленный код выложен под лицензией MIT.


Объем статьи большой огромный! Надеюсь на столь же огромное количество комментариев — любых. Не раз замечал, что из комментариев получаешь не меньше, чем от основной статьи, а иногда и больше.


В первой статье будет несколько вступительных слов и работа над back-end. Поехали!

Читать дальше →

Использование rebar3 для управления проектами на Erlang

Время на прочтение6 мин
Количество просмотров12K


Rebar3 — это инструмент для языка программирования Erlang, который позволяет легко и удобно управлять проектами, написанными на Erlang (иногда и на Elixir).


Люди уже давно знакомые с Erlang знают старый rebar и, возможно даже, до сих пор его используют. Многим (особенно тем, кто пришел из других языков с гораздо более развитой экосистемой) rebar не нравится и время от времени его там и тут называют "позорной подделкой", которую можно было бы заменить скриптом на Perl. К счастью много работать с rebar мне не приходилось (в отличие от автора выше приведенных слов), но с базовыми вещами rebar справлялся довольно-таки неплохо. Но "неплохо" — это не "хорошо". Несогласных с таким положением дел (с "неплохо") оказалось немало и потому решили они дать арматуре вторую жизнь в виде проекта rebar3, который нынче активно развивается. Над проектом среди прочих работает небезызваестный сир Фред Хеберт, который подарил миру книгу "Изучай Erlang во имя добра!".

Читать дальше →

Опыт создания инструмента мутационного тестирования для Erlang

Время на прочтение4 мин
Количество просмотров3.4K
Несколько недель назад, я услышал о мутационном тестировании для Clojure, это способ проверки качества тестов, при котором в исходный код вносятся небольшие изменения и тесты либо замечают это, либо нет. К примеру, если в программе использовалось условие «a > 1», а замена на «a < 1» никак не меняет результатов тестирования значит тесты могли бы быть лучше.

Я подумал, что такой инструмент будет несложно написать для Erlang, потому что язык предоставляет богатый спектр функций обработки внутренних представлений, генерируемых компилятором. Но всё оказалось не так просто. Под катом я описал проблемы и решение, к которому я в итоге пришёл.
Читать дальше →

Создание движка для блога с помощью Phoenix и Elixir / Часть 7. Добавляем комментарии / Новогодний анонс в заключении

Время на прочтение9 мин
Количество просмотров5.2K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы подготовим фундамент для комментариев, чтобы затем оживить их с помощью каналов Phoenix.

Читать дальше →

Elixir в биоинформатике

Время на прочтение4 мин
Количество просмотров5.6K


В этой статье я расскажу о своей попытке использования библиотеки GenStage, а в частности модуля Flow, для реализации одного из алгоритмов биоинформатики. На протяжении последних двух лет я занимался разработкой комплексной системы хранения и поиска результатов метагеномного анализа (метагеномика) углеводородного сырья. Наверное, для многих это китайская грамота. Фактически такой анализ означает выявление всех типов микроорганизмов, обитающих, к примеру, в залежах нефти. Некоторые из этих микроорганизмов, преимущественно бактерии, способны разъедать стальные трубы и создавать множество других неблагоприятных эффектов.
Читать дальше →

Как Discord обрабатывает более 1 000 000 push-запросов в минуту с помощью Elixir GenStage

Время на прочтение6 мин
Количество просмотров17K

Discord

Discord испытал небывалый рост. Чтобы справиться с ним, нашему отделу разработки досталась приятная проблема — искать способ масштабирования сервисов бэкенда.

В этом деле мы добились большого успеха с помощью одной технологии, которая называется Elixir GenStage.

Идеальный шторм: Overwatch и Pokémon GO


Этим летом наша система мобильных push-уведомлений стала скрипеть от нагрузки. Чат /r/Overwatch перевалил за 25 000 одновременных пользователей, а чат-группы Pokémon GO возникали повсеместно, так что внезапные всплески потока уведомлений стали серьёзной проблемой.
Читать дальше →

Связь многие ко многим и upsert в Ecto 2.1

Время на прочтение8 мин
Количество просмотров3.5K

В предыдущей главе мы говорили о many_to_many ассоциациях и как маппить внешние данные в ассоциированные сущности с помощью Ecto.Changeset.cast_assoc/3. Тогда мы были вынуждены следовать правилам, накладываемыми функцией cast_assoc/3, но делать это не всегда возможно или желательно.


В этой главе мы рассмотрим Ecto.Changeset.put_assoc/4 в сравнении с cast_assoc/3 и разберем несколько примеров. Также мы взглянем на функцию upsert, которые появятся в Ecto 2.1.


Читать дальше →

Создание движка для блога с помощью Phoenix и Elixir / Часть 6. Поддержка Markdown

Время на прочтение6 мин
Количество просмотров3.7K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы подключим библиотеку Earmark для добавления возможности использования разметки Markdown.

Читать дальше →

Создание движка для блога с помощью Phoenix и Elixir / Часть 5. Подключаем ExMachina

Время на прочтение7 мин
Количество просмотров4K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы подключим библиотеку ExMachina для улучшения процесса тестирования. Теперь не нужно копировать идентичный код для создания тестируемых моделей, за нас это сделают фабрики!

Читать дальше →

Создание движка для блога с помощью Phoenix и Elixir / Часть 4. Добавляем обработку ролей в контроллерах

Время на прочтение20 мин
Количество просмотров4.2K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы закончим разграничение прав доступа с использованием ролей. Ключевой момент данной серии статей — здесь очень много внимания уделяется тестам, а тесты — это здорово!


На данный момент наше приложение основано на:

  • Elixir: v1.3.1
  • Phoenix: v1.2.0
  • Ecto: v2.0.2
  • Comeonin: v2.5.2

Где мы остановились


В прошлый раз мы расстались с вами на добавлении понятия роли внутрь моделей и создании вспомогательных функций для тестов, чтобы немного облегчить себе жизнь. Теперь нам нужно добавить внутрь контроллеров основанные на ролях ограничения. Начнём с создания вспомогательной функции, которую мы сможем использовать в любом контроллере.

Создание вспомогательной функции для проверки ролей


Первым шагом на сегодня станет создание простой проверки пользователя на наличие прав администратора. Для этого создайте файл web/models/role_checker.ex и заполните его следующим кодом:
Читать дальше →

RamblerElixir #1

Время на прочтение1 мин
Количество просмотров5.6K


8 декабря в 19:00 на Мансарде Rambler&Co состоится meetup Elixir разработчиков. Elixir — функциональный язык программирования c динамической типизацией для разработки распределённых, отказоустойчивых приложений, построенный на базе виртуальной машины Erlang (без GIL), имеет очень приятный синтаксис и низкий порог вхождения.
Читать дальше →

Клон Trello на Phoenix и React. Части 10-12. Финиш долгостроя

Время на прочтение20 мин
Количество просмотров8.5K




Эта часть — заключительная, и будет особенно длинной, но хочется уже закончить с циклом и пойти дальше. Так же прошу прощения за столь огромную паузу при её подготовке и публикации. Однако это время не прошло даром и дало материал для новых, на этот раз оригинальных, статей — прим. переводчика

Читать дальше →

Как Phoenix убивает React

Время на прочтение4 мин
Количество просмотров19K


Около полутора лет назад мы написали внутренний инструмент для корпоративных анонсов. Изначально в нём использовался Phoenix для бэкенда и React для фронтенда. Тем самым мы получали преимущества Redux и каналов Phoenix при доставки обновлений в браузер в реальном времени.


Это позволило получить великолепный живой интерфейс, но снизило скорость разработки и стало причиной малого количества участвующих в процессе разработчиков. Около трёх месяцев назад мы приняли решение выкинуть React и вернуться к серверному рендерингу.


Почему мы решили заменить React


Обновление в реальном времени позволяет лучше погрузиться в работу с приложением, но при этом имеет дополнительные издержки.

Читать дальше →

Ближайшие события

Создание движка для блога с помощью Phoenix и Elixir / Часть 3. Добавляем роли

Время на прочтение14 мин
Количество просмотров4.8K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы добавим поддержку ролей и начнём разграничивать права доступа. Ключевой момент данной серии статей — здесь очень много внимания уделяется тестам, а это здорово!

Дочитайте до конца, чтобы узнать, зачем нужно подписываться на Wunsh.ru и как выиграть крайне полезный приз
».
Читать дальше →

Создание движка для блога с помощью Phoenix и Elixir / Часть 2. Авторизация

Время на прочтение19 мин
Количество просмотров7.4K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.

В этой части мы доработаем основу для блога, чуть глубже погрузимся в тестирование и наконец-то добавим авторизацию. Прошу прощение за небольшую задержку, далее постараюсь придерживаться чёткого расписания, либо идти на опережение!
»
Читать дальше →

Elixir: делаем код расширяемым с помощью Behaviour

Время на прочтение9 мин
Количество просмотров5.7K

Итак, определим диспозицию… Вы написали кусочек кода, который вы хотите использовать с большим количеством разных "вещей" — звучит не очень научно, но всё же. Эти разные вещи объединяет какое-то общее свойство, через которое они достигают одинакового результата на высоком уровне абстракции; только вот пути достижения результата могут быть совершенно разными.


Часто ваш код должен использовать только одну такую вещь за раз, но вы же не хотите делать ваш код настолько узким? Это просто отвратительно. Разве не замечательно, когда другие люди смогут создать новые "вещи" и расширить ваш код, в то время как вы даже не кассаетесь клавиатуры?


Но разве я не могу выбрать конкретную реализацию и использовать её? Мне больше ничего и не надо....

Вы конечно можете. Но что случится, если вы поменяете своё мнение о "вещи", которую вы используете. Вдруг ваша конфетка без обёртки окажется не тем, чем кажется? А вдруг ещё хуже — вашу дивную "штучку" перестанут поддерживать? В этаких ужасных условиях было бы круто, если бы вы могли быстро поменять одно на другое, не меняя при этом вообще всё что мы написали. Прально?

Прально!

Занимательная задачка «Несчастливый билет» (Elixir edition)

Время на прочтение10 мин
Количество просмотров6.1K
Я не смог пройти мимо поста о несчастливом билете. Это одна из моих любимых задач. К тому же, комбинации в решении были запрограммированы вручную, а было бы интересно перебрать все варианты алгоритмически. Я захотел решить эту задачу, используя Elixir.

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

Создание движка для блога с помощью Phoenix и Elixir / Часть 1. Вступление

Время на прочтение21 мин
Количество просмотров32K


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями».
Читать дальше →

Распределенные вычисления в Elixir — классический пример MapReduce

Время на прочтение5 мин
Количество просмотров7.3K

Распределенные вычисления в Elixir


Elixir и Erlang идеально подходят для создания распределенных приложений, выполняющих параллельно несколько, возможно схожих задач. Поддержка многих конкурентных процессов работающих в изоляции была одним из основных аспектов при разработке виртуальной машины языка Erlang.


Постараемся проверить эту возможность использовать потенциал многоядерного процессора на простом примере. Подсчитаем сколько раз встечается слово "лошадь" в рассказах писателя О. Генри размещенных в текстовых файлах в одной директории. Технически, мы будем считать количество вхождения последавательности символов "лошадь", а не слова, и только в нижнем регистре.


Читать дальше →

Техники в Elixir для начинающих: Метод проб и ошибок (перевод)

Время на прочтение9 мин
Количество просмотров9K

The Generate and Test Algorithm


Перевод статьи Coding A.I. Techniques in Elixir: The Generate and Test Algorithm


В последнее время, я работал над проектом в области И.И. (искусственный интеллект). По моим ожиданиям, работа над этим проектом займет ещё значительное время. Цель состояла в том, чтобы написать проект 100% на языке Elixir, но прежде чем я смог принять это решение, мне нужно было удостовериться, что я смогу реализовать некоторые из самых популярных решений в области И.И. на Elixir. На протяжении нескольких дней я изучал некоторые из наиболее эффективных техник, которые применяют исследователи в области И.И. для решения проблем программными средствами.


В этой статье я сделаю краткое объяснение метода, называемого алгоритмом генерации и испытаний — Generate and test algorithm (он же проб и ошибок), а затем я буду использовать вариацию этого метода для решения простой задачи с использованием языка программирования Elixir.


В И.И. есть много областей, из которых наиболее известными на сегодняшний день являются машинное обучение, обработка естественного языка (natural language processing) и робототехника. Тем не менее, для меня моя любимая дисциплина в И.И. известна как автоматизированные рассуждения — Automated reasoning. Программа, которую я продемонстрирую попадет в эту область И.И.


Читать дальше →

Вклад авторов