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

    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
  • 7

    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
  • 8

    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