QCon is a practitioner-driven conference designed for technical team leads, architects, and project managers who influence software innovation in their teams.
Erik Meijer, TweetFounder at Applied Duality, Inc.
Biography: Erik Meijer
Erik Meijer is an accomplished programming-language designer who has worked on a wide range of languages, including Haskell, Mondrian, X#, Cω, C#, and Visual Basic. He runs the Cloud Programmability Team at Microsoft, where his primary focus has been to remove the impedance mismatch between databases and programming languages. One of the fruits of these efforts is LINQ, which not only adds a native querying syntax to .NET languages, such as C# and Visual Basic, but also allows developers to query data sources other than tables, such as objects or XML. Most recently, Erik has been working on democratizing the Cloud using Volta and preaching the virtues of fundamentalist functional programming in the new age of concurrency and many-core. Some people might recognize him from his brief stint as the "Head in the Box" on Microsoft VBTV.
Twitter: @headinthebox
Presentation: TweetContravariance is the Dual of Covariance Implies Iterable is the Dual of Observable (Making Money Using Math)
Every developer that has ever dealt with contra- and covariance in a modern OO language with generics, shivers with fear when they have to deal with these concepts in their code (except of course in Dart language, where all generic types are covariant).
Typically the solution is to click, click, click, click on the "suggested fix" by the IDE until the error messages finally go away. To add insult to injury, all this panic is for nothing since typically at runtime all generics are erased anyway, so all thus type torture really didn't matter in the end (except in .NET where generics is reified).
However, fear no more!
In this talk we will provide trauma recovery therapy for victims of variance by explaining the concepts from first principles using real world examples such as vending machines and garbage cans.
For additional fun, we will throw in some good old imperative side-effects and show how the simplest possible covariant type of getters ()=>T
and the simplest contra-variant type of setters T=>()
are essentially the same as Iterator[+T]
and Observer[-T]
.
Add a pinch of self-application on top of that, and we discover that Iterable[+T]
boils down to Iterator[Iterator[T]] = ()=>(()=>T)
and Observable[+T]
boils down to Observer[Observer[T]] = (T=>())=>()
. Lambdas all the way down, and all arrows reversed.
In case you wondered why Scala uses +T
for covariance and -T
for contravariance, and why a contravariant type in a contravariant position becomes a covariant type, well, that is all part of the magic of the Curry-Howard isomorphism, but we'll have to leave that for another talk.
The most amazing thing of all however is that companies like Netflix are powered by this exact duality in the form of RxJava. And after this talk, you too will know how to make money using math.
Training: Advanced Functional Programming Tweet
As evidenced by the inclusion of lambdas a wide array of programming languages such as PHP, Mathematica, JavaScript, Java 8, Scala, Clojure, C#, Visual Basic, Objective-C ... functional languages represent the leading edge of programming language design. In particular the pure and lazy functional language Haskell provides Petri dish-like setting in which new programming concepts are introduced and studied.
In this tutorial we will build upon the highly popular Channel 9 Functional Programming Lectures and focus on a number of more advanced topics in fundamentalist functional programming such as cata-, ana-, hylo- and other morphisms, monads, thinking with types, juggling with code, and show how these skills can be applied in making you a better hacker no matter what language you use in your day job.
This Training is Sold out
Training: Principles of Reactive Programming Tweet
One of the most hyped topics in our industry these days is "Big Data". After focusing on Volume, people are now recognizing that Variety and more importantly Velocity are as important, or in fact, even more important than just pure volume for application developers. All modern Desktop, Web and Mobile applications require sophisticated coordination and orchestration of asynchronous data and event streams originating from web services, UI elements, sensors, GPS, push notifications, etc. and hence developers need powerful tools to compose asynchronous data streams.
In this course, we'll examine how to apply Reactive Extensions (Rx) to manage and analyze events and real-time data streams and act on them in an asynchronous manner. This course will be largely hands-on and driven by practical and language independent examples using sample data sources from sensors, GitHub, Twilio and Netflix, and applying Rx to the Web via RxJS and HttpClient, as well as creating GUI apps using Rx.NET. We'll also look more data-analytical intensive, such as creating real-time data processing and aggregation of Twitter and stock streams in a clean, testable way.
Keywords: Big Data, velocity, streaming data, asynchronous programming, LINQ, complex-event processing, reactive programming.
Target Audience: Developers interested in real-time analytics over streaming big data and compositional event processing. Rx developers of all levels who would like to interact the inventor of the technology.
Requirements: We recommend attendees using Windows to install LINQPad and the reactive extensions for .NET and JavaScript from NuGet. For those on OSX and Linux, we would love you to play along using Xamarin Studio, using GitHub's ObjectiveC implementation, Netflix's RxJava, or Google's Dart. In case you do want to prepare yourself for this course, we recommend to have a look at Introduction to Rx. Knowledge of monads and category theory is not required.