100 Years of Erlang
Quinn Wilton / @wilton_quinn / quinnwilton.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045578/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030610/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030652/IMG_20211018_213823.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030657/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030659/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030660/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030663/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030665/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030666/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030690/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030692/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030693/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043452/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043461/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045369/pasted-from-clipboard.png)
Joe Armstrong, 1950 - 2019
The Computer Science Laboratory @ Ellemtel, circa 1988
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030697/pasted-from-clipboard.png)
Joe Armstrong, A History of Erlang (2007)
of the many inventors of technical improvements in that historic period, most have remained anonymous. Few names have been recorded in the history of the telephone, most of them being completely unknown.
- Robert Chapuis, 100 Years of Telephone Switching (2003)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026059/100yearsofswitching.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026060/TelephoneExchange-e1337366994283.jpg)
Boardman Building, New Haven, Connecticut
First Telephone Exchange
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9073442/pasted-from-clipboard.png)
The first telephone
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043672/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045251/pasted-from-clipboard.png)
Hello Alexander.
Hello Watson!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045247/pasted-from-clipboard.png)
Notes about George W. Coy, University of Connecticut Library
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026067/01-28-george-coy-uclib.jpg)
George Willard Coy
The first telephone directory
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045561/pasted-from-clipboard.png)
ELLEMTEL CS Lab Directory (as of 1994)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9052202/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026069/coyblueprint.png)
Blueprint of Coy's Exchange
An early exchange, modeled after Coy's, in Bridgeport, Connecticut
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9069645/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043008/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026073/standardswitchboard.png)
Western Electric "Standard" Switchboard
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026079/journaltelegraphique.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026080/bestcommonboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026082/strowger.png)
Almon Strowger
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045503/pasted-from-clipboard.png)
The Bamberg herald, February 27, 1913
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045522/pasted-from-clipboard.png)
New-York tribune, December 7, 1919
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9042718/pasted-from-clipboard.png)
Strowger, at the height of his paranoia
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045518/pasted-from-clipboard.png)
The Bamberg herald, February 27, 1913
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045515/pasted-from-clipboard.png)
The Bamberg herald, February 27, 1913
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9030830/pasted-from-clipboard.png)
Strowger's nemesis. Probably.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045512/pasted-from-clipboard.png)
The Bamberg herald, February 27, 1913
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026608/manual-switchboard.jpg)
Up four, and over three
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045513/pasted-from-clipboard.png)
The Bamberg herald, February 27, 1913
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026086/strowger-topdown.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026085/strowger-switch.jpg)
Step-by-Step Switch
Step-by-Step Switch, front
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045505/pasted-from-clipboard.png)
New-York tribune, December 7, 1919
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026091/strowgersystem.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026092/pasted-from-clipboard.png)
Patent for the "Two-Motion Strowger Switch"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9031104/pasted-from-clipboard.png)
circa 1902
Strowger Sunburst Dial, circa 1903
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9031063/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045508/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026406/abbeville_press_and_banner__january_6_1892.jpg)
Abbeville Press and Banner, January 6 1892
New-York tribune, December 7, 1919
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026404/strowgerwall.jpg)
A wall of Strowger switches
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026407/western_kansas_world_-_nov_5__1892.jpg)
Western Kansas World, November 5th 1892
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9070204/pasted-from-clipboard.png)
Joe Armstrong, A History of Erlang (2007)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9076172/pasted-from-clipboard.png)
AXD301
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9031178/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9031527/pasted-from-clipboard.png)
If you wish to make an erlang from scratch, you must first invent the uniselector
- Carl Sagan
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043876/pasted-from-clipboard.png)
Concurrent Programming in Erlang (1993)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038819/strand_book.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045287/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056593/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038809/pasted-from-clipboard.png)
Chapter 13: Programming Telephony, New Concepts in Parallel Programming (1990)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038775/pasted-from-clipboard.png)
Ivar Jacobson
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045288/pasted-from-clipboard.png)
Communication Between Heterogeneous Systems (2000)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9070327/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038783/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038958/erlang_book.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045289/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038951/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038952/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9038952/pasted-from-clipboard.png)
defmodule Phone do
def idle() do
receive do
:off_hook ->
start_tone()
getting_number()
{:seize, pid} ->
send(pid, :seized)
start_ringing()
ringing_b_side()
end
end
defp getting_number() do
receive do
...
end
end
defp ringing_b_side() do
receive do
...
end
end
defp start_tone(), do: ...
defp start_ringing(), do: ...
end
phone = spawn(&Phone.idle/0)
send(phone, :off_hook)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043941/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043954/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043944/pasted-from-clipboard.png)
Magnus Fröberg
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9043944/pasted-from-clipboard.png)
Magnus Fröberg
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9073182/pasted-from-clipboard.png)
Message Sequence Diagram generated by et_viewer
Joe philosophizing, 1985
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9045627/pasted-from-clipboard.png)
Solve Ericsson's software problem.
- Bjarne Däcker
This seemed to me at the time a quite reasonable request—though I now realise that it was far more difficult than I had imagined
- Joe Armstrong, A History of Erlang (2007)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047006/pasted-from-clipboard.png)
Joe Armstrong, A History of Erlang (2007)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047022/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9076448/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047228/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047229/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047280/pasted-from-clipboard.png)
influences(erlang, elixir).
influences(erlang, clojure).
influences(prolog, erlang).
influences(prolog, clojure).
influences(lisp, erlang).
influences(lisp, clojure).
influences(clojure, elixir).
influences(ruby, elixir).
influences(plex, erlang).
influences(smalltalk, erlang).
influences(haskell, clojure).
influences(java, clojure).
ancestor(X, Y) :- influences(X, Y).
ancestor(X, Y) :-
influences(Parent, Y),
ancestor(X, Parent).
Atom
Atom
Functor
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9072720/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9072792/pasted-from-clipboard.png)
u :- p, q, ..., t.
u ← (p ∧ q ∧ ... ∧ t)
false ← p ∧ q ∧ ... ∧ t
...to first-order logic!
...negate it!
...find a contradiction!
Solution!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9072829/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9072830/pasted-from-clipboard.png)
Logic Programming for Real-Time Control of Telecommunication Switching Systems (1990)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047285/pasted-from-clipboard.png)
Joe Armstrong, Making reliable distributed systems in the presence of software errors (2003)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047308/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047309/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047315/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047321/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047611/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047643/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047645/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047648/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9047603/pasted-from-clipboard.png)
Strand: New Concepts in Parallel Programming, 1990
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9048895/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9048898/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9048946/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049117/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049129/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049132/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049173/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056669/pasted-from-clipboard.png)
UBF(B) specification for an IRC server
(types omitted for space)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049253/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056920/pasted-from-clipboard.png)
Joe Armstrong, Erlang Mailing List (2016)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9049279/pasted-from-clipboard.png)
Joe Armstrong, Erlang Mailing List (2016)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9073467/pasted-from-clipboard.png)
Joe Armstrong, Making reliable distributed systems in the presence of software errors (2003)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056790/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056793/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056798/pasted-from-clipboard.png)
Research Roadmap for STARDUST
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9042616/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9056796/pasted-from-clipboard.png)
github.com/gertab/ElixirST
Type safe distributed actors with hot code reloading!
I have this idea in which we’ll connect all of the worlds Erlang systems to each other, imagine if every process could talk to every other process, world-wide!
- Joe Armstrong
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9039705/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9039708/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9042616/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1411971/images/9026424/abbeville_press_and_bannry__sept_28__1892.jpg)
Abbeville Press and Banner, September 28, 1892
100 Years of Erlang - Slimmed
By quinnwilton
100 Years of Erlang - Slimmed
- 640