The Functional Internet of Things
We’re meeting on Monday 15th May at 7pm at MadLab to talk about how Functional Programming can be used to interact with the Internet of Things.
Our second confirmed speaker, Spencer Marsden (@spencermarsden) (a creative technologist at the BBC’s consumer technology showcase, the Blue Room) will give an overview of some of the exciting projects and technology he’s worked on.
We can still make time for one or two more speakers! could you get involved?
Perhaps you’ve written some dataflow based code on the Raspberry PI with NodeRED? Or you’ve been experimenting with Haskell and hArduino? Or have you been sneaking Functional concepts into C++ code on a PIC?
Whether you are enthusiastically tinkering on a hobby project, or have used these technologies in a successful enterprise, we’d love to hear from you!
We’re really keen to get a diverse range of speakers, from a wide range of backgrounds and experience, whether you’re a relative newcomer to functional programming, a veteran developer, or an academic, we always provide a warm welcome! See our call for speakers for more details or ping us at @lambdamcr!
Discovering the beauty of recursion and pattern matching
We’re meeting on Monday 20th Mar at 7pm at MadLab where DJ Adams will speak about one of the essential features of functional programming: recursion.
Elixir is a dynamic, functional language with Ruby-like syntax that runs on the Erlang virtual machine. With first class support for concurrency, scalability, fault tolerance and high availability, all courtesy of its Erlang roots, it can be described as the language for today's real time, hyper-connected world.
In this short introduction to Elixir presented by Chi-chi Ekweozor, learn how to use the ubiquitous pipeline operator |> to consume functions as data, pattern matching, modules, lists and other language constructs. Level up and get writing distributed software applications that go beyond the browser on to mobile and the Internet of Things.
** Please note: Hands-on Session **
This is a hands-on session, to follow along please come with a laptop with Elixir pre-installed. There are instructions for installing Elixir and Erlang on most operating systems on the Elixir-lang website.
To support the features that we need as programmers, text editors arrange textual data in rather different ways than we might expect from other text-processing tasks, where we commonly use strings and streams of characters.
We'll first look at some classic text editor data-structures like Lists of lines (vi, Atom), the Gap Buffer (Emacs), and then at purely functional data structures that fit better with functional languages - structures like Piece Tables (Abiword, Bravo), various sorts of tree (the infamous Xanadu, GtkTextBuffer) and Zippers (yi).
I'll be showing a few examples in Clojure, but the approaches are valuable in any language (I've done previous prototypes in Perl, Java, and Haskell!)
Deep learning has improved on the state of the art in several fields of machine learning, and is beginning to be used in commercial settings. This talk aims to provide a grounding in the core concepts of the topic, explore parallels with functional programming and introduce some promising recent research.
Traditional unit testing requires the programmer to manually generate test cases, which are highly specific but give poor coverage of the range of possible inputs.
Property-based testing is used to specify the behaviour of programs and assert the adherence of the implementation to the specification by randomly exploring the input space.
This talk introduces property-based testing FsCheck, an F# port of Quickcheck. The API will be introduced before being demonstrated in development of a simple regular expression engine, and used to check invariants for data structures.
The interactive REPL driven demonstration will try and provide a whistlestop tour of Clojure and its workflow, showcasing unique aspects of the language and its workflows. Depending on what people want to see, we can touch on topics ranging from macros and meta programming to interacting with Lisp at the REPL, using profilers to diagnose performance issues, tools such as Leiningen, nREPL, Paredit, or CIDER, or the concurrency options available to you such as futures, promises, agents, atoms and the Software Transactional Memory.
Or perhaps any other core language features such as protocols, multimethods, persistent data structures, lazy sequences, transducers, that I can talk about.
I won't be able to cover everything, but I'll try my best to give you a flavour of this practical language.
Spark provides a functional programming interface for building parallel, distributed data processing jobs. Jaakko will talk about what Spark is and how to set it up, whilst demonstrating examples of developing with Sparqk.
Pipes is a Haskell library based on a composable push/pull streaming abstraction.
Laziness is crucial for defining reusable algorithms which can be freely composed together, and most modern languages define an abstractions for lazy sequences such as Java 8 Streams and IEnumerable in C#. However laziness is problematic when streams are derived from resources such as file handles which are consumed incrementally and require prompt cleanup since streams hide the nature of the source from the consumer. This presents a risk of resource leaks if clients fail to consume the entire stream, or inefficient use of resources if the problem is avoided by consuming the entire stream eagerly.
This talk describes the abstraction defined by the Pipes library and demonstrates how it can be used to define reusable streaming components.
So, Haskell is "an advanced purely-functional programming language" which supports writing "declarative, statically typed code". It may be optimized for academic buzzwords you've never heard of but... is it any good for writing code in the way that you'd write Perl, Python, or Ruby?
Does Haskell have "whipuptitude" (being able to get things done quickly) as well as "manipulexity" (being able to manipulate complex things)? And perhaps most importantly, can writing Haskell be *fun*?
Learning by Doing: Beginning Clojure by Solving Puzzles.
DJ had this to say about his talk:
"I'm teaching myself Clojure, because awesome. In this talk, I'll relate some of my experiences in trying to discover how natives speak, by tackling puzzles in Project Euler and Advent of Code. If you're a Clojure beginner too, or even if you're not, this might give you some confidence in taking a similar journey; if you're more experienced, it might be a comedy half hour. Either way it will be fun :-)"
So come and join us for an interesting tour in applying a modern Lisp to classic computing and problems
Besides reducing the boilerplate for creating new monads, they allow customising how the monads are interpreted.
Jakko demonstrated what free monads can be used for in practice, as well as how the free monad itself is structured.
The code examples in Haskell can be applied to other functional programming languages as well.
We'll be meeting @madlabuk at the usual time of 7pm.
API endpoints in Servant are represented as types which ensures implementations conform to the definition and enables safe routing and automatic client generation.
The talk will cover how to use Servant to create web APIs, and examine some of the features of the Haskell type system which make it possible.
Show and Tell
The lambda lounge this Monday are doing a show and
tell. We'll meet at @madlabuk at 7pm
It's going to be a pretty informal round table
discussion, so bring something along to chat about that
you think will be interesting to the Lambda
Things you could bring...
- A cool book you've read on Functional Programming or Computer Science
- An interesting paper, you've read on Computer Science, Types, Functional Programming etc...
- A neat algorithm
- An awesome API you've found
- A blog article you've found interesting.
Ideally you should be able to talk about what you've brought for a minute or two. Feel free to bring as many things as you want to chat about - just try and keep them relevant to computer science and/or PLT.
Don't worry if you don't have anything to bring
- just come and join the conversations.
Adopting this pattern will free you to focus on the unique aspects of your problem.
The strategy was first described by Hadley Wickham with a implementation he wrote in GNU-R. With roots in Scheme and S, R is a statistical language and computing environment offering both functional programming features (first class functions, higher-order functions, and closures) and support for objects.Robin Gower, of Infonomics, is a data scientist with many years experience using R and he will be providing us with an overview of the split-apply-combine strategy and some live coded examples.
Application development with Purescript
There are also versions of Purescript in development that compile to Python and C++.
This Monday at the usual time of 7pm, Michael Jones will introduce the Rust programming language from Mozilla with an overview of the goals of the project, what has been achieved so far and a focus on some of the functional influences in the language.
Rust is a systems programming language, that is gaining traction. Its features include an innovative borrow checker, and many zero-cost abstractions to ensure type and memory safety.
We’re meeting at the usual time of 7pm @madlabuk, so we’ll see you there!
Some useful features of Elm are a Time Travelling debugger (which is remarkably similar to Bret Victors'), hot code swapping, immutability, Union Types, type inference and of course FRP.
We will be meeting at Madlab as usual.
This talk will then segway nicely into a talk by Andrew Kirkham on the advantages of using React for Clojurescript UI's via either Om or Reagent.
In our third talk Daira Hopwood gives an introduction to the cool things you can do with dependent types and how they can help you write safer code.
We still have room for another lightning talk so if you'd like to talk for ~10-20mins, we'd love to listen!
We'll look at how Clojure's affordances make it a natural language for simplifying the process of cleaning tabular data and converting it into linked graph data and how we're building an interactive environment for lay users to write purely functional programs.
As usual we'll be meeting at 7pm at Madlab.