In Day#1 Meta-Ex used Quil (built on processing) for the visuals https://github.com/quil/quil#readme
- Mike Williams
- Joe Armstrong
- Robert Virding
183 is miscalculation. 122.
Distractions cause notes here to be quite sparse To start with: Erlang was a DSL for telephony Expanded to make sellable
Experiementation in speed improvements for Erland
- Inerpretation
- Strand: Concurrent logic language
- JAM = Joe's Abstract Machine
- Threaded code / c
Prolog compiler, then Erlang bootstrapped
- Each Erlang process has its own stack and heap ** (still in Erlang to this day)
- And each process had GC
BEAM (Bjorn's Erlang Abstract Machine) now replaced JAM in all Ericsson products
Fault: Bug in Code Failure: Hardware breaks
Erlang's failure handling inspired by "C wire" in relay based telephone exchanges
Erlang was banned inside Ericcson. Made it difficult to preach outside
Hardware advancement in the last ten years has made Erlang appealing
"Tried to solve all the problems"
- But no meme. :(
Rob Harrop (now CTO of First Banco)
Original problems acquiring hardware. Beurocracy.
- case study, some bank 6 weeks leeway on hardware acquisition. I've (Dan) seen worse
- Computation
- Storage ** Heroku: Postgres ** Amazon: dynamo, glacier & args
Take advantage of more sophisticated technoligies instead of ah-hoc ("this is what we can do internally") approach. Enables a more correct solution.
Preparing for failure:
- Move to decouple ** Queues / messaging / REST (harks back to RH end keynote)
Virtualization and scripting of box provisioning allowed the DevOps movement to flourish
DevOps is not just automation
- A realisation of Agile ** Working together as a team
On virtual machines, a few years ago. "I always thought virtual machines were for testing bugs in i.e."
Things have just become more acceptable. Before choices to do / use / whatever X were not made so easily and quickly
Mahesh Paolini
Case studies: Obama 2008 and Romney 2012 campaigns both had huge services that went down and never came back
Queue management: Programatic: Retry in x Behavioural: Show a progress spinner Manual
- Case study: Iberia airlines used "go to counter x" display instead of counter attendant shouting
Active Queue Management
- Airlines cancelling flights and reassign planes to increase throughput ** Not always because of problems with that flight
Van Jacobsen - Slowstart is Active Queue Management in TCP/IP
- RED Random Early Discard / Detect. Drop depending on how queue the full is
- FRED - Flow RED - Choose which to drop depending on where is comes from. e.g preferred customers
- RED-PD - RED Preferential Drop. Choose which to drop depending on information. e.g. dropping local routes rather than internation routes
- WRED
CoDel - Van Jacobsens latest
- Drop based on how long requests are taking in the queue
Sadek Drobi (Zenexity)
OO is not the right tool for woriking with a lot of data.
Playfw2 started to deal with problems of lots of data.
List[Future[A]] => Future[List[A]]
- Kind of obvious now
Iteratee[E,R]
- Consumes Es
- Returns R
Immuatable state machine. When can continue: Consume returns new Iteratee Until get result of R
Darach Ennis
Adapt services in real time to deal with client's situation. e.g. whether they have good service of bad
Exploit data structures. Send deltas to conserve bandwidth
Structural conflation: dealing with queues
- Replace. When a new version of something is added to the queue, drop the existing version
- Merge. When a new version is added to the queue, merge it in with the existing version
Ramping up messages until the system cannot handle them. With varying package sizes there are different waveforms. Bigger data package sizes have waveform with greater amplitude (Q:what was the frequency?)
With conflotion there is no waveform.
"Data is valuable" -- it's not about big, it's about value
Complex Event Processing (CEP) - Ennis' library to try these out is eep.js (available on github) Tumbling Windows: Discrete n events -> fn. fn are not overlapping. Sliding Windows: Like tumbling but with overlap Periodic: Like tumbling but seperated on time instead of size(n)
Sliding Window results in performance issues N^2. Using reverisble aggregate mathematics brings back up to linear
https://github.com/darach/eep-js
David Nolen
Extracting Energy from the Turing Carpet - Alan Kay We Really Don't Know How To Compute! - Gerald Jay Sussman Organizing Functional Code for Paraallel Execution - foldl and foldr considered slightly harmful - Guy Steele -- http://vimeo.com/6624203
A lot of ideas in Prolog influenced Erlang
Paper: Embedding Prolog in Haskall
- Purely functional monadic design ** Backtracking is free with purely fn
Implemented in Clojure core.logic https://github.com/clojure/core.logic
- Fair disjunction
- Place a depth limit
- Tree all options as equal ** This prevents infinite depth falling
"I added Prolog like pattern matching to Clojure, because this a lisp and we can do that"
Use core.logic for
- inference, when you have information about some things and need to
Werner Schuster (l-r) Kresten Krab Thorup Rich Hickey Robert Virding Simon Marlow
RH on Why use a VM: VM's are instituionalised and it's more effort for instituations to support two things (VM and non-VM languages) than one thing RH on not having tail recursion in JVM: It's all about tradeoffs.
SM: What's a nif? RV: Native function, they're for crashing the system
Think about using with-redefs to set static the global values that will change while inside a long running fn Can use an Iteratee style for the sine wave generation in flox. Immutable State Machine FTW