Self Guided
A sample of Elixir Mastery
Update your subscription anytime
Includes
Videos Only
14 Day Free Trial
Intro to Elixir
- Course Overview
- What you need to do well in this course
- Why Elixir is poised for the future
- What is functional programming and how does it apply to Elixir
The Syntax and Fundamentals
- Overview and Installation
- Syntax Basics
- Pattern Matching
- Advanced Syntax
- Keeping Flow Clean
- Functional Descriptive Flow
REST and GraphQL with Phoenix
- Overview and Phoenix Installation
- Introduction to Phoenix and its Architecture
- Creating a REST API
- GraphQL vs REST
- Creating a GraphQL API
- Creating Web Pages with Phoenix
- Phoenix Channels and GraphQL Subscriptions
Ecto DB and Architecture
- Overview
- Creating Schemas and Migrations
- Data Integrity Through Changesets
- Writing and Composing Queries
- Managing Schema Relationships
- Integrating Ecto with Phoenix
OTP & Testing
- Overview
- 1 - What is OTP
- 1.1 - OTP Supervisors and Workers
- 1.2 - OTP Process Communication
- 1.3 - OTP Agent, GenServers & Tasks
- 1.4 - OTP Application
- 1.5 - OTP 'Let it Crash'
- 1.6 - OTP Process Limitations
- 2 - ExUnit
- 2.1 - Writing Testable Code
- 2.2 - Testing OTP
- 2.3 - Testing Ecto
- 2.4 - Testing REST
- 2.5 - Testing GraphQL
- 2.6 - Testing GraphQL Subscriptions
- 3 - Writing Maintainable Tests
- 3.1 - Cleaning up Tests with Support
- 3.2 - Stubbing & Mocking
- 3.3 - Testing Side Effects
- 3.4 - Crushing Bugs with IEx, Logger and IO.inspect
Absinthe Deep Dive & Pre-emptive error Handling
- Overview
- 1.0 - Thinking About Errors
- 1.1 - Erroring Gracefully
- 1.2 - Writing to Handle Unknown Errors
- 2.0 - Adding Logging to Aid Debugging
- 2.1 - Creating Error Systems for Debugging
- 2.2 - Using IEx to Debug Code
- 2.3 - Debugging with Observer
- 3.0 - Absinthe's Middleware
- 3.1 - Absinthe's Resolution Object
- 3.3 - Absinthe Fields and Objects
- 3.4 - Writing Documentation With Absinthe
Planning for scalability & How to go distributed
- Overview
- 1.0 - Elixir Limitations
- 1.1 - Statistics to Measure Scale
- 1.2 - Side Effects of Scaling
- 2.0 - Bottlenecks from Elixir
- 2.1 - Pooling for Increasing Bottleneck Width
- 2.2 - ETS to Eliminate State Access Bottlenecks
- 2.3 - How to Architect with Bottlenecks in Mind
- 3.0 - Connecting Elixir Nodes
- 3.1 - Sending Messages Across Nodes
- 3.2 - Clustering Nodes with LibCluster
- 3.3 - Distributing Work with Tasks
- 3.4 - Distributing Phoenix & Absinthe
- 4.0 - Using GenStage to Process Lots of Data
- 4.1 - GenStage Dispatchers
- 4.2 - GenStage Consumer Producers
Metrics & Distributed tooling
- Overview
- 1.0 - What are Metrics
- 1.1 - Beam Telemetry
- 2.0 - Setting up Prometheus and Grafana
- 2.1 - Gathering Metrics with Prometheus
- 2.2 - Prometheus Counters, Gauges & Histograms
- 2.3 - Grafana Deep Dive
- 2.4 - Building Good Grafana Dashboards
- 3.0 - Using Global for Distributed Communication
- 3.1 - CAP Theorem Basics
- 3.2 - Creating Distributed Supervisors with Horde
- 4.0 - Replicating State Across Clustered Nodes
- 4.1 - Using DeltaCRDT to Create a Caching System
- 4.2 - Distributed Hash Rings
- 4.3 - Using Redis as a Cache
- 4.4 - Distributed Caching Types & Trade-offs
Advanced Elixir Application Architecture & Development
- Overview
- 1.0 - Directory Organization & Module Structure
- 1.1 - Umbrella & Poncho Projects
- 2.0 - Connecting to Other Languages
- 2.1 - Developing with NIFs
- 3.0 - Architecting a Green Field Application
- 3.1 - Architecting Data Flow
- 3.2 - Architecting Clean Applications
- 3.3 - Thinking about the VM & Reductions
- 4.0 - Oban Intro & Setup
- 4.1 - Oban Deep Dive
- 4.2 - Architecting Systems with Oban
- 5.0 - Evaluating Development Tradeoffs
- 5.1 - The Importance of Delaying Architecture Decisions
- 6.0 - Assessing Workload
- 6.1 - Shortening Development Time with Libraries
- 7.0 - Setting up Credo
- 7.1 - Setting up Dialyzer
- 7.2 - Setting up Code Coverage
Tuning the VM & How to Create and Manage Releases
- Overview
- 1.0 - Remote Debugging Tools
- 1.1 - Finding Bottlenecks with Recon
- 1.2 - Remote Tracing with RexBug
- 2.0 - Analyzing VM Memory & CPU
- 2.1 - Debugging High VM CPU
- 2.2 - Debugging High VM Memory
- 3.0 - Knowing the VM's Limits
- 3.1 - Where the VM Limits Bend
- 3.2 - When to Tune the VM
- 4.0 - Drafting Releases with mix release
- 4.1 - Deploying Bare Metal Releases Over SSH
- 4.2 - Deploying Releases with Docker Containers
- 4.3 - Using Hot-Code Upgrades to Deploy
- 5.0 - How to setup CI
- 5.1 - How to Manage Releases
- 5.2 - How to Setup a CD Pipeline