Monthly Membership
-
1
Level One - Intro to Elixir and how to succeed in this course
- 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
-
2
Level Two - The Syntax and Fundamentals
- Overview and Installation
- Syntax Basics
- Pattern Matching
- Advanced Syntax
- Keeping Flow Clean
- Functional Descriptive Flow
-
3
Level Three - REST and GraphQL with Phoenix
- Overview and Phoenix Installation
- Introduction to Phoenix and it's Architecture
- Creating a REST API
- GraphQL vs REST
- Creating a GraphQL API
- Creating Web Pages with Phoenix
- Phoenix Channels and GraphQL Subscriptions
-
4
Level Four - Ecto DB and Architecture
- Overview
- Creating Schemas and Migrations
- Data Integrity Through Changesets
- Writing and Composing Queries
- Managing Schema Relationships
- Integrating Ecto with Phoenix
-
5
Level Five - 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
-
6
Midterm Project - Mini Boss
- Midterm Recap
- Midterm Project Prep
-
7
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
- 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
-
8
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
- 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
-
9
Level Eight - 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, Guages & 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