Erlang Camp Amsterdam: why you should follow it and getting started with Erlang and Axiom

by Tom 17. May 2013 11:36

Introduction

The last two days of August there is a 2 day Erlang course in Amsterdam. One of the most incredible things, is that there is a low cost offer sponsored by Spil games that reduces the price to 55€ for both days; talk about a steal!!

First things first: why should you follow a camp on Erlang?

People who know me in person know that I am an avid fan of Erlang, even though I have only done some very small experiments with it.

Even if you are not planning on developing something in Erlang, you should at least try to grasp the basic concepts!!

You want to know why? Here is why:

Opinionated - but proven - architecture

Today's world of always connected web-apps, is much more similar to the telecom world then the web-apps from a few decades ago. People are currently continuously connected, and they expect almost-immediate responses.

As you can imagine, designing a proper software architecture for this takes a lot of time, but this is one of the parts where Erlang excels:

All the time you spend on building infrastructure for a well-designed application can be simply skipped. Erlang offers a very opinionated but proven tech stack that implements this for you out of the box, including things like messaging, local and distributed persistent storage, supervisor processes, ...

Next to this it also does not care on which machine a process runs;there is no extra implementation cost to run your process on multiple machines. (cloud anyone?)

The actor model

Actors are the "mode du jour" when it comes down to development buzzwords, but they happen to work pretty good in distributed environments. The whole Erlang infrastructure is built around processes communicating to each other with mailboxes per process, and they to offer selective receives and timeouts in a pretty straightforward way.

Because the VM is custom built for this platform, it has some extra things other VM's do not have, like soft-realtime processing and per-process garbage collection. The VM is optimized for the actor model.

Productivity

Erlang has a bit of a quirky syntax due to it's origins (Prolog), so it takes some getting used to the difference between ending a line with a semicolon, a comma or a dot. While this might seem odd, it comes naturally after a while, but it takes some persistence.

Next to this, Erlang has pattern matching (a little bit comparable to polymorphism in OO languages, but it even goes way further then that).

They even have something like generics using behavior.

More...

Freedom: Learning stuff, doing consulting, aka the fun - and money balance

by Tom 30. March 2013 00:55

Introduction

As I was wide awake at 5am this morning, and it was the end of the month, I decided to do some invoicing (while the Mrs. & kids are still asleep ;) ).

Because I had some time left, I decided to take a look at my stats... This invoice app was built about 10 years ago in MsAccess in a few days, and has not really changed a lot since then (except for some adjustments to allow certain billing specific extents; things like non-EU or VAT-exclusive stuff, as well as some automated payment reminder letters).

Anyway, that is not the subject of this post, but as I was browsing some of my available graphs - it has been a few months since I did that - , I decided to write a small blog post about my findings.

I will start of with what most of you will probably consider quite a controversial thing; I will just post a *slightly censored* graph of my invoices cumul over my years as a company owner. ..

LOL, that looks odd...

There are a few things you might notice here:

  • That is not a regular income at all.
  • When I do have a good year, the line looks really steep (f.e. look at the yellow line from this year).
  • Looks like I have a good year every n years.
  • It looks like the steepness of your good years is increasing
In other words: what are you doing here? Let me explain my process...

Tags:

Development

Opinion: TDD and startups - you are all wrong (or right)

by Tom 6. March 2013 00:06

Introduction

There has been a lot of buzz lately about a post of Uncle Bob Martin, who claims that skipping Test-driven design is the worst mistake you can make when in a startup. This generated a lot of yay-and-nays on the twitter sphere, with mostly black and white opinions. I think they might all be right, but miss one important distinction: you always need to formalize what you are working on...

"So what" - Miles Davis

In my opinion, you need something to drive your behavior of your app, or as you put it in the context of startups, you need something to drive your search for a market fit. So while TDD might provide you "better" code in the end, it is not the code that matters, it is the behavior of the code that is all important. TDD for a startup should help you to reason about that behavior, i.e. what exactly are you trying to achieve.

Defining in an explicit way what (and even why) you are going to do something before you do it, allows you to:

  • focus on your task
  • define scope
  • reason about it in a strategic way

If you are able to reason about what you are about to do in another way, please feel free. I can think of at least 5 ways to define what you are doing:


So, whatever comes naturally to you might be the best fit. The most important thing is making something explicit (aka "ze cunning plan"), as I have found out multiple times in the past: without a proper plan to support your vision, you are doomed to wander around in eternity, as you never have a proper definition of done and/or scope, or even priorities...

As a developer, the best fit for me is usually some kind of a bastardized combo of all the techniques mentioned above, even combined with some impact mapping or other DDD techniques...

On a sidenote: currently halfway into Vaughn's IDDD book, and this proves to be very helpfull as well, it's like Eric Evan's blue book, but written in a more accessible and pleasant way...

Conclusion

So in the end, what it all comes down to, is that you need a formal/explicit spec about what you are working on, whether that is a design doc, some unit tests or something else, does not really mather; just find out whatever fits your methods best.

Bookmark and Share

Saturday night 30 min brain dump - Luck

by Tom 2. February 2013 13:34

Introduction

Sometimes you get lucky, and find a way where you can truely do the things you like in work... But why does luck always seem to be distributed unevenly, and does it always land with the same people...

Here is a message for you: it does not! You can get lucky once by accident, but getting lucky multiple times seems to be quite impossible (not considering statistical anomylies).

So I decided to write a post with some lessons learned from my personal experience...

Be more receptive to luck

Let us begin with the first quote

“If opportunity doesn't knock, build a door” - Milton Berle

Simple, is it not; the reason some people are more lucky then others, is because they are willing to see the opportunities....

I will give you 3 more quotes to tickle your motivation on changing life, work, and all other things related to carbon-based lifeforms:

“The journey of a thousand miles begins with one step.”
"If you do not change direction, you may end up where you are heading."
“When I let go of what I am, I become what I might be”

- Lao Tzu

Here is the thing: people always want something, but are afraid to get out of their current comfort zone. If you really want it: stop making excuses and just do it! Ask yourself: what is the worst thing that could happen? Usually things are not that bad, and you can almost always find a plan B...

Millions of opportunities might fly by, but people tend to always find an excuse and somehow assume the worst-case scenario will happen so they talk themselves out of it...

This brings us to the next part... More...

Simplified Feature Branching - Source control done right

by Tom 1. December 2012 06:10

Introduction

As one does typically develop features in parallel, and some features can not be released while others can, a lot of software teams seem to have problems with their source control.

In this post I will describe Simplified Feature Branching usable with git or any other DVCS.

This model is not rocket science, and is a further simplification of Adam Dymitruk's post on feature branching.

It assumes you use proper release cycles and versioning during the software development lifecycle.

Whenever I mention "feature" in this post, I actually mean "feature" or "bugfix", but I am a lazy b*d.

The main idea: simplification

Make everything as simple as possible, but not simpler - Albert Einstein

Whenever things start to get complicated, we should attempt to simplify them by breaking it up into smaller parts. This is exactly what Simplified Feature Branching does. We make the distinction between branching and integration.

More...

How your personality type affects your development

by Tom 17. November 2012 00:08

Introduction

During one of my more recent interviews I got an assesment from two different persons. While I still have no idea about the definitive outcome, the different types of questions they both asked triggered me to think about what kind of personality type they would be, so I started wondering how personality types are related to development....

First things first: MBTI

Before we can determine the effect of your personality on your development, we will start by defining MBTI, so let us begin with the wikipedia definition:

The Myers-Briggs Type Indicator (MBTI) assessment is a psychometric questionnaire designed to measure psychological preferences in how people perceive the world and make decisions.

They do this by categorizing your personality in four dimensions; your gradation in every dimension is not a boolean, but rather a range (i.e. -1 to +1).

I will describe each of the four dimensions in detail, and explain how they impact your development:

#1 Attitude: "Extraversion" versus "Intraversion" (E vs I)

Attitude is about the way evolve an idea and get inspired: some get inspired by doing and experimenting, while others get inspired by thinking about things.

  • Development by people with high "Extraversion" is driven by
    • experimenting with code
    • evolving ideas in small incremental steps by talking with other people
    • doing things right
  • Development by people with high "Intraversion" is driven by
    • an internal thought process
    • thinking ideas through before talking about it with other people
    • doing the right thing

On a sidenote, "extraversion" is not a typo; it is the way you spell this word in MBTI terms.

More...

Fallacies of the tech recruitment process

by Tom 16. November 2012 08:49

Note: I would like to thank @gbarrs for reviewing my blog post almost instantly, and also the offer of @GraemeF, @MarkRendle, @swaggerdmangene and @moldyseaswimmer to be a reviewer. Without them, there would be a lot more Dunglish in this post...

Why I like my job.

I have been hooked into computers ever since I wrote my first few lines of Basic on my mothers' brand new TRS-80 Model 3 with 64Kb of ram and 2 - yes 2 !!! - diskdrives of a whopping 178Kb. (Actually, I did not write the code, but I copied it character by character from a textbook that might have looked like this, but in my defense, I was about 7 years old).

The first program probably looked like this:

10 PRINT "HI, WHAT IS YOUR NAME?"

20 INPUT N$

30 PRINT "HELLO, ",N$

Exciting, is it not? In the five years that followed, I learned almost every in and out of this machine, where to peek and poke in memory, how to set pixels on the screen (monochrome, 128x48 resolution, imagine that), which ASCII codes to send to my dot matrix printer to switch control modes, ...

When I was about twelve years old, I had written a drawing application, complete with circles, boxes, Bresenham lines, and even the possibility to print the graphics on the (very noisy) dot matrix printer (remember those printers which had to print on chained paper?).

More...

Continuous thinking: Essay: Ease and simplicity in software architecture

by Tom 31. October 2012 10:21

Introduction

“Almost all quality improvement comes via simplification of design, manufacturing... layout, processes, and procedures.” - Tom Peters

As I was tinkering around with Erlang/OTP and some other stuff, I suddenly experienced yet another "aha-erlebnis": there is a huge difference between something that is simple and something that is easy, but a lot of people tend to miss this rather important distinction.

More...

Getting started with Erlang and Nitrogen on Windows (in a single tweet)

by Tom 14. September 2012 10:58

All things are difficult before they are easy - Thomas Fuller

After spending quite some time trying to get an erlang/nitrogen instance running in windows, I finally managed to do it, and it turns out to be really simple once you know how to do it.

In fact, it is so simple, one can explain it in a single tweet:

Conclusion

When considering how simple it is, and looking back at my live blog post, my actions look a bit ridiculous, but not all is lost, as my discovery process somewhat helped me to get more acquainted with the whole Erlang story...

Bookmark and Share

Live Blogging: getting started with Erlang and Nitrogen

by Tom 13. September 2012 04:22

Note

This is an experiment where I try "live blogging": I blog as I get along further in the process... Feel free to comment/tweet during the process...

 

Introduction

As I had yet another idea for a startup, I fired up Visual Studio and started implementing a small demo...

However, the main feature that would elevate my example requires a lot of interaction, and quite frankly, interaction is a pain in web apps IMO, as there is still a mental shift between frontend and backend. For this particular thing I needed the distance to be as small as possible, so I started searching and found Erlang...

I will not go into the details why this looks like a perfect match, because I would like to build an MVP first, but I can tell you that it resembles the bee's knees at this current moment to me... So how do I get started? This is a walkthrough where I will post my progress... This post will evolve as I manage to get further....

More...

About Tom

Tom Janssens op LinkedIn

Tom Janssens op twitter

Core bvba RSS

 

 

Tom Janssens is an independent freelance ICT consultant that has been "into computers" ever since the age of 7.

Typing source code from a book evolved into exploring the limits of coding in procedural, assembly, object-oriented and functional languages.
As he matured in software coding, he started focusing on the problems surrounding software development, and learned that software development is usually about people and interactions first, and about technology second.

Due to his diverse track record he gained insights in a lot of aspects of the software development process. Currently his main focus is on strategic ICT advice, lean product/project development and improving the software development process and architecture.

He avoids ivory-tower-approaches by applying and verifying the applicability of the latest tech buzz in software experiments.

He is also the founder of the following LinkedIn groups:

CQRS Professional
BDD Professional
Asp.Net MVC professional

More info about Tom and his company...

**** Hire me ! ****

My current project will probably run till the end of August 2013. Feel free to contact me for a project later on.

I can work either in Belgium or via remote access!!!

You can find my resume here: resume.pdf .

Community contributions and publications: here .

Call me directly at +32 478 336 376


Advertisement

Forget all your SCRUM -, Kanban - and other Agile and Lean certificates

Here is the only true AGILE and LEAN certificate you will ever need:

The Creative Recursive Analysis Process Certificate
(CRAP Certificate for short)

More info can be found at the official CRAP certificate website:
http://bit.ly/CRAPCertificate