erlang/n2o at knpmeetup 2015

28

Upload: oleg-zinchenko

Post on 14-Jul-2015

102 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Erlang/N2O at KNPMeetup 2015
Page 2: Erlang/N2O at KNPMeetup 2015

Disclaimer

Page 3: Erlang/N2O at KNPMeetup 2015

Marketing

Page 4: Erlang/N2O at KNPMeetup 2015

FP makes irreversible changes in your brain, and makes developer better.

Page 5: Erlang/N2O at KNPMeetup 2015

HOTCODE13 MAXIM SOKHATSKIY

Page 6: Erlang/N2O at KNPMeetup 2015

Hey, did you heard about FP?

Page 7: Erlang/N2O at KNPMeetup 2015

My Books

Page 8: Erlang/N2O at KNPMeetup 2015

Instant Enlightenment

Page 9: Erlang/N2O at KNPMeetup 2015

X = 123

Immutable

Page 10: Erlang/N2O at KNPMeetup 2015

No shared memory ParadiseShared memory JavaShared memory and state HELL

Immutable

Page 11: Erlang/N2O at KNPMeetup 2015

Message passingWe need MQ

No shared memory

Page 12: Erlang/N2O at KNPMeetup 2015

Examples of Apps

Page 13: Erlang/N2O at KNPMeetup 2015

Examples of Apps

Page 14: Erlang/N2O at KNPMeetup 2015

Examples of Apps

Page 15: Erlang/N2O at KNPMeetup 2015

Examples of Apps

Page 16: Erlang/N2O at KNPMeetup 2015

Examples of AppsRabbitMQRiak, CouchDB, Hibari, KAI, LeoFS, MnesiaejabberdcowboyWings 3D

Page 18: Erlang/N2O at KNPMeetup 2015

qsort([]) -> [];qsort([x|Xs]) -> qsort([Y || Y<-Xs, Y <= X]) ++ [x] ++ qsort([Y || Y<-Xs, Y > X]).

QuickSort

Page 19: Erlang/N2O at KNPMeetup 2015

Theory

Page 20: Erlang/N2O at KNPMeetup 2015

BasisInteger 42 Float 4.2 aka doubleAtom okBinary <<"Erlang-powa">>

Reference #Ref<0.0.0.29>Pid <0.0.42>Port #Port<0.42>Fun #Fun<erl_eval.6.82930912>

Page 21: Erlang/N2O at KNPMeetup 2015

Basis 2List [<<42,1,0,90>>, 1, ok]

Tuple {<0.0.16>, 107, 42, ["madness", true]}

we can force lists type and typify turplesnamed tuples =:= records

Page 22: Erlang/N2O at KNPMeetup 2015

Pattern MatchingX = 1.

[H | T] = [1, 2, 3, 4].

Y = 2.Y = 3. %% err there

{A, B, C} = {ok, X, [“hello”, “knp”, “symfony”]}

Page 23: Erlang/N2O at KNPMeetup 2015

Practice

Page 24: Erlang/N2O at KNPMeetup 2015

Small stuff on Erlangfib(0) -> 0;fib(1) -> 1;fib(N) -> fib(N - 1) + fib(N - 2).

Page 25: Erlang/N2O at KNPMeetup 2015

Small stuff on Erlangtail_fib(N)-> tail_fib_acc(N, 0, 0, 0).

tail_fib_acc(N, Counter, Prev, PrevPrev) -> case Counter of N -> Prev + PrevPrev; 0 -> tail_fib(N, Counter + 1, 0, 0); 1 -> tail_fib(N, Counter + 1, 1, 0); _ -> tail_fib(N, Counter + 1, Prev + PrevPrev, Prev) end.

Page 26: Erlang/N2O at KNPMeetup 2015

N2O

DEMO TIME

Page 27: Erlang/N2O at KNPMeetup 2015

N2O, Idiomatic chat

-module ( chat ).event (chat) -> wf:send (chat, wf:q (message) ),

body () -> wf:async ( fun() -> loop() end, chat ), [ #panel { id=history }, #textbox { id=message }, #button { postback=chat } ].

loop () -> receive Message -> wf:insert_bottom ( history, #span { text=Message } ), wf:flush () end, loop ().