ETC

 

Ericsson

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

(first ‘(Clojure.))

Niklas Lindström
Niklas Lindström

Valtech
Clojure is the promise of a new dawn of clarity and empowerment. Enjoy the purity of functional programming, the uniformity of a LISP-based syntax and the pragmatic power of high level data structures.

Eschew the accidental complexities of overzealous object orientation, misguided attempts at brevity by implicit obscurities, and the conflation of state and identity – mangling time with imperative side effects.

This introduction will give you a glimpse into the power of expression, and provide some pointers and advice for wrapping your mind around the shape and intent of these parentheses from a more civilised age, enhanced with the vectors, maps and sets of modern living. You will also be shown how to tame the monsters of state and direct time.

Talk objectives: Provide an overview of the shape and features of Clojure, its Lispisms, notion of state and identity, and how it interoperates with Java.

Target audience: Developers curious about the fundamental shape and concepts of Clojure.


A Few Improvements to Erlang

Joe Armstrong
Joe Armstrong

Ericsson AB
There are two types of thing in Erlang. Forms and Expressions and the two don't mix. The shell is an expression evaluator. The shell reads an expression evaluates it and prints the result. A module is a sequence of forms. The compiler takes a sequence of forms and compiles this into an object file. You can't put forms in shell because they are not expressions. And you can't put expressions in a module because they are not forms.

This is a mess - in many other languages the input to the shell is the same as the input to the compiler - but not in Erlang. There is a fix to this. "All" you have to to is define a form to be an expression. This needs a small syntactic change to the language. Suppose we add a new syntactic form:

def fac = fun(0) -> 1; fun(N) -> N*fac(N-1) end.

But we define this to be an expression with a side effect. It's value can be anything we like (say true). But it has a side effect. The side effect is to define the factorial function. With this change we could write (in the shell):

def fac = fun(0) -> 1; fun(N) -> N*fac(N-1) end. true. fac(5). 120

With this and a few other changes the shell, modules, and escript become more or less identical. I call it erl2.

Talk objectives: Some insights into some inconsistencies in Erlang and how these can be fixed.

Target audience: People interested in future developments in Erlang.


Alternatives in Error Handling

Dmitry Groshev
Dmitry Groshev

Selectel
We all know this wonderful "let it fall" mantra. It works perfectly in a lot of cases; the only problem is that sometimes you just can't let it fall — maybe you want to present errors in a more handy way, or maybe you want to do something when your computation fails. In this talk different ways of error handling will be considered, in particular "straightforward" monadic approach of Erlando and more idiomatic one of z_validate library.

Talk Objectives: raise attention to particular aspects of error handling

Target Audience: any Erlang developer, especially those who deal with user input


An Erlang Game Stack

Henning Diedrich
Henning Diedrich

Eonblast Corporation
Erlang is successfully used for game servers. Lua is a friendly, small language that is big in game scripting. And VoltDB is a new high speed ACID database from Postgres inventor Mike Stonebreaker. Add some JSON, Websockets and JavaScript and you have an exciting HTML5 game stack.

This talk is about research and results from the work on a very high throughput game server with embedded Lua for game logic and VoltDB as SQL database backend. The stack aims to maximize robustness, throughput and ease of scripting. Its special feature is linearly scaling true ACID with a goal of a million transactions per second, while being easy on the game logic scripter.

This stack is part of the development effort of games start-up Eonblast for the cross-media Science Fiction franchise Solar Tribes, which will feature film elements merged with cross-platform online games.  The stack is created to allow for a unified, non-sharded game world experience, thus for a unified story line and also otherwise transcends current MMO conventions. Players will share the same stories at the same time and be empowered to leave a stronger imprint on their environment. Interaction with other players is taken beyond the limitations currently seen in social games. All of which are technical challenges, asking for fastest possible data access and better data integrity guarantees.

A triple asynchronous server side architecture is described that communicates non-blocking with a fat JS/HTML5 browser client. The related Open Source projects Erlvolt and Fleece are introduced, which were created for this stack. The embedded Lua driver Erlualib and Robert Virding's new project, the Lua VM emulator Luerl are compared and evaluated. A brief overview of capabilities of new databases is given to explain why VoltDB was chosen for the task.

Talk objectives: Sharing practical experience integrating Erlang with an imperative scripting language and a powerful database cluster: Lua and VoltDB. 

Target audience: Mid-Level Erlang programmers interested in language embedding and high-velocity distributed databases.


An Erlang-Based Framework for the Automatic Testing of Web Services

Kostis Sagonas
Kostis Sagonas

Uppsala University and National Technical University of Athens
Web Services are an essential part of modern web systems, yet their testing is an extremely slow and painful process. In this talk we will present a testing framework based on PropEr, xmerl, and the SOAP library of Yaws that aims for automatic property-based testing of Web Services.  We will show how one can use this framework to perform fully automatic response testing of Web Services, how given a WSDL specification of a Web Service the tool can generate structurally valid test cases, and, if time permits, how RESTful and stateful Web Services could be tested.

Target audience: Testing conscious web server developers.


Applied Rebar

Dave Smith (aka Dizzy)
Dave Smith (aka Dizzy)

Basho Technologies
Rebar is an Erlang build tool that provides a set of standardized build tools for OTP applications and releases. This talk will examine common patterns for constructing, testing and releasing self-contained Erlang application using Rebar. We will examine a few of the popular Erlang projects which use Rebar as concrete examples. Finally, we'll take a look at upcoming changes to Rebar that may further improve developer efficiency.

Talk objectives: To demonstrate how to use the major features a rebar-based build environment provides to the Erlang developer.

Target audience: Erlang developers who want to make most of rebar environment.


BoF - Erlang and TDD

Thomas Arts
Thomas Arts

QuviQ AB
A discussion group on Erlang and Test Driven Development.


BoF - Erlang in Teaching and Research

Kostis Sagonas
Kostis Sagonas

Uppsala University and National Technical University of Athens
A discussion group on Erlang in Teaching and Research


BoF - Running Erlang on Embedded Devices

Ulf Wiger
Ulf Wiger

Feuerlabs Inc
A discussion group on running Erlang on embedded devices


Combinatorrent - a Haskell Case Study

Jesper Louis Andersen
Jesper Louis Andersen

Erlang Solutions
Writing BitTorrent clients is fun. This talk presents a case 
study of a BitTorrent client written in Haskell. We will look into 
certain patterns used to implement the client and present how it works. 
Certain tricks used will be presented. We will also present what was easy and what was hard in the implementation and draw some comparisons to etorrent, which is a BitTorrent client written in Erlang.

Talk Objectives: Tell about some abstract tools that might be 
interesting to Erlang programmers

Target Audience: Brave people that won't fear the monoid!


Complex Event Processing on Arbitrary Data in Real-Time

Eric Merritt
Eric Merritt

Afiniate
Myrmas is a new, open source, low-level complex event processing system that serves as the core for 10io`s innovative new product AutonomicI/O. AutonomicI/O identifies anomalies in infrastructure telemetry data, and takes the appropriate proactive autonomic action to circumvent the costly unplanned IT outage(s) that would have resulted. 

This presentation will provide an overview of how Myrmas was architected to reduce re-execution and dramatically increase the ability to distribute computation across nodes, including how the unique term destructuring algorithm was designed to leverage a heavily-customized Rete algorithm, and how and why Standard ML was incorporated with Erlang at the core of the system.

Talk objectives: Introduce people to Myrmas, a new distributed rete implementation for Erlang as well as discuss mixed language implementations in the ERTS.

Target audience: Developers.


Continous Integration at WCDMA using Erlang Common Test

Johan Lundberg
Johan Lundberg

Ericsson AB
This is a description of how our Erlang common test based test framework is used within Continous Integration of the RNC node at WCDMA. The strategy is that the cross functional teams write test suites for new features that are then inherited into Continous Integration.

Talk objectives: to give an understanding of the framework structure and how it is used within Continous Integration and also some experience from a user perspective.

Target audience: SW developers and testers.


Device Management in a Connected Society

Tony Rogvall
Tony Rogvall

Feuerlabs Inc
As we move toward the Internet of Things, Over-The-Air (OTA) device management becomes increasingly critical. The battle against the difficulties of remote authentication, configuration, monitoring and upgrades has been raging for over a decade of Man-to-Machine (M2M) technology development. In this talk, we will introduce you to the challenges with some history, anecdotes and stats, and suggest a path forward in part based on some of Erlang's cooler features.

Talk objectives: Teach some Device management concepts and history.

Target audience: Interested people.


Distel - 10 Years of (e)maxing out Erlang

Mats Cronqvist
Mats Cronqvist

Klarna AB
Emacs has traditionally been the editor with the best Erlang support. Distel, created by Luke Gorrie et al in 2002, provides an implementation of the Erlang distribution protocol in emacs lisp.  Enabling communication between an Erlang emulator and emacs enables all kinds of cool tricks. 
Since this is the 10-year anniversary of Distel, I (the current maintainer) thought it fitting to present the current state of Distel. Which, in my unbiased opinion, is still the state of the art of Erlang editing.

Talk objectives: Get all those misguided vi-users to switch editor. 

Target audience: Anyone who wants to edit Erlang code, and is not afraid of the awesome power of emacs.


ErLLVM

Kostis Sagonas
Kostis Sagonas

Uppsala University and National Technical University of Athens
This talk will describe the architecture, design decisions, and the current implementation and performance of ErLLVM. ErLLVM is an extension of the HiPE native code compiler of Erlang/OTP that uses the Low Level Virtual Machine (LLVM) compiler infrastructure as a back-end. As such, it benefits from the set of existing components and low-level optimizations that LLVM provides. More importantly, it is in principle readily available on all platforms that LLVM supports.

ErLLVM is a full system currently available as open-source and has been tested on x86 and x86_64 based machines running Linux. It supports the complete Erlang language and to the best of our knowledge is robust enough for others to try. We are also currently working on an ARM backend. We welcome user feedback, experiences and support!

Talk objectives: Introduce ErLLVM and present its salient features and current performance.

Target audience: Erlang programmers in need for speed.


Erlang Embedded - Concurrent Blinkenlights and More!

Omer Kilic
Omer Kilic

Erlang Solutions
Managing the resources and utilising the increasingly popular multicore and heterogeneous aspects of modern embedded systems require new sets of tools and methodologies that differ from the traditional 'C/C++' flow.

Erlang provides features that are highly relevant to solve these issues and yet it is pretty much unknown in the embedded domain -- which is surprising considering that it was originally designed for embedded applications at Ericsson!

Talk objectives: This talk aims to provide an overview of the current state of Erlang in the embedded domain and talk about our plans to help speed up the adoption rate of Erlang in embedded projects.

Target audience: Hardware and software engineers interested in utilising Erlang as part of their embedded projects.



Erlang Metaprogramming Made Easy

Richard Carlsson
Richard Carlsson

Klarna AB
To generate Erlang code dynamically, you have until now had two choices: you could either create plain tuples according to the "abstract format" as generated by erl_parse (which is messy and has many special cases to keep in mind), or you could use the API functions in the erl_syntax module (which offer more abstraction, but can get pretty verbose). This talk will present the missing ingredient; a library allowing you to use template strings with metavariables, both for generating and matching on abstract syntax trees. As examples, I will show how we have used this at Klarna to implement a small domain-specific language for business logic, and demonstrate how you too can easily write a parse transform and even implement your own DSL that compiles to Beam code.

Talk objectives: Blowing a few minds.

Target audience: Anyone who wants to generate Erlang modules at run-time, for example for implementing a DSL or a parse transform.


Erlang The Movie II - Back to the Future of Web Telephony

Gordon Guthrie
Gordon Guthrie

hypernumbers
Thanks to the miracle of Twilio API's Erlang web developers can now recreate the golden days of Erlang, but in the browser.

You too can experience the thrill of building conference calls and answer phones, inbound/outbound blended call centres. Amaze yer pals with whisper and pop!

Combining Scottish sweary slang with German and Spanish robot voices is pretty much the best legal fun to be had on the interwebs. Combining that with the adrenaline buzz of a live demonstration, this session will be the only one at EUC with the thrill-o-meter cranked all the way up to 111.


Erlang in the Browser

Fredrik Svahn
Fredrik Svahn

Ericsson AB
Exploring the joys of reverse engineering a modern super-optimized Erlang virtual machine like BEAM, this talk will give an insight into what it takes to get an Erlang system up and running in your browser.

The talk is based on experiences from the browserl project, an open source hobby project available on github.

Talk objectives: Is it even possible to run an Erlang/OTP system in a browser? What are the main obstacles? What sort of performance can be expected? How much code does it take? Can I write my own Erlang emulator in $language? What is the status of the current development? Future plans?

Target audience: This talk targets attendants with an interest in running Erlang in e.g. a web browser. If you want to write an Erlang emulator on your own, or if you are interested in the internals of a lightweight Erlang emulator this talk is also for you.


Innovation: What Every Developer Absolutely Needs to Know

Steve Vinoski
Steve Vinoski

Erlang allows for technically excellent solutions, but reaching such a solution is, by itself, no guarantee of success. How to achieve real innovation and market success is often non-intuitve, especially for the typical technically-focused and logically-minded developer driven to make programs run faster, make code more beautiful, add cool features, or use the latest hot technology. Writing great code isn't nearly enough; if developers want their systems to succeed, then regardless of whether they work on proprietary systems or open source, they need to fully understand how innovation and markets actually work. In this talk, Steve will explain critical aspects and details of innovation, based in part on example projects and products from his 28 year career.

Talk objectives: to explain the inner workings of innovation, markets, and product life cycles to help developers better understand them.

Target audience: developers and technical managers seeking a better understanding of why and how products and projects succeed or fail.


Just-in-time in No Time? "Use the Source!"

Frej Drejhammar
Frej Drejhammar

Swedish Institute of Computer Science
Every cool VM-based language today seems to have a just-in-time (JIT) compiler. With the availability of a powerful compiler infrastructure in the form of LLVM, Erlang is close to get a just-in-time compiler of its own. Using LLVM together with its C-frontend, Clang, and automated source-to-source transformations it is possible to generate a JIT-capable Erlang VM which automatically stays in sync with the basic VM.

This talk will provide a brief overview of different just-in-time compilation strategies and a short introduction to the Erlang VM. The main part of the talk is an in-depth tour of the current JIT prototype and the techniques used to build it.

Talk objectives: Explain the basics of just-in-time compilation and describe how automated source-to-source transformations are used to generate a JIT compiler from the VM sources.

Target audience: Developers interested in how a just-in-time compiler works and how JIT support is implemented in the current prototype VM.


Latest News from the Erlang OTP Group

Kenneth Lundin
Kenneth Lundin

Ericsson AB
This talk will give you the latest news from the boiling pots of the Erlang/OTP development at Ericsson.
And overview of recent development and future preliminary plans together with some short deeper dives into interesting aspects of Erlang/OTP of today.


Mnesia Backend Plugin Framework and a LevelDB-based Plugin

Roland Karlsson
Roland Karlsson

Erlang Solutions
Malcolm Matalka
Malcolm Matalka

Klarna AB
DETS, used by Mnesia for permanent storage has, some well known shortcomings (e.g. max 2 GB tables, slow repair of big tables and no ordered set semantics).

Klarna and ESL have been looking at other backend solutions. An earlier work made an experimental plugin framework in Mnesia and a filesystem-based plugin. This talk describes a continuation of the earlier work.

In this work the backend plugin framework has been refined and documented. The plugin developed is based upon LevelDB by Google and the eleveldb API made by Basho. It's also possible to design your own plugins based on other Key/Value storage backends.

Talk objectives: Describe technically the plugin framework and to exemplify the usage with an actual plugin ordered/used by Klarna.

Target audience: Those who are developing with Erlang and specifically with Mnesia and databases and those who are interested in what companies like Klarna are doing with Erlang. 


Reverse-Engineering a Proprietary Game Server with Erlang

Loïc Hoguin
Loïc Hoguin

Nine Nines
Online gaming suffers from a big issue. When the owner of the game decides to shut it down, it's gone for good. Sometimes it's released as open source, but most of the time reverse engineering is needed to bring the fallen servers back to life.

The best tool to analyze and reverse engineer a protocol and game client is Erlang, closely associated with a good debugger.

This talk will explain the big advantages Erlang has over other languages for reverse engineering protocols and analyzing client files. A live demo showcasing some of these tools and techniques will be given.

At the end of the talk you should have a good idea of how to start reverse-engineering your favorite online game.

Talk Objectives: Learn how to use Erlang to analyze and reimplement 
proprietary protocols and file formats efficiently.

Target Audience: Network developers, video games enthusiasts.


Ruby & Erlang: at Scale with Style

Martin Rehfeld
Martin Rehfeld

wooga.com
In the world of social gaming with massive amounts of users, the classic architecture of web application does not cut it anymore.

Wooga has already innovated quite a bit introducing stateful erlang-based game servers. Now it is time to push the limits even further.

Follow along the evolution of game servers at Wooga and get an in-depth look into the next-generation backend putting the combined forces of erlang and Ruby to work. Learn how scalability, reliability, concurrency control and beautiful code do not need to be mutually exclusive.

Wooga is in the top three of the largest publishers of social games world-wide, right behind Zynga and competing with Electronic Arts for 2nd place with almost 50 million active users every month on facebook.  

Talk objectives: Promote mixing and matching and generally using the best tool for a given job.

Target audience: When you are interested in the practical challenges arising from combining Erlang and Ruby, this talk is for you.


Starting a Software Company: Tips from the Trenches

Jane Walerud
Jane Walerud

Teclo Networks
Jane was a computer science groupie at Stanford. After moving to Sweden (his name is Bengt), she made her living in IT sales and product management, and had a couple of small companies on the side.
In 1997, Jane started work as Sales Manager of Erlang Systems. It was the perfect job - all those computer science people! - for all of two months, when Ericsson forbade the use of Erlang in new projects. Not enough people used Erlang to keep it dynamic, and Ericsson management was afraid of being trapped in a dying language.

It was impossible to sell Erlang when Ericsson itself refused to use it, and Jane persuaded Ericsson management to release Erlang open source in order to spread its use without sales. That strategy does seem to have worked...

A group from the CS-lab then started Bluetail with Jane as CEO, and sold it 18 months later for 150MUSD. Jane has used part of her proceeds to help start ten other companies, including Klarna and Lensway. She's now CEO of Teclo Networks with Sean Hinde, Luke Gorrie, and Tony Rogvall, among others. Jane thoroughly enjoys building companies.

The keynote talk will present war stories from Jane's startups, including Bluetail, Klarna and Teclo Networks, which just might illustrate a few things not to do when starting a company, and maybe even a thing or two TO do.


Sweden's Next Top NoSQL Data Model

Ian Plosker
Ian Plosker

Basho Technologies
Data modeling is hard, especially in the world of distributed NoSQL stores. With relational databases, developers have tended to store normalized data and shape their query model around that structure. This can come back to bite you when it comes time to scale, as complex queries across dozens of tables begin to affect application performance. It’s common to find developers rethinking their data model as query latency increases under load.

With NoSQL stores, developers must consider their query patterns from the outset of application development, designing their data model to fit those patterns. A number of techniques, new and old, can be used to allow for maximum performance and scalability.

Topics covered will include:
De-normalization, time boxing, conflict resolution, and convergent & commutative replicated data types. Additionally, discussions of common query patterns in light of the capabilities of various NoSQL data stores will be reviewed.

Talk objectives:
To enable developers to understand that the data model must follow query patterns when using a NoSQL storage solution.

Target audience:
Developers using or thinking about using a database, be it relational or NoSQL. Anyone interested in distributed systems.




Switching to Erlang for Fun and Profit!

Berner Setterwall
Berner Setterwall

Campanja AB
Berner will talk about Campanja's experiences moving to Erlang, how they  ended up doing it, lessons learned and challenges they faced.

Campanja's production environment is fully hosted in Amazon EC2 on 80+ instances.
Our main production language today is Erlang. At the beginning of 2011 nobody at Campanja had ever programmed Erlang before.

Talk objectives: Share the experiences we had while switching to Erlang.

Target audience: People interested in what it is like to join the Erlang community now-a-days, Erlang deployed on amazon ec2 and Erlang in combination with non-Erlang databases (i.e. the world outside of mnesia, couchdb and riak ;-) ). 


Taking a Virtual Machine towards Many-Core

Rickard Green
Rickard Green

Ericsson AB
Patrik Nyblom
Patrik Nyblom

Ericsson AB
The number of cores in modern computer systems increase rapidly. While the Erlang Virtual Machine has a history of good support for multicore systems, new development in the hardware industry requires further development of the Virtual Machine. This talk will walk you through the latest development, as well as the future, of the Virtual Machine
regarding support for multicore and multiprocessor systems. The talk will also discuss what problems arise when moving from multicore to many-core systems and what the solutions to the forthcoming challenges might be. The talk will be quite technical.

Talk Objectives: Give the audience an insight of the Virtual Machine internals.

Target Audience: People with technical interest in the Virtual Machine internals.


Testing Eventual Consistency in Riak

Ulf Norell
Ulf Norell

QuviQ AB
Riak is one of the new breed of no-SQL database management systems, which has begun to replace relational databases for some applications. Riak is a distributed key-value store, inspired by Amazon’s Dynamo, designed for applications where scalability, low latency and high availability are critical. Riak uses replication to provide fast access to data, even when multiple nodes or parts of the network fail. It supports concurrent access to the same data by multiple clients, even when the network is partitioned. All of this makes it very hard to test.

I will show how QuickCheck helped us to model Riak’s behavior, improving understanding and revealing the occasional bug.


The ABCs of C to E(rlang): a Practical Guide to Porting a Softswitch

Franko Franicevich
Franko Franicevich

ShoreTel
How to port a (successful!) hosted voip softswitch from C/C++ to Erlang. The whys, the hows, the successes and failures; and how to convince your manager it's a good idea!

M5/Shoretel runs a very successful hosted voice over IP enterprise class PBX written primarily in C and C++. Five years ago we started to investigate the possibility of using Erlang as the primary language for the project.

This is the story of how we evaluated it, how we got excited by it, how we're using Erlang to build new features, rewrite existing modules, and the lessons we've learned (both good and bad) on the way. (All while improving our stability and service to keep our customers from running away.)

Talk objectives: This is intended to be a practical guide to how one might begin to use Erlang in an already existing, successful project and environment; and the benefits that can be gained.

We've learned some valuable lessons during this continuing process that may prove educational to others contemplating doing similar things; and hopefully encourage them to take the same plunge.

Target audience: Anyone considering building a new, large project in Erlang; and particularly those who already have successful projects in other languages who might be wondering if it's worth the risk; and how they might go about such a transition.



The Ericsson SGSN/MME: over a Decade of Erlang Success

Urban Boquist
Urban Boquist

Ericsson AB
For over a decade the Ericsson SGSN/MME, in large parts based on Erlang, has been the market leading product in its segment. The SGSN/MME is an integral part of the packet switched telecom network (commonly known as "mobile broadband"), and basically serves as a big router in the core network providing mobility and session handling for mobile phones. Today the same system can handle 2G, 3G and 4G traffic at the same time (one SGSN/MME can serve several Radio Access Networks). In this talk we will try to show how Erlang has been a central part in the construction and evolution of this system over a period of almost 15 years. The SGSN/MME is still being actively developed; 4G and completely new hardware being only two of the recent additions. In our opinion the early choice of Erlang for this product has been one of the key reasons for its big success. We will try to demonstrate this with examples of how Erlang core features are utilized in the systems design. The SGSN/MME code base is huge - the Erlang parts alone are well over a million lines of code, and the C/C++ parts several times bigger. This in itself becomes a challenge to handle in a system that has been developed for so long and with a very large number of people involved.

Talk objectives: Give an example of industrial use of Erlang matching keywords such as: high capacity, high reliability, large scale, telecom networks, fault tolerance, overload protection, multi core and domain specific languages.

Target audience: Everyone that is interested in real world use of Erlang.


The Gory Details of Garbage Collection

Jesper Wilhelmsson
Jesper Wilhelmsson

Oracle
Garbage collection is the key to automatic memory management. It relieves the programmer from the tedious and error prone task of manually keeping track of all mallocs and frees in a program.

In this talk we will look at the basics of garbage collection and take a look inside the Erlang VM to see how garbage collection works in the Erlang context.

Talk objectives: Describe garbage collection in general and how it works in Erlang in particular.

Target audience: Anyone interested in the gory details of the inside of the VM.


The Ideal Programmer - Why They Don't Exist and How to Manage Without Them?

Mike Williams
Mike Williams

Ericsson AB
For many years, I have been trying to define the "ideal programmer" only to come to the realisation that they don't exist. This talk will be about the people and skill you must have in your team if you are to run a successful project. It will also touch on what you need to avoid as well.


The OS4RW: an Operating System for the Real World

Paul Valckenaers
Paul Valckenaers

KU Leuven / KHLim
Erlang enables and powers a connected society. This talks brings this connection one step further into the real world. It presents an approach to translate the concept of an operating system to the physical world. 

A computer OS manages ICT resources (e.g. CPU cores) used by computing activities. The OS4RW manages real world activities (e.g. painting a car body, executing a helicopter rescue)  that use real-world resources (e.g. robotic painting line, rescue helicopter and its crew). An ideal OS minimally interferes with the applications and refrains from imposing constraints beyond what already exists. It has to be designed for the unexpected. 

This talk outlines the key differences between a computer OS and an OS4RW, which identifies challenges. Ergo, the talk also draws a picture on how to address these the challenges. 

Talk objectives: To outline a design for a connected society that reaches far into the physical world without adding unwelcome restrictions on real-world activities. To show that the infrastructure for an intelligent society can reach outside the computer network, pro-actively managing how activities use resources. 

Target audience: 1) Erlang developers/users looking for a 'killer' application domain to make a real impact in society (and not just through computer screens and mobile displays). 

2) Researchers, developers, policy-makers addressing smart factories, smart grids, intelligent transport and traffic, etc. willing to learn how Erlang is part of the solution. 


The Openflow Soft Switch

Krzysztof Rutka
Krzysztof Rutka

Erlang Solutions
This talk is about the idea of OpenFlow and how we brought it to life using Erlang. I'm going to speak about the design decisions we made and the problems we encountered when implementing an OpenFlow 1.2 software switch in Erlang. I will also describe the process of integrating it with the existing OpenFlow tools that all speak OpenFlow version 1.0 and how we used QuickCheck to test everything.

Talk objectives: To give insights on how we implement OpenFlow switch in Erlang and spread the word about OpenFlow!

Target audience: Erlang developers and everyone interested in computer networks.


Tutorial: Building a Chat with Cowboy - Part 1

Loïc Hoguin
Loïc Hoguin

Nine Nines
Magnus Klaar
Magnus Klaar

Nine Nines
This tutorial introduces the Cowboy web server through the writing of a simple chat application.

The Cowboy web server allows you to write efficient web applications. It's however just a thin layer managing the HTTP part of your application.

After a brief presentation of Cowboy, we will start writing a simple echo application using GET and POST, and then using Websockets.

We will then start talking about the general architecture of the 
application, build a session server and make clients communicate with each other.

Requirements for this tutorial: basic knowledge of how HTTP works, a laptop with Erlang and Rebar installed (R14B or higher) along with a websocket enabled browser.

Tutorial objectives: Learn how to use Cowboy to build real-world HTTP/websocket applications.

Target audience: Web and network developers.


Tutorial: Building a Chat with Cowboy - Part 2

Loïc Hoguin
Loïc Hoguin

Nine Nines
Magnus Klaar
Magnus Klaar

Nine Nines
This tutorial introduces the Cowboy web server through the writing of a simple chat application.

The Cowboy web server allows you to write efficient web applications. It's however just a thin layer managing the HTTP part of your application.

After a brief presentation of Cowboy, we will start writing a simple echo application using GET and POST, and then using Websockets.

We will then start talking about the general architecture of the 
application, build a session server and make clients communicate with each other.

Requirements for this tutorial: basic knowledge of how HTTP works, a laptop with Erlang and Rebar installed (R14B or higher) along with a websocket enabled browser.

Tutorial objectives: Learn how to use Cowboy to build real-world HTTP/websocket applications.

Target audience: Web and network developers.


Tutorial: Common Test - Getting Started and Moving On - Part 1

Peter Andersson
Peter Andersson

Ericsson AB
Peter will present the Common Test application by giving a general introduction to the tool, as well as explaining some interesting features in more detail.

Tutorial objectives: The tutorial should give the listener a general idea about the purpose and usefulness of Common Test, and a good enough basic understanding of the tool, to help them get started with it quickly in their projects.

Target audience: Anyone interested in learning about Common Test; a general purpose test tool, useful for testing systems on any level.



Tutorial: Common Test - Getting Started and Moving On - Part 2

Peter Andersson
Peter Andersson

Ericsson AB
Peter will present the Common Test application by giving a general introduction to the tool, as well as explaining some interesting features in more detail.

Tutorial objectives: The tutorial should give the listener a general idea about the purpose and usefulness of Common Test, and a good enough basic understanding of the tool, to help them get started with it quickly in their projects.

Target audience: Anyone interested in learning about Common Test; a general purpose test tool, useful for testing systems on any level.



Tutorial: Erlang Dos and Don'ts

Francesco Cesarini
Francesco Cesarini

Erlang Solutions Ltd.
Programming Erlang can be a very different experience from what many are used to. This tutorial looks at features of Erlang and what to do, and what not to do, to write efficient code which is still clear and concise.


Tutorial: Fine-Tuning the Erlang VM

Jesper Louis Andersen
Jesper Louis Andersen

Erlang Solutions
This tutorial will focus on diagnosing and fixing common Erlang performance problems. Topics to be covered include SMP vs. UP scheduling, tuning garbage collection, writing well behaved NIFs, and using built-in tools like percept and monitor to visualize & diagnose system performance.


Tutorial: QuickCheck Mini

Hans Svensson
Hans Svensson

Quviq AB and Chalmers University of Technology
QuickCheck support property based development. Instead of writing test cases for your applications, you write a one-pager with a QuickCheck property from which hundreds of test cases are generated
automatically. QuickCheck simplifies failing cases to a minimal example on a test failure (so that fault diagnosis is quick and easy). QuickCheck enables developers to dramatically improve test coverage, and find obscure errors at an earlier stage, lowering costs and improving quality as a result.

In this tutorial we will look at QuickCheck Mini, the free version of the QuickCheck library, and use examples to show how developers write QuickCheck specifications—which are actually Erlang programs using the QuickCheck API—and use them to test code written in Erlang or other programming languages. We will show how QuickCheck’s shrinking finds tiny examples that provoke errors, making the step from observing a bug to diagnosing it very short indeed, and we will show how property driven development can produce code that is solid from the word go.


Tutorial: Rebar

Dave Smith (aka Dizzy)
Dave Smith (aka Dizzy)

Basho Technologies
This tutorial will demonstrate how to use the major features of rebar including:
* Basic and multi-app construction
* Port compilation
* Dependency management
* Unit testing via eunit/common_test
* Reltool integration


Tutorial: Testing concurrent software with QuickCheck

Thomas Arts
Thomas Arts

QuviQ AB
Hans Svensson
Hans Svensson

Quviq AB and Chalmers University of Technology
Testing software is difficult, testing concurrent software seems almost impossible. Just writing a test case for a concurrent program is a challenge, since one may have a number of different correct executions that result in different, but all correct results. 

Quviq QuickCheck is an automated testing tool that can be used to automatically generate test cases. In traditional testing, one often writes a sequence of operations to be executed and that sequence is tested. Running the commands in that sequence in parallel is far harder, since how would the test case look like?  QuickCheck specification also often start from specifying sequential execution of possible sequences; but QuickCheck can run the commands in the sequence in parallel and the specification can be used to validate the outcome of such a run. All that, fully automatically.
In this way, testing the Erlang OTP dets module becomes possible.

PULSE is an addition to QuickCheck that enables you to find concurrency errors like race conditions and deadlocks in Erlang programs. Even if those errors may not show on a single processor system, they may be sitting there waiting to be revealed when you switch to multi-core. With PULSE you explore random schedulings that are possible on a multi-core but not on a single core, therewith increasing the possibility to reveal weird errors. Of course, the test case is minimized when finding a concurrency error, which results in a repeatable test case that helps to analyze the cause of the error quickly.

In this tutorial some knowledge of QuickCheck is required; it suffices if you participated in a QuickCheck talk or tutorial before. We will look at a few examples in which QuickCheck and PULSE are used to find concurrency errors.



Tutorial: Tracing and Debugging

Jesper Louis Andersen
Jesper Louis Andersen

Erlang Solutions
A distinct feature of the Erlang VM is the ability to trace and debug on a live system. In this tutorial we want to give people an overview of the facilities in the Erlang VM that helps a developer or administrator figure out errors in programs while they are running. The ability to operate on a live production system is a valuable trait of concurrent systems. Apart from Tracing and debugging, we will also be covering match specifications and we will introduce the "Restricted debugger" from the "eper" suite by Mats Cronqvist.



Tutorial: Using QuickCheck for testing stateful systems

Thomas Arts
Thomas Arts

QuviQ AB
Testing is a major part of all software development—yet no matter how much effort is spent on it, some errors always seem to slip through. Cases which no‐one thought to test crash systems late in development or out in the field, revealing errors which cost time and money to analyze, diagnose, and fix. In the worst case, such errors reveal fundamental flaws which force a redesign of part of the system, at disproportionate cost. 

The Quviq QuickCheck automated testing tool addresses these problems by generating test cases from a concise specification (so that many more cases can be tested), and simplifying failing cases to a minimal example on a test failure (so that fault diagnosis is quick and easy). QuickCheck enables developers to dramatically improve test coverage, and find obscure errors at an earlier stage, lowering costs and improving quality as a result. 

In this tutorial, we will use examples to show how developers write QuickCheck specifications—which are actually Erlang programs using the QuickCheck API—and use them to test code written in Erlang or other programming languages. We will show how QuickCheck’s shrinking finds tiny examples that provoke errors, making the step from observing a bug to diagnosing it very short indeed, and we will show how property driven development can produce code that is solid from the word go.



Tutorial: Utilization of ReafactorErl during Development and Maintenance

Zoltán Horváth
Zoltán Horváth

Eötvös Loránd University
Melinda Toth
Melinda Toth

Eötvös Loránd University
István Bozó
István Bozó

Eötvös Loránd University
RefactorErl is a source code analyser and transformer tool. Beside the more than 20 refactoring transformations the tool has a complex static source analyser framework: it provides data flow analysis, dynamic function call detection, side-effect analysis, a user level query language to query semantic information or structural complexity metrics about Erlang programs, dependency examination among functions or modules, function call graph with information about dynamic calls, etc. 

During the tutorial we plan to highlight some useful features of the tool, and to present how this tool can be used in software development and maintenance tasks. 

We will also present how the tool can be used for code comprehension in development teams, how to configure the RefactorErl server for multi users, etc.

Talk objectives: Show the main code comprehension features of RefactorErl and give some useful case studies about the usage.

Target audience: Everyone who has ever written Erlang code, wanted to maintain/understand/debug legacy code.


Up up and Out: Scaling Software with Akka 2

Jonas Bonér
Jonas Bonér

Type Safe
We believe that one should never have to choose between productivity and scalability, which has been the case with traditional approaches to concurrency and distribution. The cause of that has been the wrong tools and the wrong layer of abstraction and Akka is here to change that. Akka is a unified runtime and programming model for scaling both UP (utilizing multi-core processors) and OUT (utilizing the grid/cloud). With Akka 2 this will be taken to a whole new level with its “Distributed by Design”. Akka 2 provides location transparency by abstracting away both these tangents of scalability by turning them into an operations and configuration task. This gives the Akka runtime freedom to do adaptive automatic load-balancing, cluster rebalancing, replication and partitioning. In this talk you will learn what Akka is and how it can be used to solve hard scalability problems. Akka is available at http://akka.io (under Apache 2 license).

Talk objectives: Teach attendees what Akka is and isn't. How it is different from (and similar to) Erlang. It's strengths and weaknesses.

Target audience: Developers interested in writing Erlang-style concurrent, distributed and fault-tolerant in Scala and/or Java to be run on the JVM.


Using Software Refactoring to form Parallel Programs: the ParaPhrase Approach

Chris Brown
Chris Brown

University of St Andrews
Kevin Hammond
Kevin Hammond

University of St Andrews,
Despite Moore's ``law'', uniprocessor clock speeds have now stalled. Rather than using single processors running at ever higher clock speeds, it is  common to find dual-, quad- or even hexa-core processors, even in consumer laptops and desktops. Future hardware will not be slightly parallel, however, as in today's multicore systems, but will be massively parallel, with manycore and perhaps even megacore systems becoming mainstream. This means that programmers need to start thinking parallel from the outset of  their program development rather than treating parallelism as a bolt-on afterthought. This talk introduces the Paraphrase approach to constructing parallel programs, a new approach that uses formally-defined refactoring transformations based around strong parallel patterns and associated skeleton implementations, and directly exploits functional programming concepts. We show how complex parallel programs can be built from primitive Erlang building blocks, and describe some new software refactorings for parallel Erlang programs that capture common parallel abstractions, such as divide-and-conquer and data parallelism, using these building blocks. The ParaPhrase approach is both flexible and scalable, capable of covering both GPU and CPU computations, scaling from multi-core to mega-core processors, and covering a variety of parallel programming paradigms. 


Talk Objectives: To give an overview of the ParaPhrase project and to show how we can parallelise Erlang programs using refactoring and skeletons.

Target Audience: Anyone who is interested in refactoring and/or parallelism.


Welcome

Bjarne Däcker
Bjarne Däcker

Bjarne Däcker, the co-founder and manager of the Ericsson Computer Science Laboratory, will open the conference and give a short introduction.