Elixir Mastery
Fast Track To Senior Status
-
1
Level One - Intro to Elixir and How to succeed in this course
- Resources and Transcripts
- 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
- Comprehension Quiz
-
2
Level Two - The Syntax and Fundamentals
- Resources, Transcripts, and Weekly Call
- Overview and Installation
- Syntax Basics
- Basic Syntax Quiz
- Pattern Matching
- Advanced Syntax
- Pattern Matching & Advanced Syntax Quiz
- Keeping Flow Clean
- Functional Descriptive Flow
- Code Fundamentals Assignment
-
3
Level Three - REST and GraphQL with Phoenix
- Resources and Transcripts
- Overview and Phoenix Installation
- Introduction to Phoenix and it's Architecture
- Phoenix Architecture Quiz
- Phoenix Cheat Sheets
- Creating a REST API
- REST API Quiz
- GraphQL vs REST
- GraphQL vs REST Quiz
- Creating a GraphQL API
- GraphQL Quiz
- Absinthe GraphQL Resources
- Creating Web Pages with Phoenix
- Phoenix Templates Resources
- Phoenix Channels and GraphQL Subscriptions
- GraphQL API Assignment
-
4
Level Four - Ecto DB and Architecture
- Resources and Transcripts
- Overview
- Creating Schemas and Migrations
- Schemas and Migrations Quiz
- Data Integrity Through Changesets
- Changesets Quiz
- Writing and Composing Queries
- Writing and Composing Queries Quiz
- Managing Schema Relationships
- Relationship Quiz
- Integrating Ecto with Phoenix
- Integrating Ecto with Phoenix Quiz
- Phoenix Project Ecto Integration
-
5
Level Five - OTP & Testing
- Overview Audio & Transcripts
- Overview
- 1 - Audio & Transcripts
- 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
- OTP Process Quiz
- 2 - Audio & Transcripts
- 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
- Testing Basics Quiz
- 3 - Audio and Transcripts
- 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
- Testing Maintainability Quiz
- OTP Process and Testing Assignment
-
6
Midterm Project - Mini Boss
- Audio & Transcripts
- Midterm Recap
- Midterm Project Prep
- Midterm Project
-
7
Opportunity Preparation & Placement
- Open To Opportunities - Preparation
- Interviews, Coaching, & Placement
- The Elixir Community
-
8
Level Six - Absinthe Deep Dive & Pre-emptive error Handling
- Overview
- 1.0 - Thinking About Errors
- 1.1 - Erroring Gracefully
- 1.2 - Writing to Handle Unknown Errors
- Thinking About Errors Quiz
- 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
- Debugging Quiz
- 3.0 - Absinthe's Middleware
- 3.1 - Absinthe's Resolution Object
- 3.3 - Absinthe Fields and Objects
- 3.4 - Writing Documentation With Absinthe
- Absinthe Quiz
- Error System & Absinthe Assignment
-
9
Level Seven - Planning for scalability & How to go distributed
- Overview
- 1.0 - Elixir Limitations
- 1.1 - Statistics to Measure Scale
- 1.2 - Side Effects of Scaling
- Limitations and Scaling Quiz
- 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
- Bottlenecks and Increasing Width Quiz
- 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
- Elixir Distribution Quiz
- 4.0 - Using GenStage to Process Lots of Data
- 4.1 - GenStage Dispatchers
- 4.2 - GenStage Consumer Producers
- GenStage Quiz
- Scalability & Distribution Assignment
-
10
Level Eight - Metrics & Distributed tooling
- Overview
- 1.0 - What are Metrics
- 1.1 - Beam Telemetry
- Metrics & Telemetry Quiz
- 2.0 - Setting up Prometheus and Grafana
- 2.1 - Gathering Metrics with Prometheus
- 2.2- Prometheus Counters, Guages & Histograms
- 2.3 - Grafana Deep Dive
- 2.4 - Building Good Grafana Dashboards
- Grafana & Prometheus Quiz
- Grafana & Prometheus Assignment
- 3.0 - Using Global for Distributed Communication
- 3.1 - CAP Theorem Basics
- 3.2 - Creating Distributed Supervisors with Horde
- Global, Horde & CAP Theorem Quiz
- 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
- Distributed Tooling Assignment
-
11
Level 9 - How to use Elixir to Architect an Application & Code Scanning
- Overview
- 1.0 - Directory Organization & Module Structure
- 1.1 - Umbrella & Poncho Projects
- Project Organization Quiz
- 2.0 - Connecting to Other Languages
- 2.1 - Developing with NIFs
- Other Language & NIF Quiz
- 3.0 - Architecting a Green Field Application
- 3.1 - Architecting Data Flow
- 3.2 - Architecting Clean Applications
- 3.3 - Thinking about the VM & Reductions
- New, Clean & Flowing Applications Quiz
- 4.0 - Oban Intro & Setup
- 4.1 - Oban Deep Dive
- 4.2 - Architecting Systems with Oban
- Oban Quiz
- Diagramming & Oban Assignment
- 5.0 - Evaluating Development Tradeoffs
- 5.1 - The Importance of Delaying Architecture Decisions
- Dev Tradeoffs & Delaying Architecture Quiz
- 6.0 - Assessing Workload
- 6.1 - Shortening Development Time with Libraries
- Assessing Workload & Libraries Quiz
- 7.0 - Setting up Credo
- 7.1 - Setting up Dialyzer
- 7.2 - Setting up Code Coverage
- Code Scanning Quiz
- Architecture & Code Scanning Assignment
-
12
Final Project - Last Boss
- Recap
- Project Instructions
-
13
Level Ten - Tuning the VM & How to Create and Manage Releases
- Overview
- 1.0 - Knowing the VM's Limits
- 1.1 - Where the VM Limits Bend
- 1.2 - When to Tune the VM
- 2.0 - Drafting Releases with mix release
- 2.1 - Drafting Releases with Distillery
- 2.2 - Writing Custom Release Tools with Distillery
- 3.0 - Deploying Bare Metal Releases Over SSH
- 3.1 - Deploying Releases with Docker Containers
- 3.2 - Using Hot-Code Upgrades to Deploy
- 4.0 - How to setup CI
- 4.1 - How to Manage Releases
- 4.2 - How to Setup a CD Pipeline
-
14
Final Remarks
- Congratulations
- Where to go From Here
- Final Notes