SlideShare a Scribd company logo
Going off the Rails into
Elixir
Dan Ivovich
DC |> Elixir
March 19, 2019
Why the dev team wants to
❗
AND
Why they should
Who Am I?
Who Am I?
• Software Developer
Who Am I?
• Software Developer
• Director of Development at SmartLogic
Who Am I?
• Software Developer
• Director of Development at SmartLogic
• Rails developer for 12 years
Who Am I?
• Software Developer
• Director of Development at SmartLogic
• Rails developer for 12 years
• Elixir convert since Summer 2016
Who Am I?
• Software Developer
• Director of Development at SmartLogic
• Rails developer for 12 years
• Elixir convert since Summer 2016
• Organizer of the Baltimore Elixir and Erlang
Meetup
Why Devs Love
Elixir
https://unsplash.com/photos/FoKO4DpXamQ
New!
https://unsplash.com/photos/CqKNkmNNLnI
Shiny!
https://unsplash.com/photos/nmUwlzQeQ
Fun!
https://unsplash.com/photos/TVfVo1pga9s
Compiled
https://xkcd.com/303/
But More Seriously
https://unsplash.com/photos/heyiNKAAJWc
Pattern Matching
https://unsplash.com/photos/vdbG0z6YDwM
Pattern Matching
> [1, b, 4] = [1, 5, 4]
[1, 5, 4]
> b
5
> [head | tail] = [1, 2, 3]
[1, 2, 3]
> head
1
> tail
[2, 3]
Pattern Matching
> [1, b, 4] = [1, 5, 4]
[1, 5, 4]
> b
5
> [head | tail] = [1, 2, 3]
[1, 2, 3]
> head
1
> tail
[2, 3]
Pattern Matching
> [1, b, 4] = [1, 5, 4]
[1, 5, 4]
> b
5
> [head | tail] = [1, 2, 3]
[1, 2, 3]
> head
1
> tail
[2, 3]
Pattern Matching
> [1, b, 4] = [1, 5, 4]
[1, 5, 4]
> b
5
> [head | tail] = [1, 2, 3]
[1, 2, 3]
> head
1
> tail
[2, 3]
Pattern Matching
> [1, b, 4] = [1, 5, 4]
[1, 5, 4]
> b
5
> [head | tail] = [1, 2, 3]
[1, 2, 3]
> head
1
> tail
[2, 3]
Pattern Matching
def execute({:ok, value}) do
IO.puts "Execute: #{value}"
end
def execute({:error, reason}) do
IO.puts "Error: #{reason}"
end
> execute({:ok, "Well Done!"})
Execute: Well Done!
> execute({:error, "Fail!"})
Error: Fail!
Pattern Matching
def execute({:ok, value}) do
IO.puts "Execute: #{value}"
end
def execute({:error, reason}) do
IO.puts "Error: #{reason}"
end
> execute({:ok, "Well Done!"})
Execute: Well Done!
> execute({:error, "Fail!"})
Error: Fail!
Pattern Matching
def execute({:ok, value}) do
IO.puts "Execute: #{value}"
end
def execute({:error, reason}) do
IO.puts "Error: #{reason}"
end
> execute({:ok, "Well Done!"})
Execute: Well Done!
> execute({:error, "Fail!"})
Error: Fail!
Pattern Matching
def execute({:ok, value}) do
IO.puts "Execute: #{value}"
end
def execute({:error, reason}) do
IO.puts "Error: #{reason}"
end
> execute({:ok, "Well Done!"})
Execute: Well Done!
> execute({:error, "Fail!"})
Error: Fail!
Pattern Matching
def execute({:ok, value}) do
IO.puts "Execute: #{value}"
end
def execute({:error, reason}) do
IO.puts "Error: #{reason}"
end
> execute({:ok, "Well Done!"})
Execute: Well Done!
> execute({:error, "Fail!"})
Error: Fail!
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pattern Matching
case HTTP.get(url) do
{:ok, %HTTP.Resp{status: 200, body: body}} ->
IO.puts body
{:ok, %HTTP.Resp{status: 404}} ->
IO.puts "Not found!"
{:ok, %HTTP.Resp{status: status}} ->
IO.puts "HTTP Status: #{status}"
{:error, %HTTP.Error{reason: reason}} ->
IO.inspect reason
_ ->
IO.puts "Some other error"
end
Pipe Operator
three = add(1, 2)
six = add(three, 3)
ten = add(six, 4)
ten = add(add(add(1, 2), 3), 4)
ten =
1
|> add(2)
|> add(3)
|> add(4)
Pipe Operator
three = add(1, 2)
six = add(three, 3)
ten = add(six, 4)
ten = add(add(add(1, 2), 3), 4)
ten =
1
|> add(2)
|> add(3)
|> add(4)
Pipe Operator
three = add(1, 2)
six = add(three, 3)
ten = add(six, 4)
ten = add(add(add(1, 2), 3), 4)
ten =
1
|> add(2)
|> add(3)
|> add(4)
Pipe Operator
three = add(1, 2)
six = add(three, 3)
ten = add(six, 4)
ten = add(add(add(1, 2), 3), 4)
ten =
1
|> add(2)
|> add(3)
|> add(4)
Ecto
Changesets
Ecto
Changesets
• Ever try and run just some ActiveRecord
validations depending on the current user?
Ecto
Changesets
• Ever try and run just some ActiveRecord
validations depending on the current user?
• Ever have a set of validations dependent on
data state?
Ecto
Changesets
def edit_self_changeset(user, params  %{}) do
user
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_inclusion(:age, 18..100)
end
def admin_edit_changeset(user, params  %{}) do
user
|> cast(params, [:name, :email, :age])
|> validate_required([:name, :email])
|> validate_format(:email, ~r/@/)
|> validate_inclusion(:age, 18..100)
|> unique_constraint(:email)
end
Ecto
Changesets
def edit_self_changeset(user, params  %{}) do
user
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_inclusion(:age, 18..100)
end
def admin_edit_changeset(user, params  %{}) do
user
|> cast(params, [:name, :email, :age])
|> validate_required([:name, :email])
|> validate_format(:email, ~r/@/)
|> validate_inclusion(:age, 18..100)
|> unique_constraint(:email)
end
Ecto
Changesets
def edit_self_changeset(user, params  %{}) do
user
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_inclusion(:age, 18..100)
end
def admin_edit_changeset(user, params  %{}) do
user
|> cast(params, [:name, :email, :age])
|> validate_required([:name, :email])
|> validate_format(:email, ~r/@/)
|> validate_inclusion(:age, 18..100)
|> unique_constraint(:email)
end
Ecto
Changesets
def edit_self_changeset(user, params  %{}) do
user
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_inclusion(:age, 18..100)
end
def admin_edit_changeset(user, params  %{}) do
user
|> cast(params, [:name, :email, :age])
|> validate_required([:name, :email])
|> validate_format(:email, ~r/@/)
|> validate_inclusion(:age, 18..100)
|> unique_constraint(:email)
end
Phoenix
Param Matching
def show(conn, %{"user_params" => user_params} = params) do
end
def show(conn, %{"admin_params" => admin_params} = params) do
end
Phoenix
View Code
Phoenix
View Code
• Not a pile of global namespace helpers
Phoenix
View Code
• Not a pile of global namespace helpers
• Good encapsulation of presentation logic
Gen Server
No need for external workers
GenServer.cast(MyWorker, {:process, this_thing})
def handle_cast({:process, this_thing}, state) do
# do work
{:noreply, state}
end
Gen Server
No need for external workers
GenServer.cast(MyWorker, {:process, this_thing})
def handle_cast({:process, this_thing}, state) do
# do work
{:noreply, state}
end
Gen Server
No need for external workers
GenServer.cast(MyWorker, {:process, this_thing})
def handle_cast({:process, this_thing}, state) do
# do work
{:noreply, state}
end
Management should support
Elixir
https://unsplash.com/photos/FoKO4DpXamQ
All that cool tech didn't
convince you!?!
https://unsplash.com/photos/FO7JIlwjOtU
What does Elixir bring?
What does Elixir bring?
• Ruby-inspired syntax
What does Elixir bring?
• Ruby-inspired syntax
• Meta programming
What does Elixir bring?
• Ruby-inspired syntax
• Meta programming
• Polymorphism via protocols
What does Elixir bring?
• Ruby-inspired syntax
• Meta programming
• Polymorphism via protocols
• Great tooling
What does Elixir bring?
• Ruby-inspired syntax
• Meta programming
• Polymorphism via protocols
• Great tooling
• Better code organization facilities than Erlang
What does Elixir bring?
• Ruby-inspired syntax
• Meta programming
• Polymorphism via protocols
• Great tooling
• Better code organization facilities than Erlang
• Erlang functions can be called from Elixir
What does Elixir bring?
What does Elixir bring?
• Lightweight and isolated concurrency
What does Elixir bring?
• Lightweight and isolated concurrency
• Shared nothing concurrent programming
What does Elixir bring?
• Lightweight and isolated concurrency
• Shared nothing concurrent programming
• Lazy and async collections
What does Elixir bring?
• Lightweight and isolated concurrency
• Shared nothing concurrent programming
• Lazy and async collections
• Pattern matching
What does Elixir bring?
• Lightweight and isolated concurrency
• Shared nothing concurrent programming
• Lazy and async collections
• Pattern matching
• Unicode support and UTF-8 strings
Scaleable and Fault-tolerant
Scaleable and Fault-tolerant
• Isolation means each process is garbage
collected independently
Scaleable and Fault-tolerant
• Isolation means each process is garbage
collected independently
• This means less system wide pauses.
Scaleable and Fault-tolerant
• Isolation means each process is garbage
collected independently
• This means less system wide pauses.
• Things go wrong. Especially with network or
disk activity.
Scaleable and Fault-tolerant
• Isolation means each process is garbage
collected independently
• This means less system wide pauses.
• Things go wrong. Especially with network or
disk activity.
• Supervisor processes are instructed in how to
maintain your application
Stable and Extensible
Stable and Extensible
• Only 1 planned language deprecation for 2.0
Stable and Extensible
• Only 1 planned language deprecation for 2.0
• No planned timeline for 2.0
Stable and Extensible
• Only 1 planned language deprecation for 2.0
• No planned timeline for 2.0
• The core team believes all the right
fundamentals are in place
Speed (Throughput)
Speed (Throughput)
• Sure, it isn't C
Speed (Throughput)
• Sure, it isn't C
• For a Rails shop, that isn't the benchmark
Speed (Throughput)
• Sure, it isn't C
• For a Rails shop, that isn't the benchmark
• Multi-thread by default, no global lock
Speed (Throughput)
• Sure, it isn't C
• For a Rails shop, that isn't the benchmark
• Multi-thread by default, no global lock
• Fast garbage collection
Speed (Throughput)
• Sure, it isn't C
• For a Rails shop, that isn't the benchmark
• Multi-thread by default, no global lock
• Fast garbage collection
• All means high throughput web apps
Used by Big Names
Used by Big Names
• Discord
Used by Big Names
• Discord
• Pagerduty
Used by Big Names
• Discord
• Pagerduty
• Bleacher Report
Used by Big Names
• Discord
• Pagerduty
• Bleacher Report
• Square Enix
Used by Big Names
• Discord
• Pagerduty
• Bleacher Report
• Square Enix
• Motorola
Used by Big Names
• Discord
• Pagerduty
• Bleacher Report
• Square Enix
• Motorola
• https://elixir-companies.com/browse
Costs
All of the items we've discussed have a real impact on:
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
• Developer focus, cognitive load of functions over
objects
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
• Developer focus, cognitive load of functions over
objects
• Ease of implementing new features
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
• Developer focus, cognitive load of functions over
objects
• Ease of implementing new features
• Test quality and speed
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
• Developer focus, cognitive load of functions over
objects
• Ease of implementing new features
• Test quality and speed
• Bug rates
Costs
All of the items we've discussed have a real impact on:
• Development pace, build from pure functions
• Developer focus, cognitive load of functions over
objects
• Ease of implementing new features
• Test quality and speed
• Bug rates
• Maintainability
Staffing
Staffing
• Innovative tech attracts innovative developers
Staffing
• Innovative tech attracts innovative developers
• Syntax is approachable
Staffing
• Innovative tech attracts innovative developers
• Syntax is approachable
• Resources are plentiful
Staffing
• Innovative tech attracts innovative developers
• Syntax is approachable
• Resources are plentiful
• Training is easy, and fun
Paradigm Shift?
Functional Programming
Paradigm Shift?
Functional Programming
• Might take some adjustment
Paradigm Shift?
Functional Programming
• Might take some adjustment
• Fits your use case more than you expect, it is
about the data
Paradigm Shift?
Functional Programming
• Might take some adjustment
• Fits your use case more than you expect, it is
about the data
• Makes writing great tests easy
Paradigm Shift?
Functional Programming
• Might take some adjustment
• Fits your use case more than you expect, it is
about the data
• Makes writing great tests easy
• Makes writing fast tests easy
Ecosystem and Resources
https://unsplash.com/photos/FzrjgIId6NU
Mix and IEx
Mix - A great build tool for dependency
management and other tasks
IEx - An interactive shell
Docs, Tests, and DocTests
Documentation - a first class citizen in the
Elixir ecosystem
Tests - Testing libraries built into the language
with ExUnit
DocTests - A hybrid of testing and documentation
What is Next
https://unsplash.com/photos/FoKO4DpXamQ
Getting Started
See my other talks
https://www.danivovich.com/other
Resources - Books
Programming Elixir
https://pragprog.com/book/elixir16/programming-elixir-1-6
Programming Phoenix
https://pragprog.com/book/phoenix14/programming-phoenix-1-4
Metaprogramming Elixir
https://pragprog.com/book/cmelixir/metaprogramming-elixir
Functional Web Development with Elixir, OTP, and Phoenix
https://pragprog.com/book/lhelph/functional-web-development-with-
elixir-otp-and-phoenix
Resources - Newsletters
Elixir Radar
http://plataformatec.com.br/elixir-radar
Elixir Weekly
https://elixirweekly.net/
Elixir Digest
https://elixirdigest.net
Resources - Conferences
ElixirConf EU (April 8-10, Prague)
http://www.elixirconf.eu/
EMPEX NYC (May 18, NYC)
http://empex.co/nyc
ElixirConf (August, Colorado)
https://elixirconf.com/
Resources - Podcasts
Smart Software with SmartLogic (First Season on Elixir in
Production)
https://podcast.smartlogic.io/
Elixir Outlaws Podcast
https://elixiroutlaws.com/
ElixirTalk Podcast
http://elixirtalk.com/
Elixir Mix Podcast
https://devchat.tv/elixir-mix
Resources - Meetups
DC
https://www.meetup.com/DC-Elixir/
Baltimore
https://www.meetup.com/Baltimore-Elixir-and-
Erlang-Meetup/
Resources - Others
Elixir Status Twitter
https://twitter.com/elixirstatus
Elixir Slack
http://elixir-slackin.herokuapp.com/
Elixir Forum
https://elixirforum.com
❤
We hope you will too
Questions? ❔

More Related Content

What's hot (19)

PDF
Metrics-Driven Engineering
Mike Brittain
 
PPTX
PowerShell: Through the SharePoint Looking Glass
Brian Caauwe
 
PDF
Build a bot workshop async primer - php[tek]
Adam Englander
 
PDF
Cheffing Etsy - Do too many cooks spoil the soup?
Jon Cowie
 
PDF
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
apidays
 
PDF
RxJS + Redux + React = Amazing
Jay Phelps
 
PDF
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
apidays
 
PDF
React, Powered by WebAssembly
Jay Phelps
 
PDF
APIs - the good, the bad & the ugly
Nikhil Bendre
 
PDF
Akka persistence webinar
patriknw
 
PPT
Reliable acceptance testing
Dagfinn Reiersøl
 
PPTX
SPSSTL - PowerShell - Through the SharePoint Looking Glass
Brian Caauwe
 
PDF
Rust, Redis, and Protobuf - Oh My!
Nell Shamrell-Harrington
 
PDF
An In-Depth Introduction to the Puppet Enterprise Console - PuppetConf 2014
Puppet
 
PPTX
Automating Your Workflow with Gulp.js - php[world] 2016
Colin O'Dell
 
PDF
Web Operations101
Nell Shamrell-Harrington
 
PDF
The unsung glory of internal tools - Gil Zellner - DevOpsDays Tel Aviv 2018
DevOpsDays Tel Aviv
 
PPT
Code smells in PHP
Dagfinn Reiersøl
 
PDF
KISS Automation.py
Iakiv Kramarenko
 
Metrics-Driven Engineering
Mike Brittain
 
PowerShell: Through the SharePoint Looking Glass
Brian Caauwe
 
Build a bot workshop async primer - php[tek]
Adam Englander
 
Cheffing Etsy - Do too many cooks spoil the soup?
Jon Cowie
 
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
apidays
 
RxJS + Redux + React = Amazing
Jay Phelps
 
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
apidays
 
React, Powered by WebAssembly
Jay Phelps
 
APIs - the good, the bad & the ugly
Nikhil Bendre
 
Akka persistence webinar
patriknw
 
Reliable acceptance testing
Dagfinn Reiersøl
 
SPSSTL - PowerShell - Through the SharePoint Looking Glass
Brian Caauwe
 
Rust, Redis, and Protobuf - Oh My!
Nell Shamrell-Harrington
 
An In-Depth Introduction to the Puppet Enterprise Console - PuppetConf 2014
Puppet
 
Automating Your Workflow with Gulp.js - php[world] 2016
Colin O'Dell
 
Web Operations101
Nell Shamrell-Harrington
 
The unsung glory of internal tools - Gil Zellner - DevOpsDays Tel Aviv 2018
DevOpsDays Tel Aviv
 
Code smells in PHP
Dagfinn Reiersøl
 
KISS Automation.py
Iakiv Kramarenko
 

Similar to DC |> Elixir Meetup - Going off the Rails into Elixir - Dan Ivovich (20)

PDF
ES6: The Awesome Parts
Domenic Denicola
 
ODP
Web Scraping
jameswilkerson
 
PDF
Free The Enterprise With Ruby & Master Your Own Domain
Ken Collins
 
PDF
Cheap frontend tricks
ambiescent
 
KEY
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
PDF
Akka persistence == event sourcing in 30 minutes
Konrad Malawski
 
PDF
Having Fun with Play
Clinton Dreisbach
 
PDF
Cross Domain Web
Mashups with JQuery and Google App Engine
Andy McKay
 
PDF
ECMAScript 6
偉格 高
 
KEY
Express Presentation
aaronheckmann
 
PDF
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Fabio Akita
 
PDF
Intro to Asynchronous Javascript
Garrett Welson
 
PDF
Revoke-Obfuscation
Daniel Bohannon
 
PDF
JVMLS 2016. Coroutines in Kotlin
Andrey Breslav
 
KEY
RubyMotion
Mark
 
PDF
Build web application by express
Shawn Meng
 
PPTX
Ultimate Node.js countdown: the coolest Application Express examples
Alan Arentsen
 
PDF
From Elixir to Akka (and back) - ElixirConf Mx 2017
Agustin Ramos
 
ODP
Working With Canvas
Diogo Antunes
 
KEY
Sprockets
Christophe Porteneuve
 
ES6: The Awesome Parts
Domenic Denicola
 
Web Scraping
jameswilkerson
 
Free The Enterprise With Ruby & Master Your Own Domain
Ken Collins
 
Cheap frontend tricks
ambiescent
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
Akka persistence == event sourcing in 30 minutes
Konrad Malawski
 
Having Fun with Play
Clinton Dreisbach
 
Cross Domain Web
Mashups with JQuery and Google App Engine
Andy McKay
 
ECMAScript 6
偉格 高
 
Express Presentation
aaronheckmann
 
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
Fabio Akita
 
Intro to Asynchronous Javascript
Garrett Welson
 
Revoke-Obfuscation
Daniel Bohannon
 
JVMLS 2016. Coroutines in Kotlin
Andrey Breslav
 
RubyMotion
Mark
 
Build web application by express
Shawn Meng
 
Ultimate Node.js countdown: the coolest Application Express examples
Alan Arentsen
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
Agustin Ramos
 
Working With Canvas
Diogo Antunes
 
Ad

More from SmartLogic (20)

PDF
Writing Game Servers with Elixir
SmartLogic
 
PDF
All Aboard The Stateful Train
SmartLogic
 
PDF
Monitoring Your Elixir Application with Prometheus
SmartLogic
 
PDF
Going Multi-Node
SmartLogic
 
PPTX
Kubernetes and docker
SmartLogic
 
PDF
Serializing Value Objects-Ara Hacopian
SmartLogic
 
PDF
Guide to food foraging by SmartLogic's Kei Ellerbrock
SmartLogic
 
PDF
Introduction to Type Script by Sam Goldman, SmartLogic
SmartLogic
 
PDF
How SmartLogic Uses Chef-Dan Ivovich
SmartLogic
 
PPTX
A Few Interesting Things in Apple's Swift Programming Language
SmartLogic
 
PDF
Effective ActiveRecord
SmartLogic
 
PDF
An Introduction to Reactive Cocoa
SmartLogic
 
PDF
iOS Development Methodology
SmartLogic
 
PPT
CSS Preprocessors to the Rescue!
SmartLogic
 
PDF
Deploying Rails Apps with Chef and Capistrano
SmartLogic
 
PDF
From Slacker to Hacker, Practical Tips for Learning to Code
SmartLogic
 
PDF
The Language of Abstraction in Software Development
SmartLogic
 
PDF
Android Testing: An Overview
SmartLogic
 
PPTX
Intro to DTCoreText: Moving Past UIWebView | iOS Development
SmartLogic
 
PDF
Logstash: Get to know your logs
SmartLogic
 
Writing Game Servers with Elixir
SmartLogic
 
All Aboard The Stateful Train
SmartLogic
 
Monitoring Your Elixir Application with Prometheus
SmartLogic
 
Going Multi-Node
SmartLogic
 
Kubernetes and docker
SmartLogic
 
Serializing Value Objects-Ara Hacopian
SmartLogic
 
Guide to food foraging by SmartLogic's Kei Ellerbrock
SmartLogic
 
Introduction to Type Script by Sam Goldman, SmartLogic
SmartLogic
 
How SmartLogic Uses Chef-Dan Ivovich
SmartLogic
 
A Few Interesting Things in Apple's Swift Programming Language
SmartLogic
 
Effective ActiveRecord
SmartLogic
 
An Introduction to Reactive Cocoa
SmartLogic
 
iOS Development Methodology
SmartLogic
 
CSS Preprocessors to the Rescue!
SmartLogic
 
Deploying Rails Apps with Chef and Capistrano
SmartLogic
 
From Slacker to Hacker, Practical Tips for Learning to Code
SmartLogic
 
The Language of Abstraction in Software Development
SmartLogic
 
Android Testing: An Overview
SmartLogic
 
Intro to DTCoreText: Moving Past UIWebView | iOS Development
SmartLogic
 
Logstash: Get to know your logs
SmartLogic
 
Ad

Recently uploaded (20)

PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
Human Resources Information System (HRIS)
Amity University, Patna
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 

DC |> Elixir Meetup - Going off the Rails into Elixir - Dan Ivovich