2015 retrospective

As I have a spare hour while my kids and the Mrs. watch “The Grinch” (which is an awesome Christmas movie by the way), I decided to take half an hour to reflect and sit back. Personal On a personal level, 2015 has been both an awesome and a terrifying year. The terrifying part was mostly about being confronted with depression, terminal diseases and death in my immediate vicinity. I will not elaborate on this, but you can imagine that it makes you sit back and reflect.

Brain dump #2: How I'd implement Tesla's Autopilot feature - levels of AI

About two weeks ago, I decided to have some healthy life changes, and one of them is walking to my office. This walk takes about half an hour, so it is easy to fit this in my daily schedule. My daily walk to and from the office… pic.twitter.com/GPi3WGOPKr — Tom Janssens (@ToJans) 23 november 2015 While walking to my office, I think about my goals for the day, and on the way back, I self-reflect and think about the things I did that day.

Brain dump #1: How I'd implement Tesla's Autopilot feature

I recently saw this tweet by Elon Musk, who is looking for developers for their Autopilot feature: We are looking for hardcore software engineers. No prior experience with cars required. Please include code sample or link to your work. — Elon Musk (@elonmusk) 20 november 2015 As a long time Tesla fan, I couldn’t help but wonder what kind of solution they will come up with, so I decided to do a little brain dump myself: Requirements Trustable Above all, software should be trustable.

Are new `.js` ui frameworks and - libs a fad?

Good question! TL-DR: Most are, except: jQuery React vue.js Frameworks - not for me! In web UI, frameworks like BackBone, Ember and Angular might be all nice and stuff, but when you start using them to compose larger applications, things tend to break down quite easily with less experienced developers. Developing large client-side applications requires the same modelling skillset as developing large server-side applications; the complexity is usually not located in the infrastructure, but in properly mapping boundaries and responsibilities within your solution space.

Foldable for non-Haskellers: Haskell's controversial FTP proposal

In the Haskell world, there is currently a big fuss about the “Foldable/Traversable in Prelude”-proposal. Edit: For the record: it was a proposal, and has been implemented in the current version of Haskell (GHC) As a non-Haskeller, you probably wonder what all the fuss is about. First things first: some context In most languages, you have functions to iterate over a sequence / array / iterable / list, for example in C# (assuming we have an array called values) int[] values = new int[] {1, 2, 3}; foreach(var v in values) { Console.WriteLine(v); } In Haskell, we usually refer to an sequence with a list, and the example code would look like this: values = [1,2,3] mapM_ print values Let’s say we need a function that concatenates several sequences of the type a.

DDD elevator pitch

DDD elevator pitch@ToJans In business, you make fine-grained adjustments all the time, in order to stay ahead of the competition. Software tends to be rigid and hard to change. Domain-Driven Design tackles this paradox, and considers software a living thing - just like your business. By making the implicit concepts from your business explicit, DDD will give your software the ability to keep up with the agility that your business requires.

Hangman in Haskell

As I noticed a question for a more idiomatic Haskell version of the game Hangman on codereview.stackoverflow.com, I decided to give it a go; this is the result: Note This article has been posted on Reddit’s Haskell channel, and gradual improvements were made on this article based on tips in the threads, so feel free to check these. Tips Most idiomatic Haskell code I see has a very high signal to noise ratio.

Propositions as types and the future of programming

What’s all the fuss about? Quite recently, Philip Wadler published the paper “Propositions as Types” If I understood this correctly, this is about the fact that the application of a function to a type is also a type. Based on this observation, we could describe a whole app in types. As we can easily compose types using product and sums, this would imply that you would no longer have to write an application by telling your computer how to do things, you would just tell your computer what you would want it to do, and it will deduct the code/proof itself.

Insanity & start-ups

VCs are looking for start-ups who outperform their competitors not by a ten-fold, but at least a hundred- or a thousand-fold. It is hard to predict which companies will evolve in this way, but one thing is well-known: your company will have to be fundamentally different than everyone else’s in order to reach such ratios. Key differences in succesful start-ups “Don’t spend time beating on a wall, hoping to transform it into a door.” Coco Chanel In order to outperform your competitors by such numbers, your company will need at least one of the following things: First-mover advantage The first-mover advantage (a.k.a.

Building your own product

Phase 0 In March 2014, I was looking for a new project. I had an idea to generate sales leads for an up-market sunroom builder , so pitched it, setup a POC and successfully sold the idea. Phase I Six months later, the project was up and running, and you can try it here: So if you are interested in a sunroom and living in Europe, feel free to try the app and submit your contact data.

How to explain dependent typing

Take an average programmer - let’s call him Joe D. - and have him talk to a fictitious academic called Alan T.: What doesn’t work Alan: Hi, Joe, what’s up? What can I help you with? Joe: Hi Alan. I heard about this thing called Idris and you are the expert; what is Idris exactly? A: It’s a dependently typed language, why are you asking? J: Well, I heard you can improve your code with it, but I haven’t got a clue how it works.

My favorite Ziobrando quotes

Every once in a while Alberto Brandolini - also known as “Ziobrando” - generates brilliant quotes. These are some of my personal favorites: #4 Darth Vader doesn’t apologise in public. When you are a true leader, you feel comfortable about admitting that you are wrong. When you are an “old-style boss” you are supposed to have all the answers, and can never be wrong. If you happen to work for people who lead by terror, you might find some comfort in this quote.

Confessions of a start-up consultant

About a year ago I was talking to one of my business mentors; he asked: “How do I get on the first page of Google search?” “Do SEO” “How do you do SEO?” “Write relevant content, be active on social media, optimize your webpages, join referral - and link building programmes, do email marketing, …” “I don’t have the time or energy for this. What kind of content? Maybe I know someone…” “Content that is relevant for your site…” “What would be relevant?” I give some suggestions, but tell him keyword analysis is really a necessity… He thinks a little, and then replies: “Who can you suggest?” “I know a few people but haven’t really worked with anyone yet….” As I start suggesting some people, I see him gazing away.

about dependent typing, Idris and the road to Valhalla

Due to my DDD background, I am constantly on a quest for the utopian domain model. Last week during the Build Stuff 2014 conference I saw a presentation by Amanda Laucher about dependent typing that spiked my interest. Here is a short interview with her: I somehow feel that dependent typing might bring us one step closer to the utopian domain model, and in this post I will try to explain you why I think this is the case.

The definitive guide to microservices

Renamed and moved to “The essence of microservices”.

The essence of microservices

During the DDDQ lean coffee last weekend the question on microservices popped up once again. This is not my first post about this subject, but apparently people wanted to know more. Whyyyy !?! Whyyyyy! From my understanding ** you should only use microservices when you want to run small controlled business experiments**. That is in fact the key takeaway for me: if you write software for an agile business, you might want to try something new everyday, for example: setting up an online crossword puzzle contest organizing an ad hoc platform for a certain event engage new customers in a poll write a service that emails you a list of potential customers every day … (You get the picture) When you do microservices, you apply agile principles to your business.

The ultimate decision tree that tells you if language/technology/framework/library/... is a good choice

We’ve all been bitten in the past: should I use TDD / BDD / DDD / CQRS / Messaging / C# / F# / Java / JavaScript / MVC / RFP / Actors / Erlang / Elixir / Haskell / OCaml / Scala / Clojure / Windows / Linux / MacOs / CSS / SASS / Haml / (The new shiny thing ™ ) / … So I decided to

OO vs FP

Today I was having a discussion on twitter, and after re-reading my timeline and seeing this tweet, I decided to blog about it. This is the gist of it Encapsulation Abstraction OO Required To be avoided FP To be avoided Required A small explanation Encapsulation vs abstraction Demis’ tweet explains it perfectly: @ashic @ToJans @abdullin @NeilRobbins information hiding is encapsulation, creating layers is abstraction — Demis Bellot (@demisbellot) 24 juni 2014 OO thrives on encapsulation: Behaviour is captured in systems, hiding the concrete types and data.

Functors, applicatives and monads for CSharp developers - part 2

TL;DR: A C# List implementation respecting the category theory Haskell usually uses. So, after implementing the Maybe Monad in C# respecting category theory yesterday, I decided to implement the list as well, to gain a deeper understanding of it. This is the result: Enjoy!

Imitation, innovation and 'the love for the game'

As I posted this tweet In communities, others take credit for/copy the things you do. Be flattered and understand the why: they probably lack insight and "fiero". — Tom Janssens (@ToJans) 19 juni 2014 It caused some reactions on twitter, so I’ll give you the recap: @JefClaes @ziobrando LOL, don't worry; it's about something else; this was my inspiration: pic.twitter.com/cyYZRsYhB0 — Tom Janssens (@ToJans) 19 juni 2014 @JefClaes @ziobrando I'm trying to figure out why some people innovate and others just are there to reap benefits in case stuff works.

Functors, applicatives and monads for csharp developers

For me personally, the whole functor/applicative/monad thing was one of the hardest things to grasp when studying FP. Being familiar with C#, I wondered why these concepts were missing in C#, so I decided - as an exercise and to see if I really understood it - to implement it in C#. This was the result: If you have any questions or remarks: shoot!

De politieke partijen hebben alle voeling met de kiezer verloren

Kijk maar naar hun partijprogramma en aanvallen naar minderheidspartijen; blijkbaar hebben de politieke partijen niets begrepen van de motivering achter het stemgedrag in de opinies. Waarom stemmen mensen uit mijn persoonlijke vriendenkring op NVA? Het kan deze kiezers geen bal schelen wat er op het programma staat van de NVA, en of ze dit al dan niet kunnen verwezelijken. Wat hun voornaamste drijfveer is achter deze ‘protest’-stem, is het signaal voor verandering.

The lean start-up triangle

At first: "Yeah, build-measure-learn; easy, I get it…" Now: "Wow, I didn't get that at all! I wonder how much more I missed!" #leanstartup — Tom Janssens (@ToJans) 22 april 2014 Catch-22 The basic lean start-up diagram looks like this: A while a go, when I decided to do 10 start-ups the process usually was like this (simplification): brainstorm with another person on a start-up ideas pick the best one build a fake landing page measure market fit (i.e.

What I learned from 3 years of CQRS and FP

I am currently setting up part of a BC for a customer, and it took me some refactoring after having not done any serious .Net for a few years, but I got there in the end; here is how I structured my current software project in .Net. Upcoming blog post: "What I learned from 3 years of CQRS and FP" pic.twitter.com/MsfoInALtM — Tom Janssens (@ToJans) 10 maart 2014 I think it is a reasonable base, easy to extend; some remarks: I use test-after, having readable scenarios that run directly on controllers, using the fake infrastructure; I verify both models, view names and redirects.

CQRS and functional programming

So, a little while ago, while I was studying Haskell, I decided to implement Greg Young’s SimpleCQRS example in Haskell. During the last @DDDBE event, I was showing this to Mathias, and he decided to put it on the big screen. The general response was: What’s missing from Greg’s example? And my reply was that nothing was missing. As people seemed to be flabbergasted by this code, I decided to convert it into a blog post.

Why 100% test coverage proves nothing

This is the follow-up to my previous post. I wrote an example - obviously badly written on purpose - by which I prove why 100% code coverage is useless. @ToJans �testing can be used very effectively to show the presence of bugs but never to show their absence� http://t.co/l9FujorBfo — ? Michel Rijnders (@mrijn) 26 februari 2014 While these tests cover 100%, they miss a test case that I added in the comments on the bottom.

Selling DDD

A little while ago, we gave a series of short talks called “DDD Basics” for the Belgian Domain-driven design community. The focus was on strategic design. < shameless self promotion > I got some awesome feedback on my part: @ToJans @DDDBE I really loved your talk last night ?? — Tom Marien (@Tom_Marien) 12 februari 2014 @ToJans @DDDBE no remarks, it was perfect, inspiring and motivational — Tom Marien (@Tom_Marien) 12 februari 2014 </ shameless self promotion > My session was about selling DDD, and while the slides can’t show you how much interaction there was, they do contain the gist of the ideas, so I decided to post them to my blog anyway; enjoy them!

Trolling the 100% TDD coverage approach - or not

When I read this blog post about how and why one should achieve 100% code coverage on his code, I was flabbergasted, and when I noticed Bart’s reply, I decided to check: @ToJans It's a troll right ? — Bart Waterschoot (@bwaterschoot) 24 februari 2014 The subject Here is the gist of the article: For me, there is no question 100% coverage is the only worthy objective, do not settle for less.

Why bad software architecture is easy to monetize

This morning I received yet another “interesting” job offer, which looked like this: Wanted: "senior .Net architect" Description "build one framework to build all future projects, using sharepoint" #ThanksButNoThanks — Tom Janssens (@ToJans) 17 februari 2014 Building a single framework to rule all your customers is just plain wrong. I did it in the past and now I know better. Why do a lot of consultancy/web shops do it then? Let me tell you a story … About someone building a house… The project You would like to build a house.

observe, learn and be humble

Observations are useless without context. * Understanding the the observer's POV, state of mind and past experience usually tends to shed a whole new light to observations… * A.K.A. "Doing the thing right" versus "Doing the right thing" * One always uses it's own background and experience as a point of reference do determine what matters in an observation. * The fact that you yourself determine what to to measure during an "objective observation", makes it subjective by definition… * One of my favorite fairy tales regarding observations that can be applied to business is "The emperor's new clothes".

February will be awesome

After chatting with a lot of friends yesterday, I realized: February will be awesome. Here’s why: I get to finish the Erlang FoundationDB driver. I have a friend with a well established email marketing business that is hiring me (again) for a couple of weeks to fix some really challenging issues in .Net. I have another client is hiring me this month. When he hires me, it is usually to get them up to speed with new tech.

micro-service-architecture versus SOA-EDA

@pjvds @FransBouma it sounds like (-micro) services. Isn't this what everyone has been saying for about a decade? Soa+eda? Why new things? — gregyoung (@gregyoung) 30 januari 2014 First things first: MSA = micro-service architecture (MS = micro-service) SOA = service-oriented architecture EDA = event-driven architecture Introduction When people start talking about MSA, they usually mention the fact that a micro-service should be about a 100 lines of code. And then… it stops, and they fail to explain the difference between MSA and SOA, except for the fact that the services need to be smaller.

Fixing blatantly obvious wrong assumptions is hard

So, yesterday I had another one of those “in your face moments”: While working on the Erlang FoundationDB driver, I spent a lot of time on a bug that was so blatantly obvious that I did not notice it for a long time. As I had been stuck for a long time, Tomas suggested me to ask the FoundationDB guys for help, so we did. When I asked for help, the bug was so obvious that it probably took them like 2 seconds to notice what the problem was.

Recruiter due diligence

Dear $FIRSTNAME, We have an amazing opportunity for you: We are looking for a senior recruitment supervisor manager leadership executive assistant helper. You will get the responsibility to manage the international contacts and contracts with both potential employees and clients by working on their administration. You will find and explore potential opportunities by several advanced and top of the notch techniques, including: email telephone cellphone Instant messaging OFAEP advanced automated mailing system lean start-up Delonghi Nespresso supervision Requirements Advanced expert in Microsoft Outlook 97 Dutch SP1 and Exchange SBS small business server management.

Growing software teams: size DOES matter

Growing software teams The problem Consider the amount of different communication channels (that relate directly to communication overhead and potential misunderstandings) on teams growing in size using the formula N*(N-1)/2: 1 person: 0 channels 2 persons: 1 channel 3 persons: 3 channels 4 persons: 6 channels 5 persons: 10 channels 6 persons: 15 channels 7 persons: 21 channels 8 persons: 28 channels 9 persons: 36 channels 10 persons: 50 channels … Having a team of 10 people creates 50 potential communication channels, and I can guarantee that, the more channels you have, the worse the communication between them gets.

Enjoyed programmer anarchy - looking for the next project

Note: This is the last post in what had to be a series of posts about my experiences working for HappyPancake. However, due to circumstances mentioned later in this post, my part of the project ended a bit sooner then initially provisioned : Introduction & Swedish culture. Working remote. Programmer anarchy. The bit with Rinat. The dev stack. The infrastructure part. Enjoyed programmer anarchy - looking for the next project A small clarification first When I initially joined Tomas on the project for HappyPancake as a freelancer, I decided to take a pay-cut, because it would enable me to get some real-life experience in Erlang.

Best posts 2013

2013 has been a good year; migrating my blog from blogengine to a more up-to-date blogging platform nearly doubled my visitors in the second half of the year, although it might have been the content as well. I have to say that migrating to Jekyll somewhat helped in my engagement to blogging; I particularly enjoy the Markdown language aspect of it. So, without much ado, here are the most popular posts from 2013: How to hire a senior developer The 5 simple rules of software development (In Dutch)De voedselzandloper: zin en onzin Since my third one is in Dutch, I’ll add the next post as well: Fallacies of the tech recruitment process.

The future of society: why a lot of big organisations will cease to exist


This post is an attempt to predict what the following decades will look like. I wrote a more technical post about this 3 years ago, which still makes sense far as I’m concerned.

Somehow, my understanding about how this applies to non-software things has evolved, and after trying to make my point on twitter, I decided to elaborate in this blog post about my assumptions on the future.


I’m only slightly aware about “the how” of the technology that could drive these things. My assumptions are purely based on my observations about how people interact with devices and technology at this very moment.

First things first: what happened last decade? #KnowledgeEconomy

I would definitely say the past decade has been all about knowledge economy, i.e. the democratization of knowledge.

Knowledge used to be something people used to consider exclusive. In the world of today, people no longer consider knowledge something exclusive, as almost everyone can search information about almost anything on the internet. One could say, that it is no longer valuable what people know, but what makes the difference is how people apply and combine that knowledge.

As knowledge is becoming a commodity, people are starting to share knowledge, others improve it and publish their conclusions. One could say that the speed by which we learn is growing exponentially, just because we can share it and get feedback in a way people from a few decades ago could not even have imagined.

Fifth Solvay Conference

towards a more elegant fizzbuzz

This morning I saw this tweet: blogged: Clojure Kata #1 � Fizz Buzz http://t.co/kdZvqjzkRa — JanVanRyswyck (@JanVanRyswyck) 19 december 2013 As Jan is learning Clojure, he was exploring the fizzbuzz code kata. I have seen this kata being performed in a lot of languages, and the functional solutions I have seen always feel a bit imperative, so I tried to make a more elegant - functional - version in a language I am currently learning: Haskell; this is the result: I like it; but what do you think?

The extrema of system integration

There seems to be a lot of confusion on this subject, so I decided to give my very opinionated view on the subject. There are 2 extrema in how to handle integration between different systems: Implicit integration: Fred George’s micro-service architecture The concept of micro-service architecture is “Antifragile” applied to software architecture: have lots of versions of very tiny micro-services running, without precisely knowing which service does what. This comes down to an approach where you publish all messages to a single enterprise bus, and then several children act as proxies for this message bus.

Enjoying programmer anarchy: HappyPancake - Remoting

Note: This is the second post in a series of posts about my experiences working for HappyPancake: Introduction & Swedish culture. Working remote. Programmer anarchy. The bit with Rinat. The dev stack. The infrastructure part. Enjoyed programmer anarchy - looking for the next project Working remote: a small quest Tomas and HappyPancake are located in Sweden, and I live in Belgium, so there is some remoting involved. Because we are working remote, quintessential communication is very important.

Enjoying programmer anarchy: HappyPancake - Introduction and Swedish culture

Note: This is the first post in a series of posts about my experiences working for HappyPancake: Introduction & Swedish culture. Working remote. Programmer anarchy. The bit with Rinat. The dev stack. The infrastructure part. Enjoyed programmer anarchy - looking for the next project Introduction About three months ago, I was looking for a new project after a mini-retirement where I spent most time with the kids and on some OSS-work for Elixir.

DDD 101 tips

Here are my tips for getting started with DDD; they were written as a response to a question in the BE-DDD newsgroup: IMO taking a look at the domains from a different POV also helps; f.e. now you only looked from a data-oriented POV; here are some possibilities: Find the use cases that define the behavior of your system Use personas and documents Try context mapping; you will probably have f.e.

life's playlist

Why “life’s playlist” ? As I was traveling home from a very nice trip I was once again composing a playlist that somehow matched my memories. Then I realized, that I do that a lot; some people love taking pictures, other recall memories by scent or stories, but I usually recall memories by hearing a song, so I decided to make a list of all the songs that somehow provide some kind of memory for my life.

DDDBE meetup #2 - Legacy Inferno

After the great feedback of the first event, the Belgian DDD community had to do a second one, and last Thursday we did: De @dddbe meeting at @nucleus_hosting begint behoorlijk vol te lopen :) pic.twitter.com/E70TaIvQNd — Chris Ramakers (@ChrisRamakers) October 17, 2013 We would like sincerely thank @nucleus_hosting - nucleus.be for providing us a location and some food! We'd be nowhere without companies like @nucleus_hosting who provide us with a location.


So, what is a monad? I get sick and tired of people making simple things complicated, so when someone told me he was going to take a look at what a monad is, I assumed it was time to intervene; this is the wikipedia explanation: In functional programming, a monad is a structure that represents computations defined as sequences of steps. A type with a monad structure defines what it means to chain operations, or nest functions of that type together.

Software architects, you are doing it wrong

Introduction A post by @abdullin nailed it pretty good: software architects are doing it wrong all the time. Here’s why: Made a sketch "Software Architecture 101", but I REALLY need to use a thin marker or have less stuff #Chaotic pic.twitter.com/ZJptDRCD0z — Tom Janssens (@ToJans) September 23, 2013 CHAOS !!! Well, it looks like chaos, but this is only because I used a big marker and no pencil, so there was no room for corrections, but allow me to clarify this Behemoth.

Visualizing Event Storming

This is just a sketch that tries to explain my understanding about how Alberto Brandolini’s Event Storming works. Next time I will skip the pencils and use a marker Update Tried fixing it with a marker; but my marker should probably have been more fine-grained. Comments are welcome!

On Erlang, concurrency, parallelism and Haskell

Disclaimer Please note that I have zero experience in Haskell, so these statements are all assumptions based on an afternoon of study. I will probably prove myself wrong pretty soon. #Intro This is a series of tweets that I consider interesting for future reference, so I decided to put them in a blog post: @ToJans @ptomasroos And the 140-character summary is..? — Graeme Foster (@GraemeF) September 5, 2013 Answer Remark: I initially included the original tweets, but this was unreadable, so I now just show the lines; they are clickable to get the original tweet: Haskell sparks share state and are cheaper and more fine-grained then erlang processes who share nothing.

The very first #DDDBE event: the modellathon

This is my personal review of the @DDDBE inaugural meeting: a modellathon. Some background info So, last night we had the very first event of the Belgian DDD community: a modellathon facilitated by Mathias Verraes and Stijn Vannieuwenhuyse, and kindly hosted by the hosting company Combell. For the people who do not know the concept of a modellathon - in fact, I think we might even have invented the term maybe, but I am not quite sure -, it was something we spiked like a while a go, while coming back from the London DDD Exchange: As we were sitting together on the train with some of the #CQRSBeers guys, we considered starting a Belgian DDD community, and having real workshops.

The 5 simple rules of software development

1. Throw away first iterations > Do it right the first time When writing software, good enough is usually all it takes; the minute your good enough code starts hurting, is when you should replace it. Trying to write code from an unknown domain perfectly during the first iteration will fail almost every time, as you start of with assumptions that are usually wrong. I usually start over about 3 or 4 times before I have a decent base I can build my further explorations on.

reply to Mathias' blog post about Systemantics - The Systems Bible

Some context @MathiasVerraes just published a short review about a book called “Systemantics - The Systems Bible” by John Gall. One of the quotes he mentioned was the following one: Systems are seductive. They promise to do a hard job faster, better, and more easily than you could do it by yourself. But if you set up a System, you are likely to find your time and effort now being consumed in the care and feeding of the System itself.

Build a simple chart website in a few minutes with Elixir

As I am currently thinking about setting up a social platform for Elliot Wave analysis, I decided to use Elixir as my new platform, to see if it would be doable. This is the result of an hour of hacking (mostly figuring out how to libs work): Prerequistes I have previously written an extensive blog post on how to install the prerequisites on Windows here. Please follow this guide. Once you followed this, we are ready to get started on our web app.

Event sourcing for the rest of us

I recently saw a discussion on twitter about the definition of event sourcing: Event sourcing: persisting entities by appending all state transitions to transaction log. To rebuild the state, we replay this log. — Rinat Abdullin (@abdullin) July 27, 2013 @thinkb4coding which problems in this paper stand out to you? — Rinat Abdullin (@abdullin) July 27, 2013 After a response by Jérémy in a blog post, I decided to offer you my interpretation of event sourcing as well.

Learn Elixir (or Ruby, Javascript, Clojure) through exercism.io

I am currently in the process of improving my Elixir skills using the site Exercism.io. What’s Exercism.io? Exercism.io is a really neat concept: it provides you a platform to learn a new development language, where you get feedback on your exercises from other users who previously succeeded in completing the exercise. How does it work? It works using a command line tool to manage things on your machine, and the website, where users provide feedback on your code, and you provide feedback on the code from other people if you completed the exercise previously.

Handle recruitment spam like a boss

As you all know, I am fed up with recruiters playing keyword lottery , and I did post how recruiters should act, but most of them still continue playing keyword lottery. Sometimes being polite does not work anymore, so I decided to fight fire with fire. As most of the recruitment spam is automated, I decided to send an auto-reply with my rate and a link to my resume, mark the message as read and auto-archive it.

Running elixir on my Android tablet

As the Mrs. does not allow me to take the laptop on vacation, but we do take the tablet with us, I decided to find out whether Elixir runs on an Android tablet.

I experimented for about an hour or so, and apparently it is quite easy. Here is my proof:

How do you do this

With a lot of unicorns and fairydust… No, actually it is quite simple….

Why I contribute to OSS projects

I spent quite some time contributing patches to the Elixir project lately, and I am quite proud of it: Some people have been asking me why I spend so many time on contributing patches to a relatively unknown OSS project, and others - coming from a non-ICT-background asked me why I bother to work on someone else’s product for free, while I can charge thousands of Euros to other companies. They tell me I am missing out on a lot, as I am not only burning cash, but also losing my income.

DDD in a tweet

The essence of DDD: make the implicit explicit (language, boundaries, code) and evolve your model so it matches the domain /cc @julielerman — Tom Janssens (@ToJans) June 23, 2013

Blogging: less is more and my name is my brand

Introduction It has been about 10 years ago, since I opted for a blogging platform called BlogEngine.Net, which was - at the that moment - one of the leading blogging platforms in .Net space. While this has served me quite well, I decided it was finally the time to migrate, because a lot of things have changed since that day. After some careful considerations I decided to migrate from BlogEngine.Net to a static site built with OctoPress(built on top of Jekyll) that is hosted on github pages with a new domain name.

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

Introductie Ik zag net een tweet verschijnen van Karel Van Eetvelt - de CEO van UNIZO -, dat het niet goed gaat met de Vlaamse werkgevers Zware alarmkreet Vlaamse werkgevers en zelfstandigen. Economische crisis, belastingdrukverhoging en brutale controles tasten vertrouwen aan. — Karel Van Eetvelt (@karelvaneetvelt) 11 juni 2013 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.

Installing and compiling Elixir and the Dynamo web framework on Windows


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.

How to hire a senior developer


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…

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


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:

IDDDtour 2013 Belgium - an immersive experience

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…

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


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…

Fixing corrupt downloads with your ISP

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.

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

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.

An open letter to Mr. Murphy

  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.

Saturday night 30 min brain dump - Luck

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

Simplified Feature Branching - Source control done right

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.

How your personality type affects your development

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.

Fallacies of the tech recruitment process

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

Continuous thinking: Essay: Ease and simplicity in software architecture

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. What do you mean? When I told people I was considering writing a blog post about the difference between simple and easy; Mathias Verraes pointed me to a presentation on InfoQ named “Simple Made Easy” by the creator of Clojure.

Trading the Elliott Wave - Silver 24/10/2012

s I think we are currently in wave 3 on several levels and we have some MACD/RSI divergence on the 4h-chart, I decided to put my money where my mouth is, and bought a few XAG/USD spot long sprinters with a leverage of about 80.

Paycento Web Summit 2012 - Day two: Aaaaargh matie

Introduction This is a follow-up post to the post from yesterday. While the first day was really nice, the second day was completely different. Meeting people After a good night of sleep and some breakfast at our AirBnb host, Geert and I got back to the venue. As this was our second day, we seemed to have less challenges handling the Irish traffic in our “Fiat Cinquecento”. As we arrived there, we met up with Pieter again we had a small chat about the event he had the night before, had some coffee and a small breakfast (I love the catering at Web Summit), finished some things I had to do on my laptop, and started socializing.

Paycento Web Summit 2012 - Day one: Is gra liom Eire

Introduction When Geert from Paycento asked me to join him and Pieter to Ireland for THE start-up convention in Ireland named Web Summit, I immediately agreed to join them for the following reasons: Paycento is still very active, even though we do not blog about it currently. Web Summit is probably the biggest conference for start-ups in Europe, so there is an interesting buzz here, with some really interesting speakers. I love interacting with people I do not know yet, especially when we do share similar interests.

Erlang 101: an attempt to implement CQRS

Introduction As you might have noticed in one of my previous posts, I am currently focussing on Erlang, because I assume that this platform might be the most efficient way to handle umphteen connections over the web for now (but that is the subject for another post). After running my first experiments and getting everything up and running on Windows, I finally decided to stop fighting usage of windows combined with Erlang so I installed myself a virtualbox with Lubuntu LXDE (please note that you have to set the available memory on the virtual appliance to 512MB, or the installation will crash).

Trading the Elliott Wave - Silver 26/09/2012

No Elliott analysis yet, since I am a bit short on time, hence my quick and dirty analysis based on divergence... The trend looks strong, so I think we might be heading to the 261.8 retracement here... (i.e. 26.4299).

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

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: Windows Erlang/Nitrogen in a tweet: install erlang.org/download/otp_w… in “c:\program files\erl7.5.7”,

Live Blogging: getting started with Erlang and Nitrogen

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… Trying a new concept: “Live blogging: getting started with Erlang and Nitrogen” - feel free to comment during the post corebvba.be/blog/post/Live… — Tom * suǝssuɐſ (@ToJans) September 13, 2012   Introduction As I had yet another idea for a startup, I fired up Visual Studio and started implementing a small demo… Flexing my idea muscle; trying to build a POC for another startup idea #startup10 #ElliottWave twitter.com/ToJans/status/… — Tom * suǝssuɐſ (@ToJans) September 6, 2012 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.

Tweet: My opinion on new theoretic development approaches

Every theoretic development approach is a “Pseudo-Illuminate Legacy Enhancement of Subordinate Hierarchical Implementation Theories” #IMHO — Tom * suǝssuɐſ (@ToJans) September 12, 2012

De voedselzandloper: zin en onzin

Introductie De voedselzandloper is vandaag een paar keer in het nieuws vermeld, als zijnde een onconventioneel, en zelfs gevaarlijk dieet/voedingspatroon. In deze blog post probeer ik uit te leggen wat mijn persoonlijke ervaringen zijn op dit gebied; ik heb namelijk een jaar geleden een gelijkaardig (doch niet echt identiek) voedingsplan gevolgd. Disclaimer & statistische relevantie Ik ben geen voedingsdeskundige. Mijn ervaringen zijn exact dit: mijn persoonlijke ervaringen, of voor de statistici: een steekproef waarbij N=1; ik ben me er dan ook bewust van dat mijn ervaringen niet noodzakelijk voor anderen gelden, en hoop dat u dit ook beseft.

Trading the Elliott Wave - Silver 05/09/2012

  Introduction This is a follow-up for an attempt to read the current trend in Silver, using mostly Elliott waves, Fibonacci retracements and RSI/MACD divergence. Feel free to state your opinion on my interpretation, and be aware that I am a complete newbie concerning this subject. The first post can be found here…     Disclaimer This is just an interpetation that tries to predict the future and it might be completely wrong.

Trading the Elliot Wave - Silver 28/8/2012

Introduction This is my first attempt to read the current trend in Silver, using mostly Elliot waves, Fibonacci retracements and RSI/MACD divergence. Feel free to state your opinion on my interpretation, and be aware that I am a complete newbie concerning this subject.   Disclaimer This is just an interpetation that tries to predict the future and it might be completely wrong. I can not be held liable for any losses you make when following this advice.

Project #Startup10: Working title - BIG

note: The source for this project is on Github; the following text is a copy of the file Readme.md. Project #Startup10 - Startup #3 : Project Big This is one of the projects of a bigger one: Project #StartUp10: Creating 10 Startups in one year. The idea of project #3 was to create a platform to implement some really quick solutions for small problems. I would come to a customer, anayze the small issue in about 2-4 hours; implement it in the same timeframe, and by the end of the day the customer should have a working solution.

Epilogue: One night in Paris - #CQRS, beers and life in general

Ce soir #cqrsbeer chez Justine avec @abdullin @thinkb4coding @ToJans groups.google.com/forum/?fromgro… #cqrs — ALT.Net FR (@altnetfr) July 12, 2012 Introduction When I told people I was going to drive to Paris (350KM, a 3 hour drive, traffic jams not included) to have a discussion with a few persons I know from the internet, most of my friends were questioning my sanity. They know that I am not really following the path most people follow in life and career, but apparently to a lot of people really considered this to be one of my more exotic quircks, hence this blog post explaining my ideas.

Project #Startup10: Lessons learned with Blommekes.be

Note: this is a post from a blog post series about starting up 10 businesses in a year. #1: http://Blommekes.Be - koopt een blommeke voor u vrouw en het zal wa beter gaan Introduction The biggest problem in getting started with startups, is finding your inspiration, and deriving a business plan; in this post I will describe how blommekes.be was conceived, and also mistakes, lessons learned during the process. Inspiration After the idea of starting 10 startups in a year was conceived, this was the first startup that I conceived together with Pieter from Taalvirtuozen.

From the trenches - improving scalability in .Net for Paycento

Introduction As most of you might know, I am currently in the process of improving the scalability of the Paycento backend.. As a real lean adept, the idea is to optimize where it hurts… As the creator of Node.js pointed out perfectly, the biggest pain is in the disk/network access etc.. Blocking threads hurt bigtime… So I started searching for easy low-cost optimizations that would not require to much effort….   Before we begin: Phase 0 - measuring=knowing; ask Heracles   I spent a big part of last month coding a command line app called “Heracles”, which is some kind of a helper app.

Y U build your own build server for Paycento

Introduction As you might now I started working quite recently for the startup Paycento. One of the things I am currently doing is setting up a system that allows us to do continuous integration and deployment everywhere and anywhere… @ToJans Why write & maintain it if someone already solved the problem? (assuming something solves it). Spend time on competitive adv :) — Simon Guindon (@simongui) May 18, 2012 As I got into an interesting discussion with Simon Guindon on twitter about the choice between a custom tool and an existing one like CruiseControl.Net for example, he suggested me to write a blog post about it.

It is official: on the second of May I will join the start-up Paycento

Finally !! It has been a while since I blogged about my project #startup10, and there has been a reason for that… In the past months I have been talking quite a lot with a former colleague of mine, who co-founded a start-up, but on a whole different scale/level as my 2 utterly simple experiments. After having to keep my mouth shut for over a month - which was, as for those of you who know me, quite hard -, I am finally allowed to tell the world I am joining the start-up www.paycento.com .

Project YakShayQRS : another CQRS evolution

Introduction TL;DR: I managed to minimize the CQRS overhead even further. Over the years, I have been trying to minimize CQRS in several iterations, even releasing a framework and a lib in doing so. Yet, I have still not been satisfied by the approach I reached. This time I once again am pretty satisfied with the way things turned out, and they actually seem to require even way less overhead… How it works The concept is quite simple: I use a generic message class to implement messaging.

Project #Startup10: You pay peanuts, you get the monkeys

Note: this is a post from a blog post series about starting up 10 businesses in a year.   Introduction I love appharbour, in fact, I have 8 apps running over there at this moment. A little while ago, appharbour announced that they now have to start making some money, so that they were going to charge for custom hostnames… I got a little dissapointed, since custom hostnames are an artificial limit, they do not add a lot of overhead to the system AFAIK, so why the hell would they charge for something like that???

Project #Startup10 : Learning to build your own business

Note: this is the first post in the series “Project #Startup10” : a blog post series about starting up 10 businesses in a single year. Here is a list of all the relevant articles: Introduction (this post) You pay peanuts, you get the monkeys #1: Blommekes.be  E-Payment and logistics #2: Dampen.be - [This project has been put on hold]… #3: Working title: BIG TBD   Introduction I love reading about startups, lean product development, software practices etc… After spending over a decade studying a plaethora of subjects, I decided to finally put my money where my mouth is: this year I am going to put the theory in practice, and start up 10 new (or not so new, but different) business ideas, hence the tag #Startup10.

HAxxors: Use SQL Server as a NOSql DB

Introduction I was in an environment where I only had SQL Server available, but I really wanted a key-value store, so what did I do: Use SQL Server as a Key-Value store - Major Haxxors In order to be a proper key-valuestore, one would need to add the ability to do searching etc, but as this was only a quick hack where I did not require the search, I did not implement it.

Presentation: CQRS 101 - All your BASE belong to us - on march 6th for visug.be

I am presenting for Visug on the 6th of march; it is a session about CQRS; here is the abstract: CQRS 101 - All Your BASE Belong To Us CQRS is a relatively new approach to software development in complex, distributed and/or asynchronous problem domains. In the first part of this session, you will get a brief but pragmatic overview on the what, why and when using some examples. You will see how CQRS leverages BASE in CAP-theorem, and how this translates to the cloud.

The Seven Habits of Possibly Spectacularly Successful Executives

Introduction Over at a private LinkedIn newsgroup for ENTP personality types, somebody posted a link to “The Seven Habits of Spectacularly unsuccessful Executives”. This is a great article, but not a lot of help IMO, instead of telling what not to do, one might be reversing the reasoning, and try to figure out what to do. I posted this blurb in a comment on the newsgroup, and I figured I might as well post it on the blog as well… Here we go:   The Seven Habits of Possibly Spectacularly Successful Executives   #1: Look and interpret the market, you do not control the market, but have to follow it and adapt.  #2: The project is not an extension of yourself; take some distance and try to be objective.

CQRS for the lazy -ss

Introduction In one of my numerous attempts to create a neat approach to CQRS, this is yet another attempt to remove all the protocol that CQRS requires. I love bootstrapping new projects and experimenting with new approaches, and this is another step that improves efficiency. It is a natural evolution to one of my other CQRS playgrounds: Scritchy. The conventional CQRS approach requires you to write command - and event classes, to wire up your commands and event handlers to the relevant AR’s, saga’s and viewmodel builders.

2010 - 2011: A retrospective

One of my main motivators, my youngest son Matisse #PrideAndJoy Introduction I like the concept of retrospectives; it makes you self-reflect and think about the paths you followed and want to follow in the future. As it has been 2 years ago since my latest retrospective, I think doing a post on it right now might be a good idea. The initial plan in 2010, a.k.a. “Man I feel stupid now” - a few smells As you might have read in the previous retrospective, in 2010 I started working for a startup which had quite some customers and a lot of work.

Open brief aan Belgische ondernemers: Stappen naar een beter Belgie

We zitten in de problemen in ons landje; hoe zou U als ondernemer het probleem aanpakken ? #BeterBelgie Het geld is op, de mensen komen op straat, er is schrik voor de economische malaise en verdere implicaties er van, … Als ondernemer zit U dagelijks in gelijkaardige situaties: uw acties hebben niet alleen impact op producten en bedrijven, maar ook op mensen in een directe of indirecte manier. Bijgevolg heeft het merendeel van U een soort van zesde zintuig ontwikkeld om dergelijke problemen op te lossen.

#Startup: How #NancyFx, #SimpleData and #Scritchy provided me 16K Euro profit in the first month

Introduction It was hard keeping this a secret, but I finally can tell you now: I managed to build my very first relatively successful web app. I built it using NancyFX, Simple.Data and Scritchy in about a month, and it generated 16K Euro during the first month it was in service. After all these non-profit and some other fruitless attempts these microframeworks helped me to push out an idea that has been lingering around in my head for a few months now.

Continuous thinking: Essay: TL;DR - functional programming = SQL SELECT statement

Introduction I am currently in the process of studying F# - a functional programming language -. Since I am a big fan of meta-cognition, I am trying to find out how the mindset of the functional programming paradigm differs from that of a C# one (i.e. the more conventional, object oriented paradigm). This essay also tries to point out some existing bridges to the functional paradigm that are currently implemented in the imperative programming language C#.

Continuous thinking: CQRS explained to a 10-year old

Introduction The concept behind CQRS is neat: detach your domain implementation completely from your representation requirements. I even wrote a framework for it as a learning tool, so somebody without any prior experience should be able to boot a CQRS app in a few minutes. The main idea behind this framework is providing developers new to CQRS an operating room where they can compose their own little CQRS Frankenstein app. The whole framework is constructed in a way that it forces you to make your domain implementation completely persistence ignorant, respecting typical AR/transactional boundaries.

Continuous thinking: Essay: the duality of knowledge

Introduction. Everybody loves experts, at least I know I do! I love being able to toss almost every single question or problem to one or more experts in order to gain new insights and understandings. In most cases, your knowledge network really grows exponentially as you age. Knowledge networks should be cherished and nurtured, as they will allow you to accelerate your personal knowledge growth in an exponential rate. But, there is a catch: can you remember the last time you disagreed with an expert ?

Pragmatic CQRS: Verifying username uniqueness when registering a new user

Introduction Most people who get started with CQRS have issues with this classical example: “how do we verify username uniqueness when a new user registers ?”. While user authentication is something that has been implemented numerous amounts of times before, and one should usually not reinvent the wheel but use an existing software library for this particular case, the problem in itself is rather interesting, and happens quite a lot in a domain.

Quick tip: How to do TDD/BDD and debug unit tests with Visual Studio Express editions

Introduction This article will show you how you can do TDD/BDD with Visual Studio Express editions. While most people say it is not possible, it is actually pretty easy. Prerequisites A Visual Studio Express edition AutoTest.Net Nuget How do you do it ? Open your project in Visual Studio Express Add a new class project, name it [Project].Specs Add a reference to the testlib you want to use with Nuget (Right click on the project references and choose “Manage Nuget Packages”) - I use MSpec a lot.

Scritchy: CQRS without plumbing - a preview

Introduction CQRS is one of my architectural pet peeves, as you might have noticed from the numerous amount of blog posts I made on this subject. However, I noticed the concept is complicated and hard to grasp for newcomers to CQRS. I have been spiking numerous attempts of a framework that makes CQRS both more manageable and understandable, failed hundreds of times, and even published a few of my acceptable attempts as gists over at github… A few days ago I was messing around with SignalR trying to setup again another CQRS attempt, and failed miserably….

Continuous thinking: How your MBTI type can help you

Introduction I just finished commenting someone’s opinion on the MBTI personality type in a linkedin status update. As you might have read in my previous post regarding “The secret sauce of great leadership - IMO ;)” I am an avid fan of determining your own personality type in order to improve yourself. Because this person had seen a presentation by Patrick Vermeren on the myth of MBTI, he retweeted the following: I wish there was a test to take to find out how much you hate Meyers-Briggs (MBTI).

Continuous thinking: Essay: The secret sauce of great leadership - IMO

Introduction What MBTI personality type are are you ? If you do not know, I would suggest you find it out (I did it here, it only takes a few minutes). I did it, and it was an epiphany. Apparently, I am an ENTP. For years, I felt like I did not know anybody who had a personality similar to mine. Now I do, and I found some great online discussion groups all populated with aligned personalities.

Continuous thinking: why a 4GL should be avoided to start a new app

Introduction As an avid member of the DDD/CQRS discussion group, somebody asked me what I meant with the following sentence: it looks a lot like a 4GL, and I assume we all know what that means… Since I tend to think my answer formulated my ideas pretty well, I decided to post it on my blog too; I hope this might help some of you to avoid the 4GL pitfall…   Why should a business avoid writing apps in a 4GL ?

Continuous thinking: Nerdbeers - Providing business value by issue tracking

Note: this post is part of a series; you can find the first post here. Introduction Well, another 14 days passed by for the NerdBeers project, and a lot has happened: @Grumpydev added a proper design I did some major refactoring in the FailingSqlite branch, which will allow us in the future to have full integration testing available for doing proper BDD (or top-down TDD, if you prefer to call it like that).

Continuous thinking: Nerdbeers continued - We all win !!

Note: this post is the successor to the previous post on NerdBeers; if you have not read it yet, you might want to browse through that one first in order to have some context for this one. Introduction The initial development on the Nerdbeers app was started about two weeks ago, and I never imagined it to be such a big thing really; I just wanted to build a small app to prove to myself that I could write an app without falling in the usual architecture trap.

Continuous thinking: just ship it - the story of NerdBeers

Note This is the first in a series of posts : Continuous thinking: just ship it - the story of NerdBeers (this post) Continuous thinking: Nerdbeers continued - We all win !! Continuous thinking: Nerdbeers - Providing business value by issue tracking Introduction Ok, I will admit it: I am a software architecture junkie. I love thinking about it, and try to use it in every app I can. I am an avid fan of CQRS (more info here), and I try to use it as much as possible.

Rant: Ik verdien niet genoeg/Toplonen zijn onverantwoord

Inleiding Naar aanleiding van een thread op een populair Nederlands forum over zin en onzin van verloning, heb ik onlangs een relatief uitgebreid antwoord gepost. Gezien ik dit wel een interessant onderwerp vind, heb ik besloten om dit met jullie te delen. Hopelijk steken jullie er wat van op. Aarzel ook niet om commentaren te posten.   Dit is mijn post (integraal overgenomen) * even de knuppel in het hoenderhok gooien Ik zie hier veel discussies rondgaan over lonen die al dan niet verantwoord zijn volgens anderen.

Continuous thinking: Essential business books shortlist: 3 business books everyone should have read

Introduction I like to read books, lots of them. Some I read only once (very fast, usually in a few hours, to get the main picture), and the good ones I read over and over again, or at a slower pace. In case of non-fiction, I either read books about physics, economics or business methodologies. While I read a lot of books, and some books gradually bring me a bit closer to the essential knowledge on a business level, I finally think I have a shortlist of 3 essential books one should read in order to acquire the basics.

Continuous thinking: The future of software

Introduction In this small article I am going to ventilate my recent thoughts on the evolutions and the future of software (both platform and development methodology). This is my first attempt for such an article, so please do not take it too serious. Maybe within 5 to 10 years time, one will be able to read this article and have a big laugh, but then again, I am hoping to get at least a few predictions right.

Motivating people

Testing how far you can go with removing CQRS infrastructure

This is an example of something that would be easily converted to CQRS, but without the overhead:

SoWhat.cs - An example of a possible .Net web framework looking like Sinatra

My #CQRS cookbook

Here is my personal take on how I interpret all things CQRS… Commercial impact: why use CQRS ? CQRS enforces you to apply strict boundaries to your app in a consistent way. These boundaries convert your single application into 3 separate parts, only coupled by commands, events and queries. By using CQRS you convert your single app into 3 apps who can be built in parallel. So basically, when you do have enough resources, the approach can decrease your time to implement something by a factor of 2.5 (estimate, 3 times - 0.5 for the common interfaces - commands, events and queries).

Started on an #NUnit addin for #Aubergine #BDD and got the testsuitebuilder up and running. Up next: engine refactoring

Posted via email from tojans's posterous

Waarom NVA deze match verloren heeft - een handanalyse

Introductie Gezien de huidige situatie in ons Belgenlandje vroeg ik me af wat nu het verdere verloop zal zijn van onze politieke impasse… Omdat ik meer verstand heb van poker dan van politiek (ook al hab ik niet veel verstand van poker :-) ), heb ik het even als een pokertoernooi proberen bekijken; dit is het resultaat : Verloop van het toernooi We zijn een pokertoernooi aan het spelen… CD&V, OpenVLD, N-VA,MR-FDF en PS zitten nog aan de tafel… Dit was de historiek: NVA was shortstack OpenVld speelde met zijn chiplead veel te aggressief, waardoor die de average stack CD&V een keer verdubbeld heeft.

Winning the game with CQRS/event sourcing and BDD

Yes !! I did it !!! I have been making a few attempts to combine BDD with CQRS/event sourcing, since they seem to make a perfect fit. After mailing to the DDD/CQRS newsgroup for a few times, I finally managed to make something presentable… this is the BDD part for the domain : And this is the resulting output after running the console runner This is the context, notice how setting up the interpreter usually only takes a single line (i.e.

Beating the odds - development of a leak finder app for multitable SitNGo Poker

Introduction I have been playing poker for quite some time, most of the time just for fun and a few eurocents… I especially love playing MultiTable SitNGo’s (i.e. small tournaments which start when a certain amount of players has registered). I am quite successfull playing this kind of games at lowstakes, at least I usually manage to get into the top 5% around halfway the tournament. But then the following usually happens (fictiuous situation): - I get a premium hand (AKs for example) and raise 2-3 BB… - I get called by a bigstack on the (BB) - Flop, low card rainbow - Bigstack checks - I raise 2⁄3 pot - Bigstack calls - Turn: K - Bigstack checks - I raise POT - Bigstack calls - Some lowcard falls - Bigstack goes all-in - I call (I know I shouldn’t, but I’m pot-commited) - bigstack show something like 2-7os, but hits a double pair, where he hit the 2 on the flop, and the 7 on the river.

Getting started quickly with BDD in .Net

Introduction This article will give you a brief introduction on how to get started with BDD (Behaviour driven development). It is my second attempt for such an article. I will show you the complete workflow on how to write an app using BDD in .Net. Background Small note: if you want to know why you should use BDD, I would like to refer you to another one of my articles: The advantage of using BDD over TDD Today I finally managed to upgrade my Aubergine BDD framework to v0.1.

Building an MVVM framework for both .Net and .Net CF

Introduction As you might allready know, I am maintaining a .Net CF application for one of my customers. Unfortunately, the design of the app is a total disaster, and maintaining it is actually a living hell. Fortunately however, my client decided to order a complete rewrite, which I started today. This post will not contain the sourcecode (as it is a proprietary app), but rather explain the guts of the underlying architecture and some info about the design decisions used.

Override interface mappings and creata a generic entity version filter

Introduction For one of my customers I needed to have some kind of versioning for a whole bunch of entities on my database. Since I use my very own MvcExtensions framework, I wanted to include a functionality which would automatically filter all entities based on this interface :     public interface IVersionAware     {         string Version { get; set; }     } In short, I only want to get the entities of the current version through my repository.

Major update for MvcExtensions

It has been a while, but I finally managed to push a major upgrade to MvcExtensions; this is the change list:     * Upgraded spark for MVC RC2     + Extra string operators for MyText     + Added abstract model for Joe Celko’s NestedSet     + Added Dynamic SQL (text sorts etc)     + Added HttpContextBoundObject     * Improved & extended FluentNhibernate/Database     + Added Fluentnhibernate TextAlteration for mytext field length in db     * Improved SetCultureLanguageAttribute     + Added a class SetCultureHelper for temporary changing language     + Added IEnumerableHelper extensions for Page & Paging     + Added helper for building jQuery jqGrid models     * Bugfixed MyTextModelBinder     * Improved MvcExtensionsModule This application framework has allready been used for 2 custom customer applications, and I have to say that it made my development quite successfull.

Var keyword is for JavaScript - about using the var keyword & other coding guidelines

Introduction Today I was reading an article on Codeproject, and I was really astounded by the way some people rate articles and give comments… It was an article about someone who had implemented a simple service locator which contained the following code sample : using System; using CuttingEdge.ServiceLocation; using Microsoft.Practices.ServiceLocation; public class Global : System.Web.HttpApplication {   protected void Application_Start(object sender, EventArgs e)   {      // 1. Create a new Simple Service Locator container      var container = new SimpleServiceLocator();      // 2.

Screencast: Build an Asp.net MVC application quickly using MVCExtensions

Introduction This is my first screencast for my MVCExtensions project, it shows you how to get started and build a simple tasklist. PS: This is the direct link to the powerpoint used: http://docs.google.com/present/view?id=dgt3mk3c_6fmhrd9c5 Some background info This was my first screencast, and it took me about 7 attempts to finally get it to a point where it was more or less acceptable. For my sixth and seventh attempt I finally found some good screencap software : BBFlashback Express.

The advantage of using BDD over TDD

Introduction After reading the latest post from @jeremydmiller I felt the urge to write a small article about the BDD part since there might be missing a vital part here about BDD… What is true BDD ? For a general introduction on BDD I would like to refer you to wikipedia. There are also a lot of articles on this blog on specific issues as well. Just to get an idea I’ll show you an excerpt of a spec (taken from here): Define a browser using Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext from Be.Corebvba.Aubergine.Examples.DLL Story Make sure my website gets enough visibility Is about a browser As a website owner I want to make sure that I get enough visibility So that I can get enough traffic Scenario Search results for ‘keywords’ on searchengine should contain ‘www.corebvba.be’ Given the current url is ‘search url’ When searching for ‘keywords’ Then the result should contain ‘www.corebvba.be’ Example +————–+——————————–+——————+ | searchengine | search url | keywords | +————–+——————————–+——————+ | google | http://www.google.be/search?q= | BDD .Net | | bing | http://www.bing.com/search?q= | core bvba tom | | bing | http://www.bing.com/search?q= | Quantum physics | | faulty link | http://www.googleaaa | core bvba tom | +————–+——————————–+——————+ Scenario Search results on google for keywords should contain ‘www.corebvba.be’ Given the current url is ‘http://www.google.be/search?q=' When searching for the following keywords +———–+ | keywords | +———–+ | Aubergine | | BDD | +———–+ Then the result should contain ‘www.corebvba.be’ and the following markup elements +——————+ | type | inner | +——————+ | em | BDD | | em | Aubergine | +——————+ Each time I compile my application, these specs get executed, and I get a report about which specs fail and which specs succeed, so you customer knows which functionalities are working.

Build asp.net MVC applications FAST with MVCExtensions v0.4

Introduction Today I finished v0.4 of my MVCExtensions library and I pushed the sourcecode to github. I also included a very simple tasklist, in order to show you on how to get started using this library. You can also see (slightly outdated) example code in this blog post… You can see a demo of the tasklist app running here. (Try entering a task without a name, or with a name that has more then 256 chars to see the custom strings in action).

Teaser on my upcoming mvcextensions project release

Hi there, I am going to give you a quick teaser on how to setup a full asp.net mvc application with database & all the rest using my soon-to-be-updated MVCExtensions library. Take the following steps : Create a new asp.net MVC project Add a reference to the MVCExtensions DLL and it’s dependencies Create your model Create your database mappings Create your viewmodels Create your views Create your controller Create your custom childcontainer for the homecontroller Wire up everything in global.asax That is all there is to it; you now have a fully functional ASP.Net MVC application that uses Castle.Windsor IOC/Automapper/Spark viewengine with al_a and al_form support !!!

Einstein's theories explained in 5 minutes: (special) relativity

Introduction In the past I have noticed a lot of people talk about (special) relativity and other physics theories, but when you ask them a few questions, they do not seem to grasp the concept…. In this series of blog posts I will try to explain you some of his concepts the way I understand them… The inspiration for this series has been one of Einstein’s quotes : “Make everything as simple as possible, but not simpler” I am no physicist by any means, nor a good mathematician, so you should never ask me any questions about the proof or maths about something, since I simply do not know.

Tab/Akkoorden en songtekst van -Zottegem Blues- (Miele, 1974)

Omdat ik dit wel een goed nummertje vind, en ik nergens de akkoorden en de songtekst vond, heb ik hem even zelf getabbed: Dit is de link op youtube: http://www.youtube.com/watch?v=0ufXnKAsJC0 Titel:   Zottegem Blues Artiest: Miele Album:   Zottegem Blues (1974) Tuning:  E-A-D-G-B-E Tab:     Tom Janssens ( voornaam (at) core bvba . be ) C : x32010 G : 320003 F : 133211 (barré) of xx3211 (zonder barré) Intro: F | G

2009 retrospective: .Net technologies and lessons learned

Introduction   In December 2008 I was doing my job as a freelance technical analyst for a big company. While it was a very interesting job in several ways, I felt that a burn-out was coming up. I had no idea whether this was due to the job, or due to my personal merits ( a newborn and a one-year old son, lots of tasks and chores on my to-do list for our house, a busy social life, …) Instead of waiting for the man with the hammer, I decided to be proactive about it, so I decided to quit the job and reinvent myself during 2009.

Civilian's manifest against a ridiculous tax : we now need to pay extra taxes on usb-sticks/external hard discs because we MIGHT copy music/video on it

Introduction : “Oh my God” The Belgian government managed to do it again; starting from February we have to pay taxes on portable storage, because we MIGHT copy some music on it. This is utter failure in the biggest possible way; I can accept that our dear Minister Q. has had some really strange track records, but this is really his ‘best’ realisation ever !!! As you might or might not know, similar to other countries, we already have to pay a certain amount of taxes for blank DVD’s/CD’s.

Howto+why using a prototype & bdd for a project estimate + personal rant

Introduction As you might or might not now, estimating the budget for a project can be very hard sometimes. In order to get started on a project we first need a real estimate of what the client will need, and the client should know what I am going to deliver to him/her. What I personally learned from the past is that one can never be fine-grained enough, since there will always be mismatches somewhere.

The Quest for the perfect ASP.Net MVC code : v0.3

You can download the full source here using (msys)git:      http://github.com/ToJans/MVCExtensions // The quest for perfect asp.net MVC code - v0.3 // // For a while I have been looking for the perfect ASP.Net MVC code. // This is the cleanest code I have been able to write. // I would like to challenge everyone to do better !!! // // By this I mean creating a better controller/views if possible codewise.

The Quest for the perfect ASP.Net MVC code : Let the games begin

Edit: Please note that the source has changed a lot lately, and that I now use a proper viewmodel instead of domain objects, so all hardlinked references to the domain objects & controllers in the MVC project have disappeared. This also automaticly made my ugly domain object extension methods to get the controller action links completely redundant. You can see the latest version on github. The next thing to do is split up the mapping bit using a proper mapping tool (f.e.

Rant : Your abomination is my clever hack

When I read the article from OdeToCode about the abuse of a programming language to create shortcuts, I felt the need to respond. What is it about ? Simply stated, it is about using some clever tricks to make it easier for the developer to reach his goal. The example was a stackoverflow post : Abuse of C# lambda expressions or Syntax brilliance? Which discusses code that looks like this : .Attributes(style => “width:100%”) What is the issue here ?

M-V-VM in Asp.Net MVC : removing dependencies between asp.Net views and controller actions

Since the early days I have always been a fan of the ASP.net MVC framework, although I had one really big issue with it : the coupling of the controller actions in the view pages. This part was a real annoyance, since all the flow and logic was included in the controller, and none of it in the views, except the action flow; this was included in the views by using Html.ActionLink.

Aubergine (BDD for .Net) source code available on github

Hi there…. After a few weeks of working on Aubergine (BDD for .Net) I have decided to release the sourcecode for this tool out in the open. Please do give me some time as I am quite new to this whole community thing. Hints are welcome ! You can find the source on github : http://github.com/ToJans/Aubergine And the download here: http://github.com/ToJans/Aubergine/downloads Enjoy !!!    

Aubergine (BDD for .net) v0.07 : support for Given-I-did-clause

Hi there, V0.07 is here : Auberginev0.07.zip (28,61 kb) Changes: * Support for “Given I did” clause (more info in this essay ) * Complete refactoring of the Account example after extending the account story (my usual Model/Service layout, although the interfaces are missing here) Here is the current example of the account story (copied from the essay):   Appendix A : a working example story : Context      Be.Corebvba.Aubergine.Examples.Accounts.Contexts.AccountContext ContextDLL  

New essay on BDD - Given-I-did to support flow in user stories

Just a quick link to my new essay on BDD: Essay : Extending BDD stories ; the “Given I did” clause - including flow in user stories I hope this is a good contribution to the BDD community

Aubergine (BDD for .net) v0.05 : text stories/html & custom output/cmdline parser

Again a new release !! * The stories are now written in text-format; unrecognized beginning of lines are skipped/not processes; example data should begin with/be seperated by “|”. * Commandline parser implemented with help Edit 3 : v0.06 arrived More info here !!   C:\Projecten\Be.Corebvba.Aubergine\Be.Corebvba.Aubergine.Examples\Lib&gt;ConsoleRunner.exe /h Aubergine Console Runner - Core bvba - Tom Janssens 2009 Usage : ConsoleRunner [wildcard or filename for story file][…] [parameters] Where parameters can be one of the following : -html Output to html unordered lists -fmthdr,-formatheader XXXX Header to put before starting the children output; example “&lt;ul&gt;” -fmt,-formatter XXXX Named storyformatter; example “&lt;li&gt;{Type} {Description} &lt;a href=‘#’ title=‘{StatusInfo}’&gt;{StatusText}&lt;/a &gt;&lt;/li&gt;” -fmtftr,-formatfooter XXXX Footer to put after ending the children output; example “&lt;/ul&gt;” -h,-?,-help Show the syntax of the commandline parameters An example story : Context    Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext ContextDLL Be.Corebvba.Aubergine.Examples.DLL Story Make sure my website gets enough visibility     As a website owner     I want to make sure that I get enough visibility     So that I can get enough traffic     Scenario Search results for keywords on searchengine should contain my url         Given the current url is search url         When searching for keywords         Then the result should contain my url            +————–+——————————–+——————+—————–+         | searchengine | search url                     | keywords         | my url          |         +————–+——————————–+——————+—————–+         | google       | http://www.google.be/search?q= | BDD .Net         | www.corebvba.be |         | bing         | http://www.bing.com/search?q=  | core bvba tom    | www.corebvba.be |         | bing         | http://www.bing.com/search?q=  | Quantum physics  | www.corebvba.be |         | faulty link  | http://www.googleaaa           | core bvba tom    | www.corebvba.be |         +————–+——————————–+——————+—————–+ The code is still the same : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Web; using Be.Corebvba.Aubergine.Model; namespace Be.Corebvba.Aubergine.Examples.Website.Contexts {     public class BrowserContext     {         public string Url { get; set; }         public string Result { get; set; }         private WebClient wc = new WebClient();                     [DSL(“the current url is (?&lt;url&gt;.)”)]         void SetUrl(string url)         {             Url = url;         }         [DSL(“searching for (?&lt;keywords&gt;.)”)]         void SearchForKeyWords(string keywords)         {             Result = wc.DownloadString(Url + HttpUtility.UrlEncode(keywords));         }         [DSL(“the result should contain (?&lt;myurl&gt;.)”)]         bool ResultShouldContain(string myurl)         {             return (Result??””).Contains(myurl);         }     } } And this is the resulting output (please try to hover over the implementation error of the “When” step with your mouse !!

Aubergine (BDD for .net) v0.06 : support for parameter tables in given/when/then

Ok, we keep on going; now we support parameter tables for given/when/then, which are parsed as array members. I am now getting very close to full cucumber-like support !!! Oh, I forgot to mention that the “And” keyword is also supported now !! An example of the new syntax: Context    Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext ContextDLL Be.Corebvba.Aubergine.Examples.DLL Story Make sure my website gets enough visibility     As a website owner     I want to make sure that I get enough visibility     So that I can get enough traffic     Scenario Search results for ‘keywords’ on searchengine should contain ‘www.corebvba.be’         Given the current url is ‘search url’         When searching for ‘keywords’         Then the result should contain ‘www.corebvba.be’         Example         +————–+——————————–+——————+         | searchengine | search url                     | keywords         |         +————–+——————————–+——————+         | google       | http://www.google.be/search?q= | BDD .Net         |         | bing         | http://www.bing.com/search?q=  | core bvba tom    |         | bing         | http://www.bing.com/search?q=  | Quantum physics  |         | faulty link  | http://www.googleaaa           | core bvba tom    |         +————–+——————————–+——————+     Scenario Search results on google for keywords should contain ‘www.corebvba.be’         Given the current url is ‘http://www.google.be/search?q='         When searching for the following keywords             +———–+             | keywords  |             +———–+             | Aubergine |             | BDD       |             +———–+         Then the result should contain ‘www.corebvba.be’ and the following markup elements             +——————+             | type | inner     |             +——————+             | em   | BDD       |             | em   | Aubergine |             +——————+ And the context :     public class BrowserContext     {         public string Url { get; set; }         public string Result { get; set; }         private WebClient wc = new WebClient();                     [DSL(“the current url is ‘(?&lt;url&gt;.)‘”)]         void SetUrl(string url)         {             Url = url;         }         [DSL(“searching for ‘(?&lt;keywords&gt;.)‘”)]         void SearchForKeyWords(string keywords)         {             Result = wc.DownloadString(Url + HttpUtility.UrlEncode(keywords));         }         [DSL(“searching for the following keywords”)]         void SearchForKeyWords(string[] keywords)         {             Result = wc.DownloadString(Url + HttpUtility.UrlEncode(string.Join(” “,keywords)));         }         [DSL(“the result should contain ‘(?&lt;myurl&gt;.*)‘”)]         bool ResultShouldContain(string myurl)         {             return (Result??””).Contains(myurl);         }         [DSL(“the result should contain ‘(?&lt;avalue&gt;.+)’ and the following markup elements”)]         bool ResultShouldContain(string avalue,string[] type,string[]inner)         {             if (string.IsNullOrEmpty(Result) ||type.Length==0)                 return false;             if (!Result.Contains(avalue)) return false;             for (var i = 0;i &lt; type.Length ; i++)             {                 var searchstring = string.Format(“&lt;{0}&gt;{1}&lt;/{0}&gt;”, type[i], inner[i]);                 if (!Result.Contains(searchstring))                     return false;             }             return true;         }     } It looks a bit messy, but thats because it is a stupid example.

Published a new Article on CodeProject : Getting started with BDD + new version of aubergine

Hi again, I just published a brand new article on CodeProject : Getting started with BDD. I also modified my Aubergine Framework a bit by adding a new feature : automatic case-insensitive DSL enum conversion. You can download the latest version here (it also contains  the example for codeproject )   Aubergine_v0.04.zip (18,72 kb) Enjoy !! Edit Since the article state on CodeProject is still “Pending”, I simply posted it in the pages section of this blog; you can read it here.

Aubergine .Net BDD : support for named/typed parameters + RECURSIVE DSL + bugfix + no more assertions

Ok, I had some ideas this morning when I woke up, so I quickly implemented them. Changes (v0.02) Here is the changelog for the new version :     * Bugfix given a DSL attribute without a parameter is called     * DSL definition changed to named parameters/typeconverters Be.Corebvba.Aubergine.Examples_v0.02.zip (16,62 kb)   Edit : v0.03 Still going; next changelog :     * Test Status changed from bool to bool? => null = test implementation error     * No more need for debug.assert; just use “bool It_should_have(amount x) { return amount==x;} So : no more assertions (ASSERTIONS ARE EVIL >:) ), and if a test fails because there is an implementation error, the status will now return a null value instead of false.

BDD with DSL: Aubergine, a ruby/cucumber like alternative for .NET - download available

Update Again a lot has changed : look here     Introduction In this article you can download the very first alpha version of Aubergine; a BDD /DSL framework for .Net, initially based on Machine.Specifications, but later on heavily inspired by Cucumber. It is AFAIK the very first Cucumber like environment in .NET available, and you will see that it is very easy to use. Due to it’s inspirator (Cucumber, I have decided to use the name Aubergine - I have no idea if they are actually related or not .

A new BDD framework in .Net : Aubergine

REMARK : An executable testrunner and some sample code is available Here : http://www.corebvba.be/blog/post/BDD-with-DSL-Aubergine-a-rubycucumber-like-alternative-for-NET-download-available.aspx REMARK : Skip to “Edit 2” to see the current syntax   Just a quick update !! After thinking a bit more about the problems mentioned by Aaron in my previous post, and taking a look at Cucumber (in ruby), I decided to give it another go. Since I have to be in the shop within half an hour 20 mins I can only give you a sample of what the current spec looks like; explanations will come in later posts..

w00t : Building a new app from the ground up : IOC, database and other stuff; a real framework

This is one of the articles in our series; the parts are: Methodology, technology & tools used Setting up the environment First specs and getting started IOC, database and other stuff; a real framework   Happy reading ! Finally a framework !  When I went to bed last night, I was thinking about a few things, so I said to myself : “Ok, I’ll quickly implement them”. But, as one can expect, a few minutes became a few hours, so in the end I did not get much sleep.

w00t : Building a new app from the ground up : First specs and getting started

This is one of the articles in our series; the parts are: Methodology, technology & tools used Setting up the environment First specs and getting started IOC, database and other stuff; a real framework   Happy reading ! Automating specs  Ok, this step took quite some time to figure out, but once you know how to do this this should be really simple. 1. Open the solution and go to the properties of the Specs project 2.

w00t : Building a new app from the ground up : methodology, technology & tools used

This is one of the articles in our series; the parts are: Methodology, technology & tools used Setting up the environment First specs and getting started IOC, database and other stuff; a real framework   Happy reading ! Introduction Since I have always been very interested in the latest technology developments, and I needed to start a new and initially very simple project, I decided to do some studying and opt for new things...

w00t : Building a new app from the ground up : setting up the environment

This is one of the articles in our series; the parts are: Methodology, technology & tools used Setting up the environment First specs and getting started IOC, database and other stuff; a real framework   Happy reading ! Ok, here are the steps to setup the development environment for my new project : Prerequisites   MSysGit Visual Studio pro or express - web developer & c#  Asp.net MVC 2 preview 2 The steps 1.

Using google Calendar as a timetracker for your customers/ convert-import-export iCal /ics/google calendar to text/csv file

Since I use a single shared Google calendar for every customer I have, so all the customers can see when I worked on their projects, I needed an easy way to import each calendar into my invoice program. I did it a few times manually in the beginning, but since this was too much of a hassle i decided to write a small program for it. The program is very simple an reads files from the stdinput and outputs to stdout.

Jong voka kick-off 09/09/09 - een succes !

Normaalgezien ben ik niet zo'n fan van netwerkevents en -clubs, en ik ben dan ook zelden aanwezig op dergelijke evenementen. Het was dan ook pas na enig aandringen van één van de stichtende leden ( Meester Jeroen Vande Sijpe - rabotlaw.be ) dat ik dan toch maar besloten had me samen met mijn zus ( Sabine - Markomo.be ) in te schrijven voor de kick-off meeting van Jong-voka; zowel het kader als de gastspreker en zijn onderwerp leken me interessant genoeg om toch even te gaan rondneuzen.

Why pick git over any other source control repository

I found a very nice article that names some of the major advantages of Git over any other source control system; it certainly is worth a read : Why Pick GIT ?

To git or not to git - Source control done right / intro and quick tutorial

Introduction  Source control has always been a really annoying issue for me, since it was either : Too complicated too manage Too restricted Too slow Too much a hassle to setup Badly integrated One or more of the above I have been working with Subversion/TortoiseSVN for a little while, but I was noticing that I really had to force myself into using the source control repository. A few times in the last month I noticed that I did not do enough commits, forcing me into re-implementing stuff again.

Bug fix : JQuery Uploadify / Internet explorer / Flash Undefined error

I had the problem that the upload component did not work with a client of mine on different versions of IE . This is appearantly due to the way flash works with dynamic flash components located within form tags in internet explorer. The fix is really easy, but it was really nasty to find the cause... If your code looks like this :              $("#FileToUpload").fileUpload({   ...    });   <form>  <input type="file" id="FileToUpload"/></form> just add a new line after 'uploadifying' the element :          FileToUploadUploader=document.getElementById("FileToUploadUploader"); So you define a javascript global var with the name of your element+"Uploader", and assign the element to it....

Why choose ASP.NET MVC as a web development platform

Microsoft has recently released their final version of ASP.NET MVC. A few months ago I investigated some time in studying this new framework (while it was in beta 3). After studying it, Core decided to migrate all current webdevelopment to this new framework, and all future web-based projects will be written in this technology as well. Since most people do not know what ASP.NET MVC is and why it should be used in favor of regular ASP.NET,I would like to clarify this choice a little bit.

ASP.NET MVC ImageHandler for thumbnails

As some of you might know, I am a really big fan of community-driven technologies. I also like to contribute myself in order to exchange new ideas and meet new people with common interests.Since I am quite new to ASP.NET MVC, I was thinking I would submit my first contribution : handling all your images through a custom actionresult/controller. This allows me to do several things : uniform access to images possibility for custom types (this example ALWAYs renders as PNG) generation of thumbnails.

Migration from dasblog to BlogEngine.NET

After a few years, I changed my blogging engine.... now I 'll have to setup a few things again (i.e. themes etc...) but I hope it is worth the effort... There is still a lot todo (i.e. layout etc), but it'll have to do for now... More on this later...

Core - Past, current & future ; exit freelance consultancy, enter project & business development

Believe it or not : exit consultancy, enter projects & business development !! After doing some consultancy I have decided to stop doing freelance consultancy, and start focussing on doing projects and business development again. Here is a little motivation : The past & current: freelance consultancy I have enjoyed working for these companies, and met a lot of new collegues and friends while doing freelance consultancy. I also learned a lot during past experiences.

Base Data Comfort and LG Viewty (KU990) : I am a follower

After having some bad experiences with my previous mobile provider -the biggest one on the Belgian market, you all know who- I decided to move over my mobile services to the same provider as my telephone and Internet : telenet; they have the advantage that one does not need to pay any extra membership fees for mobile services ; the cost was on a pay-per-use basis. While the telenet mobile service was actually pretty good value-for-money (as far as I recall they are a reseller for mobistar), they had one big disadvantage : this was only a speech and texting service, and no mobile surfing at all.

Using AOP / PostSharp to implement a function cache

I just posted this comment on codeproject : I just discovered this a few hours ago, and I allready wrote a small but very helpfull attribute : a attribute to cache constant but timeconsuming function calls. If you have a function that takes a lot of time to generate, but the result set is actually the same each time for a certain parameter set, you simply need to define it as follows : (code is written in VB since we're using vb @ work here) Module Module1   Sub Main()     Console.WriteLine("calling Div2 for i = 1", DoDiv2(1))     Console.WriteLine("calling Div2 for i = 2", DoDiv2(2))     Console.WriteLine("calling Div2 for i = 1", DoDiv2(1))     Console.ReadLine()    End Sub   <Cacheable()> _   Function DoDiv2(ByVal i As Integer) As Double      Console.WriteLine("running Dodiv2 for " + i.ToString())      Return i / 2   End Function End Module If you run this code, you will see that the function only gets executed once for parameter value 1; the second time it just searches the cached dictionary.

Video : Rally Pittoresque

Last weekend I participated for the first time with Rally Pittoresque, an old timer rally. There were some pretty exclusive and nice cars there, a nice atmosphere, and it was great fun, so I posted a small video impression. I joined the rally with the first European Delorean prototype (built in 1981) from one of my customers, and my copilot was my brother in law Simon. You can find more info on the delorean here.

iPhone Keyboard on Windows Mobile 5/6 : download update available

After a little chat with Tene from xda-developers.net, I suddenly realised that the performance problems could be easily solved my making the keyboard a little bit less tolerant to errors. So I adjusted a single variable, compiled the version, and ... Now it even runs smooth on my emulator... You can download the version here : coreInput12.zip (67,25 KB)

iPhone thumb keyboard for windows mobile 5 / 6 : download available

I have a new version of the intelligent keyboard for Windows Mobile 5/6 available. In this version, I use a smaller dictionary (15000 english words), and I have improved the performance as well. Currently the demo application supports : - AZERTY, QWERTY & Number keyboard layouts - tactile feedback (a sound gets played each time you press a button) - intelligent word prediction (the words get chosen based on the position of the letters on the keyboard, so while you press 'I', the keyboard will also consider other letters like 'UOJKL', but they get a lower ranking.

Email : Job offer or SPAM; use google as a spam filter

Today I recieved a strange mail in my inbox : Dear Job Seeker, Our International Corporation has a variety of high-paid positions available at the moment. We are proud to offer you an interesting, respectable position in a field of Financial Services. If you are a honest, responsible and hard-working person we would be glad to do business with you. Our company is a respectable international organization. We believe that the success of our company depends on maintaining high standards of business conduct, integrity, safety, quality and respect for people and the environment in everything we do.

Alternatief voor Telenet digicorder opnemen, programmagids en flexview

Verder met het digicorder-verhaal : Ik heb in plaats van een digicorder een HDD/DVD recorder aangeschaft met EPG en g-link: de Sony RDR HX725 Voor mij dus voorlopig geen digitale tv, maar wel veel van de mogelijkheden die digitale tv ook biedt : - programmagids - tv pauzeren - .... Daarnaast kan ik met dit apparaat ook : - DVD/divx/MP3/foto's afspelen - opnames op dvd wegschrijven - waarschijnlijk een digibox aansturen dmv g-link.

iPhone thumb keyboard input simulation for windows mobile 5 / download available

I have been extending my former iPhone UI input simulations further, and migrated the intelligent thumb keyboard part to windows mobile 6 :   Some examples of wrong keyboard input, while the expected result was still first match : SURROGATE (input text : XUERMFSRE ) TWEAKER (input text : YSRALDR ) ABSOLUTE BEGINNER (input text : ZHDIMYTR JRHOKKER) It does run on the emulator, but it seems to be a little slow. It would be interesting if YOU could test it yourself on a real windows mobile 5 device, and test the performance.

Update : IPhone UI study : keyboard text input and gestures mock up - download here

Since there was an unhandled exception reported by a user and I found the cause of the exception, I posted on update from my original article. Get it here : IPhone UI study : keyboard text input and gestures mock up

IPhone UI study : keyboard text input and gestures mock up - download here

Updated !!! Somebody in stated in a comment he got an exception. I finally found the cause of it, and updated the application. Download the new version below, and be sure to refresh your browser cache While looking at a few you tube videos about the iPhone, especially regarding the keyboard/text input, I was thinking : hey, why wouldn't I try to replicate the iPhone UI behavior ? I don't think it  should be that hard ...

New version of DasBlog with extra and jforsythe macros installed

As you might or might not have noticed, last weekend I upgraded to newtelligence DasBlog 1.9.7174.0 nightly build, and modified my layout a little bit. I have also installed the Extra and jforsythe macro plug ins. Some advantages : Gravatar support (though it does not seem to work correctly yet) Automatic spam comment filtering with AKSIMET  Ability to track your comments with coComment Show recent comments Show related articles Allow paging in category view Show next and previous articles Track back anti-spam verification ...

Safe method invoker in c#

Today I was reading an article on codeproject by Mark Clifton about using a safe invoker for a method. While the idea was quite good, I think the implementation was a bit bloated, so I posted a comment with my own implementation. This was the implementation I posted: class SafeMethodInvoker { public delegate void ExcDlgt(Exception e);public delegate void voidDlgt(); public delegate bool boolDlgt(); public static void Run(boolDlgt del, int TimeOutMs,

Verdere info omtrent telenet digicorder etc..

Ik heb vandaag via een forum een verduidelijking gekregen van iemand die een ex-medewerker is voor de helpdesk van telenet. Je kan het volledige antwoord hier vinden. Dit is de quote : 1) je kan het wel op dvd branden, de digicorder heeft zelfs 2 scart aansluitingen zoals een videorecorder - speciaal hiervoor. Het is wel zo dat sommige programma’s ook een macrovision doorgeven - bv prime - ter voorkoming van opname naar video of dvd.

Send smtp mail with an image included : a small but interesting code fragment

Back over at codeproject an interesting article has been posted : how to send mail over smtp including an attached image. This is the code : //create the mail message MailMessage mail = new MailMessage(); //set the addresses mail.From = new MailAddress("prashant@gmail.com"); mail.To.Add("you@gmail.com"); //set the content mail.Subject = "Mail From Prashant Lavate"; //first we create the Plain Text part AlternateView plainView = AlternateView.CreateAlternateViewFromString("This is my text , viewable by those clients that don't support html", null, "text/plain"); //then we create the Html part //to embed images, we need to use the prefix 'cid' in the img src value //the cid value will map to the Content-Id of a Linked resource.

Antwoord mbt Telenet Digibox van de vlaamse overheid

 Gezien ik niet zo'n fan ben van de Telenet DigiBox/DigiCorder heb ik enkele dagen geleden een mail verstuurd naar het kabinet van de minster van media : Geert Bourgois. Vandaag heb ik een duidelijk geformuleerd en grondig uitgewerkt antwoord gekregen van Caroline Uyttendaele - Raadgever media (en dit tegen alle verwachtingen in): Geachte Heer Janssens, Met belangstelling heb ik uw mail van 1 juni 2007 gelezen. U brengt enkele punten onder de aandacht waar ook wij met interesse de marktevolutie volgen en waar we, indien noodzakelijk en mogelijk, eventueel regulerend zullen optreden. Zoals u aangeeft, gebruikt Telenet DVB-C technologie gekoppeld aan een voorwaardelijk toegangssysteem (CAS of conditionnal access system) van Nagra.

Technorati subscription :

In order to increase my blog visibility I have subscribed myself to Technorati. In order to claim this blog I had to create an article with a link to my Technorati Profile . I am hoping to post to this blog on more regular intervals. In order to get you started I will provide you a link to some of my articles on codeproject. Enjoy !

New article on CodeProject : a minimalistic Telnet implementation

Another fine article by me ;p Due to the positive responses from yesterday I decided to publish another article on codeproject. You can find it here : http://www.codeproject.com/useritems/MinimalisticTelnet.asp  

Posted a new article on Codeproject : Who needs Linq anyway

Today I finished a new post on Codeproject that shows how I implemented the DAL part of my current ASP.Net Framework. You can find the article here. Enjoy !

Alternatief voor digibox/digicorder (Telenet digitale televisie)

Na enkele keren bellen naar telenet ben ik het beu, en heb ik de volgende mail naar iemand van het kabinet van onze minister van media gestuurd; de inhoud van de mail ziet er als volgt uit : Geachte Mevrouw Uyttendaele, Bij telenet zelf blijk ik met mijn vraag nergens terecht te kunnen, en word ik van het kastje naar de muur gestuurd, dus richt ik mij tot u, in de hoop dat u misschien meer succes heeft.

CRM day 999999 - Buildprovider DAL - subsonic dal is not sufficent -

It's been really busy since my last post, but I can allready tell you that I did not make the deadline. Instead of using the SubSonic framework, I have been developping my own framework using buildproviders. The subsonic framework seemed to have a few things that were not really natural/flexible enough for me. My own project is still in development, but I can assure you that I currently only need to implement some finetuning and cleanups.

CRM day 4 : Discovered a new approach

Yesterday I had some things to do, so I could not really implement the main classes. Today, I am happy not to have started, since I have discovered Subsonic. (Screencast at http://www.wekeroad.com/actionpackintro.html ). This is a very nice ASP.Net prototyping framework, that has all the necessary buzzword features implemented. Atlas/AJAX/… Later this day I will implement my basic data model, and try to extend the generation classes to implement the ActAs..

CRM day 2 : some general stuff

I have had some other things to do today, but I did find the time to read up on some of my rather basic & rusty knowledge (ASP.Net 2.0 / Atlas / ... ) I am hoping to put together the base classes this evening. As a simple data mapper I will use ORM.Net because : I am familiar with it It works rather quick & correct for a data mapper It is open source, so it could easily be adapted It does the job for me It implements a very nice query system Some disadvantages : .Net 1.1, not 2.0, so no generics/partial classes etc Not a real ORM, only data mapper, but since one can define a 1:1 relation, ORM should be quite easy to implement Currently only SQL Server is supported Not a really active userbase I will keep you all posted about my progress tonight !!!

CRM day 1 : Some simple ideas explained

Today I will not actually program any stuff, but i will layout some basic stuff on paper this blog. First draft : I will start from the default object properties : DefaultObjectProps : id : unique identifier description : text description (for dropdownlists etc) created : date of creation created by : user modified : date of last modification modified by : user Then the default act_as_props DefaultActAsProps < DefaultObjectProps Parent (id, type) ActAsSecured < DefaultActAsProps OwnerUser : user OwnerGroup : group UserRights,GroupRights,AnonymousRights : CRUD bools implements : bool Allow Read (type,int id) bool Allow Write (type,int id) bool Allow Create (type,int id) bool Allow Update (type,int id) ActAsTree < DefaultActAsProps ActAsPageable < DefaultActAsProps ActAsSortable < DefaultActAsProps ActAsFilterable < DefaultActAsProps ActAsTaggable < DefaultActAsProps ActAsSchedule < DefaultActAsProps ActAsCommentable < DefaultActAsProps ActAsRule < DefaultActAsProps ActAsFileContainer < DefaultActAsProps An object instance can be represented in two ways PresentAsRow : Object row view PresentAsForm : Object Form view These rowpresenters will be used in a form.

Develop a CRM-app prototype in one (yes ONE) week

After developing several base implementations of a CRM package I have decided to re implement the full app from top to bottom. So what is the big deal about it ?    I have only a week left to develop a fully functional prototype. Why ?I am currently developing a CRM framework for one of my customers (private banking). While the current framework is working pretty decent, I am very unhappy with the current implementation (fifth already).

Mesothelioma and lawyers

Mesothelioma and lawyers ? Google has been providing a tool to show the current rates for adsense words. This is the top 10 of current pay-per-clicks :  1  $54.33   mesothelioma lawyers     2  $47.79   what is mesothelioma     3  $47.72   peritoneal mesothelioma     4  $47.25   consolidate loans     5  $47.16   refinancing mortgage     6  $45.55   tax attorney     7  $41.22   mesothelioma    8  $38.86   car accident lawyer     9  $38.68   ameriquest mortgage    10 $38.03   mortgage refinance   Source : cwire.org Since I am not a medically trained , I have absolutely no clue what this mesothelioma has to do with lawyers.

HOWTO : (Dutch) onderhandelen over je loon

De volgende vraag werd op een forum gesteld :   …   De nieuwe functie is echter een uurtje rijden en vereist dat ik goed bereikbaar ben. Ik kan een firmawagen krijgen, een GSM van de firma en zelfs een laptop van de firma. De firmawagen ben ik geneigd om te nemen. Dat komt ongetwijfeld veel goedkoper uit dan zelf kopen. De GSM waarschijnlijk ook, maar de laptop heb ik niet meteen een praktisch nut voor.Nu is mijn vraag wat dit allemaal waard is?

HOWTO : avoid concurrency issues on a database

While some people will try to explain just exactly what kind of database locking types exist, I am a big fan of the more pragmatic approach : how to avoid concurrency issues. 1. Keep a history of your data, or use versioning on your table. If you are using a value that gets updated by another transaction within your own transaction, chances are you are supposed to keep a history of the row versions.

HOWTO : buy a speaker/surround system for your home cinema and music experiences

Choosing a correct speakerset is actually a real quest, and in order to make that choice, I have taken the following points under consideration: - make sure you are hearing the speakers/reciever without equalizer/optimizations during a demonstration. Sales reps tend to make high sounds sound overnaturally sharp, and low sounds boomy. While this might sound impressive during a short demonstration, it really starts to get annoying listenig to it for a long time.- If you are listening to a system with satelites and a seperate sub(woofer) : volume & crossover/cutoff frequency make all the difference, together with the settings of your satelites as large or small speakers (no bass tones from sats <-> bass tones from sats). A sub that is correctly configured shouldn’t draw your attention.

HOWTO : buy a plasma/LCD Television

While buying a plasma or LCD television is actually a subjective thing, I have some personal tips that might come in handy : The minimal distance between the television and the viewer should be 4 times the screen size, so if you have a 42 “ screen which equals about a metre, your viewing distance should at least be 4 metres. If you are sitting any closer, it feels like you are sitting in a front row seat in your local video theatre.

Opengl / c# source - Paul Bourke 3d Supershapes

(Programmers only !!! ) While checking out some stuff on my PC I noticed some old sloppy code lying around : A quick and dirty hack to show how Paul Bourke’s supershape works in 3d. It was a quick hack from a c#/TAO nehe OpenGl Example, so don’t expect to much from it. It uses the same parameters for both dimensions, so it is not fully identical to the program of Paul Bourke… More info on Paul Bourke’s supershapes can be found here.

Current progress

I am currently very very  busy (15h+ a day) developing several projects, including Aestethics+ and Fact+. Since it's been a long time since I've posted any updates, I decided to make an effort today (although it's currently 1.00 AM already). Aestethics+ is a program written especially for plastic surgery clinics to manage their patients, an it looks like this (Click on the screen shot for a bigger version) : It has been developed in cooperation with a team of several plastic surgeons from a new plastic surgery clinic, so it is actually modeled according to the need of the surgeons.

Aestethics+ / SE P910i

I'm currently working on a new application for a plastic surgery clinic :  "Aestethics+".  More news about this when the specs/prototype is finished. I twill be compliant with the international standards... A small screenshot of an early prototype (click to enlarge): Also, in order to prevent forgetting appointements, tasks etc... I've acquired myself a new device called a P910i. It's a hybrid GSM/PDA, but in a reasonable form factor. It certainly has improved my life a lot.

Best wishes !!!

Best wishes; a Merry Christmas and a Happy New Year to everyone !!!!

New google service - predict your search requests

In it's ever-continuing quest of improving their search engine, google is trying out a new concept : Google auto-suggest. As you type in your search words, google tries to predict them... In internet explorer (or mozilla, or almost any browser for that mather) you have an auto complete function : as you type in words, the program looks if you have previously entered any terms starting with the same letters. If you have, it shows them in a list, so you can simply select them instead of re-typing them.

Must-have open source/freeware application lineup

Here at core, I use several freeware/open source tools and resources to make my life easier, and best of all, they are all free to use... A line-up : Sauce Reader This is currently (according to my opinion) simply the best RSS-reader available. It is simple and works as expected with support for ATOM/RSS/RSS2. If you need to track a lot of websites for updates, this is one of the most time saving assets you can have at this moment.

CROAM - objective analysis

In my study for the 'perfect' project analysis tool, I developed a new analysis model , I'll call CROAM from now (Core Recursive Objective Analysis Model). With this model, one should be able to analyze almost anything. The whole new idea of this model is the fact that it's a recursive model, it gets recursed by refining the objectives. This model can be used to map business processes, create project plans, ...

Cudi - Core universal database interface

In dutch… english translation will follow In de voorbije maanden heeft Core voor u een nieuwe applicatie ontwikkeld : de Core Universal Database Interface, kortweg CUDI. Wat is CUDI CUDI is een programma waardoor u tesamen met Core bvba zéér snel programma's kan ontwikkelen en in gebruik nemen. Waarom kiezen voor CUDI in plaats van een standaard-pakket ? Bij het merendeel van de standaardpakketten moet u de gegevens aanpassen aan de structuur van het pakket, waardoor u zich soms in allerlei bochten moet wringen om zaken geïmplementeerd te krijgen; u past zich dus aan aan het systeem.

TestDriven.Net 1.0 out

Found this on Peli's blog, and as an adaptee of the xp principles, and as a .NET programmer, I simply have the duty to mention this :   TestDriven.NET 1.0 is out! Get it quick! TestDriven.NET 1.0 is released on www.testdriven.net (MbUnit ships with TD.NET). Check out the brand new web site!    You are a TD.NET user ? Use the link builder and add a cool image like this one on your blog or web site...

The user interface aspect

Her is an excerpt from my former blog regarding user interface aspects... It's interesting to see how my opinion evolved from this kind of thinking to CROAM previous web logs can be found @ blogspot   ---><8---------------------- A user-interface is one of the points that makes or breaks your program when users start to work with it. Millions of euros are being invested into programs that never get used, since the users find it un-intuitive.

About me

I solve business problems by building software and help organisations to get better at building software. I am one of the founders of Domain Driven Design Belgium. Proficient in C#, JavaScript, lover of Erlang, Elixir and more recently Haskell. I love DDD, CQRS and tackling legacy software. Contact me I am always looking for projects and opportunities; contact me. by form: here by email: Tom@corebvba.be by phone: +32 478 336 376 by Skype: Call Tojanss or Chat with Tojanss Some references Vaughn Vernon - Software Developer, Trainer, Consultant, IDDDWorkshop It was a lot of fun to work with Tom during my first European IDDDTour.com Workshops.