Создайте полное приложение Elixir / OTP от начала до конца. Поместите Elixir и OTP в действие, когда вы создаете отказоустойчивое приложение с нуля, в этом 6,5-часовом видеокурсе. Если вы новичок в Elixir, вы получите пошаговые инструкции в привлекательном формате, который вы больше нигде не найдете. Если у вас есть опыт работы с Elixir, вы получите более глубокое понимание того, что вы принимаете как должное, и заполните пробелы в знаниях.
Мы начнем с нового проекта и плавно перейдем к полному приложению Elixir / OTP
Разрабатывая реальное приложение с реальным кодом, вы приобретете практический опыт, объединив все части для создания приложений в стиле Elixir / OTP. По мере создания веб-сервера HTTP с нуля мы изучаем реальные сценарии:
- сопоставление паттернов
- функции с несколькими предложениями
- рекурсия и списки
- параллельные процессы
- асинхронные задачи
- внешние библиотеки
- встроенные библиотеки Erlang
- OTP GenServers and Supervisors
Первая половина курса сосредоточена на основных аспектах, принципах и методах эликсира. Во второй части мы фокусируемся на том, что отличает Elixir/OTP: параллельные процессы, модель actor, поведение OTP и устранение неисправностей.
Создавая проект в такой степени, что нам нужен уникальный аспект Elixir / OTP для достижения чего-то в нашем приложении, вы получите более глубокое понимание «как» и «почему» разработки приложений Elixir / OTP. Изучение этого способа делает все «щелчком» ... и это просто весело!
Создайте реальное приложение с реальным кодом
Этот курс использует подход, основанный на проектах, поэтому вы не найдете учебный модуль, такой как «Elixir Strings». Скучный! Вместо этого мы постепенно добавляем новые функции, поскольку мы создаем полное приложение Elixir / OTP от начала до конца.
Обзор уроков курса:
- 1. Introduction. Добро пожаловать! ... мы поможем вам настроить среду разработки, чтобы вы могли начать программирование на Elixir.
- 2. Create Mix Project. Elixir имеет соглашения для организации проектов и отличные инструменты для автоматизации задач проекта с использованием микса. Мы быстро это рассмотрим, изучим различные способы запуска эликсира и прыгаем прямо в код!
- 3. High-Level Transformations. Наш веб-сервер выполнит три преобразования высокого уровня - парсинг, маршрутизацию и форматирование ответа - каждый шаг будет функцией. Мы создадим initial pipilne, используя модули, именованные функции, строки, карты и pipe оператор.
- 4. Parse Request Line. Чтобы преобразовать запрос в ответ, сначала нужно проанализировать строку запроса в более удобной структуре данных. Это дает прекрасную возможность изучить match operator , atoms, pattern matching technique и встроенные функции.
- 5. Route and Response. Форматирование строки ответов приводит нас глубже в карты Эликсира и вводит нас в программирование с неизменяемыми данными, что является отличительной чертой функционального программирования.
- 6. Function Clauses. В Elixir вы не используете условные выражения так часто, как в императивных языках, таких как Ruby. Вместо этого более логично управлять потоком программы, используя функциональные предложения и сопоставление шаблонов. Маршрутизация HTTP-запросов дает нам идеальный контекст для обучения разработке кода в этом декларативном стиле.
- 7. Request Params and Status Codes. Проектирование веб-сервера представляет собой интересные сценарии, позволяющие исследовать многие функции Elixir. Как мы обрабатываем запрос с параметрами? Что произойдет, если маршрут не соответствует? И как мы должны реагировать? Решения требуют больше методов сопоставления образцов и функций с несколькими предложениями.
- 8. Rewrite Paths and Track 404s. Когда у нас есть запросы, протекающие через pipeline, мы можем подключить специализированные функции, которые уникально преобразуют запросы и ответы. По pattern matching maps мы можем условно использовать эти функции - мощные методы, которые широко используются в приложениях Elixir.
- 9. Serve Static Files. Даже что-то знакомое и простое, как чтение файла, связано с сопоставлением шаблонов (pattern matching). Обслуживание статических файлов и правильная обработка успехов и сбоев приводит нас к tuples and case expressions .
- 10. Module Attributes. Иногда вам нужно прикрепить метаданные к модулю, будь то для документации или для того, чтобы сбежать от постоянной времени компиляции. В этом разделе мы используем зарезервированные и настраиваемые атрибуты модуля.
- 11. Organizing Code. Модули позволяют организовывать функции с похожими проблемами в пространстве имен. Мы будем группировать связанные функции в правильно названных модулях, помещать их в отдельные файлы и объединять все вместе, используя псевдонимы и импорт.
- 12. Modeling With Structs. Одним из преимуществ моделирования нашего диалога запроса / ответа как структуры (по сравнению с общей картой) является то, что мы можем гарантировать, что функции в нашем конвейере всегда получат ожидаемый тип. В этом разделе мы сравниваем structs vs. maps и реорганизуем наш дизайн для использования struct.
- 13. Handle POST Requests. Обработка запроса POST означает, что мы должны учитывать список заголовков запросов и параметры POSTed. Для этого мы обработаем запрос, сопоставляя head and tail patterns: метод, используемый повсеместно в приложениях Elixir.
- 14. Recursion. Рекурсия заставляет ходить эликсир «по кругу. Вы, несомненно, видели простые примеры рекурсии, но как насчет реальных случаев использования? Оказывается, рекурсия - это именно то, что нам нужно чтобы проанализировать заголовки HTTP в наших POST-запросах. И хотя Elixir имеет удобные функции, которые часто позволяют вам обойтись без рекурсии, профессионалы Elixir знают, как использовать рекурсию в своих интересах.
- 15. Slicing and Dicing with Enum. Вы найдете знакомые функции высокого порядка в модуле Enum для преобразования данных. Но чтобы эффективно использовать их, вам нужно быть знакомым с анонимными функциями и capture functions .
- 16. Comprehensions. Теперь пришло время создавать динамический контент, читая и оценивая файлы шаблонов. Мы быстро работаем над этим, используя comprehensions to "loop" через коллекции данных и генерируем HTML.
- 17. A Peek At Phoenix. Поскольку Elixir - это язык, который вы используете для создания веб-приложений Phoenix, взгляд в приложении Phoenix показывает много знакомых синтаксисов и концепций дизайна. Увы, вы обнаружите, что в действительности нет никакой магии!
- 18. Test Automation. Пришло время автоматизировать тесты с ExUnit! Мы рассматриваем два разных способа написания модульных тестов и различные способы их запуска.
- 19. Rendering JSON. Для создания JSON API мы устанавливаем внешнюю библиотеку JSON и используем ее для рендеринга JSON и обработки данных POSTed JSON в ответ на запросы API.
- 20. Web Server Sockets. Теперь, когда у нас есть полностью функционирующий обработчик HTTP-запросов, пришло время написать сервер сокетов TCP, чтобы любой HTTP-клиент мог взаимодействовать с нашим приложением. Для этого мы используем библиотеку gen_tcp от Erlang и узнаем, как перекодировать Erlang в Elixir.
- 21. Concurrent, Isolated Processes. На этом этапе наш веб-сервер может обрабатывать только один запрос за раз. Нам нужен способ одновременного обработки нескольких запросов, а также изолировать отказ одного запроса, чтобы он не влиял на другие запросы.Параллельные изолированные процессы - это то, что отличает эликсир от других функциональных языков! Мы также заглянем в Erlang VM, чтобы узнать, как в полной мере использовать многоядерные компьютеры для достижения замечательных уровней параллелизма.
- 22. Sending and Receiving Messages. Итак, если процессы изолированы и выполняются одновременно, как они обмениваются данными? Также как люди! Они отправляют асинхронные сообщения друг другу. В нашем приложении мы создаем серию запросов API, которые запускаются в независимых процессах. Они отправляют свои результаты в виде сообщений, которые должны быть получены процессом обработки запроса. Мы также рассмотрим, как избежать нежелательных точек синхронизации в нашем коде.
- 23. Asynchronous Tasks. С запуском нескольких одноразовых асинхронных задач и получением результатов позднее мы начинаем видеть определенный шаблон. Фактически, запущенные функции (или задачи) в недолговечном процессе настолько распространены, что Elixir предоставляет полезную абстракцию: модуль Task.
- 24. Stateful Server Processes. Теперь мы обращаем наше внимание на длительные серверные процессы, которые управляют внутренним состоянием и реагируют на различные сообщения. Мы создаем из базового цикла получения API клиента, который отправляет синхронные и асинхронные запросы на зарегистрированный серверный процесс. По пути мы видим, как серверный процесс сохраняет целостность своего состояния при загрузке из нескольких одновременных клиентских процессов. Написав серверный процесс с нуля, мы начинаем видеть «волшебство» GenServer.
- 25. Refactoring Toward GenServer. Рассматривая наш процесс с поддержкой состояния, мы видим два варианта кода: код, общий для всех процессов сервера и кода приложения. Итак, что происходит, когда мы перемещаем весь общий код в общий модуль? Ну, мы не первые, у кого есть эта идея! GenServer - это шаблон проектирования (поведение OTP), который помогает нам легче писать серверные процессы. Рефакторинг нашего серверного процесса позволит вам лучше понять, как (и почему!) Работает GenServer.
- 26. OTP GenServer. Когда вы начинаете работу с Elixir, и пишите GenServer, можно сбиватся с толку. Но мы хотим чтобы вы чувствовали себя уверенно, поэтому мы постепенно наращивали использование GenServer. Предупреждение о спойлере: теперь, когда вы понимаете базовый шаблон дизайна и как он реализован, на самом деле использование GenServer - это просто!
- 27. Another GenServer. В качестве еще одного практического примера того, когда и как вы будете использовать GenServer в реальном приложении, мы пишем серверный процесс, который выполняет фоновую работу на периодическом интервале. Это позволяет нам более подробно изучить возможности обратного вызова handle_info, чтобы вы могли в полной мере использовать все, что может предложить GenServer.
- 28. Linking Processes. На этом этапе у нас есть три серверных процесса, которые должны работать непрерывно, не пропуская бит. Увы, дело не всегда идет по плану! Нам нужен способ отслеживания процессов сервера и восстановления при возникновении проблем. Для этого мы начинаем связывания процессов, что имеет основополагающее значение для понимания того, как работает поведение OTP Supervisor.
- 29. Fault Recovery with OTP Supervisors. Обычно проектирование приложения, которое является устойчивым к сбоям, - это высокий порядок. С другими языками лучшее, что вы можете сделать, - защищать код. Эликсир отличается: он освобождает вас, чтобы «позволить ему потерпеть крах». Это возможно только потому, что OTP Supervisors предлагают беспрецедентную поддержку для обнаружения и восстановления сбоев процесса. Действительно, супервизоры являются ключом к созданию отказоустойчивых систем высокой доступности. Мы проектируем дерево контроля, чтобы наше приложение могло изящно поправится от непредвиденных сбоев.
- 30. Final OTP Application. До этого момента мы использовали термин «приложение» довольно свободно. Но приложение Elixir является первоклассным OTP-объектом. Мы рассмотрим, как приложение работает за кулисами, а затем взглянем на поведение приложения OTP, чтобы начать наше дерево наблюдения. Мы также настраиваем среду приложения по умолчанию. В конце концов, у вас есть полное приложение, разработанное способом Elixir!
Видео высокого качества
Доступ к потоковому просмотру курса на любом устройстве. Общая продолжительность составляет 6,5 часа.
Упражнения и заметки
Каждое видео имеет практические упражнения, дополнительные заметки, альтернативные методы дизайна и удобные подсказки и трюки.
Исходный код
Включает стартовые файлы, ступенчатые версии приложения для каждого модуля курса и весь исходный код для окончательного приложения.
Для опытных разработчиков
Этот курс не подходит для первого курса программирования на Elixir. Чтобы уважать ваше время, мы предполагаем, что у вас есть опыт на уровне проекта с другим языком программирования. Однако мы не предполагаем, что у вас есть какой-либо предшествующий опыт работы с функциональным программированием или Elixir.
От Майка и Николь
Привет народ! Многие из вас писали по электронной почте и в твиттер по поводу курса эликсира. Нам не нужен курс, ориентированный на синтаксис, потому что это заставляет нас заснуть. Вместо этого, в этом курсе мы будем фактически создавать что-то с Elixir. Мы хотели бы, чтобы вы присоединились к нам в этот замечательный курс.