• Liked Manuel Chakravarty
    keyboard_arrow_down

    Haskell SpriteKit - a Purely Functional API for a Stateful Animation System and Physics Engine

    Manuel Chakravarty
    Manuel Chakravarty
    schedule 1 month ago
    Sold Out!
    45 mins
    Demonstration
    Intermediate

    Graphics, animation, and games programming in Haskell faces a dilemma. We can either use existing frameworks with their highly imperative APIs (such as OpenGL, Cocos2D, or SpriteKit) or we waste a lot of energy trying to re-engineer those rather complex systems from scratch. Or, maybe, we can escape the dilemma. Instead of a Haskell program directly manipulating the mutable object-graph of existing high-level frameworks, we provide an API for purely functional transformations of a Haskell data structure, together with an adaptation layer that transcribes those transformations into edits of the mutable object-graph.

    I this talk, I will explain how I used this approach to architect a Haskell binding to the animation system and physics engine of Apple’s SpriteKit framework. I will discuss both how the binding is structured and how it achieves the translation of Haskell side changes to SpriteKit and vice versa, such that it is sufficiently efficient. Moreover, I will demonstrate by example how to use the Haskell library to implement a simple game.

  • Liked Eric Torreborre
    keyboard_arrow_down

    Practical eff monad for micro-services

    Eric Torreborre
    Eric Torreborre
    schedule 5 months ago
    Sold Out!
    45 mins
    Talk
    Advanced

    This talk presents how we use the Eff monad at Zalando to structure a REST microservice. Even when programming with functions, modules and components still matter, and I will present a new approach for dependency injection using the Reader monad (classic) and tree rewriting (what?). Then we will see how to specify more precisely several components (authentication, request to other services and database access) with the Eff monad and support additional concerns like logging or asynchronous execution.

    Once you get the basic idea, the possibilities are endless! Rate limiting is just another component and another set of effects involving time and state, testing becomes really clean and easy.

  • Dhaval Dalal
    Dhaval Dalal
    Morten Kromberg
    Morten Kromberg
    schedule 4 weeks ago
    Sold Out!
    45 mins
    Demonstration
    Beginner

    In Indian classical music, we have Jugalbandi, where two lead musicians or vocalist engage in a playful competition. There is jugalbandi between Flutist and a Percussionist (say using Tabla as the instrument). Compositions rendered by flutist will be heard by the percussionist and will replay the same notes, but now on Tabla and vice-versa is also possible.

    In a similar way, we will perform Code Jugalbandi to see how the solution looks using different programming languages and paradigms.  This time the focus of code jugalbandi will be on solutioning in two different paradigms - functional programming and array-oriented paradigm.   

    During the session, Morten and Dhaval will take turns at coding the same problem using different languages and paradigms. There would be multiple such rounds during the Jugalbandi.

  • Liked Riccardo Terrell
    keyboard_arrow_down

    Taming and Composing high performance Stream-Oriented Processing Systems for Big Data

    Riccardo Terrell
    Riccardo Terrell
    schedule 2 months ago
    Sold Out!
    45 mins
    Talk
    Advanced

    Real time applications are dominating the industry! Data is the main ingredient in Internet-based, social media and Internet of things (IoT) systems, which generate continuous streams of events used for real time analytics. This poses a tremendous challenge due to the massive volume of data collected and processed. These event-based Real-time analysis systems can easily process millions of messages per second through new generation solutions by simply defining small flows and then combining them together to create processing graphs. In this talk, will cover the concepts behind high-performance streamed-oriented big data processing systems. We will explore messaging queue systems like Kafka and Akka Streams which let developers define their process workflows at a higher level to define a graph system enabling a high throughput. You will learn how to integrate high performance stream message queues and how to define process workflows in C# and F#.

  • Liked Maria Livia Chiorean
    keyboard_arrow_down

    The path to generic endpoints using Shapeless

    Maria Livia Chiorean
    Maria Livia Chiorean
    schedule 3 months ago
    Sold Out!
    20 mins
    Talk
    Beginner

    Programming in Scala is sometimes very time consuming. Finding the most efficient way to solve a problem can end up in days of frustration. This talk is a story of trail and error with a twist at the end. It's a story of API endpoints, generic programming, Shapeless and what happens when they all come together. Everything with examples and plenty of code.

  • Liked Aaron W Hsu
    keyboard_arrow_down

    Functional Array Funhouse Intensive

    Aaron W Hsu
    Aaron W Hsu
    schedule 4 weeks ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    How would your make your programs easier to write, inherently parallel, and have high performance across GPUs and CPUs? How about a development methodology that makes agile programming look sluggish and unreliable? How about shrinking the size and complexity of your code base by an order of magnitude, while increasing performance by an order of magnitude? This intensive workshop is designed to demystify the strange and special world of array programming like you may never have seen it before. Iverson-style array programming terrifies some and amazes others, but no one can argue with the results in areas such as finance, energy, education, or medical research. New research has made array programming scalable across a wide array of parallel hardware architectures. Often renowned for remarkably short, concise code that does a tremendous amount, the area of production level, array programming is an often misunderstood area. This workshop will bring you through a whirlwind of array programming concepts by example and case study, opening up the curtains on the original interactive functional programming language in its modern incarnation. You will learn how you can make use of this sometimes mystical world, with an emphasis on the concepts and how to integrate these concepts into a practical, targeted development methodology and ecosystem for maximizing productivity and leveraging the benefits of notational thinking to their full effect. The goal is to let you keep the magic and fun of programming alive while you use that magic for your benefit in the real world.

  • Liked Paweł Szulc
    keyboard_arrow_down

    Going bananas with recursion schemes for fixed point data types

    Paweł Szulc
    Paweł Szulc
    schedule 3 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    In 1991 Erik Meijer, Maarten Fokkinga, and Ross Paterson published "Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire." This paper is a classic one, widely recognizable in the FP community. Constructs described - known as recursion schemas - have real world applications. Strictly speaking, explicit recursion is the ‘goto’ of pure functional programming. Recursion schemas provide same level of sanity as loops did for structural programming back in the day.

    Over the years a lot of the progress have been made. Papers like "Recursion schemes from comonads" by Tarmo Uustalu, Varmo Vene & Alberto Pardo or "Unifying Structured Recursion Schemes" by Ralf Hinze, Nicolas Wu & Jeremy Gibbons - pushed the concept forward.

    This talk is about generalization of a very specific recursion schema (called catamorphism) over fixed point data type. After providing introduction the concept of catamorphism, we will jump straight to fix point data types trying to solve some real-world problems. Code examples are in Scala. Code examples use Matryoshka - which is an open sourced project design to generalize folds, unfolds, and traversals for fixed point data structures in Scala.

  • Liked Martin Thompson
    keyboard_arrow_down

    High-Performance Messaging with Aeron

    Martin Thompson
    Martin Thompson
    schedule 4 weeks ago
    Sold Out!
    480 mins
    Workshop
    Beginner

    In this workshop you will learn how to build microservices with Aeron and SBE in Java. Microservices capable of handling millions of messages per second with very low and predictable response times. We will cover some networking theory and the design of Aeron so you know how to use it with mechanical sympathy.

  • Mushtaq Ahmed
    Mushtaq Ahmed
    Unmesh Joshi
    Unmesh Joshi
    schedule 1 month ago
    Sold Out!
    45 mins
    Experience Report
    Intermediate

    Service Discovery is an important aspect of microservices, particularly when using containers on elastic infrastructure. Most popular approaches for service discovery require a standalone fault tolerant cluster like Consul, Zookeeper or etcd.

    If you are already using Akka as a clustering platform for your services, there is an interesting alternative available for Service Discovery. CRDTs, or Conflict-free Replicated Data Types are a relatively new primitive in distributed systems. CRDTs allows concurrent updates without coordination and has provisions for tuning consistency levels. 'Distributed Data' extension natively supports CRDTs on top of Akka-Cluster.

    We used CRDTs in Akka to build the service registration and discovery mechanism for TMT's (Thirty Meter Telescope) software platform. TMT will be world's largest optical telescope once operational. The ongoing software work is open source and available on github. We would like to share the details of our implementation and also compare it existing approaches.

  • Liked Aloïs Cochard
    keyboard_arrow_down

    The Tale of Troy

    Aloïs Cochard
    Aloïs Cochard
    schedule 1 month ago
    Sold Out!
    45 mins
    Talk
    Beginner

    In recent years, the impact of functional programming on mainstream languages has grown significantly.

    After conquering server applications and distributed systems,
    the paradigm is now conquering the fields of web development and data analytics.

    So what remains? The land of system programming.

    When Mozilla did release the language Rust in 2012,
    it did immediately striked interest from functional programming enthusiasts due to it's strong emphasis on safety.

    Even though it currently lacks some advanced features like higher kinded types,
    it is built with functional programming principles as it's core.

    Like a Trojan horse (or the parasite mushroom after the language is named),
    Rust looks like the next C on the outside... while it might actually be closer to Haskell on the inside!

    Let's take a tour and discover an other side of system programming by learning together how to do functional programming in Rust.

  • Liked Ryan Lemmer
    keyboard_arrow_down

    From Haskell 98 to Modern Haskell - Making sense of the Haskell type system

    Ryan Lemmer
    Ryan Lemmer
    schedule 1 month ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    There are several great books and courses that serve as an introduction to functional programming in Haskell. Typically, these introductions focus on the original core of Haskell ("Haskell 98").

    However, going from there into real world Haskell systems can be a bewildering experience. This is because Haskell has evolved significantly since Haskell 98. In this talk we will investigate the key advances in the type-system that make up "modern Haskell".

    • type-system extensions: Rank-n types, GADTs, functional dependencies, ...
    • kind-system extensions: type functions, kind polymorphism, type promotion, ...

    By taking a historical perspective we will look at why new language extensions were introduced, and the context in which they first appeared. This approach gives us a layered view of seemingly disparate language features.

    We will see that the evolution of the type system has been a steady march from "programming with types" to type-level programming, and ultimately dependently-typed programming in Haskell.

    (This talk will draw from the book "Haskell Design Patterns")

  • Liked Nikhil Tibrewal
    keyboard_arrow_down

    Scio – Scala DSL for Apache Beam

    Nikhil Tibrewal
    Nikhil Tibrewal
    Rafał Wojdyła
    Rafał Wojdyła
    schedule 2 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    Apache Beam (based on Google’s Dataflow Model) provides a simple, unified programming model for both batch and streaming data processing. If only it wasn’t so unfamiliar and verbose for our Scala engineers. Learn how Scio leverages Scala’s type system, macros and functional paradigm to provide more engineer-friendly and type safe API.

  • Liked Arthur Kushka
    keyboard_arrow_down

    Recursion schemes and fixed point data types

    Arthur Kushka
    Arthur Kushka
    schedule 3 months ago
    Sold Out!
    45 mins
    Talk
    Advanced

    Its always challenge to build a good abstraction during work on library. Library codebase must be flexible and modular when user code must be clean and easy understandable. One of variants to build API between library and customer its Free evaluation approach. In that case you as developer is free to interpret customer actions as you want and customer is free to define actions as he want. In my talk I will show how to build API based on recursive abstract data types, describe why its cool and demonstrate some tricks on type system to make customer experience with library better.

     
  • Liked Oskar Wickström
    keyboard_arrow_down

    The Power of Functional Programming and Static Type Systems in Server-Side Web Applications

    Oskar Wickström
    Oskar Wickström
    schedule 6 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    Single-page web applications have been spreading like wildfire, with an endless amount of frameworks and libraries, and functional programming together with static types fueling the fire with great ideas like pure functions, monads, and strong type checking. But what happened to Progressive Enhancement? Some parts of our applications might require Javascript to function, but the majority could be built with ordinary links and forms.

    In this talk we will explore how we can build web applications using established web technology, and the power of functional programming on the server-side, leveraging what is already in our browsers.

  • Liked Bryan Hunter
    keyboard_arrow_down

    Poka yoke: Mistake-proofing via Functional Programming

    Bryan Hunter
    Bryan Hunter
    schedule 1 month ago
    Sold Out!
    45 mins
    Talk
    Beginner

    "Poka yoke” (po-kah yo-kay) is a term from Japanese manufacturing that means "mistake proofing". It is a powerful concept (equally powerful in software) in which the design of a system shapes usage so that human error is prevented or corrected before it can cause real harm. In this session we will explore how and why FP maps so well onto the poka yoke concept. We will discuss the merits of mistake proofing over diligence, and rethink our approaches to craft and quality. You will leave with a new lens to evaluate languages, tools, and your own code. Examples in Elixir, Elm, F#, and Idris.

  • Liked Bryan Hunter
    keyboard_arrow_down

    Elixir by the Bellyful

    Bryan Hunter
    Bryan Hunter
    schedule 1 month ago
    Sold Out!
    45 mins
    Keynote
    Beginner

    Elixir makes me happy, and I bet it will make you happy too. OK, but why is that? Elixir is a modern functional programming language with productive “dev joy” tooling, and it sits atop a decades-stable, crazy-scale, battle-tested foundation: the ErlangVM and OTP. In under three years after Elixir reached 1.0 it has already topped big, popular languages like C# on Stack Overflow’s "2017 Most Loved Language” list. After this session you will understand what makes Elixir special, the ecosystem will be illuminated, and you will have the "why, what, and how" knowledge to confidently begin your Elixir journey.

  • Liked Luis Ferreira
    keyboard_arrow_down

    Winter is coming

    Luis Ferreira
    Luis Ferreira
    schedule 2 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    Yeah, that was a bad pun, but on this talk we’ll go over how to build an umbrella app in Elixir and Phoenix. As a bonus we’ll also cover a few of the differences between umbrella apps and microservices as well as how the Elixir community is moving towards a more thoughtful architecture for apps.

  • Naresh Jain
    Naresh Jain
    schedule 3 months ago
    Sold Out!
    45 mins
    Demonstration
    Intermediate

    Array-oriented Programming (AoP) dates back to 1960s.The fundamental idea behind AoP is that operations apply at once to an entire set of values. This allows the programmer to think and operate on whole aggregates of data, without having to resort to explicit loops of individual scalar operations. At ConfEngine.com, a platform for organising and managing technical conferences/events, we've been heavily influenced by the APL style of AoP. In our context, this means each function focuses on applying one transformation to an immutable array (ordered-map) and then spitting out a new array, which can be piped to another function thus achieving functional composition. This has allowed us to build a very modular, decoupled design, which is extremely simple to reason about. 

    If you think of typical web-apps, they are generally CRUD applications. Data comes in, you apply a set of transformation and you pass it to someone else via an API or you save/query a data store. And on the way out, you get data from somewhere (data-store, API, etc.), apply a set of transformations and render the transformed data as HTML or JSON. Now we can visualise most web-apps using standard Pipe-and-Filter Architecture. With this, applying some of the functional programming concepts becomes more intuitive.

    At ConfEngine.com, we use the standard LAMP stack. We've used PHP's philosophy of shared-nothing-architecture to address concurrency and scalability concerns. PHP itself has all the basic ingredients required for Functional Programming - first-class, higher-order functions, lambda, closures, partial functions, recursion and so on. We use array (ordered-map) to hold the data. PHP provides 79 array functions that allows you to do pretty much everything you need to in terms of transforming arrays including map, reduce, filter, merge and so on. One needs to be careful, but most of these are pure, higher-order functions. 

    If you are interested to learn more about AoP, I'll give a walk through of our design. Also I'll take a couple of problems to explain how to think in terms of AoP and how its really helps with functional programming.

  • Liked Ravi Mohan
    keyboard_arrow_down

    Predator: A Framework for developing programmatic players for Complex Board Games( in Erlang and PureScript)

    Ravi Mohan
    Ravi Mohan
    schedule 1 month ago
    Sold Out!
    45 mins
    Experience Report
    Beginner

    Summary: An Experience Report on How I'm using Erlang and PureScript to create programmatic opponents aka 'bots' for complex boardgames I love to play but I can't find people to play with!

    The number of boardgames that you can whip out at a gathering and expect people to want play is very small.. Monopoly, Snakes and Ladders, perhaps Settlers of Catan. And that's about it.
    Getting people to play these games is relatively easy.

    However the world of boardgames is *much* wider. There are literally tens of thousands of boardgames that simulate everything from very abstract geometry puzzles to ones thatcomplex economies and political situations. Some of the latter are used in very unexpected ways, e.g to train spies and military officers.

    Here is an example

    A Distant Plain (by GMT Games) is a boardgame for 4 players that put them in the roles of the US military forces, the Afghan government, the Taliban, and Warlords cum drug dealers, all competing for power in Afghanistan.

    DistantPlain1

     

    Here is another
    The War of the Ring, a game for 2 players.

    "In War of the Ring, one player takes control of the Free Peoples (FP), the other player controls Shadow Armies (SA). Initially, the Free People Nations are reluctant to take arms against Sauron, so they must be attacked by Sauron or persuaded by Gandalf or other Companions, before they start to fight properly ...."

    WarOfRings1

    And one more

    "A game of Eclipse places you in control of a vast interstellar civilization, competing for success with its rivals. You will explore new star systems, research technologies, and build spaceships with which to wage war. There are many potential paths to victory, so you need to plan your strategy according to the strengths and weaknesses of your species, while paying attention to the other civilizations' endeavors."

     

    What these games have in common
    1. They are wonderful wonderful games, immersing you into their respective worlds.
    2. They have (relative to Snakes and Ladders or Monopoly) complex rulesets.
    3. They are rarely played in India.
    4. Even when people own them, opponents are almost impossible to find and schedule.

    Which means that if you own these games and live in India, getting to actually play these games is close to impossible. Which is a problem.

    Being a programmer, I solve this problem by writing programmatic opponents (aka 'bots') to take the place of other players. This involves all kinds of interesting sub problems - game representation, logic processing for rules, building AI 'smarts' for your opponents, gui and event handling etc.

    Since I am doing this in my non existent spare time, I use time and effort saving languages, aka functional languages, in my case Erlang (originally Haskell) for the backend and PureScript for the front end.

    This talk is about the many challenges I faced in building automated game players (and extracting common frameworks/libraries) from them. Since this is an experience report, it is basically a list  of lessons learned, victories *and defeats*, what worked *and what didn't work*.

    If you can't use FP at work, but are considering doing so on a personal project, or want to learn how to get going on a non-toy FP learning effort, you could benefit from my mistakes and successes.

  • Debasish Ghosh
    Debasish Ghosh
    schedule 1 week ago
    Sold Out!
    45 mins
    Experience Report
    Intermediate

    Using a programming language that supports first class functional programming doesn’t necessarily imply that the code you write is functional. Functional programming has the nice properties of being compositional - you design smaller abstractions and then reuse them to build larger ones. You use the power of algebraic properties that these abstractions offer to build larger elements of your model out of smaller ones.

     However often we find that many code bases designed in a functional programming language are inherently imperative, especially when you are using a multi-paradigm language like Scala or Java. There’s nothing wrong with imperative code, but it lacks the niceties of expression based composition that makes reasoning about your code so much easier. Also assignments used in imperative code are inherent side-effects that are best avoided (or at least minimized) in an expression oriented language.

     In this session I will discuss some of my experiences of mining imperative code and refactoring them into functional patterns. You will be surprised to see how much functional goodness can be derived through functional thinking. Algebraic structures like Monoids, Monads and Kleislis are just buried within the reams of imperative statements crying to come out. In an exercise of half an hour we will liberate them and see how the code quality improves from the point of view of modularity, compositionality and simplicity.