Hello, Joe. Hello, Mike; Hello, Robert.

38
Hello, Joe. Hello, Mike; Hello, Robert. 1 A Hello World Style Lighting Talk on Erlang. 1. From Erlang the Movie (https://archive.org/details/ErlangTheMovie)

Transcript of Hello, Joe. Hello, Mike; Hello, Robert.

Page 1: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Joe. Hello, Mike; Hello, Robert.1

A Hello World Style Lighting Talk on Erlang.

1. From Erlang the Movie (https://archive.org/details/ErlangTheMovie)

Page 2: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Erlang.

Erlang and OTP was designed for building distributed, asynchronous, highly-concurrent, fault

tolerant applications with high availability.

Page 3: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Erlang.

Erlang and OTP was designed for building distributed, asynchronous, highly-concurrent, fault

tolerant applications with high availability.

#BuzzwordBingo

Page 4: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Telecom.

Page 5: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Telecom.

• 100s of Thousands, if not Millions, of calls happen at the same time

Page 6: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Telecom.

• 100s of Thousands, if not Millions, of calls happen at the same time

• Your phone line has to always be available

Page 7: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Telecom.

• 100s of Thousands, if not Millions, of calls happen at the same time

• Your phone line has to always be available

• My call cannot corrupt your call

Page 8: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Déjà vu

Page 9: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Déjà vu

• Sound Familiar?

Page 10: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Internet!

Page 11: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.

Page 12: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

Page 13: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

Page 14: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

• Immutability

Page 15: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

• Immutability

• No Shared State

Page 16: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

• Immutability

• No Shared State

• Isolated Processes Communicate Through Message Passing (Actor Model)

Page 17: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

• Immutability

• No Shared State

• Isolated Processes Communicate Through Message Passing (Actor Model)

• Supervision Hierarchy

Page 18: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Failure.• In the Real World things fail. Embrace it.

• “Let It Crash” philosophy

• Immutability

• No Shared State

• Isolated Processes Communicate Through Message Passing (Actor Model)

• Supervision Hierarchy

• Live code reloading

Page 19: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, C10k Problem.

Page 20: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, C10k Problem.

Page 21: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, C10k Problem.

Page 22: Hello, Joe. Hello, Mike; Hello, Robert.

–Alan Kay

I thought of objects being like biological cells and/or individual

 computers on a network, only able to communicate with messages […].2

Hello, OOP.

2. http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

Page 23: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.

Page 24: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

Page 25: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

Page 26: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

Page 27: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

Page 28: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

• Not going to be run on your mobile device;

Page 29: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

• Not going to be run on your mobile device;

• but great for you mobile device backend.

Page 30: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

• Not going to be run on your mobile device;

• but great for you mobile device backend.

• WhatsApp anyone?

Page 31: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

• Not going to be run on your mobile device;

• but great for you mobile device backend.

• WhatsApp anyone?

• Not insanely fast

Page 32: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, “Weaknesses”.• No strings as a data type

• List of Integers or Binary types

• Not super performant for string manipulation, but good enough for most scenarios

• Not great for GUIs

• Not going to be run on your mobile device;

• but great for you mobile device backend.

• WhatsApp anyone?

• Not insanely fast

• "There's no such thing as fast, only fast enough" ~ Joe Armstrong

Page 33: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, FizzBuzz.

Page 34: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, fizzbuzz.erl-module(fizzbuzz).

-export([fizzbuzz/1]).

fizzbuzz(N) -> Translations = lists:map(fun translate/1, lists:seq(1, N)), lists:foreach(fun(Item) -> io:format("~s~n", [Item]) end, Translations).

translate(N) when N rem 3 =:= 0 andalso N rem 5 =:= 0 -> 'FizzBuzz'; translate(N) when N rem 3 =:= 0 -> 'Fizz'; translate(N) when N rem 5 =:= 0 -> 'Buzz'; translate(N) -> integer_to_list(N).

Page 35: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, fizzbuzz.ex

defmodule FizzBuzz do def fizzbuzz(n) do 1..n |> Enum.map(&translate/1) |> Enum.join("\n") |> IO.puts end

def translate(n) when rem(n, 3) == 0 and rem(n, 5) == 0, do: :FizzBuzz def translate(n) when rem(n, 3) == 0, do: :Fizz def translate(n) when rem(n, 5) == 0, do: :Buzz def translate(n), do: n end

Page 36: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, fizzbuzz.lfe(defmodule fizzbuzz (export (fizzbuzz 1)))

(defun fizzbuzz (n) (lists:foreach (lambda (term) (lfe_io:format "~p~n" `(,term))) (translate-upto n)))

(defun translate-upto (n) (let ((numbers (lists:seq 1 n))) (lists:map (lambda (n) (translate n (rem n 3) (rem n 5))) numbers)))

(defun translate ([_ 0 0] 'FizzBuzz) ([_ 0 _] 'Fizz) ([_ _ 0] 'Buzz) ([n _ _] n))

Page 37: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Demo.

Page 38: Hello, Joe. Hello, Mike; Hello, Robert.

Hello, Proctor.• http://www.proctor-it.com

• @stevenproctor

[email protected]

• @fngeekery

• http://www.functionalgeekery.com

• @dfwerlang

• http://www.meetup.com/DFW-Erlang-User-Group/

• @planeterlang

• http://www.planeterlang.com