 Okay. So I think everyone's here now. So the talk today is called Building High Performance Erlang Clients using a framework called Shackle. So a little bit about myself. My name is Wiefleb Gauthier. I'm from Montreal, Canada. I work for a company called Adgear. What we do is we're building a real-time bidding platform for online advertising and I've been kind of working on this project for the last five years now and for this project one of the first tasks I had to accomplish was to build a client to talk to the Cassandra database. At first I thought it would be easy but unfortunately scaling clients in Erlang can be quite complicated because you hit some bottlenecks pretty quickly. So the problem I'm trying to solve with this framework is basically for an application to speak to a service. Now what's a service? A service in this case is something where you can communicate over TCP socket and the service is gonna speak a protocol. It can be ASCII or binary and this protocol can be either synchronous or asynchronous. Examples of services are Cassandra, memcached, Kafka, HTTP2, etc. Now the goals for this framework I had four goals. So the first one was speed. You want to do requests that happen quickly in the sense that we want to minimize the time. The second characteristic that we wanted was concurrency. So it's good to be able to do one request quickly but it's even better if you can do 10,000 at the same time really quickly. The third characteristic is safety. So in Erlang we often say let it crash which is kind of a was presented I'm guessing from the previous presentation where you have a supervisor that's gonna restart your process but this comes at a cost. So if you're doing 10,000 requests a second and the process keeps crashing there's an overhead to that. This codepad is usually slower and you'll probably be logging some information about the crash. So you're writing to disk now and you're adding some IO work. So often you're gonna end up in the loop where you're just penalizing yourself even more.