Subscribe to our Erlang Factory newsletter to receive the latest updates and news

A service fail over and take over system for Erlang/OTP

Lennart Öhman
Lennart Öhman

Sjöland & Thyselius Telecom AB
Erlang/OTP positions itself in the niche for building fault tolerant software systems with redundancy over two or more independent nodes. However Erlang/OTP comes with surprisingly little built in support to make failover and takeover/migration of responsibilities between nodes in a safe way. The Fail Over and Take Over System (FOTOS) presented in this paper offers mechanisms to keep a consistent state over several nodes, and also detect partial network failures preventing individual nodes from making premature decisions. Applications cooperating over the network can make use of the guaranteed consistent information to make unanimous decisions when having to decide on to where now failed services shall be failed-over, and also in a potentially ongoing procedure where to resume the service.


Ad Serving in Erlang

Bob Ippolito
Bob Ippolito

Mochi Media Inc.
We've been using Erlang at Mochi Media since the 2006 launch of MochiAds, our advertising platform for Flash games. It's the first time any of us have done any production software with a functional programming language, and thus far it's turned out to be a great experience. The success of the MochiAds platform led us to writing many other products (internal and external) on the same technology stack. We believe Erlang to be one of the key reasons why we're able to develop more quickly and scale more easily than our competitors.


Building Languages on Erlang (and an introduction to Reia)

Tony Arcieri
Tony Arcieri

Medioh Inc
Erlang exposes all of the functionality needed to build new programming languages with ease. In this talk you will learn the basics of how to create your own programming language on top of the Erlang VM, including scanning with leex, parsing with yecc, compiling parsed code from the Erlang abstract format into bytecode, and loading the resulting bytecode into the code server. The session will also cover the presenter's language: Reia, a scripting language for the Erlang VM. The talk will cover how Reia is implemented, what ideas it borrows from Erlang, where it deviates, and how it is able to introduce imperative features while still compiling to a functional form. It will also cover Reia's object-oriented features like classes, inheritance, and polymorphism as well as how they map to Erlang's process model.


Building Reliable Distributed Heterogenous Services with Katamari/Fuzed

Abhay Kumar
Abhay Kumar

Powerset R&D, Microsoft Corporation
Dave Fayram
Dave Fayram

Microsoft Corporation
Erlang is a powerful language for distributed computation, but most modern production software is written in a variety of languages that are not as suited to reliable, distributed programing. At Powerset, we developed a platform for reliable distributed computing that leveraged the Erlang Ports infrastrcutre to make the robustness and flexibility of Erlang-based networked infrastructure to a variety of language runtimes, without onerous cross-porting work. From that base, we extended our system to support heterogenous networks of services which can be added or removed in real time without interrupting existing services, using a simple model akin to an erlang event loop to talk with external code.


CouchDB Apps

Chris Anderson
Chris Anderson

CouchDB Ltd
“Look Ma, no middleware”. This presentation is a tour de force through building standalone CouchDB applications with nothing but HTML & Ajax directly talking to CouchDB’s REST API.

CouchDB applications run locally, on a users machine. Application data can be replicated between users and central servers alike using a peer to peer structure. Users can access their data when offline (for example when on a plane). Even the applications themselves can be replicated (for software updates) and tech-savy users can enhance their local copy and make patches to their friends and co-workers available through replication.

Bring your Laptop to follow along when we build the example application. Bonus points, when you come with a running CouchDB installation.


CouchDB Case Studies

Tim Dysinger
Tim Dysinger

Nitin Borwankar
Nitin Borwankar

CouchDB w/ Lisp Flavored Erlang - talk by Tim Dysinger
Tim will show some neat tricks playing with CouchDB and Erlang nodes. He has written some Lisp Flavored Erlang code to manipulate and map/reduce the Enron Email Dataset on multiple CouchDB nodes. He’ll show how to pull out miscellaneous aggregated data we might use in warehouse reports.

CouchDB and bibJSON and the Bibliographic Knowledge Network - talk by Nitin Borwankar
The Bibliographic Knowledge Network (bibkn.org) is an NSF funded project to extract knowledge out of aggreagte bibliographies of academic researchers. A foundation problem that needs to be solved is one of author disambiguation ( is J. Pitman the same as Jim Pitman or Jane Pitman ?). BKN is in the process of evolving workflows for name disambiguation so that social network analysis of academic collaboration can be carried with confidence in identity of participants. Bibliographic data is available in mostly untyped or weakly typed data which makes disambiguation difficult. Our experience of the ease of use and robustness of CouchDB encouraged us to evolve a next generation bibliographic data format (bibJSON) which is in early draft form. We have evolved workflows that refine untyped bibliographic data and convert it to data with strong identity of authors. We use CouchDB to anchor a lot of the workflows and Python client side scripts to import/export data. The talk includes an overview of the state of the BKN project and how CouchDB is a foundation element of our technology.


CouchDB from 10,000 ft - an introduction to CouchDB

Jan Lehnardt
Jan Lehnardt

CouchDB Ltd
This presentation takes a look at CouchDB from 10,000 ft. We try not to lose you in technical details and paint the big picture that you need to understand CouchDB’s strengths and weaknesses.

CouchDB is a document oriented database. It does not adhere to the relational principles of traditional databases. You will learn what that means for your application design.

CouchDB’s replication support solves the problems of high-traffic web sites, distributed peer-to-peer, and offline applications all at the same time. We show you what kind of applications you are able to build with that.

However, CouchDB is no Silver Bullet and there are cases where it is a poor fit. You will learn to decide when to use it for your project and when you are better off with a different solution.


Disco: Having fun with gigabytes of data

Ville Tuulos
Ville Tuulos

Nokia
Disco is an open-source implementation of the Map/Reduce framework.The Disco core is written in Erlang, which makes the most critical components of the system, namely job scheduling, distribution and fault detection, remarkably compact and robust. Users can specify jobs in Python, with all batteries included, without having to worry about any issues related to parallelism. As the result, Disco makes it fun to process massive amounts of data with hundreds of CPUs in parallel. This talk will introduce Map/Reduce programming with Disco and show how to perform simple and some more complicated data-processing tasks with minimal amount of code. For Erlang hackers, and for future Disco comitters, the talk will include a walk-through of central components of Disco, showing how Erlang can be used to handle large amounts of data efficiently.


EUnit Howto: tips, tricks and news

Richard Carlsson
Richard Carlsson

Recently, the EUnit unit testing framework for Erlang was shipped for the first time as an official part of the Erlang/OTP distribution. While the documentation is fairly complete, it is not always obvious how the  various features are supposed to be used in practice. Richard Carlsson, the author of Eunit, will in his talk focus on getting Eunit up and running, tweaking it to fit your build environment, and leveraging its features in typical testing situations.  He will also briefly present some new additions since the R12B-5 release.


Erlang at Facebook

Eugene Letuchy
Eugene Letuchy

Facebook
Erlang has been used to develop a number of applications at Facebook. Eugene Letuchy has been involved with this development and will discuss the reasons for choosing Erlang and the benefits it has brought.


Erlang at SAP

Sumeet Bajaj
Sumeet Bajaj

SAP
Sumeet is a part of a small group at SAP Research that is using Erlang to develop a communications serviceprototype to connect real world devices with enterprise applications. The group has worked with Erlang for almost a year and in this talk Sumeet will discuss their experience in learning applying Erlang to the challenge of building a high performance rules engine. He will also discuss some of the results of their work pertaining to scalability and performance.


Erlware at Orbitz

Martin Logan
Martin Logan

Orbitz Inc.
Orbitz like many other advanced technology companies here in the states, Google, Yahoo, Facebook, uses service orientation. This talk will focus on where Erlang fits into that picture from a high level and how it is managed from a development, testing, and deployment perspective with the Erlware tools. This talk will put forward the efficient way Orbitz develops and maintains a production quality Erlang package.


ErlyWeb and its use in creating simple real-time web-based chat applications

Yariv Sadan
Yariv Sadan

Facebook
Erlang was originally designed to build telcom systems. For most of its existence, most web developers have ignored Erlang partly because it was unproven as a web language and partly because it lacked good web development tools. This is unfortunate because Erlang's strengths in concurrency, distributed programming, and fault tolerance can be advantageous for many web applications. ErlyWeb was created to fill this gap: its goal is to make it as easy to build websites in Erlang as in other languages while allowing developers to leverage Erlang's unique capabilities. In this talk, I will give a brief overview of ErlyWeb and demonstrate how to use ErlyWeb to create a simple real-time web-based chat application.


Everything you wanted to know about Dynomite but were afraid to ask

Cliff Moon
Cliff Moon

Microsoft Corporation
Dynomite is an open source distributed key value database modeled after Amazon’s Dynamo. Dynomite was built from the ground up to support what would be a traditional RDBMS’s worst nightmare: low latency random read and write access to large binary objects.

Dynomite is different from memcache style distributed hash tables in that it handles all routing and failover internally. Clients need merely connect to one node to have access to the entire cluster. It can provide low read and write latency to clients even in the face of node failures due to its relaxed consistency constraints.

During this session we will discuss how to tell whether Dynomite is a good fit for an application. Discussions will also include dynamic cluster configuration, how to choose an appropriate storage engine, and how to tune a Dynomite cluster for some common scenarios.


Hands-on session with the McErlang model checker

Clara Benac Earle
Clara Benac Earle

Technical University of Madrid
Following the talk on the McErlang Model Checker by Lars-Ake Fredlund, Clara Benac-Earle will provide a hands-on demonstration of the tool for those interested. Delegates will be shown how to install it onto their laptops and then they will be taken through some exercises to demonstrate its usage.


Integrating OS package management and Erlang

Paul Mineiro
Paul Mineiro

N54 Inc.
Erlang supports hot code loading at the language level as a differentiating language feature, but it can be confusing to use in practice. OTP provides a high level interface via the concept of releases, but the OTP model is geared towards environments where changes are large and infrequent due to low risk tolerance (substantial QA), and deployed to a relatively small amount of static nodes. For the typical startup, code changes are small and frequent, risk tolerance to changes is high but fast rollback is essential (i.e., there is essentially no QA), and the number of nodes is large (and on EC2, dynamic).

 In this talk I describe an alternative high level interface to hot code loading which leverages the OS package management system (e.g., rpm, deb). In addition to being a better fit for the typical startup, it has advantages in a heterogenous environment where Erlang is one of many interacting and dependent technologies deployed, by creating a uniform method for treating code distribution, dependency specification, and provisioning.


Keynote: The Erlang Rationale

Robert Virding
Robert Virding

FMV
While Erlang has much in common with other functional languages it does many things differently from other languages. In this talk one of the three inventors of Erlang will look at the rationale behind Erlang and try to show how many of its important features combine to work together. We will also look at how Erlang was first developed to show the reason for some of the features in the rationale.


Keynote: The history of CouchDB development from a very personal point of view

Damien Katz
Damien Katz

This talk is about the history of CouchDB development from a very personal point of view. I'll talk about my inspirations for CouchDB and why I decided to move my wife and kids to a cheaper place and live off savings to build this thing. I'll discuss how the project has progressed  and evolved, the decision to switch to Erlang and the transition to joining the Apache Foundation. It's also about the day to day grind of working alone at home for months on end, how I deal with feeling panicked and overwhelmed and trying to make progress through it all.


Keynote: You got your Erlang in my Ruby

Ezra Zygmuntowicz
Ezra Zygmuntowicz

Engine Yard Inc.
With functional style, message passing concurrency primitives baked in and the power of OTP for building fault tolerant applications, Erlang is the best in breed programming environment for making horizontally scalable network servers. With a clean object model and beautiful, concise syntax, Ruby is one of the most productive and expressive dynamic languages available right now. Both of these platforms have great strengthsand weaknesses. Erlang syntax is bizaar for most programmers and String and IO handling are fairly primitive. Ruby has some scalability limits like 1024 open sockets or file descriptors and no true concurrency, only green threads. In this talk we will explore a melding of the two called Nanite. Nanite is a framework where you write 'agents' in Ruby and use RabbitMQ (Erlang) as a messaging bus/hub. We can exploit the power of Erlang's message passing and scalability to distribute the work our to Ruby 'Nanites' that implement functionality. This ends up looking like an exploded Erlang VM where the actors are implemented as Ruby processes with Erlangin the middle holding everything together. With this powerful combination we get to play to the strengths of each language to build a hive mind of interconnected processing power.


Kreditor - running a 24x7 system; architecture and experiences

Tobbe Tornkvist
Tobbe Tornkvist

Kreditor AB
The talk will give a brief history of Kreditor and will then will go into some detail about the system architecture of their 24x7 system that serves some 3000 E-stores. In particular, the use of Mnesia in a non-distributed mode will be described as well as how this was utilized in the move of the system to a different data centre.


Lisp Flavoured Erlang

Robert Virding
Robert Virding

FMV
In this talk we will describe and demonstrate Lisp Flavored Erlang (LFE). LFE allows you to write Erlang code in a lisp syntax and combines the versatility and extensibility of lisp with the COP power of Erlang. LFE is completely integrated with Erlang/OTP and code written in LFE can freely be used together with modules written in vanilla Erlang and applications in Erlang/OTP. LFE is also much easier to use than vanilla Erlang when generating code. We will describe the system, its tools and its implementation, and also demonstrate some of its features and using its programming environment.




Mixing Erlang and Ruby with Erlectricity

Tom Preston-Werner
Tom Preston-Werner

Github

Erlang isn't good for everything. Neither is Ruby. But together they create a powerful force that can be harnessed to engineer highly scalable systems that defer to Ruby for more mundane tasks. The secret to this unholy alliance is a two way communication layer called Erlectricity that lets you craft Ruby nodes that receive messages just like Erlang processes.

I will demonstrate how this setup can lead to elegant and extensible system design with simple examples, and then explain how Erlectricity helped us build a self-assembling, YAWS based meta-server called Fuzed that lets you put Rails apps or other Ruby servers into a heterogenous cloud.


OneTeam Media Server: Adding Video to Instant Messaging with Erlang

Mickaël Rémond
Mickaël Rémond

Process One
OneTeam Media Server is a new project launched by ProcessOne which is a Media server for Flash clients implementing the FLV and RTMP protocol. The project is designed so that it can work hand in hand with ejabberd, ProcessOne Instant Messaging platform. This presentation presents the goal and the architecture of the project and demonstrates the video platform. We will give performance feedback on Erlang use for binary processing in a highly demanding context.


Test-driven development with Erlang

Nick Gerakines
Nick Gerakines

Electronic Arts
Test-driven development may not be the first thing you think of when Erlang comes to mind, but it should. Using test-driven development, you can save substantial amounts of time, effort and energy. Nick's presentation will step through Erlang related test-driven development patterns as well as the tools and software available to Erlang engineers.


Testing Erlang programs for multicore

John Hughes
John Hughes

QuviQ AB
Erlang programs are easily ported to multicore; one gets a great speed-up for free, because the Erlang programs are concurrent in nature. Nevertheless, running your Erlang application on a multicore processor may well reveal errors that you have never spotted before. The Erlang scheduler on a single core is very deterministic and certain sequences of events simply cannot occur, although they do occur in theory and certainly on a multicore. Since the number of possible interleavings on a multicore is impractically large, successfully running your old test suite may not give you the confidence you need to ship you software. More testing is necessary, but running the same suite many times or adding more test cases hardly solves the problem.

As a result of the ProTest research project, QuickCheck comes with an extension to test Erlang programs for multicore. Defects that cannot be detected on a single core, can be revealed by this extension. The extension also improves the analysis phase of the defect by presenting the simplest interleaving that lead to the defect and a visualization of the messages send and received.
   


The Erlang Web

Michal Slaski
Michal Slaski

Erlang Solutions Ltd
Michal Slaski will be presenting the Erlang Web. The Erlang Web is an open source framework for the rapid prototyping and development of applications based on HTTP protocols, giving the developer better control of content management separating data, html generation and glue and logic.  While some Erlang frameworks are focused on getting started quickly, the Erlang Webtries instead to be complete. During the talk Michal will discuss concepts implemented in the framework, show results of stress tests and present a short demo. Emphasis will be made on the latest features and additions to the framework.

Sites developed using the Erlang Web framework include:


The McErlang model checker

Lars-Ake Fredlund
Lars-Ake Fredlund

Technical University of Madrid
In this tutorial Lars-Ake Fredlund will introduce the McErlang model checking tool for verifying Erlang programs, and examine some case studies where the tool has been successfully applied.

Model checking is a verification technique where the all the states of a program are systematically explored and checked against correctness properties. Although very effective in hardware verification, there are a number of problems when applying model checking to software:

- Need for abstraction: to use a model checking tool it is often necessary to abstract the source code, almost never is the full source language supported.
 
- State spaces are too large for model checking algorithms to work.

In the design of the McErlang model checker for Erlang we have addressed both these problems. The language supported is full Erlang, with normal datatypes, processes, nodes, links, monitors, and so on. Moreover its verification algorithm provide some answers even when state spaces are huge (becoming more similar to testing).

In addition to the Tutorial, there will also be a Hands-on session where Clara Benac Earle will be covering the basics of the McErlang tool. This will allow delegates to install the tool and try it out with the help of some exercises.


The Nitrogen Web Framework

Rusty Klophaus
Rusty Klophaus

Nitrogen is an exciting framework not just for what it brings to the table, but also for what it leaves behind. By leveraging Erlang records as a surprisingly elegant markup language, discarding MVC in favor of an event-driven architecture, and only supporting Javascript-based forms, Nitrogen challenges many existing notions about what an Erlang application/web framework should do, and has invigorated others in the Erlang community to think unorthodox thoughts while building their own projects. Rusty will present a high level overview of Nitrogen, dive down to walk through a sample Nitrogen application, and then discuss the future of this rapidly maturing framework.


The other side of functional programming

Bryan O'Sullivan
Bryan O'Sullivan

Linden Lab
Although Haskell and Erlang are both functional languages, they diverge in many ways in their approaches to building software. In this talk, we'll look at some of the key differences between the two languages, and show off some of the most exciting development and testing techniques that the Haskell perspective enables: how to write bulletproof, elegant code that executes blazingly fast.


Using Erlang to Solve Concurrent Problems

Jim Larson
Jim Larson

Google
No product specification would ever ask us to make a GUI freeze during a DNS lookup, increase the latency of server requests, or leave needed processing hardware sit idle. Yet even software delivered by well-funded teams of professionals commits these offences - all from a hesitance to tackle the problems of concurrency. But with conventional languages and environments, concurrent programming is difficult and dangerous. Erlang is promoted as a "concurrency-oriented language". Its core language provides a minimal set of concurrency primitives, providing a foundation for the full-featured support in the OTP library. But equally important is Erlang's intentional omission of dangerous features, which allow even imperfect programs to run safely and securely with high availability. This talk introduces the Erlang way of concurrency, from basic language primitives to architectural patterns, and how to apply them to designing, programming, testing, debugging, and running your programs. We'll also discuss performance and distribution.


Web Server Deathmatch

Joe Williams
Joe Williams

Cloudant
Picking the picking the right tool for the job isn't easy, especially when you have many options to choose from. Regardless of the job one aspect to take into account is performance. This talk will pit Apache, nginx, Lighttpd, Yaws, inets:httpd and MochiWeb against each other in a battle royale of performance. Who will come out on top?


Webmachine: an Erlang resource server for the Web

Justin Sheehy
Justin Sheehy

Basho Technologies
Webmachine is a system for easily and declaratively building well-behaved HTTP applications in Erlang. It is based on a very different execution model than most frameworks, making it easy to focus on writing the core of your application while also helping you do the harder parts of HTTP right. Justin Sheehy will discuss Webmachine's unusual Web programming model and demonstrate how to quickly build and extend Erlang / Web / REST applications.


Welcome

Francesco Cesarini
Francesco Cesarini

Erlang Solutions Ltd
Francesco Cesarini, Technical Director of Erlang Solutions Ltd - organisers of the Erlang Factory - opens the event with a short address.


Writing an XMPP Client in Erlang

Kevin Smith
Kevin Smith

Hypothetical Labs, Inc.
Many languages today have at least one good XMPP client library. Ruby? Check. Java? Check. Python? Check. Even so-called "academic" languages like Haskell have at least one XMPP client. Erlang -- a language bred for message passing and concurrency -- is sadly lacking a good client. In this talk, I will describe how I used Erlang's core strengths to build a working XMPP client in 5 days. I'll also share the lessons I learned using Erlang to rapidly prototype and deliver a working solution.