After Programistok 2018


The time has come to drop a few lines about Promgramistok 2018. This time I didn't give a presentation. Instead, together with my colleague Rafał Maciąg I conducted workshops "Recipe for DDD, BDD, CQRS and Event Sourcing".

About conference

In general I can speak only in superlatives. I'll start by saying that the communication with organizers was simply perfect - I got answer for all my questions almost at no time. We were accommodated in the superb hotel on the market in Białystok. The before party was simply great (old school games, beer and not only, pizza, great people). I almost got touched while I was able to play Pegasus the first time since my childhood. We also didn't have to worry about transport - Do you need a transport to the train station? No problem. Do you need transport to the After Party? No problem... Last but not least the gift bag was delicious ;) I really regret that after workshops I had to go back to Warsaw and I didn't participate in the rest conference.

About workshops

As to the workshops. Despite some technical problems I'm happy with them. What is the most important participants were very active, had questions etc. Thanks! I talked with a few of them during the After Party and it looks like it was ok. Though I'm still waiting for surveys ;)

Our workshops consisted of 3 parts: some theory, Event Storming session and some programming. The first 2 parts went without any obstacles. Well except one minor one. I was asked by organizers what we would need. I told that sticky notes and markers. Unfortunately, this information was lost somewhere so it's good that we took our own equipment. After the first 2 parts we planned to make some coding exercises. To make everything smooth we prepared the sample project and description of tasks.  In the case of problems with Internet we also prepared a zip file with all required nugget packages. Finally, we told participants that they would need VS and Microsoft SQL Server Express installed.

We didn't anticipate only one things i.e. problems with Microsoft SQL Server Express. It's our mistake that at home we tested a sample project but with Microsoft SQL Serve Developer Edition. It turned out that the express edition requires additional actions like changing firewall rules or changing configuration in SQL Server Configuration Manager. We tried to do that but finally we give up in order not to waste too much time.

Live coding

Instead we made a live coding. I was sitting in front of the computer and programming. In the meantime Rafał was explaining details, answering questions etc. On the one hand I have to say sorry that it looked in this way. On the other hand I'm really happy that this unplanned live coding session went so well!

Final thoughts

In the summary I have to say that the next year I will do my best to take part in Programistok again.  The conference was so good that after coming back to Warsaw I decided to call organizers and and tell them this directly. Eliza Kasperuk, Adam Piotrowski, Dawid Kozak and others (that I didn't meet or I didn't remember by name) - Thanks for Programistok!

*The picture at the beginning of the post comes from organizers of Programistok and was taken during "Recipe for DDD, BDD, CQRS and Event Sourcing" workshops.


After .NET Developer Days 2018


Another .NET Developer Days behind me. This time it was something new for me because I was a speaker. I gave my presentation "Will AI replace developers" on the second day of the conference at 15:00. On the one hand, it was quite late and I was a little bit afraid about number of listeners. On the another hand, it was a chance to be well remembered because in general we remember better what was at the beginning and at the end. So how was it?

I think that there ware around 50 people on my presentation. I haven't received surveys' results yet (I will share when I get them) so I cannot be sure but I'm quite happy with my speech. First of all, I thought that I would be much more nervous but the preparations and some experience did their job and it was not a problem. I didn't forget about saying anything and the live demo went well. Besides I was speaking fluently and even my jokes seemed to be funny ;). Here you can listen the interview with my that was recorded just after the presentation by Grzegorz Kotfis.

Of course there are things to improve. I planned my presentation for 50 minutes + 10 minutes for questions. Apparently I was speaking too fast so I finished after 45 minutes. Unfortunately, there were no questions but on the other hand I talked with a few people just after the presentation. Next time, having 60 minutes for the presentation, I would prepare materials for at least 60 minutes :)

Now a few words about the conference and the organisation. On 17th, I was invited for the speaker dinner. I had an occasion to meet other speakers, the food (and not only) was superb... A big plus for organizers. The conference as usual took place in EXPO XXI so there was no surprise here. Of course organizers didn't forget about dedicated room for speakers. Dinner, snacks, soft drinks were also on the high level. As to presentations I'm extremely happy that quite a few were about machine learning. I hope that this trend will continue.

I will not write a lot about presentations because honestly speaking I was mainly focused on my own one ;) However, I especially well remember presentation given by Konrad Kokosa about "DOD, ECS and Other Not So Obvious Techniques in .NET Ecosystem". I was already convinced but he convinced me even more to buy his book Pro .NET Memory Management For Better Code, Performance, and Scalability. It was also nice to hear from Peter Drougge that Microsoft is going to develop ML.NET library and provide .NET Developers with more and more models. A little pitty that his presentation was quite short. Noelle LaCharite gave interesting presentations about Microsoft Cognitive Service but they could be more technical. I also liked the presentation from Daniel Marbach about async/await. I refreshed my knowledge.

There are a few things that can be improved. Unfortunately there were some technical problems like not working projector or problems with sound... It also seems to me that the idea of Ask the expert zone didn't work well - I didn't see many people talking with experts. Queues for dinner are so normal on big conferences that probably it's not worth mentioning. However, one day I had a problem to eat dinner because containers (or whatever we call it) with food were empty and the staff didn't do anything about that.

To sum up, I think that it was a good conference both for participants and for speakers. However, I have the impression that it's becoming too big and the organizers are facing a very big challenge.


I will give a talk at .NET Developer Days 2018!


.NET Developer Days is one of the biggest conference in Eastern and Central Europe. I took part in the first and in the second edition and when the third edition was coming I decided to try to send my proposal in the response to the Call of Paper. And you know what? My proposal was accepted! My first thought after receiving this information was "Oh my gosh, now I have to prepare the presentation and give a talk in a front of XXX people!" ;) Fortunately, the second was "Michał, If you take the first step, you have to take the second".

My presentation will be about future of us - developers. I'll try to answer the question "Will AI replace developers?". Not so far ago I would say that it is impossible. However, technology is moving forward very fast and almost every day I find some new publications about attempts to automate software development. During my presentation I'll talk about a few extremely interesting solutions but not only. I'll also try to show some of them.

So if you work in IT and you are curious if human being will be replaced by AIs in near future or simply you are interested in contemporary AIs, then my presentation is for you.

I really hope that we will meet during the conference. The location is, as usual, the building of Expo XXI. For now, there are 30 speakers in agenda so I'm sure that you will find something interesting for yourself. The sooner you register the less you pay so do not wait too long.


How to use Roslyn with .NET Core?


Title: Baths of Caracalla in Rome, Source: own resources, Authors: Agnieszka and Michał Komorowscy

When we started PlatformX project, we were using full .NET Framework and it was natural to use Roslyn in order to read and analyse C# code. I have to admit that Roslyn, despite some initial problems (see other posts about Roslyn), managed to do the job. However, later on we decided to migrate PlatformX to .NET Core. There were a few reasons behind this decision:
  • We anticipated that in future we may want move to Linux server for example to reduce costs.
  • .NET Core is faster. To give you an example. After migration builds turned out to be 1.7 times faster and tests 2.6 times faster!
  • Before migration we had to support 2 versions of our infrastructure libraries (.NET Framework + .NET Core) what was a little bit cumbersome. Now we support only one.
  • If we had waited, we would have spent more time on the migration later.
Despite all these advantages the migration to .NET Core meant a problem with using Roslyn. This problem is called MsBuildWorkspace. It is the class that allows you to point a solution or a project, read it and then analyse it a file after a file. Unfortunately MsBuildWorkspace is not supported in .NET Core. I think that the main issue is that under the hood it uses MS Build which is not cross-platform.

Because nowadays .NET Core projects can actually reference full .NET Framework libraries (of course it kills portability), firstly we simply tried to do so. But without much success. MsBuildWorkspace simply cannot handle .NET Core projects. The actual effect was that according to MsBuildWorkspace there were no files in a project being analysed.

Fortunately, the rescue came from Buildalyzer project which does exactly what MsBuildWorkspace should do and it works like a charm. Here is how we use Buildalyzer:
var sb = new StringBuilder();
var writer = new StringWriter(sb);

var manager = new AnalyzerManager(solutionPath,
   new AnalyzerManagerOptions
      LogWriter = writer

foreach (var prj in manager.Projects.Values)
   // GetWorkspace returns Microsoft.CodeAnalysis.AdhocWorkspace which can be used with Roslyn
   var workspace = prj.GetWorkspace();

   // Starting from here the code does not depend on Buildalyzer
   var sln = workspace.CurrentSolution;

   await AnalyzeProject(sln.Projects.First());


As to AnalyzeProject method, it is responsible for analyzing all files in the project. What is important it DOES NOT depend on Buildalyzer at all. I really didn't have to change a line after switching from MsBuildWorkspace to Buildalyzer and it is amazing. Just a few lines of extra code and you can take all advantages of Roslyn in .NET Core projects in order to analyse other .NET Core projects.

*The picture at the beginning of the post comes from own resources and shows Baths of Caracalla in Rome.


CareerCon 2018 - The best mix in history - DDD, CQRS, Event Sourcing and others


For years I was designing and developing "classical" applications. Then I entered the new world of DDD, CQRS, Event Sourcing... and it was an extremely refreshing experience. It wasn't easy all the time but I do not regret and I decided to share my experiences.

On 24th March I gave a presentation under the title "The best mix in the history - DDD, CQRS, Event Sourcing and others?" at CareerCon 2018 conference. I tried to show benefits but also drawbacks of using DDD, CQRS and Event Sourcing.

I'm glad with this presentation. It took as much time as I assumed and there were really many questions at the end. Majority of them were about Event Sourcing. It looks like a very hot topic nowadays.

The results of the surveys also confirm that the presentation was well received :) Thanks, it really motivates me.

If you are interested in DDD, CQRS and Event Sourcing and you would like to hear about that at another conference or in your company, do not hesitate to ask me.

And here you can find the presenation:

*The picture at the beginning of the post comes was provided by organizers of the conference.