Fix typos and consistency issues across all presentation files
Torey Heinz
committed Feb 23, 2026
commit b38751f79b5530d7c1123c2c52de07a9ce1ba279
Showing 4
changed files with
14 additions
and 14 deletions
02-the-language.livemd
+2
-2
| @@ | @@ -54,7 +54,7 @@ IO.puts("Got: #{result}") |
| That's not a bug — it's a feature. If you expect `:ok` and get `:error`, | |
| Elixir tells you immediately instead of silently continuing with bad data. | |
| - | **JavaScript:** Simalar to destructuring — but it also |
| + | **JavaScript:** Similar to destructuring — but it also |
| validates the shape of your data at the same time. | |
| ## Pattern Matching: Function Heads | |
| @@ | @@ -161,7 +161,7 @@ what case it handles. |
| ## Pattern Matching: The `with` Statement | |
| - | Real-world code often has multiple steps that can each fail. In other langauges there's an Interactor pattern that often requires a whole library to implement. Elixir has the built in `with` Statement |
| + | Real-world code often has multiple steps that can each fail. In other languages there's an Interactor pattern that often requires a whole library to implement. Elixir has the built-in `with` statement |
| ```elixir | |
| defmodule OrderProcessor do | |
scratch.md
+6
-3
| @@ | @@ -179,9 +179,6 @@ Drop: |
| Let's rethink the "wrap-up" it should | |
| - Rewrite "What we covered" based on the current slides. | |
| - | - slides/01-intro.html |
| - | - 02-the-language.livemd |
| - | - 03-real-world.livemd |
| - Highlight all the awesome things Elixir provides: This may take multiple slides | |
| - Supervision, GenServer, pattern matching, with chains, concurrency, LiveView. | |
| @@ | @@ -191,3 +188,9 @@ Let's rethink the "wrap-up" it should |
| Real-time features come for free | |
| - These aren't separate tools bolted together. They're all built into the language and framework. | |
| + | |
| + | Okay, let's finalize the presentation. |
| + | Review each of these files for typos and consistency. Are we building a case for Elixir in a way that web developers will understand? |
| + | - slides/01-intro.html |
| + | - 02-the-language.livemd |
| + | - slides/03-real-world.html |
slides/01-intro.html
+1
-1
| @@ | @@ -112,7 +112,7 @@ |
| <ol> | |
| <li class="fragment"><strong>Why Elixir?</strong> — Where it comes from and why it matters</li> | |
| <li class="fragment"><strong>The Language</strong> — Pattern matching, processes, and LiveView <em>(live demos!)</em></li> | |
| - | <li class="fragment"><strong>Real-World Code</strong> — Production systems from at Vianet</li> |
| + | <li class="fragment"><strong>Real-World Code</strong> — Production systems at Vianet</li> |
| </ol> | |
| <p class="fragment muted" style="margin-top: 1em;">Then we'll open it up for Q&A.</p> | |
slides/03-real-world.html
+5
-8
| @@ | @@ -51,7 +51,7 @@ |
| <p>500,000+ personalized emails through AWS SES</p> | |
| <aside class="notes"> | |
| - | First system: our email marketing platform. This sends half a million personalized emails through |
| + | First system: our email marketing platform. This sends half a million personalized emails through AWS SES. The challenge isn't just volume — it's doing it reliably without exceeding rate limits. |
| </aside> | |
| </section> | |
| @@ | @@ -98,10 +98,10 @@ defmodule Marketing.CampaignSchedulerWorker do |
| @chunk_size 2_000 | |
| def perform(%Oban.Job{args: args}) do | |
| - | member_ids = Campaigns.member_ids(args["campaign_id"]) |
| + | campaign = Campaigns.get_campaign!(args["campaign_id"]) |
| Repo.transaction(fn -> | |
| - | Repo.stream(member_ids(campaign), max_rows: @chunk_size) |
| + | Repo.stream(Campaigns.member_ids_query(campaign), max_rows: @chunk_size) |
| |> Stream.chunk_every(@chunk_size) | |
| |> Enum.each(&schedule_batch(&1, campaign)) | |
| end, timeout: :infinity) | |
| @@ | @@ -296,7 +296,7 @@ end |
| </ul> | |
| <p class="fragment" style="font-size: 0.8em; margin-top: 0.8em; color: #555;"> | |
| These services took <strong>years</strong> to build originally.<br/> | |
| - | <span class="fragment">With <strong>Elixir</strong> + Claude Code,<br> we replaced them all in <strong>under six months</strong>.</span> |
| + | <span class="fragment">With <strong>Elixir</strong> + Claude Code,<br> we replaced them all in <strong>under six months</strong>.</span> |
| </p> | |
| <aside class="notes"> | |
| @@ | @@ -389,12 +389,9 @@ def mount(params, _session, socket) do |
| end | |
| </code></pre> | |
| - | <!-- <p class="fragment" style="font-size: 0.7em; color: #555;"> |
| - | <code>assign_async</code> loads admin lists from 3 databases <strong>concurrently</strong> — loading states come for free. |
| - | </p> --> |
| <aside class="notes"> | |
| - | Here's a real LiveView form. It loads data from three different databases asynchronously using assign_async. The loading states are automatic. Pattern matching determines if we're creating or editing. The form submission is just an Elixir function, not a REST endpoint. |
| + | Here's a real LiveView mount function. It loads admin lists from three different databases asynchronously using assign_async. All three queries run concurrently, and loading states are automatic — the template gets spinners for free while data loads. |
| </aside> | |
| </section> | |