27/11/2020

My first research on blockchain!

Home


In cooperation with Nethermind, I published my first research on EIP-1559. It is an extremely hot topic in Ethereum community nowadays. I analyze how legacy and EIP-1559 users will be treated by the network in post EIP-1559 world. The research, in the form of a Jupyter notebook, can be found here. Comments are welcome.

17/04/2020

Neo4j Cypher is great but sometimes strange

Home



My journey with Neo4j started a few months ago and I really think that it is a great database and I'm in love with its query language called Cypher. However, especially having SQL background, some things might be surprising (in this negative way). I will give you an example. Let's assume that we have a graph that among other stores movies. We may write such a query to retrieve all the movies:
MATCH (m:Movie) 
RETURN m
Here is a sample result:


If we slightly modify this query we can select movies that were released in 1999:
MATCH (m:Movie)
WHERE m.released = 1999
RETURN m
This time we will get just 4 movies:


Now let's make something more complex i.e. additionally let's return information about producers of movies (if they exist):
MATCH (m:Movie)<-[:PRODUCED]-(p:Person)
WHERE m.released = 1999
RETURN m, p
This query has one small bug. The problem is that it returns only 1 movie while we know that there are 4 movies released in 1999. To fix a problem we need to use an equivalent of LEFT/RIGHT JOIN from SQL which is called OPTIONAL MATCH:
MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:PRODUCED]-(p:Person)
WHERE m.released = 1999
RETURN m, p
Better but still something is wrong. Instead of getting 4 movies, we have dozens of them and if we analyze results we will notice something very strange. Movies returned by a query above were released in many different years e.g. in 1975 even though we have this condition WHERE m.released = 1999.

Does it mean that WHERE statement in Cypher does not work in some cases? Or maybe something is wrong with OPTIONAL MATCH. Well, everything is ok if we know how Cypher exactly works. What is not obvious is that:

OPTIONAL MATCH ... WHERE never removes rows from the result.

Yes, it is awkward but it is how Cypher works. Everything is also explained in this nice article from Neo4j. Any way to fix a problem we have 2 options. We can either change the order of statements in a query:
MATCH (m:Movie)
WHERE m.released = 1999
OPTIONAL MATCH (m)<-[:PRODUCED]-(p:Person)
RETURN m, p
Or use WITH statement:
MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:PRODUCED]-(p:Person)
WITH m, p
WHERE m.released = 1999
RETURN m, p
And now results are perfect:



17/09/2019

High Load Strategy 2019

Home



I'd like to invite you for my presentation (and not only mine) during this year edition of High Load Strategy conference. On 10th October, together with my colleague Artur Kordzik, we will talk about security in a high-load, distributed environment. Of course, it is not everything and we prepared much more. My colleagues will talk about Kafka, Docker, AI and other things Tiggers like the best.
  • 15.30 – 16.00 Snacks & Networking
  • 16.00 – 16.30 Keynote
    • R. Jaworowski
  • 16.30 -17.15 How we manage our Kafka clusters
    • Robert Fabisiak & Tomasz Gintowt
  • 17.15 – 18.00 What can go wrong during 1,14 ms?
    • Marius Lozda & Wojciech Kromolicki & Arek Bazylewicz,
  • 18.00 - 18.45 RTB Bid Landscape - survival models powered by bitmaps
    • Łukasz Mączewski & Przemysław Piotrowski
  • 18.45 – 19.30 How to make security in a high-load distributed environment
    • Michał Komorowski & Artur Kordzik
  • 19.30 – 20.15 High performance on Docker– adventure
    • Krzysztof Stolarz & Dariusz Binkul
  • 20.15 – 21.15 Beers & Networking
All presentations will be in Polish.

30/04/2019

Event Storming workshops from the other side

Home



Some time ago I gave the presentation about DDD and Event Storming during Girls Do IT 2019 conference. I also had occasion to run workshops on the same topic during Programistok 2018 and facilitated a few Event Storming sessions in the past (here is one example). So I can say that I have experience with this very nice modeling and business domain exploration technique proposed by Alberto Brandolini.

However, when I realized that I can take part in Event Storming Workshops organized by Krzysztof Owsiany and Mikołaj Jakubowski I didn't hesitate much to sign in. The workshops had two parts i.e. EventStorming - Big Picture and EventStorming - Design Level. I take part only in the second one while it was more interesting from my perspective.

In the beginning, we finished the Big Picture part and made a quick summary of what was done during the first part of the workshops. Then Krzysztof made an introduction to Design Level Event Storming. To do so he drew such a nice diagram:



Then we divided into 3 teams and started designing a part of a system in more details. Below you can find results of my team.


In the end, we compared designs prepared by all 3 teams. In was interesting to observe the difference between our designs even though we were supposed to design the same functionality.

To sum up I really didn't regret taking part in the workshops! For sure, it was not lost time. It was very valuable to see Event Storming session from the other side and observer how it is facilitated by someone else.

Are you ready to give a chance to Event Storming?

*The pictures in this post comes from own resources and were taken during workshops

11/03/2019

Girls Do IT 2019 - DDD and Event Storming

Home



English

At the end of March I will give a  presentation about DDD (Domain Driven Design) and Event Storming during Girls Do IT conference. Here is a short description:

DDD is a phenomenal approach to software development, which focuses on modeling and developing of a common language (a.k.a. ubiquitous language) used both by business and engineers.

Whereas Event Storming is a technique of modelling and gaining knowledge even of complex business domains, which is more and more popular especially among DDD practitioners. In 2018 it was even placed on the famous ThoughtWorks Technology Radar as the recommended modeling technique.

The aim of the presentation is to share experience and discuss the basics of Event Storming and DDD.

Polski

Pod koniec marca w czasie konferencji Girls Do IT przedstawię prezentację na temat DDD (Domain Driven Design) oraz Event Storming'u. Oto krótki opis:

DDD to fenomenalne podejścia do wytwarzania oprogramowania, które kładzie nacisk na modelowanie i wypracowanie wspólnego języka pomiędzy biznesem, a inżynierami.

Event Storming to natomiast technika modelowania i zdobywanie wiedzy nawet na temat bardzo złożonych domen biznesowych, która przebojem weszła na rynek IT, a szczególnie upodobali ją sobie właśnie praktycy DDD. Może wystarczyłoby powiedzieć, że w 2018 roku została umieszczona na słynnym Technology Radar firmy ThoughtWorks jako zalecana technika modelowania.

Celem prezentacji jest omówienie podstawowych zagadnień związanych z Event Storming'iem oraz DDD, a także podzielenie się ze słuchaczami praktycznymi doświadczeniami w tym obszarze.

14/01/2019

4Developers 2019: Rusza kolejna edycja największego Festiwalu Technologicznego w Polsce

Home

*To jest tekst sponsorowany.

2000 uczestników i niemal 100 cenionych ekspertów z branży IT w jednym miejscu. Przed nami ogromne, interdyscyplinarne spotkanie polskiej społeczności programistycznej. W ciągu jednego dnia specjaliści i pasjonaci IT będą mogli uczestniczyć w niemal 100 praktycznych prelekcjach. Już 8 kwietnia 2019 w Warszawie odbędzie się kolejna edycja 4Developers 2019!

Interdyscyplinarność to domena Festiwalu

4Developers wyróżnia niezmienna od lat formuła - kilkanaście ścieżek zbudowanych wokół wybranych języków programowania. Różne technologie i najświeższe tematy z branży IT w jednym miejscu. Każdej ze ścieżek tematycznych towarzyszy grono ekspertów, którzy dbają o wysoki poziom merytoryczny przedstawianych w agendzie tematów. Na Festiwalu gromadzą się liczni przedstawiciele społeczności programistycznych z całej Polski – to niepowtarzalna okazja, by zawrzeć nowe znajomości i być na bieżąco z trendami ze środowiska IT.

Festiwalowy charakter 4Developers wynika przede wszystkim z otwartej atmosfery, która panuje podczas wydarzenia. Na tej konferencji eksperci chętnie dyskutują z uczestnikami, a prelegenci starają się odpowiadać na najbardziej skomplikowane pytania. Mnóstwo przestrzeni do chilloutu, niezapomniane i bogate w networking Before Party oraz festiwalowe atrakcje sprawiają, że nawiązywanie nowych znajomości staje się niesłychanie proste!

Cloud Computing i Data Science – nowości w agendzie

Nad wysokim poziomem wykładów, które pojawią się na 4Developers 2019, czuwa Rada Programowa, złożona z czołowych polskich ekspertów z branży IT. Każdy ekspert czuwa nad konkretną ścieżką tematyczną. Podczas tegorocznej edycji uczestnicy będą mogli udać się na wykłady i warsztaty w ramach 13 różnych ścieżek!

.NET, Architektury aplikacji, Bottega IT Minds,
Bottega Frontend, C++, Cloud Computing, Data science,
Java, JavaScript, PHP, Python, Mobile, Soft Skills & business relations

W Radzie Programowej 2019 pojawią się:

Maciej Aniserowicz, Bartek Glac,
Michał Bartyzel, Jakub Wasielak, Tomasz Ducin,
Joanna Lamch, Łukasz Łuczak, Mateusz Pusz, Mariusz Gil,
Jakub Pilimon, Janusz Kamieński, Sławomir Sobótka, Marcin Szeliga

Jakie nowości w tegorocznej agendzie?

Po raz pierwszy na Festiwalu 4Developers pojawią się ścieżki: Cloud Computing i Data Science . Natomiast swój wielki powrót będzie mieć ścieżka Mobile, którą przygotuje Joanna Lamch. To wyjątkowa edycja, ponieważ każda z przygotowanych dla Was ścieżek dotyczy odmiennej tematyki!

Od juniora do seniora: praktyczna wiedza i wymiana doświadczeń

Interdyscyplinarność 4Developers to nie tylko szerokie spektrum tematów do wyboru, ale również rozległa skala poziomu zaawansowania. Festiwal odwiedzają profesjonaliści, którzy chętnie wymieniają się doświadczeniami z uczestnikami stawiającymi pierwsze kroki w branży IT. Zarówno jedni, jak i drudzy, znajdą tu tematy dostosowane do ich potrzeb.

Trwa nabór prelegentów - Call for Papers już otwarte!

Niewiele wydarzeń daje możliwość wystąpienia przed tak różnorodną, otwartą publicznością. 4Developers jest doskonałym miejscem, by sprawdzić się na dużej scenie. Każdy, kto chce spróbować swoich sił i zaproponować temat, może wysłać swoje zgłoszenie przez formularz Call For Papers, dostępny na stronie Festiwalu: www.4developers.org.pl Organizatorzy czekają na zgłoszenia propozycji prezentacji do końca stycznia.

24/10/2018

After Programistok 2018

Home



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.

17/10/2018

After .NET Developer Days 2018

Home


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.

31/07/2018

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

Home



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

14/05/2018

How to use Roslyn with .NET Core?

Home

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());
}

writer.Close();

_logger.Write(sb.ToString());
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.

20/04/2018

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

Home



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.