I’ve been working with Elixir for 3 years full-time now and while I think it’s an exceptional language and development environment, the testing story always felt incomplete to me. Something was missing. In this post, I’ll explain what that is and how I attempted to fix it. Injecting Mocks While I strive to minimize the use of mocks, I find they are still quite useful in certain…
This is a story about finding a job as a senior software engineer in Toronto - with a twist: just having moved there from Germany. I was prepared. I had a plan. But it failed completely - at first. I had to adapt and learn. It was a roller coaster ride. I tell my story because it might help others learn from my mistakes. This is not meant as a bigger statement about immigration or the state of the…
In the last three years, I worked for a small B2B startup in Berlin. I was the first backend developer and joined the ride of growing it from 200 to 720 business customers, from $200K to $3.2M annual revenue and from 5 to 25 employees. The following lessons are a very simplistic, personal summary of what I have learned during that time. Nothing more, nothing less. Enjoy. (1) Retrospectives are…
For the last 3 years I worked on an application that runs on Google App Engine. It is a fascinating, unique piece of service Google is offering here. Unlike anything you’ll find elsewhere. This is my in-depth, personal take on it. Google’s Cloud (est. 2008) First of all, what is Google App Engine (GAE) actually? It is a platform to run your web applications on. Like Heroku. But…
In the movie 2001: A Space Odyssey the computer program HAL 9000 goes rogue, showing no mercy towards the space ship’s crew. That’s exactly how newcomers to the Go programming language must feel. Since its introduction in 2009, the language has produced gigabytes worth of online debate about its very opinionated philosophy. Since it is a statically-compiled language, it has a compiler.…
Ever since working with Scala’s case classes I was hooked on the idea of having a type safe data record that was also immutable. What’s not to like? It’s type safe and immutable (duh). So I wanted to see if I can get the same thing in JavaScript - the most mutable and dynamic language known to man. class Person { givenName; familyName; } This will serve as our starting point: a…
Welcome to our next act. Today we’re going to meet a few additional libraries that’ll help us write great Om applications. Let’s get started! As always, I strongly recommend reading the previous post first if you haven’t done so already. sablono In a previous post I showed you how the application’s UI is rendered: (dom/div nil (header) (dom/input #js {:id "new-todo"…
In this part we will have a closer look at the app’s build configuration and discover what it can do for us. The source code can be found on GitHub. Note: I strongly recommend reading the previous post first if you haven’t done so already. The Build Config The project’s build configuration is defined in project.clj. It is written in Clojure and looks like this: ;; project.clj,…
Until now the application is rather boring. It just displays data. But we want to actually use it! In this post we will take a look at how the app reacts (no pun intented) to user input. The source code can be found on GitHub. Note: I strongly recommend reading the previous post first if you haven’t done so already. Managing state is tricky. Each framework has its own mechanisms to detect…
In this third post we’ll take a look at how the app is initialized and rendered. The source code can be found on GitHub. Note: I strongly recommend reading the previous post first if you haven’t done so already. For increased comprehension we will jump through the two files and not go through them from top to bottom. The State Most applications, at least the interesting ones, have some…
In this second post we will look at actual ClojureScript source code, step by step. The source code can be found on GitHub. Note: I strongly recommend reading the previous post first if you haven’t done so already. ClojureScript 101 Before we dive in we’ll look at the philosophy of ClojureScript. Since ClojureScript is a Lisp dialect, it strips away most of the syntax you may know from…
This is the first part of a series of blog posts about Om. If you don’t know anything about Om, don’t worry! You’ll learn everything step by step. Here are the basics: Om is a ClojureScript interface to Facebook’s React. If that doesn’t ring any bells, again, don’t worry! NOTE: I just started learning React.js, ClojureScript and Om. So this is my way of trying…
Today I gave a talk at the BedCon here in Berlin. It introduced the audience to the fairly new programming language Go, created by Google. The room was packed, some people had to actually stand in the back. In case you missed it, here are my slides.
The brand new experimental macro feature in Scala 2.10 can be used in many interesting ways: writing concise test cases, generating serialization code inlining methods This article shows exciting new possibilities it opens up for teaching Scala. To quote one student: “This is so awesome … and fun!”. Exercises are a crucial part of the “Introduction to Scala” training…