elixir для чего используется

Elixir

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

Несколько дней назад Jose Valim опубликовал в своем репозитории проект языка, построенного поверх Erlang. Этот язык обладает простой объектной моделью и Ruby-подобным синтаксисом. Под катом выжимки из документации и видео, демонстрирующее простой пример.

disclaimer: %username%, прежде чем делать выводы насчет того, что умеет, а что не умеет elixir, просьба глазами пройтись хотя бы по readme.

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

Основное различие между Elixir и Erlang — синтаксис и объектная ориентированность. Elixir обеспечивает очень простую объектную модель и синтаксис, большей частью основанный на Ruby.

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

Чтобы начать работу, для начала нужно клонировать репозиторий к себе на компьютер, скомпилировать и проверить его:

Комментарии в Elixir, как и в Erlang, обозначаются через “%”:

Далее, “% =>” показывают значение выражения:

Elixir поддерживает целые и дробные числа:

Как в Ruby, любая конструкция является объектом. Мы можем вызывать методы у чисел:

Атомы в Elixir называются Symbols (как в Ruby). Но синтиксис позаимствован у Lisp (Jose объяснил это в твиттере тем, что хочет «:» использовать в словарях):

Списки являются наиболее полезной структурой в Elixir (как и в любом другом функциональном языке), могу содержать все, что угодно и имеют набор методов:

Списки в Erlang и Elixir реализованы как связные списки, поэтому предварительное добавление элементов происходит намного быстрее, чем последующее:

Настоящую силу списков получаешь, когда используешь их вместе с функциями

Строки в Erlang представлены списком символов:

Это накладно, поскольку каждый символ занимает 8 байт памяти (не бит!). Elixir реализует строки, в виде utf8 бинарных строк:

Это существенное изменение. Строки являются единственными объектами, требующими преобразования:

Наконец, строки поддерживают интерполяцию:

Функции являются важной частью Elixir, как и любого другого функционального языка. Функции можно создавать с помощью «do» или «->»:

Как и Erlang, Elixir поддерживает Pattern matching и единичное присваивание.

Как и в Eralng, pattern matching используется в сигнатурах функций:

Вызов методов Erlang весьма тривиален:

Это описание малой части возможностей Elixir. В репозитории опубликована отличная обзорная документация. Ролик ниже иллюстрирует небольшой пример работы языка:

Источник

«Введение в Elixir» — первая книга по Эликсиру на русском

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

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

«Введение в Elixir» — стандартный представитель литературы по языкам программирования. Рассказ ведётся последовательно, от основ синтаксиса к продвинутым модулям и техникам. Примеры синтетические, но при этом иллюстрируют текст так, что сразу становится понятно о чём идёт речь. Учитывая, что язык — выразительный, а набор инструментов, доставшийся в наследство от Эрланга впечатляет, скучать не приходится.

Далее рассмотрю каждую из глав подробнее.

Глава 1. Устраиваемся поудобнее

Здесь всё стандартно. Подготовка к работе с языком, объяснение основы основ и коротенький мастер-класс по работе с интерактивной оболочкой.

Глава 2. Функции и модули

Спустя 20 минут работы с книгой, нас уже знакомят с основной прелестью и красотой языка — функцией. Казалось бы, ничего необычного — просто один из элементов языка. Но на деле, функции в Эликсире — его фундамент.

И уже здесь раскрываются первые необычные возможности языка. Например, объединение функций через пайпы, когда подобная конструкция

превращается в элегантного вида

Или как вам такая особенность? Добавляя комментарии к функциям можно тут же получать полноценную документацию, встроенными в язык средствами.

Глава 3. Атомы, кортежи и сопоставление с образцом

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

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

Но такая простая идея существенным образом (при использовании других механизмов языка) оказывают влияние на стиль программирования на Эликсире.

Например, здесь не переопределяется одна и та же функция трижды. На самом деле это 3 разные функции, каждая из которых может быть выбрана через сопоставлении с образцом первого аргумента-атома.

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

Глава 4. Логика и рекурсия

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

Глава 5. Взаимодействие с человеком

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

Глава 6. Списки

Надеюсь, что мне удаётся пробудить в вас интерес к языку. Помимо интересных синтаксических особенностей и классных идей в основе, всё работает потрясающе быстро. Неспроста, Эликсир сравнивают по скорости работы с Го и Растом, а по скорости разработки с Руби.

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

Читайте также:  какой краской красят спецтехнику

Вот такое вот функциональное программирование с человеческим лицом.

Глава 7. Пары имя/значение

Меня порой спрашивают. Раз в Эликсире нет объектов, то как же нам работать со структурированными данными? Кортежи и списки — это хорошо, но они не позволяют достать значение по имени. Эликсир, хоть и молодой, но уже зрелый (даже продакшн реди) язык. Поэтому разработчики предусмотрели механизмы для решения этой задачи. В Эликсире есть типы данных, в которых можно получать значение по ключу. И в этой главе рассматривается именно они — от словаря до структуры.

Глава 8. Функции высшего порядка и генераторы списков

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

Не самая интересная глава, но узнать об этих возможностях будет не лишним.

Глава 9. Процессы

Если у вас неплохой опыт программирования, то до текущего момента вам могло быть скучновато. Спешу вас обрадовать, самое интересное о киллер-фичах Эликсира начинается прямо сейчас!

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

На самом деле, процессы — это ещё одна организационная единица программы, наравне с функциями и модулями, которая является независимым компонентом, способным принимать и отправлять сообщения. Работающая программа — это набор процессов.

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

Глава 10. Исключения, ошибки и отладка

С отладкой в Эликсире пока не всё гладко, так как не существует полноценных нативных инструментов. Самое популярное — Pry (который пришёл из Руби) и :dbg (из Эрланга). На самом деле, ими вполне комфортно пользоваться, и в книге даётся неплохой разбор второго из них.

Глава 11. Статический анализ, спецификации типов и тестирование

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

Эликсир имеет очень нетривиальные возможности в этих областях. Например, встроенные в документацию тесты:

Теперь, можно быть уверенными, что документация всегда будет актуальной!

Глава 12. Хранение структурированных данных

Как бы нам ни хотелось иметь чистые функции, на практике это невозможно, ведь данные нужно где-то хранить. Для этого у Эрланга есть куча встроенных инструментов, которыми к счастью можно пользоваться и из Эликсира. В этой главе рассматриваются ETS и Mnesia.

Просто представьте, что вам больше не понадобится Редис, в качестве внешней зависимости. Ведь его «заменитель» встроен прямо в язык и поддерживается из коробки.

Глава 13. Основы OTP

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

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

Самыми популярными модулями являются Supervisor и GenServer. Выглядят они так:

Узнать о них подробнее можно тут и тут. Либо в текущей главе книги.

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

Глава 14. Расширение языка Elixir с помощью макросов

Глава 15. Phoenix

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

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

Выводы

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

Надеюсь, мой обзор вам пригодится. Всем хорошего дня и побольше полезных книг!

Источник

Почему я ставлю на Elixir

6 лет я создавал приложения на языке Ruby и фреймворке Rails. Я щупал всякие новые языки программирования по мере их выхода, но Elixir – первый из них, который меня действительно увлёк.

В своё время Ruby уделал всех

Язык Ruby и фреймворк Rails полностью поменяли способ создания веб-приложений. Они дали начало религии ценностей для сообщества программистов. Они первые предложили идею, согласно которой инструменты программиста должны быть оптимизированы для продуктивной и радостной разработки.

Именно они постулировали, что задача тестирования и доведения кода до работоспособного состояния лежит на разработчиках. Другие языки и фреймворки насмехались над таким подходом, пока он не начал завоёвывать популярность. После этого они стали включать принципы, присущие сообществу Ruby, в другие языки и фреймворки.

Ruby прошёл путь от скромного положения невразумительного языка до одного из самых популярных языков, в основном из-за фреймворка Rails и огромного лидерского потенциала таких людей, как DHH, Wycats, Aaron Patterson, Jose Valim и множества других. Но периодически, и тут и там начинают вылезать артефакты, оставшиеся из-за такого скромного старта языка.

Убегающая память

Зед Шо [Zed Shaw] в посте «Rails – это гетто» разглагольствует на тему проблем со сборкой мусора, из-за которых первые приложения на Rails перезапускались каждые 4 минуты.

Читайте также:  что делать если ip адрес недоступен на телефоне

Один из самых популярных серверов для Rails сегодня – это unicorn. Моё веб-приложение – это приложение для Rails, оно довольно простое, по сравнению с другими приложениями, которые я разрабатывал. Я перенёс его на сервер с 512 Мб памяти, и после нескольких дней работы мой unicorn съел всю доступную память и приложение начало тормозить.

Решение? unicorn-worker-killer. Не слишком отличается от более ранних решений.

Мой сервер способен обслужить два потока unicorn, забирающих большинство ресурсов, базу данных Postgres и несколько других приложений. Отзывается он, правда, довольно быстро, поэтому работу свою делает.

Параллелизм

Хотя я занимаюсь разработкой приложений для Rails уже несколько лет, я ни разу не использовал дополнительные потоки в приложениях для продакшена. Сам по себе Rails нормально работает с потоками, но по моим ощущениям, от них возникают одни лишь проблемы – я пробовал использовать их в Java, C++ и других ООП-языках.

Суть в том, что я не хочу задумываться про мьютексы, семафоры, и всяком таком. Если я буду останавливать один поток, чтобы дать другому поработать, не особенный-то это будет параллелизм. И ещё — вы точно-точно уверены, что исполнение вашего кода не приводит к взаимным блокировкам?

Тестирование – главная парадигма сообщества Ruby, поэтому неудивительно, что большинство рубистов не трогают многопоточность, поскольку её практически невозможно тестировать, а её баги очень сложно воспроизводить.

Как и большинство нормальных разработчиков, я использую sidekiq или resque для обработки вещей в параллели. В Rails 2.2 добавили безопасность для потоков, но в Rails 4.2 добавили Active Job API, которое оказалось гораздо более полезным.

Но процессы, выполняемые в фоне, нужно выполнять в фоне. А критичные вещи нужно выполнять в главном процессе – чтобы можно было среагировать на ошибку или проследить, что все транзакции были успешно завершены, перед тем, как завершать задачу.

Скорость

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

Какое-то время выполнение функциональных и юнит-тестов у проекта, над которым я работал, занимало порядка 20 минут. Я использовал hydra для распределённых тестов, но мне всегда было сложно сделать так, чтобы тесты проходили (скорее всего, из-за слишком сложного и не особо красивого кода).

Даже запуск тестов занимал секунд 40. Вы когда-нибудь ждали 40 секунд, только чтобы увидеть: “syntax error, unexpected end-of-input, expecting keyword_end”, или ещё такую же ерунду? А я ждал.

Что делать? Zeus. Прекрасный gem, которая предварительно загружает всё необходимое для приложения и может загрузить (согласно описанию на github) любое приложение для Rails за секунду. Он мне нравится, и я рекомендую его всем.

Но как они достигли такого быстродействия? Просто написали его на Go.

Scala

Пару лет назад я обрадовался появлению Scala. Потом я начал её использовать – и ненавидеть.

У неё есть много концепций из функционального программирования. Фреймворк akka позволяет писать надёжные приложения. Она запускается в JVM, поэтому может использовать любую библиотеку из Java, а JVM очень хорошо обработана на предмет быстродействия.

Сам язык приятный. Но что меня остановило? JVM. Управление пакетами jar слишком сложное, если сравнить его с Rubygems и Bundler.

Есть, конечно, всякие решения: SBT, Maven, Ivy,- но все они заставляют меня морщиться, когда мне нужно импортнуть чью-либо чужую библиотеку. Может, Ruby меня испортил, но управление пакетами в нём – одна из основных причин моей продуктивности.

Что меня ещё напрягало в Scala, так это что используемые мною библиотеки были написаны на Java людьми, чьи ценности и установки сильно отличались от моих.

Создание веб-приложения на Scala в фреймворке Play! выглядело так же, как создание веб-приложения на Java в фреймворке Play!, кроме чуть более простого синтаксиса и возможности поиска шаблонов. Хотя Rails сильно повлиял на Play!, разница между ними чувствуется интуитивно.

Экосистема Elixir

Управление пакетами через Mix

Впервые погрузившись в Elixir, я наткнулся на Mix. Это гибрид Bundler и Rake в Ruby. Что мне в нём так нравится – это то, что он не хуже, чем Bundler и Rake. Он и не сильно лучше, но планка поднята достаточно высоко и подняться до неё – это уже достижение.

Mix делает свою работу прекрасно, не мешается под ногами, и не заставляет вас возиться с XML.

Виртуальная машина Erlang

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

Веб-фреймворк Phoenix

На phoenix framework, очевидно, сильно повлиял Ruby on Rails, и создание веб-приложения для Phoenix выглядит очень похоже на создание приложения для Rails. Мне нравится роутер у Rails. А также ActionController, ActiveRecord, Rails Views и способ, каким вы можете программировать приложение. Мне нравится организация приложений в Rails.

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

Кроме этого, он поддерживает WebSockets через каналы. Это позволяет вам легко использовать WebSockets, предоставляемые в Firebase.

Лидерство

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

Движение Rails приобрело такой большой импульс, благодаря работе DHH, Aaron Patterson, Jose Valim, Wycats и кучи других. Не было такого, чтобы запустили первую версию Rails и работа встала.

Это всё старая привычка много работать – а построение грамотного сообщества требует большой работы. Jose Valim, Chris McCord, и все остальные члены основных команд Elixir-Lang и Phoenix работали и продолжают работать над процветанием их сообщества.

Веб ждут великие преобразования

Признайте – CRUD-приложения на сегодняшний день являются товаром. Следующий стартап «AirBnB для аренды кетчупа» скорее всего не выживет.

Победят те, кто примут изменения в технологиях. То, что в WebSockets, процессы и параллелизм в Phoenix и Elixir легко достижимы, и из-за них не надо поступаться лёгкостью программирования, просто меняет всё дело.

Я очень люблю Ruby on Rails. Он поменял способ создания веб-приложений в годах 2005–2014. Думаю, что Elixir и Phoenix произведут такой же эффект в годах 2015–2025.

Читайте также:  что делать если громкость микрофона сама увеличивается

Если вы уже хотите начать делать веб-приложения на Phoenix и Elixir, вот вам мой тьюториал.

Источник

Начни изучать Elixir прямо сейчас! Перевод всей серии статей готов

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

В этой части речь больше пойдёт о вёрстке, чем непосредственно об Эликсире, однако статья будет полезна тем, что расскажет о взаимодействии с ассет-пайплайном Phoenix.

Вы можете прямо сейчас открыть первую часть и за несколько вечеров создать работающее приложение на Фениксе и посмотреть на Эликсир в действии. А также познакомиться с вебсокетами, плагами, ченджсетами и другими страшными словами функциональной веб-разработки 🙂

На чём мы остановились

В прошлой части мы закончили с написанием тестов для всего, связанного с каналами. На этот раз будет значительно меньше кода на Elixir, вместо которого мы научимся использовать сторонние библиотеки внутри Phoenix-приложений. Как правило, Phoenix встречает вас с очень-очень базовой версией Bootstrap, оптимизированной под него. Давайте немного отойдём от этого подхода и заменим его на другой CSS-фреймворк (а также будет использовать Sass).

Предупреждение. Автор статьи точно не является дизайнером. Результат может вас напугать, так что попробуйте менять всё на свой вкус.

Почему Foundation?

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

Устанавливаем Zurb Foundation 6

Примечание. Обратите внимание, что для избежания проблем совместимости jQuery и Foundation, здесь устанавливается конкретная версия jQuery (v2.2.4). Для дополнительной информации посмотрите эту статью.

Затем, нам нужно добавить директорию для Sass-файлов. Создайте директорию web/static/scss с 3 файлами внутри:

В файл web/static/scss/application.scss добавьте:

В файл web/static/scss/_settings.scss добавьте содержимое файла по ссылке.

В файл web/static/scss/_custom.scss добавьте:

Устанавливаем иконки и шрифты для Foundation

Если вы захотите подключить шрифт с иконками из набора Foundation, выполните следующие шаги:

Теперь иконки должны быть полностью установлены.

Удаляем стандартные стили

Откройте файл web/static/css/phoenix.css и удалите всё, что в нём есть! Нам ничего из этого не понадобится, но могло бы пригодиться, если бы мы решили использовать стандартный CSS.

Изменяем работу с текущим пользователем

Перед тем как продолжить, хотелось бы сделать ещё одну вещь – улучшить написанный ранее код. Например, способ работы с текущим пользователем немного ненадёжен и требует писать один и тот же код снова и снова. Давайте добавим коду, связанному с текущим пользователем, возможность повторного использования. Сначала создадим новый плаг, который расположим в файле web/controllers/current_user_plug.ex :

Улучшаем основной макет

Приступаем к рефакторингу основного макета приложения, чтобы было проще вносить изменения и легче повторно использовать общие элементы. Начнём с раздела head (всё что между тегами ). Создайте файл web/templates/layout/head.html.eex и перенесите в него тег head вместе с содержимым:

Теперь переходим к рефакторингу разметки верхней навигационной панели. Создайте файл web/templates/layout/navigation.html.eex :

Краткое описание представленных классов

В последнем примере используются описанные ниже классы:

Продолжаем рефакторинг

Теперь возьмёмся за блок оповещения, который также являются достаточно часто используемым кодом. Давайте создадим файл web/templates/layout/alerts.html.eex :

Здесь нам нужно сделать чуть больше правок, так как у Phoenix по умолчанию есть конкретные ожидания относительно используемых классов CSS. Эти изменения сделают код блока предупреждений и стили чуть более платформонезависимыми.

Краткое описание представленных классов

Заканчиваем с рефакторингом макета

У нас осталось 2 паршла, которые нужно доработать. Первый – основной контент. Обернём внутренности дива в классы row и content :

Второй – шаблон для включение стандартного кода Javascript внизу. Создайте файл web/templates/layout/script.html.eex :

Основная доработка здесь – это замыкание которое включается для вызова функции foundation() на объекте документа. Это требуется для встроенных в Foundation JS-хелперов.

Добавляем паршлы в макет

Наконец, давайте взглянем на макет приложения после нашего рефакторинга и на общий контент. Давайте изменим файл web/templates/layout/app.html.eex :

Создаём новый макет

Создайте файл нового макета `web/templates/layout/splash.html.eex:

Здесь делается много всего, но по сути это просто контент с парой стилей здесь и там. Давайте взглянем ещё на несколько классов из Foundation:

Создаём экран постов для гостей

А теперь измените функцию index :

Всё, что мы делали до – это там и сям прибирали стили. На всякий случай, код этих уроков находится здесь, так что можете посмотреть на все проделанные изменения, если хотите, чтобы у вас было всё один-в-один.

Исправляем тесты

Мы изменили часть разметки и функциональности, так что тесты упали. Чтобы их исправить, откройте файл test/controllers/page_controller_test.exs и измените проверку на “Phoenix Tech Blog”.

Заключение

Когда всё будет готово, вы должны увидеть подобную приветственную страницу:

А вот что увидит гость, решив взглянуть на список постов:

Теперь блог выглядит гораздо более профессионально. Плюс ко всему мы воспользовались Zurb Foundation 6 через Sass, а также jQuery и кучей других мелких бонусов.

Другие статьи серии

Заключение от переводчика

Ура! Проделана огромная работа, которая наконец-то подошла к концу. Теперь у всех интересующихся Эликсиром и Фениксом есть довольно неплохой вводный курс, который поможет познакомиться с технологиями.

Ещё несколько десятков статей по Эликсиру на русском языке вы можете найти на сайте нашего проекта. На вопросы отвечаем в Телеграм-чате, а о новых статьях и интересных событиях рассказываем в Телеграм-канале, а также в еженедельной ламповой рассылке. Подписывайтесь!

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

Источник

Сказочный портал