WorryFree Computers »
Address
:
[go:
up one dir
,
main page
]
Include Form
Remove Scripts
Accept Cookies
Show Images
Show Referer
Rotate13
Base64
Strip Meta
Strip Title
Session Cookies
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
750
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
133
6.3k
Bootstrap
vanstee
8
680
HTTP API Design for iOS Applications
vanstee
11
510
Consensus: An Introduction to Raft
vanstee
22
2.7k
Convergent Replicated Data Types
vanstee
4
620
Pour Over Brewing Method
vanstee
1
260
Celluloid & DCell
vanstee
4
420
Map Reduce & Ruby
vanstee
10
640
Other Decks in Technology
See All in Technology
自動生成されたhttpエンドポイントごとにカスタムミドルウェアを挿入したい話
uhzz
1
110
JAWS-UGの楽しみ方
schwrzktz
1
370
不要な DNS リソースレコードは消そう / Delete unused DNS records
wa6sn
4
2.2k
AWS Control Towerと HashiCorp Terraformでいい感じにマルチアカウント管理をしよう
chazuke4649
0
310
OpenTelemetry Collector の Connectors って何者?
phaya72
1
110
CyberAgent AI事業本部2024年度MLOps研修実践編 / MLOps Practice
hosimesi11
4
5.5k
Scala to WebAssembly: Exploring the How and Why
tanishiking
0
130
ソニーにおけるプロダクトマネジメント スマホアプリ事例紹介
shinyamasunaga
8
4k
タイパ重視×アウトプット駆動ではじめるAWS 〜認定資格とコミュニティの先で考えるAWSの学び方〜
maimyyym
2
130
社内 TSKaigi 実施を経た Full Stack TypeScript 強化の道
niwatakeru
0
110
高速案件立ち上げで使われるマッハテンプレートのフロントエンド技術選定
sutetotanuki
0
410
開発生産性 超入門 / development productivity introduction
igsr5
11
3.5k
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
457
32k
Documentation Writing (for coders)
carmenintech
61
4k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
How GitHub (no longer) Works
holman
305
140k
Robots, Beer and Maslow
schacon
PRO
155
8k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
19
1.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
353
28k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
10
1.4k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
What the flash - Photography Introduction
edds
64
11k
Gamification - CAS2011
davidbonilla
77
4.7k
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
?