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
1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elixir and Ecto
Patrick Van Stee
October 03, 2013
More Decks by Patrick Van Stee
See All by Patrick Van Stee
Raft: Consensus for Rubyists
vanstee
141
7.6k
Bootstrap
vanstee
8
840
HTTP API Design for iOS Applications
vanstee
11
720
Consensus: An Introduction to Raft
vanstee
21
3.2k
Convergent Replicated Data Types
vanstee
4
880
Pour Over Brewing Method
vanstee
1
420
Celluloid & DCell
vanstee
4
610
Map Reduce & Ruby
vanstee
10
910
Other Decks in Technology
See All in Technology
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.1k
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
480
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
390
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
750
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
380
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
110
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
290
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
110
Making sense of Google’s agentic dev tools
glaforge
1
280
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
160
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.6k
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Agile that works and the tools we love
rasmusluckow
331
22k
The SEO identity crisis: Don't let AI make you average
varn
0
510
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Thoughts on Productivity
jonyablonski
76
5.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Building AI with AI
inesmontani
PRO
1
1.1k
Docker and Python
trallard
47
4k
Design in an AI World
tapps
1
260
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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
?