This blog has been migrated

by Tom 22. June 2013 08:23

As this was a rather old platform I have migrated it to a new platform and url; you can find all the old and new content here:

Bookmark and Share

Tags:

Open brief aan de Belgische overheid: hoe los je de crisis op

by Tom 11. June 2013 03:59

Introductie

Ik zag net een tweet verschijnen van Karel Van Eetvelt - de CEO van UNIZO -, dat het niet goed gaat met de Vlaamse werkgevers

Eerlijk gezegd is dit niet de eerste keer dat ik dit hoor, maar ik heb de indruk dat de crisis nu pas nog maar echt aan het beginnen is... Normaal gezien zou een overheid hier dan moeten ingrijpen in de mate van het mogelijke, maar jammer genoeg worden mijns inziens in België/Vlaanderen steeds de verkeerde beslissingen genomen door de overheid.

Wat is het probleem met de Belgische overheid?

De overheid is log, traag, en wordt steeds ingewikkelder en ondoorzichtiger. Tot de jaren 80 kon een bedrijf zich nog wel permiteren om zo te functioneren, maar vanaf de jaren 90 moesten bedrijven zich langzaam maar zeker flexibeler en transparanter opstellen, zodat ze sneller en beter op de markten konden inspelen. Voeg daar nu nog de snelheid en mondigheid aan toe die de laatste jaren opmars aan het maken is - denk maar aan social media -, en ik hoef het geen drie keer uit te leggen dat bedrijven alsmaar sneller op trends en evoluties moesten reageren.

Wat heeft dit tot gevolg voor een bedrijf: overal waar zaken te traag of te onflexibel waren, heeft men dit probleem aangepakt, en is men de zaken stap voor stap gaan vereenvoudigen of optimaliseren, of om het met een quote te zeggen: "Optimize for happiness": verwijder alle rompslomp en overbodige zaken, en automatiseer saaie zaken waar mogelijk.

More...

Installing and compiling Elixir and the Dynamo web framework on Windows

by Tom 9. June 2013 01:57

Introduction

People following me on twitter noticed I got entangled in yet another new language for the Erlang/BEAM VM: 

Elixir could be easily described as "ruby for the BEAM/Erlang VM". In previous posts, I mentioned why people should learn Erlang, but in fact, I think most people might be better off when they skip Erlang and opt directly for Elixir. It has all the advantages of Erlang, but offers a Ruby-like syntax, macros, polymorphism and more.

As someone else made a perfect blog post on why you should learn Elixir, I will not elaborate further on it in this post. Read his post; the info is all there.

As usual, you can find more info about Elixir on Wikipedia , or on the Elixir site.

In this post, I will show you how to get started with Elixir and generate a template website using the Dynamo web framework.

Installing Elixir is simple, but because one of the Dynamo web framework dependencies requires the make tool, you need to do some extra work. If anybody finds a better/simpler way to do this, please let me know in the comments.

More...

How to hire a senior developer

by Tom 29. May 2013 22:59

Introduction

A little while ago I wrote a post the fallacies of the tech recruitment process. While it is nice to point out what is wrong, I never actually provided the proper way to find out if a senior developer might be experienced enough and the right fit for your company, so this time I decided to put my money where my mouth is, and tell you how to hire a senior developer.

Why hire a "senior developer" and what is a senior developer exactly

In my opinion, a senior developer is a developer who manages to think out of the box, and who does not stop reasoning about finding a solution at technical boundaries. A senior developer is somebody who tries to provide business value for every single step he makes, while a junior is more or less focussed on implementing the whole thing, a senior thinks about what he has to do and why he has to do it...

A senior can be tens to hundreds of times more productive business-value wise then a junior.More...

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

IDDDtour 2013 Belgium - an immersive experience

by Tom 1. May 2013 00:36

Introduction: what & how?

"Implementing Domain Driven Design" is a book written by Vaughn Vernon, and you can consider it a practical guide to the blue book - a lot of people consider the blue book to be used as a reference, but it takes some persistence to read it -. Vaughn tried to solve exactly that problem with his book...

A little while ago, Vaughn Vernon was tweeting about how had given a free course about his book "Implementing domain driven design" while visiting Bogota, Columbia. This course was given for free to help start-ups there.

In the next few hours after this tweet, an idea emerged on twitter about a concept called the IDDDtour, where Vaughn would be teaching his book to larger classes and doing a tour through Europe, but at a fraction of the cost. As I am somebody who is more of a head first kind of guy, I decided to take ownership and figure out a way to make this a real thing...

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

Fixing corrupt downloads with your ISP

by Tom 17. March 2013 05:03

About 3 days ago my internet connection with telenet started being really slow, and gave me corrupted downloads if files were larger then a few megabytes. Every file I tried to download gave me corrupt files.

As this problem appeared on 4 different PC's simultaneously, I knew the problem was not related to a specific PC configuration.

As one of my PC's was wired (through a router), and that one was not working either, I decided to shortcut the router, and connect directly to the telenet router (without my own router), and that seemed to work.

So the problem had to be located within my router. After checking the logs and upgrading the firmware, the issue still remained, so I started looking around on the net.

After some browsing I found the cause of my connection problems; apparently telenet lowered the MTU? UPDATE: lowering my MTU might work...

What's MTU?

This would bring us down to networking, and layer 2, the data layer, but I assume wikipedia can explain it way better (here).

What it comes down to is that large packages on the network fail, so you need to find out how large your packages can be when you send them over the network.

How can you do this?

First of all you have to find out your MTU setting of your router; it's probably at 1500 for cable or 1492 for DSL. Next you have to find the size that works with your provider. For now I settled on a size of 1200.

You can find out this size by doing the following (min is at 500-something AFAIK):

start a command window and start pinging with a packet that can not be separated (IPv4 only, BTW):

You get the picture I presume.

After finding the matching packet size, you should set the MTU in your router to your value; problem solved...

Update: 

While my big downloads now are fixed, @dvaneven mentioned his internet with the same provider still worked on MTU 1500, so I think I probably might need to replace my router.

For now my workaround works, but I will buy another router ASAP.

Update 2:

I installed another router... problem solved !!

Bookmark and Share

Tags:

Howto

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

An open letter to Mr. Murphy

by Tom 23. February 2013 01:35

 

Dear Mr. Murphy,

Pssssssssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhtt !!!!

... That was exactly the sound I was hearing when I got up early this Saturday morning (6.30AM'ish).

 

In the last months I have been billing on average about 9 to 10 hours per day for my customer, and those hours do not include my 30 to 60 minute lunchbreaks and my 3 to 5 hours spent on commuting when I decide not to sleep over, so you can imagine my time for doing things on the side is rather scarse at this moment.

 

During the weekends, I am usually at one/both of my son's soccer matches, or getting back on track with my family and some friends, which I do not see during the week.

 

I still have 2 books to finish and review/write a blog post about it, and have not been able to do this just yet.

 

Today is Saturday, and I need to be at my parent's by 8.00AM where we meetup to disassemble, transport and temporarily store my brother's new kitchen they will use after their renovation. This will probably take the whole day, so I decided to get up at 6.30AM, because I wanted to answer some mails today. (Knowing myself, I will probably not be any the mood for this tonight anyway, as we will probably have a night out with the "kitchen disassembling crew".)

 

So I got up at 6.30AM, ready to get started on these mails, as I heard a slightly disturbing sound... "PSSSSSSSSSSSSSSSSSSSSSSSSSSHHHHHHHHHHHHT"; a continuous hiss.

As we do not have any gas plumbing in the house, I was not exactly afraid of explosions, but it was slightly disturbing nevertheless, so I went searching for the source of the sound.

 

As I arrived in the cellar - all in my nightwear, for people with a lot of imagination -, I noticed our pression vessel from our rain water pump contained a very small dot of rust where water was streaming out at high pressure.

 

So I opened up some faucets to release the pressure, and started mobbing away, as we also store our heating pellets in our cellar - luckily I did not put them directly at the floor, otherwise the first few bags would have been ruined as well.

 

So, instead of answering my emails, I decided to get my priorities straight, and take the explicit time to thank you and send you my regards, Mr. Murphy, as you apparently also went the extra mile to surprise me with this great morning gift ....

 

Kind regards

 

Tom

Your Humble Servant


 

Bookmark and Share

About Tom

     Tom Janssens op LinkedIn    Tom Janssens op twitter   Core bvba RSS

I build software and help organisations to get better at building software.

If you would like to know more or meet up, just give me a call at
+32 478 336 376.

More info about Tom and his company...

Tom's resume


Calendar

<<  April 2014  >>
MoTuWeThFrSaSu
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar