Skip to content

Instantly share code, notes, and snippets.

@danmidwood
Created December 5, 2012 23:20
Show Gist options
  • Save danmidwood/4220425 to your computer and use it in GitHub Desktop.
Save danmidwood/4220425 to your computer and use it in GitHub Desktop.
A bunch of notes and numbers from Tech Mesh day #2

In Day#1 Meta-Ex used Quil (built on processing) for the visuals https://github.com/quil/quil#readme

Keynote: Erlang. 183 Years of Programming

  • 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

JAM

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. :(

The new Application Stack

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

Enter: Virtualization

Cloud

  • 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

Can your service survive a cold start?

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

Integration of Distributed Real Time Data Computing in a web app with futures and iterees

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

Conversational Big Data

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

Post Functional

David Nolen

Inspired by three talks

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

MiniKanren
  • 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

Runtime Evolution: The Future of VMs

Werner Schuster (l-r) Kresten Krab Thorup Rich Hickey Robert Virding Simon Marlow

Why not move to functional?

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

completely unreleated stuff

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment