Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir and Ecto
Search
Patrick Van Stee
October 03, 2013
Technology
5
940
Elixir and Ecto
Patrick Van Stee
October 03, 2013
Tweet
Share
More Decks by Patrick Van Stee
See All by Patrick Van Stee
Raft: Consensus for Rubyists
vanstee
140
7.1k
Bootstrap
vanstee
8
790
HTTP API Design for iOS Applications
vanstee
11
630
Consensus: An Introduction to Raft
vanstee
22
3k
Convergent Replicated Data Types
vanstee
4
770
Pour Over Brewing Method
vanstee
1
360
Celluloid & DCell
vanstee
4
550
Map Reduce & Ruby
vanstee
10
800
Other Decks in Technology
See All in Technology
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
220
Serverless Meetup #21
yoshidashingo
1
130
Instant Apps Eulogy
cyrilmottier
1
120
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
160
AIと描く、未来のBacklog 〜プロジェクト管理の次の10年を想像し、創造するセッション〜
hrm_o25
0
110
[OCI Technical Deep Dive] OracleのAI戦略(2025年8月5日開催)
oracle4engineer
PRO
1
210
リモートワークで心掛けていること 〜AI活用編〜
naoki85
0
180
プロダクトエンジニアリングで開発の楽しさを拡張する話
barometrica
0
200
20250807_Kiroと私の反省会
riz3f7
0
250
Amazon Bedrock AgentCoreのフロントエンドを探す旅 (Next.js編)
kmiya84377
1
160
ファッションコーディネートアプリ「WEAR」における、Vertex AI Vector Searchを利用したレコメンド機能の開発・運用で得られたノウハウの紹介
zozotech
PRO
0
530
20250807 Applied Engineer Open House
sakana_ai
PRO
2
520
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
8
550
Gamification - CAS2011
davidbonilla
81
5.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Faster Mobile Websites
deanohume
309
31k
The Pragmatic Product Professional
lauravandoore
36
6.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
How GitHub (no longer) Works
holman
314
140k
Fireside Chat
paigeccino
39
3.6k
The Cost Of JavaScript in 2023
addyosmani
53
8.8k
Transcript
elixir atlanta meetup
meetup.com/ atlantaelixir @vanstee
None
• speakers • sponsors • twitter • website • github
org • [your great idea]
elixir and ecto
Elixir is a functional, meta-programming aware language built on top
of the Erlang VM.
elixir-lang/elixir @josevalim
defmodule Hello do IO.puts "Before world defined" def world do
IO.puts "Hello World" end IO.puts "After world defined" end Hello.world HELLO.EX
None
Types
# tuple { :a, :b, :c } # list [1,
2, 3] [a: 1, b: 2, c: 3] # record defrecord User, name: "", age: nil User.new(name: "Patrick", age: 25) TYPE.EX
Pattern Matching
# assignment a = 1 # => 1 # matching
1 = a # => 1 2 = a # => ** (MatchError) ... { ^a, b } = { 1, 2 } # b => 2 [head | _] = [1, 2, 3] # head => 1 PATTERN.EX
case { 1, 2, 3 } do { 4, 5,
6 } -> "This won't match" { 1, x, 3 } when x > 0 -> "This will match and assign x" _ -> "No match" end GUARD.EX
Processes
current_pid = self spawn fn -> current_pid <- :hello end
receive do :hello -> IO.puts "Hello World" end PROCESS.EX
defmodule Stacker.Supervisor do use Supervisor.Behaviour def start_link(stack) do :supervisor.start_link(__MODULE__, stack)
end def init(stack) do children = [worker(Stacker.Server, [stack])] supervise children, strategy: :one_for_one end end SUPERVISOR.EX
Protocols Macros DocTest and lots more
elixir-lang.org #elixir-lang
None
None
ecto database query DSL
elixir-lang/ecto @ericmj
defmodule User do use Ecto.Model queryable "user" do field :name,
:string end end MODEL.EX
defmodule FindUser do import Ecto.Query def find_by_name(name) do query =
from u in User, where: u.name == ^name, limit: 1 Repo.all(query) end end QUERY.EX
None
Repo
• wrapper • holds connections • executes queries • supervised
worker
defmodule Repo do use Ecto.Repo, adapter: Ecto.Adapters.Postgres def url do
"ecto://user:pass@localhost/db" end end Repo.all(...) Repo.create(...) Repo.update(...) Repo.delete(...) REPO.EX
Entity
• fields • associations • elixir record
defmodule User do use Ecto.Model queryable "user" do field :name,
:string field :password, :string, default: "secret" has_many :projects, Project end end MODEL.EX
Query
• relational algebra • extendable • macros • keyword lists
def paginate(query, page, size) do extend query, limit: size, offset:
(page - 1) * size end query = FindUser.find_by_state("GA") query |> paginate(1, 50) |> Repo.all PAGINATE.EX
from u in User, where: u.name == ^name, limit: 1
QUERY.EX
from(u in User) |> where([u], u.name == ^name) |> limit(1)
|> select([u], u) QUERY.EX
select( limit( where( from(u in User), [u], u.name == ^name
), 1 ), [u], u ) QUERY.EX
Gotchas
• error messages • validations • callbacks • type conversions
• SQL migrations • missing mix tasks
elixir-lang/ecto examples/simple
Thanks! @josevalim @ericmj #elixir-lang
?