• Liked Manuel Chakravarty
    keyboard_arrow_down

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

    Manuel Chakravarty
    Manuel Chakravarty
    Lambda Scientist
    UNSW Sydney
    schedule 4 months 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 Aaron W Hsu
    keyboard_arrow_down

    Aaron W Hsu - Functional Array Funhouse Intensive

    Aaron W Hsu
    Aaron W Hsu
    Computer Scientist
    Indiana University
    schedule 4 months 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 Manuel Chakravarty
    keyboard_arrow_down

    Manuel Chakravarty - Functional Programming in Swift

    Manuel Chakravarty
    Manuel Chakravarty
    Lambda Scientist
    UNSW Sydney
    schedule 4 months ago
    Sold Out!
    480 mins
    Workshop
    Beginner

    Swift’s strong functional programming support generates a lot of interest in adapting functional programming techniques to improve designing, developing, and maintaining Cocoa applications. This workshop will help you unlock this potential.

    We will explore the foundations of functional programming and how functional programming helps to improve software development. We will start by discussing the main goals of functional programming, followed by surveying Swift’s language features that support functional programming. Then, we will look at how to put functional programming principles into practice using Swift. We will focus on immutable data structures, value types, and functional reactive programming.

    = Value types 

    One of the biggest changes in the transition from Objective-C to Swift is the new type system. This change is at the heart of Swift’s language design, from optionals over value types to constrained generics, and to truly understand the language, a thorough understanding of its type system is indispensable. We will survey these type system features with special attention to value types. We will discuss how structs and enums in Swift can be used to help avoid bugs by design and how immutable data structures help to avoid unwelcome side effects.

    = Functional reactive programming

    Functional reactive programming (FRP) promises to replace unstructured side effects by structured change propagation in response to user input, network events, sensor activity, and similar. Typically explained by way of sophisticated, but often also complex functional reactive programming frameworks, such as ReactiveCocoa and RxSwift, it can be difficult to see the simple principles underlying functional reactive programming. In fact, these principles are sufficiently simple that we can explain them by building a functional reactive programming library from scratch.

    We will discuss how we can construct our own lightweight functional reactive programming library out of simple components using Swift’s support for protocol-oriented programming. Moreover, we will discuss how to use this library to design and implement the change propagation between the model and view components of a Cocoa app. 

    All of this is illustrated with hands-on coding exercises based on simple iPhone application that incorporates the discussed techniques.

  • Liked Eric Torreborre
    keyboard_arrow_down

    Eric Torreborre - Practical eff monad for micro-services

    Eric Torreborre
    Eric Torreborre
    Senior Software Developer
    Zalando
    schedule 8 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.

  • Liked Pushkar Kulkarni
    keyboard_arrow_down

    Pushkar Kulkarni - Power extreme: Algebraic data types and pattern matching

    Pushkar Kulkarni
    Pushkar Kulkarni
    Software Developer
    IBM
    schedule 2 months ago
    Sold Out!
    45 mins
    Talk
    Beginner

    Computer programs may be simplistically viewed as an interplay between objects of given types based on operations defined on the types, and conforming to the laws on those types. The types may be as fundamental as an integer or as complex as an abstract syntax tree in a compiler. Compound types are defined using other types, or recursively too, using an algebra. Hence the name algebraic data types

    The two major operations when working with algebraic data type are construction and deconstruction. Construction is achieved simply through constructors! Deconstruction is achieved by what is generally referred to as pattern matching - a powerful technique that may be applied for all kinds of processing of an object of an algebraic type. A talk on algebraic types is incomplete without dealing with the concept pattern matching.

    This session proposes to take the audience through the implementation of a simple LISP interpreter in Swift to help appreciate the theory around Algebraic Data Types (ADTs) and pattern matching - both of which are language features in Swift. In Swift parlance, ADTs are referred to as tuples (product types) and enums (sum types).

    The session is targeted to enable the audience completely appreciate the Wikipedia definition of an ADT: "A general algebraic data type is  possibly a recursive sum type of product types". The objective is to show that thinking in terms of algebraic types is a crucial part of the larger paradigm of functional thinking.

  • Liked Aaron W Hsu
    keyboard_arrow_down

    Aaron W Hsu - Design Patterns vs. Anti-pattern in APL

    45 mins
    Talk
    Intermediate

    APL is a notorious language with a reputation for being "write only" and difficult to learn. Yet, many people consider APL to be their single most productive, advantageous tool that they hope never to give up. In particular, it is generally observed that many computer scientists have a poor opinion of the usability of APL, while many data scientists and domain experts find the language to be exceptionally usable.

    This session focuses on the experienced programmer's struggle to gain real facility with APL beyond the basic, trivial understanding of its semantics and syntax (which can be taught in a few hours). We will observe this struggle through a "human-centered" experience analysis identifying a set of Pattern/Anti-pattern tensions that are at the heart of the intermediate APL learning "wall." By examining the experience of thinking and working with APL code versus regular code, we can identify principles of APL coding practice that directly oppose the widely taught and embraced best practices of the broader programming community. We'll see not only what these principles are, but also why they survive in APL and how they contribute to the positive development cycle of an experienced APL programmer, instead of the negative impact such practices usually have when writing in other languages.

    Understanding these practices will provide a focus point for the discussion of programming experience design and the use of concise array language, as well as provide a structure for becoming better able to write, read, and think in APL expert.

  • Liked Pranav Rao
    keyboard_arrow_down

    Pranav Rao - Erlang and Akka Actors - A story of tradeoffs

    Pranav Rao
    Pranav Rao
    Software Developer
    Amazon
    schedule 2 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    The Actor model has long been known to be great at modeling concurrent and parallel problems in a declarative, safe way. The challenge has always been the cost of this abstraction - implementing cheap message passing over a shared-nothing memory architecture while ensuring fairness is a tough ask. In this talk I shall go over how BEAM, with it's three decades of esoteric telecom engineering differs from Akka actors implemented over the JVM, arguably the most invested general purpose VM in existence today.

    Along the way, we shall discover how design decisions affect performance at each step of a program's execution - from a global/per-process heap affecting GC latencies and throughput, a type system's effects at efficiency, to preemptive scheduling improving long tail latencies.

  • Liked Naresha K
    keyboard_arrow_down

    Naresha K - Beyond Lambdas & Streams - Functional Fluency in Java

    Naresha K
    Naresha K
    Agile Coach
    AgileFAQs Tech
    schedule 4 months ago
    Sold Out!
    45 mins
    Demonstration
    Intermediate

    Java 8 opened the doors for the developers to leverage the power of functional programming. Developers can apply techniques such as higher order functions, composition, and laziness with lambdas, and streams API introduced in Java 8. However, we would soon hit the limits if we extensively use the functional style of programming. In this demo, I will start with the examples that will show such limitations, and I will use a library called "Vavr" to overcome the limitations of Java 8 and bring in additional functional programming techniques that are not readily available in Java 8 language. My goal is to convey how to write fluent functional programs in Java without falling back on the conventional object-oriented techniques to fill the gaps.

  • Liked Aloïs Cochard
    keyboard_arrow_down

    Aloïs Cochard / Tony Morris - Introduction to Functional Programming using Haskell

    Aloïs Cochard
    Aloïs Cochard
    Computer Science Research
    Orexio / Swisscom
    Tony Morris
    Tony Morris
    Senior Functional Programming Engineer
    Data61 / CSIRO
    schedule 2 months ago
    Sold Out!
    480 mins
    Workshop
    Beginner

    We will be spending the day learning the fundamentals of Functional Programming (FP) using the Haskell programming language. The exercise material will be a condensed selection of the NICTA/course which is regularly held in Australia over three days.

    This one day session is targeted to experienced industry programmers who are looking to break into Functional Programming and develop the rudimentary skills and techniques that enable continued independent study. A refresher on Haskell syntax will be provided, however, it is highly recommended to practice with the syntax and development tools prior to obtain the best outcome for the day.

    You will be required to bring a suitable development machine (portable) for working through the exercises. You will also need to install Glasgow Haskell Compiler (http://www.haskell.org/ghc/) version 7.8 or higher on that machine prior to the day.

  • Liked Abhiroop Sarkar
    keyboard_arrow_down

    Abhiroop Sarkar - Wormholes and teleporting with Transient.

    Abhiroop Sarkar
    Abhiroop Sarkar
    Student
    University of Nottingham
    schedule 4 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    The transient library in Haskell/Eta composes arbitrary pieces of software in concurrent, parallel and sequential settings using standard Haskell/Eta combinators like applicative, alternative, bind etc. It provides algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions and multithreading

    It liberates the programmers from dealing with state machines, objects frameworks, routes, configurations and callbacks. Transient expresses business functionalities as compact category theoretical expressions which compose. These compositions are verified during compilation, although the code might be executing in different machines.

    It presents a fresh new approach to programming concurrent and distributed systems.

     

  • Liked Mushtaq Ahmed
    keyboard_arrow_down

    Mushtaq Ahmed / Unmesh Joshi - Service Discovery using CRDTs

    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 Jayaram Sankaranarayanan
    keyboard_arrow_down

    Jayaram Sankaranarayanan - A peek in to Elm Architecture

    45 mins
    Demonstration
    Beginner

    Elm Lang changes the way UI is built and brings in reliability , robust architecture and functional principles as an alternative to JavaScript and numerous JavaScript frameworks.

    In this session, attendees will be introduced to the basics of functional programming principles, using the Elm lang constructs, the Elm Architecture and how Elm enables easy and reliable refactoring.

  • Liked Bryan Hunter
    keyboard_arrow_down

    Bryan Hunter - Poka yoke: Mistake-proofing via Functional Programming

    Bryan Hunter
    Bryan Hunter
    Software R&D
    LeanFP
    schedule 4 months 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

    Bryan Hunter - Elixir by the Bellyful

    Bryan Hunter
    Bryan Hunter
    Software R&D
    LeanFP
    schedule 4 months 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.

  • Debasish Ghosh
    Debasish Ghosh
    Consultant
    IRadix Inc
    schedule 3 months 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.

  • Liked Chaitanya Chalasani
    keyboard_arrow_down

    Chaitanya Chalasani - High Performance Data Mart using Event Plots

    20 mins
    Demonstration
    Intermediate

    Reporting data for finite state machine transactions like calls require exhaustive data mining into 10s and 100s of parameters for 1000s of calls per hour. These postmortems require heavy processing and can demand millions of maps per reduction. The presentation is a case study and demonstration of near-realtime asynchronous event processing based plotting of events and states of FSMs. Thus creating semi-cooked event plots delivering lightening fast reports with extensive customizability.

  • Liked Ryan Lemmer
    keyboard_arrow_down

    Ryan Lemmer - Haskell Design Patterns

    Ryan Lemmer
    Ryan Lemmer
    Programmer, code-coach
    Independent consultant, Cape Town
    schedule 4 months ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    In this workshop we explore several areas of advances that make up Modern Haskell.

    (This is an experiential workshop, we will code together, and explore ideas together from first principles. You will need GHC 7.10 and up.)

    Patterns for IO

    Experience the 3 styles of IO programming in Haskell, in the order in which they evolved:

    * imperative style (the status quo)
    * Lazy IO and its limitations
    * Iteratee IO, the solution to Lazy IO

    As we compare the different styles, we will pay attention to

    * what controls evaluation
    * space and resource management
    * the relationship between producer and consumer

    From Foldable, Traversable to Lenses

    We follow the evolution of fold and map on lists, to their generalisation over arbitrary types with the Foldable and Traversable type-classes. 

    The Lens library raises Foldable and Traversable to an even higher level of abstraction. We will see how the Lens library gives a unified vocabulary for traversal of arbitrary data structures.

    Functor, Applicative, Arrow, Monad

    These data types fall on a spectrum of power and generality (Functor being the most general, and Monad the most powerful). By experiencing how these types differ in the way they compose, we can gain a clearer understanding of where and how each type may be used.

    Datatype Generic Programming (bonus material)

    This style of Haskell programming is based on a simple technique: instead of defining functions for ad-hoc types, we deconstruct our types into a more fundamental type representation, and then write generic functions against the lower-level type. These generic functions are impervious to changes in the original, higher-level data types.

    We will experience datatype generic programming from first principles, and along the way uncover the key ingredient in the magic sauce called GHC.Generics.

  • Liked Roger Hui
    keyboard_arrow_down

    Roger Hui - Proofs, Derivations, Tests

    Roger Hui
    Roger Hui
    programmer
    Dyalog Ltd.
    schedule 4 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    John Hughes and Mary Sheeran in Why Functional Programming Matters [0] list “algebra as a litmus test” as one of the four salient features of functional programming, and Ken Iverson in Notation as a Tool of Thought [1] lists “amenability to formal proof” as one of the five important characteristics of notation. Using the language APL, we prove the correctness of some programs, derive simplifications, and illustrate design validation and program test techniques for functional programs.

    [0] Hughes, John, and Mary Sheeran, Why Functional Programming Matters, Code Mesh, London, 2015-11-02 to -04.

    [1] Iverson, Kenneth E., Notation as a Tool of Thought, Communications of the ACM, volume 23, number 8, 1980-08.

  • Liked Gyanendra Aggarwal
    keyboard_arrow_down

    Gyanendra Aggarwal - A practical guide to GenStage with a real-life use case.

    45 mins
    Case Study
    Beginner

    Elixir GenStage is a very interesting abstraction (behavior) and can be used very effectively to solve many complex problems that fall under supply-demand/back-pressure scenarios. One can solve such problems by writing minimal amount of code by using GenStage. Come and learn in detail about the wonders of this abstraction with a real-life use case in Warehouse automation.

  • Liked Tamizhvendan S
    keyboard_arrow_down

    Tamizhvendan S - Demystifying Functional Programming

    Tamizhvendan S
    Tamizhvendan S
    Lead Consultant
    Ajira
    schedule 3 months ago
    Sold Out!
    45 mins
    Talk
    Beginner

    Because of some perceived complexities and the mathematical background in functional programming, the beginners get bogged down while learning and putting it into practice. As a matter of fact, few people give up after some initial attempts. But it is not as much harder as we think. It is just different!

    Together, let's experience a difference perspective of functional programming and get started in a better way