Rewire: A new Approach to Dependency Injection in Elixir

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 situations. Before Elixir, I’ve mainly worked with Java.

How I Learned to Stop Worrying and Love the Job Hunt

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 tech scene.

26 Lessons From Being a Developer at a Startup

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 crucial.

3 years on Google App Engine. An Epic Review.

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 different when you look closer.

The Curious Case of the Merciless Compiler

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. And just like HAL the Go compiler is quite stubborn and - dare I say - merciless.

The hunt for an immutable, type safe data record in JavaScript

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 simple class in JavaScript.

Zero to Om - Act 6

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" :ref "newField" :placeholder "What needs to be done?" :onKeyDown #(enter-new-todo % state owner)}) (listing state) (footer state))))) As you can see, a dom/* HTML element receives a map of properties: #js {.

Zero to Om - Act 5

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, part 1 (defproject todomvc "0.

Zero to Om - Act 4

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 and handle state changes.

Zero to Om - Act 3

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 kind of state.