Matthias Nehlsen

Software, Data, and Stuff

Welcome to my blog. I'm currently mostly interested in Flutter and Clojure, with a strong focus on an open source application called Lotti. You can find all my open source projects on my GitHub profile. Follow me to stay up to date with my latest work. I'm available for shorter or longer consulting gigs. Please do get in touch to find out more, either by email on my GitHub profile or via LinkedIn.


How I switched to Flutter and lost 10 kilos

Dear Reader, dear Friend Today's blog post is dedicated to Flutter and how it enables me to build finally what I've envisioned for years…


Introducing Lotti or how I learned to love Flutter and Buildkite

Since my last blog post, besides daytime work, I've been working on a rewrite of my data-driven journaling app (previously called Meins, now…


Building an intelligent journal in Clojure, Part 1

This is the first part of a series on how I built an intelligent journaling application that I use every single day - as a desktop…


Octopress to Gatsby

I started my blog back in 2013 using Octopress as a static site generator, generating a bunch of files that nginx would serve…


RIP grandma; meo progress & beta version

A couple of weeks ago I introduced meo , the intelligent journal that my beloved grandma inspired around two years ago. Since that blog…


Introducing meo - Thanks, Grandma!

I would like to dedicate this blog post to my grandma . She just turned 94. Happy birthday, Grandma, I love you. This is a perfect time for…


SystemD and Clojure

Oh hey, I'm back. Been a while. Today, I want to share with you how I'm using systemd to start my Clojure applications on matthiasnehlsen…


Systems Toolbox Example

Today, I have another sample application for the systems-toolbox library for you. This application measures roundtrip times of a…


Building a System in #Clojure - Where are the Updates???

TL;DR: I've been developing a library for building systems, and it has already made the codebase of the BirdWatch application much simpler…


Optimizing my Workspace - Hardware, Software, Ergonomics

So within the two weeks, I spent a fair amount of time with something that should seem fairly obvious to someone who uses computers a lot…


Dear Apple, Get Your Act Together

This is a rant. I've been having issues with my Retina MacBook lately, to the point where I am craving a Linux-based laptop. But there are…


Progress with “Building a System in #Clojure”: new Feature

Most of this week, I was working on the client-side codebase of my BirdWatch application in order to remove the hairball in its…


Progress with “Building a System in #Clojure”: Hairball Removal

I’ve been struggling with finishing the next chapter of my "Building a System in Clojure" book. I tried to explain and draw the client…


Happy Holidays and Thanks for Reading

Last week, I published the very first version of my "Building a System in Clojure" book. I’m thrilled by the amount of interest it has…


I'm writing a book about Building a System in Clojure

I thought about where to take my series about Building a System in Clojure next and realized that I don't like the format of a blog…


Weekly Update: Clojure eXchange, next steps in BirdWatch, Clojure and me

Last week was great. I had just come back from my trip to the United States the week before, where I attended the Conj and got to hang out…


A farewell note to a programming language

Dear Scala, Do you remember how we first met, back in 2012? I thought your functional approach was fresh, and different. For a while I…


Inspect - println no more

TL;DR : I realized how much I disliked the process of logging data structures to the console and then trying to find them and repeatedly…


Building a System in #Clojure Part 4 - Inter-process communication with Redis

Last week , I drew a picture of how I wanted to break apart a monolithic application and instead run different parts of the application in…


Building a System in #Clojure Part 3 - Redesign

I recently did a lot of transcript proofreading concerning enlightening talk for my talk-transcripts project . The most recent one was…


Weekly Update: Talk Transcripts, Clojure Architecture, OS X Yosemite

As I have no other article to publish this week, I thought a weekly update would be in order. Last week I wrote about making relevant and…


Talk Transcripts: Rich Hickey, David Nolen & more

TL;DR: I wanted to study the content of some talks in written form but there were no transcripts available. However, I believe that the…


Building a System in #Clojure 2 - Transducers

TL;DR: This article covers the usage of Transducers in Clojure, spiced up with some core.async . Here's an animation that shows the…


Weekly Update: Staging server for this blog

This weekly update is mostly about organizational issues with regard to publishing articles and getting feedback for unfinished articles…


Building a System in #Clojure 1 - Overview

This is the first of n articles about building systems in Clojure . Clojure is a beautiful language and I have been fascinated from the…


Weekly Update: Clojure and Dependency Injection, Animations reloaded & freeing my SSD

This weekly update is mostly about my new article series, about using animations to explain complex topics and about how I just extended the…


Weekly Update: Clojure, Clojure, Clojure and a nasty cold

In this weekly update, I will just give you a very brief update on what I've been doing. Most notably, I have refactored the Clojure…


Weekly Update: PageSpeed Insights, optimizing Octopress & more Clojure

In this weekly update, I will discuss how I turned the load times for this Octopress -powered blog from terrible to pretty decent . In…


Weekly Update: Pomodoro, all-Clojure BirdWatch, Income

In this weekly update, I will be talking about why I started this blog in the first place, Pomodoro time management , and the new…


Weekly Update: AngularJS book, BirdWatch and Clojure, Web Components, Upstart and Play

In this weekly update, I will be talking about Clojure and ClojureScript , an upcoming article on AngularJS, Grunt, Karma and Protractor…


Weekly Update: git vs brain fart, Octopress, Sony A7, my audio setup

In this weekly update, I will show you how git helped me alleviate the disastrous consequences of a brain fart . I will also share my…


Weekly Update: AngularJS book, Geo-Lookup, Reading

I have mostly kept myself busy with AngularJS this week. Then, my geo-specific link shortener generated its first contribution to…


Building a geo-aware link shortener with Play Framework

Last week I wrote about blog monetization through the Amazon Affiliate Program . I needed a way to serve country-specific URLs depending…


Weekly Update: Buying time, AngularJS Meetup, Mountains

Here's something new to try: a weekly update, covering pretty much of what I keep myself busy with. That may be about what I am reading…


BirdWatch with ClojureScript and Om explained

ABANDONED because of writing an all-Clojure version instead, not just ClojureScript on the client side. Last update on August 18th, 201…


BirdWatch client using ClojureScript and Om

Back in January I wanted to try out Om . Now, I finally got around to doing so. For those of you who do not know, Om is a ClojureScript…


New AngularJS Meetup in Hamburg

Hamburg is the second largest city in Germany, and as such it really should have an AngularJS Meetup . It hasn't had one until now, so I…


Distributed Atmospheric Pressure Measurement

Later this month, I'll be going on a hiking tour in the Alps around the Matterhorn . I do not recall exactly why I said yes to this tour…


Updated Approach

So, I have recently suffered from writer's block. Well no, that's not exactly true. The problem was not getting started with a topic, but…


Play Framework, Server Sent Events and Internet Explorer

Next week I will be presenting at Scala Days . In my talk I will discuss how to build reactive applications with two-way (near) real-time…


BirdWatch: AngularJS vs. ReactJS

Summary: In this article I will present a new version of the BirdWatch application that uses ReactJS on the client side instead of…


ElasticSearch 1.0.0 - Breaking Changes

ElasticSearch 1.0.0 is out, hooray! Great stuff, congrats to everyone involved. Not that I had any complaints about v0.9 , but still, this…


Scala.js and ReactJS

In this article I will present a simple reactive web application using Scala.js and ReactJS on the client side. It is based on sse-chat…


Play Framework and Facebook's React library

Over the holidays I discovered Facebook's React , an interesting library for generating reactive user interfaces. I wanted to try it out in…


New Year's Resolution

I never really thought much of New Year’s resolutions because I could never live up to them. 2013 was different though. One year ago my…


HTML5 Template with Live Reload and 100/100 PageSpeed

A few weeks ago I started working on the follow-up to my BirdWatch project. This new project is another single page application based on…


Using Crossfilter with AngularJS

So far I have found my BirdWatch application nice to look at but not terribly useful as an original way of finding information. Let's face…


BirdWatch explained

BirdWatch is an open-source reactive web application that consumes the Twitter Streaming API for a selection of terms. It processes…


BirdWatch v0.2: Tweet Stream Analysis with AngularJS, ElasticSearch and Play Framework

I am happy to get a huge update of the BirdWatch application out of the way. The changes are a lot more than what I would normally have…


Transforming Log Events into Information

Last week I was dealing with an odd behavior of the chat application demo I was running for this article . The issue was timing-related and…


Follow-Up: AngularJS and Play Framework

This is the follow-up on last week's article about AngularJS and Play Framework . I want to share with you the problems that I encountered…


AngularJS and Play Framework

I felt a sudden urge to write a chat application during Scala Days . Writing the server side code in Scala was fun and only took like…


Scala Days 2013

Scala Days 2013 are starting at Hudson Theater in New York City today, with a very promising lineup of presentations. Unfortunately I won't…


Scaling Play applications with ZeroMQ

Let us assume for a second that the BirdWatch application needed to handle more load than a single server could handle. The current…


Making BirdWatch Interactive

Some weeks ago when I started working on the BirdWatch project, I basically wanted to play around with Iteratees and stream information to…


D3.js and Play Framework: Getting Started

Data without visualization is dull. This is particularly true for changing data. We seem to be much better at noticing moving things than we…


Load Testing Server Sent Event Streams

Server Sent Events (SSE) turned out to be a great choice for what I am trying to achieve . Let's review that quickly. I want to transmit…


Server Sent Events vs. WebSockets

So far I have been using a WebSocket connection to push data to the client in the BirdWatch application, with mixed feelings. WebSocket…


ReactiveMongo 0.9 and Lossless Persistence

Initially I parsed the Tweets in the BirdWatch application into instances of a Tweet case class upon ingestion and then used that case…


Iteratee: can I have that in a sentence?

A couple of weeks back I was trying to wrap my head around Iteratees so I read what I could find on Google. Afterwards, I had a very high…


Hello World

Who am I? My name is Matthias and I had my first computer before I had my first bike. I've spent most of my career working in IT project…