Join Newsletter

Joe Albahari

.NET Developer

LINQPad

Australia

Joe Albahari is an O’Reilly author and the inventor of LINQPad. He’s written seven books on C# and LINQ, including “C# 7.0 in a Nutshell”. He speaks regularly at conferences and user groups, and has been a C# MVP for ten years running.

Talks at YOW!

Neural Nets From The Ground Up - YOW! 2018 Melbourne

The best way to understand neural networks is to get your hands dirty and write one.

In this session, we'll start from scratch and invent a neural net that can recognize handwritten digits with over 98% accuracy. Without leaning on any libraries! From the bottom up, we'll discover gradient descent, activation functions and backpropagation, as well as the mathematics behind this fascinating machine learning technology.

We'll code entirely in C# in a lightweight IDE (LINQPad). And you'll get to keep the code!

Read More

Neural Nets From The Ground Up - YOW! 2018 Brisbane

The best way to understand neural networks is to get your hands dirty and write one.

In this session, we'll start from scratch and invent a neural net that can recognize handwritten digits with over 98% accuracy. Without leaning on any libraries! From the bottom up, we'll discover gradient descent, activation functions and backpropagation, as well as the mathematics behind this fascinating machine learning technology.

We'll code entirely in C# in a lightweight IDE (LINQPad). And you'll get to keep the code!

Read More

Neural Nets From The Ground Up - YOW! 2018 Sydney

The best way to understand neural networks is to get your hands dirty and write one.

In this session, we'll start from scratch and invent a neural net that can recognize handwritten digits with over 98% accuracy. Without leaning on any libraries! From the bottom up, we'll discover gradient descent, activation functions and backpropagation, as well as the mathematics behind this fascinating machine learning technology.

We'll code entirely in C# in a lightweight IDE (LINQPad). And you'll get to keep the code!

Read More

Pushing C# to the limit - YOW! Singapore 2017

C# is a language of breadth. At one end it allows low-level programming with pointers and lock-free synchronization; at the other end, it sports high-level features such as closures, expressions trees and asynchronous functions.

Which leads us to a challenge: can we write a non-contrived program that uses all of the above? The answer is “of course!”, and I’m going to walk you through a practical example: a high-speed communications library built on shared memory (and used in production!)

Come and join the author of C# 7 in a Nutshell and LINQPad in an advanced session, where we step outside the box and play with all of C#’s best toys at once.

Read More

Pushing C# to the limit - YOW! Hong Kong 2017

C# is a language of breadth. At one end it allows low-level programming with pointers and lock-free synchronization; at the other end, it sports high-level features such as closures, expressions trees and asynchronous functions.

Which leads us to a challenge: can we write a non-contrived program that uses all of the above? The answer is “of course!”, and I’m going to walk you through a practical example: a high-speed communications library built on shared memory (and used in production!)

Come and join the author of C# 7 in a Nutshell and LINQPad in an advanced session, where we step outside the box and play with all of C#’s best toys at once.

Read More

Solving the Hard Problem of Concurrency - YOW! 2013 Brisbane

Concurrency is notorious for creating complexity. I argue that the blame lies not with multithreading, mutability, or even shared writable state. The problem is one of separation: an inability to isolate concurrency logic from application logic. The cause of this inability is twofold. First, we tend to overlook the distinction between concurrency concerns and time-based concerns. Consequently, we end up with too much (complex) concurrency code and not enough (simple) temporal code. Second, there’s been a historical lack of abstractive power in mainstream programming languages. To isolate structured and unstructured concurrency, we need a language that supports type amplification, futures and time travel. The good news is that a mainstream language now supports all three: C# 5.

In this session, I will explain these concepts, and demonstrate how C# 5 simplifies asynchrony and concurrency.

Read More

Solving the Hard Problem of Concurrency - YOW! 2013 Sydney

Concurrency is notorious for creating complexity. I argue that the blame lies not with multithreading, mutability, or even shared writable state. The problem is one of separation: an inability to isolate concurrency logic from application logic. The cause of this inability is twofold. First, we tend to overlook the distinction between concurrency concerns and time-based concerns. Consequently, we end up with too much (complex) concurrency code and not enough (simple) temporal code. Second, there’s been a historical lack of abstractive power in mainstream programming languages. To isolate structured and unstructured concurrency, we need a language that supports type amplification, futures and time travel. The good news is that a mainstream language now supports all three: C# 5.

In this session, I will explain these concepts, and demonstrate how C# 5 simplifies asynchrony and concurrency.

Read More

Solving the Hard Problem of Concurrency - YOW! 2013 Melbourne

Concurrency is notorious for creating complexity. I argue that the blame lies not with multithreading, mutability, or even shared writable state. The problem is one of separation: an inability to isolate concurrency logic from application logic. The cause of this inability is twofold. First, we tend to overlook the distinction between concurrency concerns and time-based concerns. Consequently, we end up with too much (complex) concurrency code and not enough (simple) temporal code. Second, there’s been a historical lack of abstractive power in mainstream programming languages. To isolate structured and unstructured concurrency, we need a language that supports type amplification, futures and time travel. The good news is that a mainstream language now supports all three: C# 5.

In this session, I will explain these concepts, and demonstrate how C# 5 simplifies asynchrony and concurrency.

Read More