Training:

BASIC ERLANG (28-30 May) - Dmytro Lytovchenko

OBJECTIVES

  • Understanding of the basics of Erlang
  • Read/Write/Design Erlang Programs
  • Provides basics needed to attend the OTP course Course

OUTLINE

Basic Erlang is a three-day introductory course, providing most pre-requisites to attend the OTP course. The course contains the following topics:

  • Background
  • Basic Erlang
  • Erlang Shell
  • Sequential Erlang
  • Concurrent Erlang
  • Process Design Patterns
  • Process Error Handling
  • Modules & Processes
  • Data Structures
  • Funs and High-Order Functions
  • Macros
  • Distributed Programming

ADVANCED ERLANG TECHNIQUES (04-05 June) - Robert Virding

OBJECTIVES

  • A better understanding of tools for building and maintaining systems
  • Understand the basics of profiling and debugging of running systems

OUTLINE

This two-day course presents some more advanced tools for building and maintaining applications with Erlang. It also gives insight into the tracing tools in the system which allow support engineers to inspect and monitor running systems. The course contains the following topics:

  • Parse Transforms
  • Profiling
  • Emulator Flags (BEAM introduction)
  • Observer
  • Tracing & Debugging (Trace BIFs & Match Specifications; The dbg Tool; Recon, Redbug).

COMPLETE ERLANG (28-30 May) - Dmytro Lytovchenko

OBJECTIVES

  • Understanding of the basics of Erlang
  • Read/Write/Design Erlang Programs
  • Provides basics needed to attend the OTP course
  • Understand how Erlang interacts with the development environment
  • Usage of the most common development tools
  • Good design practice 

OUTLINE

The Complete Erlang course is the combination of Basic Erlang (28-30 May) followed by Applied Erlang (4-5 June)

CERTIFICATION EXAM: ERLANG (05 June)

This is a discount rate applied for people attending the conference only. Regular cost is 2830 SEK.

The Erlang Certificate provides proof that the holder understands the core concepts of the Erlang programming language, and is ready to move on to the more advanced levels of Erlang study and usage. The certification is aimed at people who have completed the five-day “Complete Erlang” course, preferably with practical experience after that. The exam consists of a 90 minute multiple-choice questionnaire.

CERTIFICATION EXAM: OTP (05 June)

This is a discount rate applied for people attending the conference only. Regular cost is 2830 SEK.

The OTP Certificate provides proof that the holder understands the core concepts of Erlang/OTP, and is ready to apply the knowledge to building systems. The certification is aimed at people who have completed the four-day “Complete OTP” course, preferably with practical experience after that. The exam consists of a 90 minute multiple-choice questionnaire.

GRISP training - IoT Lab with GRiSP, Bare Metal Erlang, Sensors and Actuators (30 May) - Peer Stritzinger and Adam Lindberg

9:00 - 17:00

Want to learn how to run Erlang without a OS kernel? Want to deploy software to a small wireless embedded system? Want to interact with hardware such as accelerometers, thermometers, hygrometers, stepper motors and a little robot?

Then this is the course for you!

Join this full day course and learn how to create and deploy Erlang projects on the GRiSP embedded board. Learn how to connect to it using Wi-Fi and how to interact with and write your own drivers for hardware peripherals.

We will provide access to hardware such as GRiSP boards, PMOD devices and other accessories. You will be able to buy the GRiSP board at a discount to take home with you after the course to continue developing your projects.

Knowledge about programming is required and some basic knowledge of Erlang is a plus.

Introducing Phoenix (30 May) - Sonny Scroggin

09:00-12:30

Phoenix is an Elixir framework for building scalable web applications with realtime connectivity across all your devices. Together, we’ll take a guided tour of the framework, going from the very basics, to building our own realtime applications. You’ll see the framework’s foundations, core components, and how to use Phoenix to write powerful web services.

We’ll start by exploring the foundations of the framework in Elixir’s Plug library, followed by the core components of Phoenix’s Router and Controller layers. Next, we’ll review the View layer and build an application together as we learn each concept. We’ll finish by using the PubSub layer to add realtime functionality to our application. Along the way, attendees will see how to apply advanced features like router pipelines and plug middelware and receive tips on how to structure a Phoenix application for real-world services.

Property-based testing with QuickCheck (30 May)

09:00-11:00

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.

QuickCheck is an automated testing tool addressing the testing challenges by automatically 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 generate tests from specifications. It enables them to find errors at an earlier stage, lowering costs and improving quality as a result. In this tutorial, Thomas Arts 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 see how QuickCheck's shrinking finds tiny examples that provoke errors, making the step from observing a bug to diagnosing it very short indeed.

Testing Aeternity blockchain with QuickCheck (30 May)

13:30-15:30

Blockchains can become rather complex distributed applications. The Aeternity blockchain (https://aeternity.com/) is written in Erlang and offers advanced features such as state channels, oracles, smart contracts and much more. Testing such applications is challenging, because there are many corner cases to think of.

In this tutorial we show and explain how QuickCheck has been used to test this open source blockchain. The discuss the different QuickCheck models, what they test and how they help in assuring implementation quality.

 

GenServer under the microscope (30 May)

13:30-17:00

GenServers are one of the most powerful abstractions included in Elixir and OTP and they’re used as a fundamental building block for all sorts of architectures.

This tutorial will walk attendees through some patters that leverage different properties of GenServer, highlighting different use cases and providing a mental framework on when and how to use them in day to day development.

Robust Dependency injection (30 May)

09:00-12:30

Many Elixir projects require interaction with external services like databases, http APIs or all sorts of other gateways. This usually makes testing more difficult, expensive and fragile.

In this tutorial we’ll look at dependency injection as a technique that can be used to structure implementation code for better testability with minimal impact on its clarity, all with built-in tools included in Elixir.

Implementing a simple HTTP file storage server (30 May) - Bryan Hunt

09:00-17:00

This tutorial walks attendees through the structure, design, and setup of a distributed HTTP file storage server loving built with Cowboy/Phoenix. The server can handle large file uploads, safely passing the chunked data onwards via a gen_statem server to… well anywhere really, but typically, a remote Erlang process. The current implementation writes to the chunks sequentially to a Unix file system.

The goal of this training is be to store the file chunks via a riak_core back-end, using a custom hashing algorithm (physically adjacent chunk storage) and backed by the leveled LSM storage engine. The intent of this exercise is not to achieve Amazon API compatibility such as that provided by Riak CS (out of scope of this tutorial), but to provide an implementation of standard HTTP verbs (GET, PUT, POST, DELETE) so that the server can easily be manipulated with Unix command line tools such as `curl`, `wget`, etc. Checksums will be a project feature as will some limited form of tagging/iteration.