Event sourcing from the ground up

Starting with a some rabbling while reading the source of elixir eventstore My original idea was to first start with some event storming and then go into programming. But I think it will be very important to have a very clear structure for this workshop so that everyone can follow. Not only that, it will also be very to have a why would you do that. When starting with event storming, maybe we are missing some basics. »

My summary of DDD Europe 2018

Well, that was a blast. DDD Europe 2018 is already over. And I loved it! Because I had lovely conversations, great insights and good learnings, I had the idea to create a summary, mostly for myself. Pre conference workshop DIY Event Sourcing Tooling A pre conference workshop by Marijn Huizendveld on Tuesday and Wednesday. This workshop about making your own event sourcing tooling was not exactly what I expected it to be. »

Exploring aggregate boundaries in event sourced systems

In this post I’m exploring some ways of modelling aggregate boundaries in an event sourced system. This is mostly to crystallise some thoughts that I had after some event storming sessions, but it might be interesting to someone else. The domain I’m using in this post is the domain that Michel Grootjans and I have created for the workshop Playing with projections (We already gave it a few times, for example at DDD Europe and will also give a session at I T. »

Modelling money in Elm

After reading the blog post of Mathias Verraes (@mathiasverraes) on (Type Safety and Money)[http://verraes.net/2016/02/type-safety-and-money/], and after doing a real short modelling attempt in Haskell at Socrates Belgium, I wanted to try to model Money in Elm. I don’t want to go to deep and too far so I’ve set some basic constraints for myself: You cannot add money of different currencies (you need an explicit conversion) - Add constraint We also want a Price. »

Refactor till you drop

Introduction Iteration 1 function getSymbol(symbolName) { return 'replace'; } function escapeRegExp(string) { return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); } function SymbolReplacer(s) { this.alreadyReplaced = []; this.stringToReplace = s; } //iteration 1 https://sites.google.com/site/unclebobconsultingllc/one-thing-extract-till-you-drop SymbolReplacer.prototype.replace = function() { var symbolPattern = /\$([a-zA-Z]\w*)/g; var matches; while (matches = symbolPattern.exec(this.stringToReplace)) { var symbolName = matches[1]; if (getSymbol(symbolName) !== null && this.alreadyReplaced.indexOf(symbolName) === -1) { this.alreadyReplaced.push(symbolName); var toReplace = new RegExp(escapeRegExp(matches[0]), 'g'); this.stringToReplace = this.stringToReplace.replace(toReplace, getSymbol(symbolName)); } } } var x = new SymbolReplacer('dit $is een $test $test $test $is $complex gewoon woord'); console. »