{
    "componentChunkName": "component---src-pages-category-js",
    "path": "/en/category/",
    "result": {"data":{"posts":{"edges":[{"node":{"excerpt":"How soon is now? In PostgreSQL, it’s not always as soon as you’d think. I learned that the hard way recently, so you don’t have to. It took…","fields":{"slug":"/how-soon-is-now-in-postgresql/","prefix":"2026-05-25","langKey":"en"},"frontmatter":{"title":"How soon is now in PostgreSQL?","category":"PostgreSQL","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACi0lEQVQozx3D20tTAQDA4fPaS689BD0FQRJRD2lUdC8wE8UsmWXmZSpTuxB4z+lUaivnpSmObk5z2tzcMjedrp3ddcfpNtu0XGKIvgTRf/AL+uATTB1lZCr6WLD7SVqsJIaGYDeFySxS9LgDs1qOoa0UY5ecoeZi9E1F9Ndmoa84R3WJjJX4OlIkytt3w6zGkghTbTKuyjXMW13sfbGwPDyC1zBBZ103R+5pMTTJiE4OklwNs7boRfKJjOnVtJddolyWi8sXJrmRIhbfIBBcRvjUmMel4lbuV/fS0PCarMp+0kr6uCrvQtHcg7KyAL9zhq29v0QTmyRTO/h9Xj6+6aGqKI+2pjqWpGVcoojZPIVgUt7F6ZhkymbF7p7H4gxgEpcxO1wEpRU0dRVYxgxsbO0SW/tOOBLj8+QoLvsYLzsaMeo6ER0jTJt1DGkaEYzPCvm9HWQz4WJ3U+TP3jY7v/aw2qYZt9rRNtcy2FKFFAggetyEFiN8mZjkVaeKF6o2wlKM8dGPDGi7kV0/hTBQfZOZ10reqx6hbSlDMg7in3Ww4PJhtc2ieljCk/wLpBLrrP/4STy+jjcksRpd46tjFp8YwO10/99VlYfQX5nJrKoGXWku4kArHs0TdPU1zDtFpFAY+/gHgt4AAU+IZGKDkNePdymCxxciEvmGOCcyZ5nGM7dAlzwboenOGSoz0xmtL2LNqEFTks21tEOUZ2ZQmnWa54+LCbjmmTYZMeu1TOheMDVuxDgyStDrI77oZtFtQ/LYUCtyEFpuZ/AwJwNnz1OUBRc5cXA/Rw/sQ3b2MIobx2m4lU5v+WXUDy5Sc/0YLfnpKAvPUZt1kvbiK7zvVKBvr0D7tJC6gvP8A42h9wF8lqtnAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/38bff92c4f54acc9e02aab58e8a3d196/e24fb/2026-05-25-cover.png","srcSet":"/static/38bff92c4f54acc9e02aab58e8a3d196/6d6b7/2026-05-25-cover.png 200w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/d184d/2026-05-25-cover.png 400w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/e24fb/2026-05-25-cover.png 800w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/95584/2026-05-25-cover.png 1200w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/3edc9/2026-05-25-cover.png 1408w","srcWebp":"/static/38bff92c4f54acc9e02aab58e8a3d196/b303b/2026-05-25-cover.webp","srcSetWebp":"/static/38bff92c4f54acc9e02aab58e8a3d196/21c67/2026-05-25-cover.webp 200w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/4b6b9/2026-05-25-cover.webp 400w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/b303b/2026-05-25-cover.webp 800w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/bd3e9/2026-05-25-cover.webp 1200w,\n/static/38bff92c4f54acc9e02aab58e8a3d196/e435b/2026-05-25-cover.webp 1408w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Many people believe there should be one, and only one, way to model software. I think differently, I like to mix different techniques. For…","fields":{"slug":"/on-mashing-up-modelling-techniques/","prefix":"2026-05-18","langKey":"en"},"frontmatter":{"title":"On mashing up modelling techniques for fun and profit","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB7ixWjUUIf//EABkQAAIDAQAAAAAAAAAAAAAAAAABAhAxIf/aAAgBAQABBQJuuktWn//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/AYf/xAAYEAADAQEAAAAAAAAAAAAAAAAAARACcf/aAAgBAQAGPwIUfTM//8QAHBAAAgICAwAAAAAAAAAAAAAAAAERIRChMUFx/9oACAEBAAE/IUXZL4NT2JW9NKb7x//aAAwDAQACAAMAAAAQIz//xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAEDAQE/EE9Kf//EABURAQEAAAAAAAAAAAAAAAAAABEA/9oACAECAQE/EAMX/8QAHBABAQACAgMAAAAAAAAAAAAAAREAIRBRQXHw/9oACAEBAAE/EGARRkTVxIG6NCD3Msr0344r9Pvj/9k=","aspectRatio":2.2222222222222223,"src":"/static/5ed088d85a6e4f737c6da5b2c7eaabca/f8504/2026-05-18-cover.jpg","srcSet":"/static/5ed088d85a6e4f737c6da5b2c7eaabca/f137a/2026-05-18-cover.jpg 200w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/8494e/2026-05-18-cover.jpg 400w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/f8504/2026-05-18-cover.jpg 800w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/1ce69/2026-05-18-cover.jpg 1200w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/10c8f/2026-05-18-cover.jpg 1600w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/712b0/2026-05-18-cover.jpg 8788w","srcWebp":"/static/5ed088d85a6e4f737c6da5b2c7eaabca/b303b/2026-05-18-cover.webp","srcSetWebp":"/static/5ed088d85a6e4f737c6da5b2c7eaabca/21c67/2026-05-18-cover.webp 200w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/4b6b9/2026-05-18-cover.webp 400w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/b303b/2026-05-18-cover.webp 800w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/bd3e9/2026-05-18-cover.webp 1200w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/dcbba/2026-05-18-cover.webp 1600w,\n/static/5ed088d85a6e4f737c6da5b2c7eaabca/a70a0/2026-05-18-cover.webp 8788w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I was toying with LLM-based domain research. It reminded me of the common mistake we make when we try to practice DDD: overreliance on what…","fields":{"slug":"/should_we_trust_domain_experts/","prefix":"2026-05-11","langKey":"en"},"frontmatter":{"title":"Don't overestimate domain expertise","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9ADdfRSxUOydMMydMMi5NNyhLMaaun+bi2dDRydLMv+DQu+Pf1ebm3+He0+Le09vVx9XUzN7f27i+sYWTewA6X0R5akZzgmpabl84Qj83R0dHXWNndXpye3qIhXqKeV/BrpXn49jc18qYkoOvraS/uKTDwLGDiWxeVDYARndue46KgZ2UmpWEMjo7HDI+MlFiPFlrQlRcXW94WGRlf3Ni8OjY0cm7h2hTgmtanpV9qKiUwa+LuI90ADlhTTNpYEBmVmBqUTdEQhMpNSM1P0Zeak5jbzhNWW1cTn5fTKWXe9nKs6mFbYNXN+exeMKmipJ0VpqQcwAxUjgpTDBAUTlIOydURTMyPkQKM05JVV1OYGlFVVpDNiZKOSdCPjN1cGKmflBwSiNtUjORcE6lfVqmlGgALVA2JEkwNE44UT0tmGJFT09NBC1KGjVKQUQ/ZFlJX1A9YlVBYVZFgYF4moFpiWJEQzQpLCQVhGZLg3BcACZGLyJHLIGIdbiWfWNNQhIqOwUhNQQjPA8sQDdAQHNlUmVgUlpbUmxgUZV2Y5hyW5hkR56BaJtrSoZnVAAIGxROYEqbinqMc18lMjEbNDw7S0woNC8xPjojMjEgLS21ycymubpaUUNTS0JtVECCbleUjn6hlYWQg3IABBEQQEAzZ1hIjnZhoZ+R1NHHx76yhYl6hoR1VVhTWE08dYaItby4g3BeiHBenXxncW5gLi4iREM1RUY6yyTiRQPvwzkAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/91c2ca425f1d8b7da7de43878c7a64a5/e24fb/2026-05-11-cover.png","srcSet":"/static/91c2ca425f1d8b7da7de43878c7a64a5/6d6b7/2026-05-11-cover.png 200w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/d184d/2026-05-11-cover.png 400w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/e24fb/2026-05-11-cover.png 800w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/95584/2026-05-11-cover.png 1200w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/e162f/2026-05-11-cover.png 1317w","srcWebp":"/static/91c2ca425f1d8b7da7de43878c7a64a5/b303b/2026-05-11-cover.webp","srcSetWebp":"/static/91c2ca425f1d8b7da7de43878c7a64a5/21c67/2026-05-11-cover.webp 200w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/4b6b9/2026-05-11-cover.webp 400w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/b303b/2026-05-11-cover.webp 800w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/bd3e9/2026-05-11-cover.webp 1200w,\n/static/91c2ca425f1d8b7da7de43878c7a64a5/fb58b/2026-05-11-cover.webp 1317w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Hey, have a look at what I made during the weekend. I had some time, grabbed a beer, turned on the computer and tried to code this feature…","fields":{"slug":"/vibing_harness_and_ooda_loops/","prefix":"2026-04-26","langKey":"en"},"frontmatter":{"title":"Vibing, Harness and OODA loop","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB70lEQVQoz2PYt2kTHO1ctXbTqrXLezoO1ububygqDfJZu2zFznUb1y9evmLugqWzZi2bNXv53Hkr5s2HIAZkzbvWrd+zeevqqVMO1mafr8va3tN+9vjpY7v37tu8dfPy1cvnzl88c9bKefMhCF3zng0bTuzdd3LvvvywoFlRXmemdV44cfbB5Wsn9u4/sHX7pIbG3vr6VUuWLZ07f8m8BcvmL0Ro3rthw9GdO2dOmBjsH6CppuZiqGunr+Nk59jT2nHx6ImTe/enxsY152Sf2rBu85xZhxbO2jO9H6p578aNh3fuXNrZISksrKSkmpicGhwaGRUT7+PloyCnuGPdxgtHjqZGhHdnph2YO3tBXcWyisJFhVlgzRs37tu6dee0Sf3hgSxMTDyc3KE+/rW19Xk5eXq6+qysrP1dvSfXrzOUk65ITVm1aMmiWbMXTJ+5YPpMBoiDD+/c2ZuTmayv5WVvp6mmFh8UqW9gnJNdYGRozMDAUOLnNiczvjYra9GMWavmLwAF2PwFqxaA/bx348aD27atWTC/vaTg5O6dTlZWSc7eDfllTRUNtqaWM1qap+Rlrp87d+/GLWsWLsISVSD9W7ce3bXr2O6d6srKVha2MYHhWtJyBjq6l4+funji9MFt2zcsXrpq3gK4TqBmAKpOLGLsmGwjAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/6f23d618ba2fb2ec38a86e77eced2df7/b0bd3/2026-04-26-cover.png","srcSet":"/static/6f23d618ba2fb2ec38a86e77eced2df7/6d6b7/2026-04-26-cover.png 200w,\n/static/6f23d618ba2fb2ec38a86e77eced2df7/d184d/2026-04-26-cover.png 400w,\n/static/6f23d618ba2fb2ec38a86e77eced2df7/b0bd3/2026-04-26-cover.png 626w","srcWebp":"/static/6f23d618ba2fb2ec38a86e77eced2df7/70677/2026-04-26-cover.webp","srcSetWebp":"/static/6f23d618ba2fb2ec38a86e77eced2df7/21c67/2026-04-26-cover.webp 200w,\n/static/6f23d618ba2fb2ec38a86e77eced2df7/4b6b9/2026-04-26-cover.webp 400w,\n/static/6f23d618ba2fb2ec38a86e77eced2df7/70677/2026-04-26-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"Try not. Do. Or do not. There is no try! I’m calling this the Yoda Principle. Master Yoda said that to Luke Skywalker a long time ago in a…","fields":{"slug":"/yoda_principle_in_command_design/","prefix":"2026-04-20","langKey":"en"},"frontmatter":{"title":"Yoda Principle for better integrations","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACXElEQVQozz3Oa09SAQDGcXrlJe4HUFEQPCBw4KBHUDzi0aPcOUrkJa9LAp1tpi2bbZluNVeZs3f1uvoCueX6AK0P9m/q1otnz7vf/qZRdZbhUY2EMk5IGsIXitEflpBHxugNhuiwO1Gzw7x8scbB3iPKhQyNx2V2WvMcHa6yvKChTcSYziYJdHswddoctFtttFmstFvvZhYEegJBXD192FxuBLeL3abB0eE6T3cfsrFeRFNlHhhZZMlHJh2ikEsj9nXfgfcdDiyCC4vT9f/NDidmu4t7bZ3EZYmFmsbpcYMvX99QyKfY2qwwM6kwlAiQjPvRp5Ms1qcwCd1+PN4gXf4Q3T4Re5f3Fr2p9vr7aWytcfXzG69f7VCrZqjXdaa0JDk9yawuM5GJIEX68HkFlKSIKSqrRBIZxFgKMaIQiij4ghLh2BCfzk/5ff2D61/fqZZ0lHg/ciyAFPGhxANERS+DwR5i0SDjYzLp4TCmVKZAamwWJa2TVLLIygRiZITGkyZ//1xxeXHC+cdjcpqKzdJBQgoQj/iQoz6ioV663DYS8RiVagk1PYJJzy8wlV9kcqaGOllGzRZJjU7z4f0pny/fsv9sm4PnO6wt17C2tyGGvEixfsI3mMeOw2xhWtcoFGYp5mcwVSt1KtVlysYqJWOdfGWFXHGJi/N3bLfWKZdzNJsbtFobiB4Pgt1MV48TwWVF6OggPhCkVqtSKuUwqsUbcJ45o8acUWd+fgljboWFpQZnZyfs7zXRJlUWF2s0W5tooykGbHb8TgeDbjeDgpsZLYtRKVLI67eF/wDzYy3uYYoB2AAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/b559c6d70cdf5430d251306c8b61d60b/b0bd3/2026-04-20-cover.png","srcSet":"/static/b559c6d70cdf5430d251306c8b61d60b/6d6b7/2026-04-20-cover.png 200w,\n/static/b559c6d70cdf5430d251306c8b61d60b/d184d/2026-04-20-cover.png 400w,\n/static/b559c6d70cdf5430d251306c8b61d60b/b0bd3/2026-04-20-cover.png 626w","srcWebp":"/static/b559c6d70cdf5430d251306c8b61d60b/70677/2026-04-20-cover.webp","srcSetWebp":"/static/b559c6d70cdf5430d251306c8b61d60b/21c67/2026-04-20-cover.webp 200w,\n/static/b559c6d70cdf5430d251306c8b61d60b/4b6b9/2026-04-20-cover.webp 400w,\n/static/b559c6d70cdf5430d251306c8b61d60b/70677/2026-04-20-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"Have you ever heard phrases like. Just an update, the milk ran out. Someone finished it and put the empty carton back. Or So everyone is…","fields":{"slug":"/passive_aggressive_events/","prefix":"2026-04-13","langKey":"en"},"frontmatter":{"title":"Anti-patterns in event modelling - Passive-Aggressive Events","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9AD0zIL67r8/Ryufl3cK8rZeVgy8vHUUzGkkvD0IqC2NBGWpFHWVBGWE/GFMzD0otDDIhCU86I2RLNVpELgA2LRq8t6vQ1dL////s8/CvrJ0lJRY2MiJRNRNLMA+BXjeFXzV3UihHMRM/LxZRPyUtJhVTPidqTjVTPSgANCUNr6yb1dza9fjx5+7kqqSTJyIVZU49UzQSVzkVoH5amHNJjGM2PjQiISIZYGFVaW5qZlE7ZUMkUTkhAHNhQrK5n5aplrXBr77Nqp6djI5tVYtnT0IwFTwrEnhkSohvUH1nR5R0W2ZIMmxpXIqNim9jUl5KMUs7JgCcl4nCyMGdp5arrp2UlYp2fXlPTUQvMCYaIRpYUUF0bFt3eG2Rlo6YiXY3KBcWJCNjaWdfYFdMTD5VT0EAYmRceH17eXx2eHx2enx1Z25uNTw4MTcwYVdJno59T1RNFB4aMjgyQkpGCxseAA8UEhwaRElDQTwsRT4vACMrKEROT0hQTkJJR2xzb3B3d1BVUURKRlhHM2BGKWFJKmRLKlNHMTc8OxAkLwYUFgAHBToxIFA+JjgwIQAxNTA6Pjg3PTVITEM7PjdUXFs0OjMuMypST0BMMxh5YEVwY09ROSB4XksQIigCCgkABQQnJRt1WzxOOiEAOh0AIhEAOTouc3VtdXp1Y2ZgZmNXdmBCk25FhHVhinpjbGZabVlBaEklERQOAAUDAQ0NChENSS4PRDMduDCz0olrzU0AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ac3e8b12fe2538f089a41dbaca33a90f/e24fb/2026-04-13-cover.png","srcSet":"/static/ac3e8b12fe2538f089a41dbaca33a90f/6d6b7/2026-04-13-cover.png 200w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/d184d/2026-04-13-cover.png 400w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/e24fb/2026-04-13-cover.png 800w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/95584/2026-04-13-cover.png 1200w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/3edc9/2026-04-13-cover.png 1408w","srcWebp":"/static/ac3e8b12fe2538f089a41dbaca33a90f/b303b/2026-04-13-cover.webp","srcSetWebp":"/static/ac3e8b12fe2538f089a41dbaca33a90f/21c67/2026-04-13-cover.webp 200w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/4b6b9/2026-04-13-cover.webp 400w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/b303b/2026-04-13-cover.webp 800w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/bd3e9/2026-04-13-cover.webp 1200w,\n/static/ac3e8b12fe2538f089a41dbaca33a90f/e435b/2026-04-13-cover.webp 1408w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"One of the first indications of getting old(er) is when people stop getting your movie or music references. Of course, based on this rule…","fields":{"slug":"/intro_to_example_mapping/","prefix":"2026-03-30","langKey":"en"},"frontmatter":{"title":"The one where Oskar explains Example Mapping","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABs0lEQVQoz42R22saURDG/W/1NfZNfBIJrbVoRKUP8fJSvKDBgqmxVdosKq2XJO4qKrLboiuIF0RFREV/ZbfYRslDB+bMmTnf+eY7cwyHwwHNzuP/2EtYw/Picb9er5EkiVarRb/fZ7lcMhwOGQwGzGYz2u22jjkXornhvKDZaDTC5XJhtVoxmUyUSiVuP91iNpuxWCwYjUad/CWlhiOR5vv9Xi/udjvUgcpisaBQKLBarZBlmW63y3w+RxRFHaup3Gw2J6SG58q0w3g8js1mw+l04vV6cbx14PP5qNfruN1u/H4/kUhEj3a7nU6no9/VGpw8+Uioza3X66EoCpVKBVVVaTQaTCYTarUa+Xxez4+Y7XZ7qlBbxuOx3l1TFAgEKBaLRKNRgsGgnkeiUURJwuPxkE6nCYVCJBIJrgMBYrEY4XCYcrn8j1CbRS6Xo1qt8kuRkUQRQRCQZYVUKoUg3JPNZrlJJmk2m7TabR4eHimXf/BTUXTS6XT6h/D4EZlMBtfVFdUvd/jdLt5fB/n6vcY7pxNVeeLy0k7t/hvC5yzFpyYXF6/I3d3wMfmB128cf3/5N68keoTroLzyAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/d6c337c4a5990f5ade81c03cde51d343/e24fb/2026-03-30-cover.png","srcSet":"/static/d6c337c4a5990f5ade81c03cde51d343/6d6b7/2026-03-30-cover.png 200w,\n/static/d6c337c4a5990f5ade81c03cde51d343/d184d/2026-03-30-cover.png 400w,\n/static/d6c337c4a5990f5ade81c03cde51d343/e24fb/2026-03-30-cover.png 800w,\n/static/d6c337c4a5990f5ade81c03cde51d343/fe07f/2026-03-30-cover.png 1125w","srcWebp":"/static/d6c337c4a5990f5ade81c03cde51d343/b303b/2026-03-30-cover.webp","srcSetWebp":"/static/d6c337c4a5990f5ade81c03cde51d343/21c67/2026-03-30-cover.webp 200w,\n/static/d6c337c4a5990f5ade81c03cde51d343/4b6b9/2026-03-30-cover.webp 400w,\n/static/d6c337c4a5990f5ade81c03cde51d343/b303b/2026-03-30-cover.webp 800w,\n/static/d6c337c4a5990f5ade81c03cde51d343/19d42/2026-03-30-cover.webp 1125w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"You may already know that I’m a GenAI sceptic. And a general sceptic. Do you know that scepticism comes from the Greek σκέπτομαι (skeptomai…","fields":{"slug":"/interactive_rubber_ducking_with_gen_ai/","prefix":"2026-03-16","langKey":"en"},"frontmatter":{"title":"Interactive Rubber Ducking with GenAI","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACnUlEQVQozxXOaUuTAQDA8UdfdWA5zWOW5TwSnUfaKXNOl5tlJphiubXlHo9c6qaOVbryKJ1mOsvVUBLEMEnDmUktI+w+KAjtMKKgA+qV9BX+0e8T/ASf7w5itQG3x8XSp4+s/F3hz+/v3PWO8H7xFUsfXjM57eHNcx9Dl52oM9Npbbbw7uUDXizc5tH9KXyz17kxOkBdvYjwcGGecwOX6B0eoc3l4nSXkxKxHL2o5+bUON65cczWMlptlejyMojbHExERCAN1ioqK/U0WCuYnRzGYqnC2nQC4cHDe8zMz7P84xeLX78xOj1DUFwsa8NDaD1/lifP5inKVzHU18XiaA+NB9Ipz4wnLTkGeWosOap03Bcd1NeJ7M3PRbjnm2Hs1i3efv7C2+Vlxu/MIUtLQRq3heBIKR097WRqsqgxlTHdInLNlMMVnYKjWXJSUxJQaxV4XG30dTvo7WlBGOy2MTU3y8fv/4c/8T56SmCinMCYGDbFRmOsKCE7T0m0PJGRRhH3MTV16q0cTNyIRhaFXrELV6uNrk4H7gEnQurOVNIyFLR0t+OZ6Kfd2kC53kDuoSLMtWZqzCKlxRqqK45QXqyldp+C3ZvD2CMNw5apolGhpCA5keOmMkp0JQgB4eEI/v6oc1Lo6SzEqNnJ4wkPFms1g047V7sasZu0jPU30XfGQlt+Ic15BTg0+dhztJQmJaPcJCVygwRh9SqEgJAg1kjWsS54Ay2Okzg7mvF6TjPeb+OEYR8X7AbqjPvx9opcMO5HJZMxqDPiPmygbNt2CuLjUUZGEBUiwT9gLYKfJBS/9aH4BYbS217EwkAxpwxF7NidhDRKSmmWHLMyiRpVAvW5SSjkEZh2KbCrNGhjYtFtSyM7OgpZiAS/Nav4BxurijgNeCvrAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/a08c97f5281d31661ba3946fbc3b1ec0/e24fb/2026-03-16-cover.png","srcSet":"/static/a08c97f5281d31661ba3946fbc3b1ec0/6d6b7/2026-03-16-cover.png 200w,\n/static/a08c97f5281d31661ba3946fbc3b1ec0/d184d/2026-03-16-cover.png 400w,\n/static/a08c97f5281d31661ba3946fbc3b1ec0/e24fb/2026-03-16-cover.png 800w","srcWebp":"/static/a08c97f5281d31661ba3946fbc3b1ec0/b303b/2026-03-16-cover.webp","srcSetWebp":"/static/a08c97f5281d31661ba3946fbc3b1ec0/21c67/2026-03-16-cover.webp 200w,\n/static/a08c97f5281d31661ba3946fbc3b1ec0/4b6b9/2026-03-16-cover.webp 400w,\n/static/a08c97f5281d31661ba3946fbc3b1ec0/b303b/2026-03-16-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Be careful what you wish for, because your wish may come true. What LLMs revealed is how many people in our industry don’t like to code. It…","fields":{"slug":"/the_end_of_coding_wrong_question/","prefix":"2026-03-09","langKey":"en"},"frontmatter":{"title":"The End of Coding? Wrong Question","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACY0lEQVQozy3O3U9ScRzH8YOLfABFmQkqTwfOETgIQ0WEMEFFZCD4CGozKzUz22rqXLqy0rW5NK9c5Watm9bWhXXVTeuqtrqq7tu66R/oT3i3g1189rv6vb5vwZfvRcn3Iacv4B6Mcfx4hZ8nh3w7OeLt4R0iYQdNViN6m4VAb4LESJ5oLkPh2hznc1n6CmNEchmaQ0GMAS9CfH6S+PwUgdEU52xmsj0KuWSE7dvjFDN+NNoyNBoNVY1mQoMpunMZ2gf6SU0VSBYLxIZzpKaLBFP9VCsywtWte8ze3SS5eIXCeJqF8R7MpjpG0+10+JvQnilDV66lwmyiM62CQwxOTuCKdiI0mTB43OhkJzUeGaPfi7Dz7CW7x69Z3TvgUrGXjdkEe2sjXC9GcUv1FBNefKIZbXMzkWyazMUpJhcXyM/OEB8bwRoKlrBaxU2t4kFY297l8/dfvDr5QK63jemkQnagBUUx4XGb6fbZqDU3oHM6kCJhAokevN1R5Gi49Db4vejVQrerNGFz9wm///zl45cfzM1kiIct+PyNSG4TxvoqhMqKElYjO6l0WDlra6bcbqFCtFJht6CXRAwe6RT0SAiPnr7g/aevHL15x/KDbUKpGKJoQBYNtAYd2DoCVIs29C4H1ernFldpNepkJwa1ruX/1ML7h89Z3z/gxs5DMksLRHIJhtJ+ihMJlrbWkWIhzEE3ls4AdV4ZndOOTsVlJ3qXWDpSI4slUO+0I4yvLDN0c47QcBJ9o5GWTh+tXQE29ne5vHqLWsmKLezH0x9BScWQEl2Y2hSqJRVwnJarsFoqS/wDMuMzhohDdK4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/8dda12a6f19358ea86de7c87dfa9d46c/e24fb/2026-03-09-cover.png","srcSet":"/static/8dda12a6f19358ea86de7c87dfa9d46c/6d6b7/2026-03-09-cover.png 200w,\n/static/8dda12a6f19358ea86de7c87dfa9d46c/d184d/2026-03-09-cover.png 400w,\n/static/8dda12a6f19358ea86de7c87dfa9d46c/e24fb/2026-03-09-cover.png 800w","srcWebp":"/static/8dda12a6f19358ea86de7c87dfa9d46c/b303b/2026-03-09-cover.webp","srcSetWebp":"/static/8dda12a6f19358ea86de7c87dfa9d46c/21c67/2026-03-09-cover.webp 200w,\n/static/8dda12a6f19358ea86de7c87dfa9d46c/4b6b9/2026-03-09-cover.webp 400w,\n/static/8dda12a6f19358ea86de7c87dfa9d46c/b303b/2026-03-09-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last time, I shared with you how sneaky I was on transaction handling.. Today, the opposite: I’ll tell you how I fixed the issue when I…","fields":{"slug":"/parse_dont_guess/","prefix":"2026-03-03","langKey":"en"},"frontmatter":{"title":"Parse, Don't Guess","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABgUlEQVQoz1WQT0/cMBDF8/2/Rw8URAEBAlWiFy69lGpLdslunM0f24ntxHZClh5f5UmyXQ4/vZk3M89KokNv4DlDl60xNAX6ek/60Rt0RkDKnDSQpDGE2EOIDAmL0WpOe6PXR6LRKTjB0LIYjqcU2Nc5gl9VKXZsDaMqtKrCZrtCnicUuGVraFXi4DXenToSvdsGttyizWJ4yeD4Dl4wDLbGaBsKDjvOcNTVDlZXsKqE4gzecJqF3YVo6CR6XcGrclJdTnUrPmMEvObH3usKfStB97MGomXo6j3RG46/g8Homglb48MrHFyDw6zjXNOt4fTYQkRhMyHMiAyvLz+RJX9QpDFKtsHb6y+wtxVYsiINs93mN3366X2oI6dKBKwqyNCc4e76Ao+3l/h+f4XnHw+4Ov+Cp8cbPD894O76K26/neH+5oJ2Pf3TAktOZJscC12Tw6kCo5Ww9R6dZEQrUhiekjf5GYaWwzYFTu8DURcWTmgDMpv7nDAyO/Em/3P/n38ldZW41wyOTwAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/9612dd92364aaa25830c836976efdda9/e24fb/2026-03-03-cover.png","srcSet":"/static/9612dd92364aaa25830c836976efdda9/6d6b7/2026-03-03-cover.png 200w,\n/static/9612dd92364aaa25830c836976efdda9/d184d/2026-03-03-cover.png 400w,\n/static/9612dd92364aaa25830c836976efdda9/e24fb/2026-03-03-cover.png 800w,\n/static/9612dd92364aaa25830c836976efdda9/95584/2026-03-03-cover.png 1200w","srcWebp":"/static/9612dd92364aaa25830c836976efdda9/b303b/2026-03-03-cover.webp","srcSetWebp":"/static/9612dd92364aaa25830c836976efdda9/21c67/2026-03-03-cover.webp 200w,\n/static/9612dd92364aaa25830c836976efdda9/4b6b9/2026-03-03-cover.webp 400w,\n/static/9612dd92364aaa25830c836976efdda9/b303b/2026-03-03-cover.webp 800w,\n/static/9612dd92364aaa25830c836976efdda9/bd3e9/2026-03-03-cover.webp 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We’re being told that software design is the art of making tradeoffs. But… Are we taught how to make them? Not that it’s easy to teach…","fields":{"slug":"/cloudflare_d1_transactions_and_tradeoffs/","prefix":"2026-02-16","langKey":"en"},"frontmatter":{"title":"How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support","category":"Software Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB9ElEQVQoz42Sv2tTURTH+xcEAoFUhxqoBguBKh3cHB3EwW7ikMFBKOKim0McxC6CddC4FAUXcdJFHNSWClVIMTahtkkxMeTlvaR5bfLy+8e793wkSUssLn6Xc++553z4Xs6ZEBEGUo09cLJAe3gfZGXjJer1ZdT7m+ivDyH5BvZyozfRHOmIMYgTWilcLdCvkE+ssbq6glJqWOAm1+g/v0H/2SU6y1fofnyC2NZh8wgonRrSqoyBg0PN+k09tUH0wX3OBk4R/7E5LGinEzQtm86Bw75Vo2JV0OXC2FljD23/Og7cSe3y+dVTlu8scO/adS7OzpLaTkAzQyv5hVZ+F1V3qNpV9nMFVCENujv6tmOii1uI2xkDA4EAM8EzzIVCTJ84yUzoPMb3d9A2aOxuUc5kqZcPKBUOMDNFXCsL7RLSayI1E11OIcodA2OxGFfn5/FPTjJ9eppzcxd48egu1JL07Dx2zsAstbDMKlXDQupFpJpGujW0vTOEHs5kBDQMg2AwiMfjYXFxEdMssHDrNu3MOuTWwUqg05/Q22/B+oaU40g9j9hbaPsn0m8em/RENBrF6/Xi9/tZWno8TMZWPrBfNEF1UXYWcQy0k0eX4oidRMqbiJNFVO/ftYlEIvh8PqampgiHwyPv2sXttvkf/Q0bOPwDiSVzYrO6TkcAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/e24fb/2026-02-16-cover.png","srcSet":"/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/6d6b7/2026-02-16-cover.png 200w,\n/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/d184d/2026-02-16-cover.png 400w,\n/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/e24fb/2026-02-16-cover.png 800w","srcWebp":"/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/b303b/2026-02-16-cover.webp","srcSetWebp":"/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/21c67/2026-02-16-cover.webp 200w,\n/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/4b6b9/2026-02-16-cover.webp 400w,\n/static/c405bbf9b7c3fdee1d4ebfff49a57d7f/b303b/2026-02-16-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last article, I explained how to rebuild Event-Driven Read Models in a safe and resilient way. I asked readers to let me know if they…","fields":{"slug":"/rebuilding_read_models_skipping_events/","prefix":"2026-01-19","langKey":"en"},"frontmatter":{"title":"On rebuilding read models, Dead-Letter Queues and Why Letting Go is Sometimes the Answer","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACJklEQVQozx3L2W/ScAAA4P5vOh980Gh8NyaLmSZzyaLJYqYmOzLn4gwhLJssG8zJoONYx9ZxrB0FWijtgMGvHC2FFrClLcc4Bpr4YOL3/kH3lnyPNtHn1ssFJ/ENTR5Gr88zgC4W+RovKVWlJ4tyJVts8KrECGUsx8FUxhKkl7zkazsOTa0gT0wX03vYB3dsK5RyJbJkDqiFm1aG7lQLwzu1022IoiIb9ZrWTAkVguMv8xV7NPfm8Ap6sIo8MwdmbPiyL27FmJNrDrAp4IXpA1uvlP87af/53dG0tjHQeqO+2FJBvRnOCet+at5BQFOryFNz4NWP6EcvtRVmvOkSk0y65t4x5t2CF+2I3GTc19t6f9wdjEeyrqeEmj1y/fmU/J9XkEVHxBlK4AQVzwAcCEBqOL+YYxabcI61q6Ikq7eD2+FkpHSNsqJmpQZZknew9OwBDj1c809vh94fRfc84QSKchen2VDgZPFTfGG1vgenMUaQWkrPkA1VNgyu+SvB19w08KT4F9YQdH8ZeWwKztsjX/0sTOSCWIJwI57tw/AxpiDBcb4kaYag6d3RSB8Mq3rniMpTfGP9jHm5H4FmLFez+3GH8zJ75GMTwIoCBy6cxCVXoMBm6vmbarGmiFqn2e0pvUGsJFNC08OKb53UnIOEUFLaOQPfEXbTR6+dZ21EwR0vBVlx1xU1HSc3YOonyV9xjZpxGwZ1mC67UqIFL2ygN/MO8h83SZbK4xfySQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/15181cbf6a5249da225a8603462fe780/e24fb/2026-01-19-cover.png","srcSet":"/static/15181cbf6a5249da225a8603462fe780/6d6b7/2026-01-19-cover.png 200w,\n/static/15181cbf6a5249da225a8603462fe780/d184d/2026-01-19-cover.png 400w,\n/static/15181cbf6a5249da225a8603462fe780/e24fb/2026-01-19-cover.png 800w","srcWebp":"/static/15181cbf6a5249da225a8603462fe780/b303b/2026-01-19-cover.webp","srcSetWebp":"/static/15181cbf6a5249da225a8603462fe780/21c67/2026-01-19-cover.webp 200w,\n/static/15181cbf6a5249da225a8603462fe780/4b6b9/2026-01-19-cover.webp 400w,\n/static/15181cbf6a5249da225a8603462fe780/b303b/2026-01-19-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s make a soup today: a blog soup. We’ll mix multiple ingredients like: events (obviously), read models, inline and async projections…","fields":{"slug":"/rebuilding_event_driven_read_models/","prefix":"2026-01-05","langKey":"en"},"frontmatter":{"title":"Rebuilding Event-Driven Read Models in a safe and resilient way","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAABzUlEQVQoz02SyW7bQBBE+f9/kP/wIUiAxEcjQhRvsXaZFDUkZx8ON8mJ8RJSznIo9HRPo9BV3YkNPUI61vuco/TYekDaBuX+g/0XtWt4LiL3u8DdxvK4D3xbGW7XFqEbkqnJt7i6w4ca5zzOB5QNaN9N5NJEKhPRrkW5Fl93DMOJlx8/GU5nmrYjNg3GRRIfe1xzwhhFupyz/f6VdHVPIQWFdfhmILZnfBwmhPaMqCzbVJAVGhM6dOhRvkPZSFKZGmkjUluMFOhKIEtBpRyHSpGWgqt5ymwt0TaifcPdquDzLOV6tme2UHx5FMyXkqOsL4SVaZBKc9w/sX2ak28fKWVJVkk2+Y53H+ZczXaUSrITglJ7QnOmHV7pTq/k6S3p5gZtLcnkkW2olOGYrsn3C0S2oVSKrCrJpeLbTrM42L8ejp7a0HH3sOD9x09kucDXEWUCiRwlmwalFOJ5RbZdIJ6XHMuSQofpz4eL4aUe1dSUKkzEy23GzeyWQ2Euy9OB5Pqh5GlzYJ8JbBymBenQYUKPrXtsvMTRfDfmdXep1x2hORH7F1zsp3NSpiYpdMT4FjsitNN73NbY8Ifkgm6Sad56xnyqvdX1eKu/J/wFexifQeicdxoAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/9e38ed3c86bf4b6ef2a88b6e89966001/e24fb/2026-01-05-cover.png","srcSet":"/static/9e38ed3c86bf4b6ef2a88b6e89966001/6d6b7/2026-01-05-cover.png 200w,\n/static/9e38ed3c86bf4b6ef2a88b6e89966001/d184d/2026-01-05-cover.png 400w,\n/static/9e38ed3c86bf4b6ef2a88b6e89966001/e24fb/2026-01-05-cover.png 800w","srcWebp":"/static/9e38ed3c86bf4b6ef2a88b6e89966001/b303b/2026-01-05-cover.webp","srcSetWebp":"/static/9e38ed3c86bf4b6ef2a88b6e89966001/21c67/2026-01-05-cover.webp 200w,\n/static/9e38ed3c86bf4b6ef2a88b6e89966001/4b6b9/2026-01-05-cover.webp 400w,\n/static/9e38ed3c86bf4b6ef2a88b6e89966001/b303b/2026-01-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"There are several reasons why I’m blogging. The first one is that I forget, and writing helps me to remember and organise my findings. The…","fields":{"slug":"/multitenant_and_dynamic_message_handling/","prefix":"2025-12-15","langKey":"en"},"frontmatter":{"title":"Multi-tenancy and dynamic messaging workload distribution","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACf0lEQVQozwXB209SAQDA4dN6qId6cM3UZmqJqCgqLjkoSkdEkYvMGyJoKAJKcs/EvIKayrxkZZaYNenJrZpas4famlsPPfU3/fo+4fXeNvsH74hM+liIhclsppAeNuFyeRl1u1mNOJBX1fFY3UImOYXd0oyoUjA7G+bTfprFp5OEbGZ2EzF8ZgOCt9/ISsTNo552gsMDbK0u83EvjdsdJLdcg9rQy6AzgEsvMmBswaytwd5tYcXjJDhowaBrZD46zub0E9aTWwh/LrKcvl8jGR/F67DSodWwkUrxOXtMyB9lfMiJWaykpvQuaqWMssJbSKKKhMNFY3UZhmY1sUk/Gy++8GJtFeH85IzLH9/49/uUv2dv+XWc4s3yE2YnR/H4okSDCfw2CYX8Pja9SENVKWpFCRZTJx2tLdRVFBGPp9ndzpJ+3ImwMLdFMnVE5NkHwvNZEsuHvHuTITLmRFFagkyupLm+BnOrDm94gehMgnZ9J+bmJiruFeAcHOLo8ByXc5jnARNCu1ZJ2GPH6+hGp20jMr1OaPGQqfkdhowPaGuQM9xj4VZuBXnaMXx+H3ajjuhcgNj0OK9enjAeXaKyycbSRC/CzkaSEaOI3W5Gr63i+0GM/dQYNoOEqkpGu7qCRZ+Vob5ubuYrKFXUs9DZxHbITWImxNpiigKNi9uqHgLDPQg/Ly+4/PWV2FSA9WkP6YQf54CVmloV1n4P4fAsQbeD1QkLD2qrqZaVkTFJ9DXWoSzOwaIpRy6NIJSYECUrQnw7TeZoj83lpxjq5TgNIoGRQfJyc7hTWEhoap3NlQ3iDh1dBg2R4AQzJonrVwVyblyjQ5mPKHUhFFu5UqTnP4ZOdhDLKaiFAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/4f9ff1bfb15daeb022789f817ecedfe4/e24fb/2025-12-15-cover.png","srcSet":"/static/4f9ff1bfb15daeb022789f817ecedfe4/6d6b7/2025-12-15-cover.png 200w,\n/static/4f9ff1bfb15daeb022789f817ecedfe4/d184d/2025-12-15-cover.png 400w,\n/static/4f9ff1bfb15daeb022789f817ecedfe4/e24fb/2025-12-15-cover.png 800w","srcWebp":"/static/4f9ff1bfb15daeb022789f817ecedfe4/b303b/2025-12-15-cover.webp","srcSetWebp":"/static/4f9ff1bfb15daeb022789f817ecedfe4/21c67/2025-12-15-cover.webp 200w,\n/static/4f9ff1bfb15daeb022789f817ecedfe4/4b6b9/2025-12-15-cover.webp 400w,\n/static/4f9ff1bfb15daeb022789f817ecedfe4/b303b/2025-12-15-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s start by asking you two questions. What Super Frog has to do with messaging? When was the last time you wrote if statements in SQL? If…","fields":{"slug":"/checkpointing_message_processing/","prefix":"2025-12-08","langKey":"en"},"frontmatter":{"title":"Checkpointing the message processing","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACFUlEQVQozy2R61LaUBhFeQ+17VRaRchtrLYqTUICyQm5clEjkBFQYVAUrGOtfYo+QV91dRL7a//Yc9asfb6SMCQco4Zh7OCaCqEpMRAqLV3metDk759XHhcXZP0Krz8qnIYy56HE19EHdtJNuv1dkqbCTVbj99MeJWEqtBsKYVPDt1QSS2YS7eMYMml0xKijk8Z1AkvmLFSImhqHg/d49Y8kSpmj0y0a7h6xLdPxJEquISFMCc9UcHUJ0VDwLJXcPO+8kypOR8aOFNwTGWGoyGdbRIfbpJXPaMkmplshNDWEoeRAGWHKhWGebevNwmvI+LaCOKohogp+LOPpMu2GinT2jvhgm+HuDmqygeFUiCyteFsKbK0w8W2VHO41FMT/9My3/GaVaRkSoa3i2xq9XoWT0y2UZAO/VyZyarh6LqZQip197q8CbkYus5GL/qVczC2OpddwdInA0gpwYKvFko4r0xRVdKdCIuRiUSGRA9O+4OWuy9VIcDcJ8Jp14rbJ/dTn+bbLchKgH3zCMyXa+TdYCvPMYzZwWF/FrK5jnHoVV68WfenXasg8cxlfuCzGPrfXXV4ehiynPrPMYzVLENYxoTDoBBaRZ7CeJSzGbW4yj+U0IHSO8Z3v9KImpXzqZdpiOhBcnreYpC3mmWCcOlymDutZh8fbc54fMu5nfX6uMtazmOnALfq7achq3uNpOeRxcc4/8RVKOM6x3z8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/b8e8597f7cafd3370a8b92a5055e61a3/e24fb/2025-12-08-cover.png","srcSet":"/static/b8e8597f7cafd3370a8b92a5055e61a3/6d6b7/2025-12-08-cover.png 200w,\n/static/b8e8597f7cafd3370a8b92a5055e61a3/d184d/2025-12-08-cover.png 400w,\n/static/b8e8597f7cafd3370a8b92a5055e61a3/e24fb/2025-12-08-cover.png 800w","srcWebp":"/static/b8e8597f7cafd3370a8b92a5055e61a3/b303b/2025-12-08-cover.webp","srcSetWebp":"/static/b8e8597f7cafd3370a8b92a5055e61a3/21c67/2025-12-08-cover.webp 200w,\n/static/b8e8597f7cafd3370a8b92a5055e61a3/4b6b9/2025-12-08-cover.webp 400w,\n/static/b8e8597f7cafd3370a8b92a5055e61a3/b303b/2025-12-08-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Did you know that you can build an event store in one hour? I even did it a few times on the conference stage. Actually, it took me usually…","fields":{"slug":"/consumers_processors_in_emmett/","prefix":"2025-12-01","langKey":"en"},"frontmatter":{"title":"Consumers, projectors, reactors and all that messaging jazz in Emmett","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMBBf/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB7ydCbEz/AP/EABYQAQEBAAAAAAAAAAAAAAAAAAEQMf/aAAgBAQABBQKmM//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABcQAAMBAAAAAAAAAAAAAAAAAAABEIH/2gAIAQEABj8CjNv/xAAaEAACAgMAAAAAAAAAAAAAAAAAARAxIUFx/9oACAEBAAE/IUMSza4lBb6f/9oADAMBAAIAAwAAABAAP//EABURAQEAAAAAAAAAAAAAAAAAAAEA/9oACAEDAQE/EIS//8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8QV//EAB0QAAIBBAMAAAAAAAAAAAAAAAAxARARIXFBgfD/2gAIAQEAAT8Q5qCOM27Nwk5GeOk+4//Z","aspectRatio":2.2222222222222223,"src":"/static/0c5840bd2595b15ddfb265725e896325/f8504/2025-12-01-cover.jpg","srcSet":"/static/0c5840bd2595b15ddfb265725e896325/f137a/2025-12-01-cover.jpg 200w,\n/static/0c5840bd2595b15ddfb265725e896325/8494e/2025-12-01-cover.jpg 400w,\n/static/0c5840bd2595b15ddfb265725e896325/f8504/2025-12-01-cover.jpg 800w","srcWebp":"/static/0c5840bd2595b15ddfb265725e896325/b303b/2025-12-01-cover.webp","srcSetWebp":"/static/0c5840bd2595b15ddfb265725e896325/21c67/2025-12-01-cover.webp 200w,\n/static/0c5840bd2595b15ddfb265725e896325/4b6b9/2025-12-01-cover.webp 400w,\n/static/0c5840bd2595b15ddfb265725e896325/b303b/2025-12-01-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m always saying that there’s a thin line between good and bad practice, and this thin line is named “Context”. That’s also true for the…","fields":{"slug":"/requeuing_roulette_in_messaging/","prefix":"2025-11-17","langKey":"en"},"frontmatter":{"title":"Requeuing Roulette in Event-Driven Architecture and Messaging","category":"Event-Driven Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACA0lEQVQoz1WSS2/TUBCF/btgAQt+ASskNqxgA/wDJKgAwaaAEKWCIvESCCEUqOgiaYlCE5pQUaIImjbNq0lcx4mbKMF27Otr+0N22kKPNLqvc2fOjI4ShiFRRBBCoKrq0VntdEgmkywvL5PNZqnX6xwi4gRBcMR1XYGu91AOHyPsGwaObcd7y7IYj8eYphnHaDSKI7qTUh79CXyJlA5hIOjpKkpUJa4E1Jot7LYaE3+Vt8ms5shmcxQK31lZ+cLaWp5M5utBUo9Go4ltGRAOCd1d7MqLSOG0kjfcopd6iLuTwl5/jV9exN/6HOkGekAf0CPtU77nxYodewTBBF8MsLo5FE1V2dM0vEGJ1qMr9NML9JKzGJl56gvXCKwyvqginSrSreC5OlG3YRDEifeqRfLfXqFpm8j+EGVgmhj7Q7oa1Eom7VpIo+ZT3XKoFMf0E7fQVpeoVaH226TfdaazC/x43S2mSdw5iV55idCGKOUnT1G3N/mxkubjvQcszs2xU9LQ2hK15aGtvkf9uY7ahnZ9wsBwpy0LwWA0xu43sDL3EdoGIR5KYfY282dO8+HyWdLXL/H26jnyz+9OrRFI/iE8tgrXpdnqMBm20D/dwN3NMZnoKIVnM7w5dYKlC+fZeHyTxMxFiql3B5bwCcOp1+K5/efZ4GCG0nNwLQMp/uD7Dn8B8emRZFqZJoEAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/7523e8bd658f1926a8c638e369ddc6fe/b0bd3/2025-11-17-cover.png","srcSet":"/static/7523e8bd658f1926a8c638e369ddc6fe/6d6b7/2025-11-17-cover.png 200w,\n/static/7523e8bd658f1926a8c638e369ddc6fe/d184d/2025-11-17-cover.png 400w,\n/static/7523e8bd658f1926a8c638e369ddc6fe/b0bd3/2025-11-17-cover.png 626w","srcWebp":"/static/7523e8bd658f1926a8c638e369ddc6fe/70677/2025-11-17-cover.webp","srcSetWebp":"/static/7523e8bd658f1926a8c638e369ddc6fe/21c67/2025-11-17-cover.webp 200w,\n/static/7523e8bd658f1926a8c638e369ddc6fe/4b6b9/2025-11-17-cover.webp 400w,\n/static/7523e8bd658f1926a8c638e369ddc6fe/70677/2025-11-17-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"After the last article on Dealing with Race Conditions in Event-Driven Architecture with Read Models, I got such a question from Ben: You…","fields":{"slug":"/strict_ordering_in_event_handling/","prefix":"2025-11-03","langKey":"en"},"frontmatter":{"title":"Handling Events Coming in an Unknown Order","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAClklEQVQozwXB/TOTAQDA8Ye6ruvl+oH0Rhr2rM3YM5O8VCjDNkyLeUmGIUnhUnPF8hLCuV4WsbNLSkqlViqplEpyyV257uqnfuvf+Pb5CKsiivDVlVDZ0sf45DsqHV3kOvtoba2jwJiMvq4DR6+bTzVmamLV5GenM1hbSKcxllOpMYxb4pFr9AiihdVbtQiCmEOwzc3o7HcmXn1m+MksTZ5pLjS1k6FPIlIRiiHrCOVVDcSF76a+0EiHzUCeVuSSSUtJYirnyxys1xTis0VC8AkzE1PWw9uVP8ws/+b0tVfYWx7TPjiHo/UKZn0Cx60mdInpWC3ZDJn2cTs5HE+mkmd5WookJY78EnaFpyL4qxF8Isuxd91hdukbQ955WvvncLnncPbP0e1yU1mcw+2TVhKDNyPfvpUo2Q5MYiBjKWE8TguhLvkArrJy/DWH8Q3QIBxtcHPj/gyffv1hbPYrnqkFnr1dYvr1AhPubo7lGEiOieKQQoZZ3IlBJWOdnx+xsm2cEIMZMmVizKxmrcLImoBwhKpzw/QOe3FNvsE5NEb36CTLf/+xuPKTnuYqDkgKDNEqajWhlEoiWdEq1LIgspWB1ESpGdHHkWOtZdPeIjYEahGqnXfoHHiKa3yKu89f4vLc4snHRabueTiVpsOyR4mkEhlJUNGYsR9jvIR85w4skowqScF5nZJ6awEhB21s3KVFaG4b5M2Yl493rzPz4h4PBy7ivdmF81wdbQ0nud5yloo4FSMpGh40VTPaWIohUoE9IogKbRhOlZxruVmEGAvYEKJG0Ela+mrKsWakcCzXhCVlD5fPVDA9v8CHL/MsvZ/EW5zEfJudXz8W+fbIzdWj6dyKl3NCHUS3UmSq2IjBbkOdZuY/8OqJtBNS4BgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/64d3faf9c17c4be8610248e5e577e4bc/b0bd3/2025-11-03-cover.png","srcSet":"/static/64d3faf9c17c4be8610248e5e577e4bc/6d6b7/2025-11-03-cover.png 200w,\n/static/64d3faf9c17c4be8610248e5e577e4bc/d184d/2025-11-03-cover.png 400w,\n/static/64d3faf9c17c4be8610248e5e577e4bc/b0bd3/2025-11-03-cover.png 626w","srcWebp":"/static/64d3faf9c17c4be8610248e5e577e4bc/70677/2025-11-03-cover.webp","srcSetWebp":"/static/64d3faf9c17c4be8610248e5e577e4bc/21c67/2025-11-03-cover.webp 200w,\n/static/64d3faf9c17c4be8610248e5e577e4bc/4b6b9/2025-11-03-cover.webp 400w,\n/static/64d3faf9c17c4be8610248e5e577e4bc/70677/2025-11-03-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"My events came out of order! What should I do?! Are you familiar with the term “phantom record” and its benefits? No? Let me explain it to…","fields":{"slug":"/dealing_with_race_conditions_in_eda_using_read_models/","prefix":"2025-10-20","langKey":"en"},"frontmatter":{"title":"Dealing with Race Conditions in Event-Driven Architecture with Read Models","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAByElEQVQoz3WSTW8TMRCG8/NB4oLEAY4gIUBtUYWqFClVBRwAFRAVX2lJ06abJk0bb+xdrz83yYNsFG4cXo1tjZ95Z+zOer0m+EilLNY62uBo25blcpljGwPRW2KMWSGE/2q1WtEBODu55uGDQ86+fEbu30HOxkhVoa2nPv+K7N7FGY3zIUNToU2BzT4BnXN0lJJcFYLDXp/R6W9U/x2TYsT0esZsXjIZ/mJ2fEAp5kipEEKglKKua6qq+qd05r2ns7v7kv6PgueP33N1VSbDtIAcfKI6uI+3hiXk5OQmtZWcJFdpvVEaUQbu73cZDia86Z0wGd8Sg8W4QFmcor71kKWgrqvckm4amqbJwOQwRWttjsaYv8Budy873H56xMVwSruMmMZQNwa/grpSKG0RJx8R3XuUQqC1zsANPEETMM9wa+sF/Z8jXu0ccXkxJUafE5WUOSE9jDaOajqkPH6NrmsWC4mUMs8z5SbgBt4piksGpxN2nn1gdDElRJ+r1cYhiz7XB4+Q4iZDbVzjnM2PkCBVpbJMo/OddJa/zfhcsLf9nfHohjY6XKrmA/Kyz/ztE7RcoG1A6wbrIsaGHBvj8S6gTcAZizOGP9+TpMpWqTTMAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/46e98e2c726d2a1273b766180779c674/b0bd3/2025-10-20-cover.png","srcSet":"/static/46e98e2c726d2a1273b766180779c674/6d6b7/2025-10-20-cover.png 200w,\n/static/46e98e2c726d2a1273b766180779c674/d184d/2025-10-20-cover.png 400w,\n/static/46e98e2c726d2a1273b766180779c674/b0bd3/2025-10-20-cover.png 626w","srcWebp":"/static/46e98e2c726d2a1273b766180779c674/70677/2025-10-20-cover.webp","srcSetWebp":"/static/46e98e2c726d2a1273b766180779c674/21c67/2025-10-20-cover.webp 200w,\n/static/46e98e2c726d2a1273b766180779c674/4b6b9/2025-10-20-cover.webp 400w,\n/static/46e98e2c726d2a1273b766180779c674/70677/2025-10-20-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"I have always said that MongoDB is not the best choice for event storage, and guess what? I just released the stable version of the MongoDB…","fields":{"slug":"/mongodb_event_store/","prefix":"2025-01-10","langKey":"en"},"frontmatter":{"title":"How to build MongoDB Event Store","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACTElEQVQozyWSu04UUQCGpzax1cTKThMTKyUkJthpoS9gfAITn8JCE02IICAEUFAsvECiVGoUFJD7rssCu8gw7M7O5ZyZM3Nmr7Bc/Axr8XV//uS/GDLWeEohdBVZaRJUTzggqDQRyT6uquAFCqEUJ1qpE2QU46sIRwS4MkCqiKRWI9QJhlkq4skAKzWJ+eUh1ven7Ex1YX17jPn1CebcKIX8Eru5BdzCJqGSiEjjBqplKOOEVHadtx/GSWV/Y7hSkOgEf/E1pd4r+P2XKQ20s/u8A6uvA2fiPjIIWF7NspEzCb1d4qROXG60qO0dsbaxRVd3H6uZDEbJsUjKVbz0JNbgbeoj56mMXMQbbMMfbkeO30XEDWbm5lnb3Eb5Nkon1PePWjT2j6jUm+hyA9v3MErCJ4o0arGPuO8czRdnOXh5huOhUxwOnab56Sa2I1laSZPbzOO42zyYHSO18YfUWo70+hbTc0uks1utLg03CEiqTcLcZ9TsI8L5LoL5boKFXuR8L0H2I8ItEokCcaSItSZT3OKPaZI3i6zlTMyCg+MrXCkxfBVS3zuk3DhGN0DX/xJGmuKvFxR/9lCaeYY93UlxqhP72yPE9gKJk6cauVS1YO/gJPphK74jBEbR91vlhnGZKKmjpI+UAvvNHXZ6rmIN3qIwcA13+DpWTxvO8jtWMnmW05tsZDMEvkOo/49kez6GLQRJdZ+4XCOpNYkCjzipYr+/hz3YgXrVQW30AvWxS+z038BPTZC3PKZ+zLBb8omEja40qNSanDzmH1jrcFf2OvfPAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/73ba4d0d67d570d0c57ecac006d1b9d6/b0bd3/2025-01-10-cover.png","srcSet":"/static/73ba4d0d67d570d0c57ecac006d1b9d6/6d6b7/2025-01-10-cover.png 200w,\n/static/73ba4d0d67d570d0c57ecac006d1b9d6/d184d/2025-01-10-cover.png 400w,\n/static/73ba4d0d67d570d0c57ecac006d1b9d6/b0bd3/2025-01-10-cover.png 626w","srcWebp":"/static/73ba4d0d67d570d0c57ecac006d1b9d6/70677/2025-01-10-cover.webp","srcSetWebp":"/static/73ba4d0d67d570d0c57ecac006d1b9d6/21c67/2025-01-10-cover.webp 200w,\n/static/73ba4d0d67d570d0c57ecac006d1b9d6/4b6b9/2025-01-10-cover.webp 400w,\n/static/73ba4d0d67d570d0c57ecac006d1b9d6/70677/2025-01-10-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"“Is your command handling idempotent?” Sounds like a douchebag question to ask. Actually, that’s not a question but a statement that we want…","fields":{"slug":"/idempotent_command_handling/","prefix":"2024-11-15","langKey":"en"},"frontmatter":{"title":"Idempotent Command Handling","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACRElEQVQoz13R3UuTARTH8efZnC+Pbu7FOdfcpk6bmuYyTXOim5szytdFgq9gWzPMjJxB3qStdA5TTBAqe4/MpC6sSELKG7HEuwiC/plvJEroxYFzcficw/kJgiDwr7RSCq6CAryFufhPlRNw19Nd5eSS28dxcw42gxmLKhV9fCKSICCJ8YiCgDUjkxyDhX1H2G8sajV1edlMtHp4ei3Ix/tTvI1GuNcfpMyajVGp42yhmdELNYQaKuirc+C16UkQBEyaNGSi7CB42mpmxFfN0mAfD4K97DyZY216ki9jtwg1ePHkW5jtdLIabmM90s1yuIXekhwyEhToU5TIZXuguAf67LksdJxjeyHK5uxd1idv8n1xka2FebrqfVz1Ofga7WE9FmJzpp/xlkqe9zfSVpRFWrISmSgeBE+ajjDn9/Bp9CLvbgT5EBnhz+f37LxcRJekJuAqYSvWzq/XYX6+ChN2H2PCY8dlTcOgTEUUD/1Qn5RMtLmWpQE/q9f7+DYR4ffKM2IDAaS4RBxZNm63O9m408ZSoJZxdwH1Bok8dSomtfZ/KPsXlmaaiDW7eDPUwUZkmB8zU6xNj+1ujxNlHDVa6ax1sHKlluWuCuY9dqr1EjlaHcZUzeGURfLUKloLbQx7nbwYCrH9cJaaotLdIZmgwKLNotyWz+PLHobKbPhMGjIUIukqHeY040FQkjQ4HH60koFcnchYTzHzoSaK7QrMxjiMBjnNjecpP1FMlyedR4MlnLGpdgFVSjJVlU3I5Ypd8C+HXTHbDw6V5gAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/2018e411f2f9c31e7df9adf38f8405b6/b0bd3/2024-11-15-cover.png","srcSet":"/static/2018e411f2f9c31e7df9adf38f8405b6/6d6b7/2024-11-15-cover.png 200w,\n/static/2018e411f2f9c31e7df9adf38f8405b6/d184d/2024-11-15-cover.png 400w,\n/static/2018e411f2f9c31e7df9adf38f8405b6/b0bd3/2024-11-15-cover.png 626w","srcWebp":"/static/2018e411f2f9c31e7df9adf38f8405b6/70677/2024-11-15-cover.webp","srcSetWebp":"/static/2018e411f2f9c31e7df9adf38f8405b6/21c67/2024-11-15-cover.webp 200w,\n/static/2018e411f2f9c31e7df9adf38f8405b6/4b6b9/2024-11-15-cover.webp 400w,\n/static/2018e411f2f9c31e7df9adf38f8405b6/70677/2024-11-15-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"The leitmotif of this blog is the event-driven approach. I truly believe that it’s a way to keep our applications closer to business. By…","fields":{"slug":"/crud_with_pongo/","prefix":"2024-10-27","langKey":"en"},"frontmatter":{"title":"Bootstrapping CRUD with Pongo","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4iAAAuIgGq4t2SAAACMElEQVQozwElAtr9AG7H64PF2Z3JwK/Lq7LNqbXPr6zJnb/VeLjMd7jRmMTdrcPVhsjUdMvVcMjTc8jWb87EdfGclfGZkO6XigBZxOtzx+ma0d/v2Xf62mb83m/+32iXiU6amYz08fD++vz99+/z48Ly13j/4WP/4WL+xVP8kln7lVv4lFsAV8PlZsTti83m5dJw+Ndd4sddpqSLSFJdlpiX8O7ozMzHrK6v09HUk5udy7dr/txU+L9N+4pU+IpT9IlVAEa751W96IHF3OXOZf7YVtq9Um9wbF5jZ2hlZMK9uaqppk9SVb+9uoePn5iHTv/iUPe7RPuGTPmGTvSETQBCuONCtOBltcntzVP30VD81lTexHKQiXbSybrl5ePw7+vKysnTyrqro4row0n/3E34uDr5gkj4hEnzgUcAUsLcN7DhW6/C79JJ+dVD+c9E/M89sJlCxMG4o6Gfsq6u9PHr8NWB+NZd/dtI/d1E+b8z+IRD9YVD8YFAAETD4yqr306hveGhQfOoOPLKcunVqbKkiqefm31mYHZjXt7SyendxPThrPmvSvypPvaWNutfNedUMuZVOgBRmcNtgaWsVm3pREzuSlOifYWFiIuElZ5dl6lPYm5RYWpedX2hkpGhjI/ln7L4n7rqjKnqjKvzkLHpla4A6yY79R4v2g8b6yAt1x8uOXmfG4SrOYKkOLflAYu+FG+TLoesGnedr3SJ4nydtmyD2pq104mon2F4xX+ckPlZGl/I8OwAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/460a24d0a3770557e48cb10508656e1b/b0bd3/2024-10-27-cover.png","srcSet":"/static/460a24d0a3770557e48cb10508656e1b/6d6b7/2024-10-27-cover.png 200w,\n/static/460a24d0a3770557e48cb10508656e1b/d184d/2024-10-27-cover.png 400w,\n/static/460a24d0a3770557e48cb10508656e1b/b0bd3/2024-10-27-cover.png 626w","srcWebp":"/static/460a24d0a3770557e48cb10508656e1b/70677/2024-10-27-cover.webp","srcSetWebp":"/static/460a24d0a3770557e48cb10508656e1b/21c67/2024-10-27-cover.webp 200w,\n/static/460a24d0a3770557e48cb10508656e1b/4b6b9/2024-10-27-cover.webp 400w,\n/static/460a24d0a3770557e48cb10508656e1b/70677/2024-10-27-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"Have you heard someone say: “We’ll use this tool because it requires a long onboarding and lots of memorisation?” You could have seen the…","fields":{"slug":"/sql_support_in_pongo/","prefix":"2024-10-15","langKey":"en"},"frontmatter":{"title":"Running a regular SQL on Pongo documents","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACNklEQVQoz0WRzUsUARiH94+pDnYJErxVdg4PUh2MBPPQMYIuhYVWJObHmru6X/OxM7PztTM7s7uzq6tI0EUJMjfTMsO2kPIQSBKCEPLEjGSHl/f2vM/v98am0yJZUUXM6+Q1C1UvRqMZJcxiGUkxUHUHSbUwbB9ZtclJOulcgZl0nqlkjvH4DM/HEjwdHieWERRk1UQzHHTbwyz62KUqjhdwf2CItY1Nfu7tkddMbvTeiuCq7iLmLbKiQSqjkJgWiE+mGRlLEAvNNMONbEKQ7dXwa/N0dV/nZl8/6+/X+LH7neHhEU6dPsOFi5ex3SpKwTmxPYaKxF9kiIUxddvHCq38Gm6ljlOuce58B48Gh1heXubNapOhx4OcbWujvb0DrzKHZrqRqaTYZMV/8UViYV9GGNMLcMp1in5A0FjkybNRRsfirKy8pfNSJw8HHtDdfZWJySR+tYFulaKeFc1BzJukcyrJGZFYeMl0KxQjYC2aUnWW6twCftCgVq7S03WF2/19CLJGOWhgu5WoIt3yji1Vi4xYIJk6AZaxvf+RQ8vwiOFWkEQZI5ugt+cad+7eo1Kbj+wM24u2ojuIikla0JgKDeWCjWaV0Ithj0EEry+8ZHV9k+bGFkuvV2i1WjSb76gGs3z4tM36x23KwXz0lMhO0kmmFSYTWWIpQUVQDORCEdUskcvrLLxa4gj4urPL1pdvfG7tsLG5zcHhEb9+H7J/8IdKfZFkSiYjaCSmJSamMoyMJ/gLhEsMh5HyvzIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/56dfce3259a234d6e422b2689bba799e/b0bd3/2024-10-15-cover.png","srcSet":"/static/56dfce3259a234d6e422b2689bba799e/6d6b7/2024-10-15-cover.png 200w,\n/static/56dfce3259a234d6e422b2689bba799e/d184d/2024-10-15-cover.png 400w,\n/static/56dfce3259a234d6e422b2689bba799e/b0bd3/2024-10-15-cover.png 626w","srcWebp":"/static/56dfce3259a234d6e422b2689bba799e/70677/2024-10-15-cover.webp","srcSetWebp":"/static/56dfce3259a234d6e422b2689bba799e/21c67/2024-10-15-cover.webp 200w,\n/static/56dfce3259a234d6e422b2689bba799e/4b6b9/2024-10-15-cover.webp 400w,\n/static/56dfce3259a234d6e422b2689bba799e/70677/2024-10-15-cover.webp 626w","sizes":"(max-width: 626px) 100vw, 626px"}}]}}}},{"node":{"excerpt":"If you want to make God laugh, tell him about your plans. My plans were simple: recharge during summer, take a break in July, and then…","fields":{"slug":"/pongo_behind_the_scenes/","prefix":"2024-10-11","langKey":"en"},"frontmatter":{"title":"Pongo behind the scenes","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACg0lEQVQozyXR2S/bAQDA8d/Dnve8LEtmsodtZmwYwtxD0GHqKKGqjlJHm6K3TmkdZYayzRx1dXG1RasyzBlZJJgl/p7vsuzh8xd8hCu/hz8HfvY8bhZtViYtZnoMWqy6dmxdBvR1VRhrJPR16bGolOgba9G3KjBpVKgVChTVtWiUjYjSM8lMTEO43fdzvbfFqX+DfqOWmYlh1t3TzHz+xOTYMFaVEkONBLvFwIdO9X9aDUaNCk2jEqVUhqKqmrpqObIKKcLtzx0ud338CnowNTXQ09GG37tAYHuJrc1FvGsuZscddBt0mDVq2uR1NEiqyE/OIjEsjuiQCPLeZCFKyyE9NhXh5keA30EvVwd++nQd9Js72PEtsuJyEgwsEwy6WV9bIC82nZhHkcQ+iScpLJbUyCTiniWQHJVEeX4++SlvSY1JRDjfXOcy4OX6cIeJvh769WpWbEamVAoCvnmOjryM2HsJu/uQiPtPKcsrZtBiprJIQszzOMTZOSgqy5GJi5AWixFOfWtc7Pq42N9mecqJpbKM+foK5tQK9na/c3S4ibyglJA790h5kYC1vZPV+a+M2LqJCo1A39bCtzEHshIx0veFCGeeVU621jkLbnLg99BbJ2dWp2ZvbZrjYy8rS7OIXsZREB6OqbmFfksX444+bO1qZDki7CYT06MOdE0NlIveIQRdc/hd05xsb7C9OIM0W8S4Y4iL831urk8ZMBjICAml+HU0zgEb7tlJbNp2MsKi+fJxgPFBOwMGPY2lEspEhQgB9zIrI0MM19ZT/W/qVTK5Sbk0lNdg05kpSUgh/sFjdE3NOIccjNp7cRi1WDVqXFNO5p3DmFpbKcsVIS8V8xdeRrZPgEPHFgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/b5615e59034b5ac9b1af736ef0c81005/bc3a9/2024-10-11-cover.png","srcSet":"/static/b5615e59034b5ac9b1af736ef0c81005/6d6b7/2024-10-11-cover.png 200w,\n/static/b5615e59034b5ac9b1af736ef0c81005/d184d/2024-10-11-cover.png 400w,\n/static/b5615e59034b5ac9b1af736ef0c81005/bc3a9/2024-10-11-cover.png 750w","srcWebp":"/static/b5615e59034b5ac9b1af736ef0c81005/64954/2024-10-11-cover.webp","srcSetWebp":"/static/b5615e59034b5ac9b1af736ef0c81005/21c67/2024-10-11-cover.webp 200w,\n/static/b5615e59034b5ac9b1af736ef0c81005/4b6b9/2024-10-11-cover.webp 400w,\n/static/b5615e59034b5ac9b1af736ef0c81005/64954/2024-10-11-cover.webp 750w","sizes":"(max-width: 750px) 100vw, 750px"}}]}}}},{"node":{"excerpt":"When you think upfront and want to make things right, there’s an interesting feedback loop. Quite often, things start to click, often in a…","fields":{"slug":"/pongo_strongly_typed_client/","prefix":"2024-09-13","langKey":"en"},"frontmatter":{"title":"Pongo gets strongly-typed client, migrations, and command line tooling","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACMElEQVQozwElAtr9ADYjFjMhEyoZDBsOBikYDE4yI2E9LGE+LF48K2lINW5KOGdEM1k/LUMtHzokFyYVCy8bEDAbDzkkFzAbEABDKx5FKh47JRcpFgsuGQ9KLSBbNyhpRzdrSTlsTT1uU0WVemxtUkFcRDBRPidDMxtHNR9KOB9KOR5EOBoAX0AuZUcxaE85WEQsW0koYlIwf21LiXZJlH1LaF9Se3p65eLbkY5xeHQ0gHo8e3U4dnA3b2ovbGcqaWgsAIOKQ42TS6GdWp+cWLy7j97byt3e1s/Ou8K9n5CKf52Wkd/Z16OlfZKaSpSaT4+YS4eNRYGFQX+AQIN9RgCVlVGbmFaioFnFv5OuqaW9ubvU09Pn5ua1srdGPz5fVEhqX1t5bk6mm12fmVmUlFCLiUmMh0x8gUF5gT8Am4BclXxVr597u6iOhH51Z19Yrqmp39rXpKGfiISEVlBLjoFynoxamohZnYddkYJTgG9Hfm1Icmg9bWg4AJCDUJ6PZKeZcaGSb311am1hQlhONltZUp2ZnaOclmxiWMa5naeaWqOXW6KXVpuOVZWGUYd4TH51QG5yMACVkkunn1urnV+knX6ZkGaEe1qSh02dkVWfl4uimYSHfE+9tqqqmWWailOikFijjFuSglCPfFSAdkVxeSwAkJBDkJA8npZhkYtWkI1Fi4NPr6pZnpNOuK6Ls6uOnpJIsqiK1cqzmINSl4dUjHpMiHlRf3NOc2tHYWkuQivqu3CG0qMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e864253c01617691383cd1762ddb91db/bc3a9/2024-09-13-cover.png","srcSet":"/static/e864253c01617691383cd1762ddb91db/6d6b7/2024-09-13-cover.png 200w,\n/static/e864253c01617691383cd1762ddb91db/d184d/2024-09-13-cover.png 400w,\n/static/e864253c01617691383cd1762ddb91db/bc3a9/2024-09-13-cover.png 750w","srcWebp":"/static/e864253c01617691383cd1762ddb91db/64954/2024-09-13-cover.webp","srcSetWebp":"/static/e864253c01617691383cd1762ddb91db/21c67/2024-09-13-cover.webp 200w,\n/static/e864253c01617691383cd1762ddb91db/4b6b9/2024-09-13-cover.webp 400w,\n/static/e864253c01617691383cd1762ddb91db/64954/2024-09-13-cover.webp 750w","sizes":"(max-width: 750px) 100vw, 750px"}}]}}}},{"node":{"excerpt":"I don’t feel like an authority or an expert. I prefer to think about myself as a practitioner. Our industry is filled with self-proclaimed…","fields":{"slug":"/architecture_drivers/","prefix":"2024-08-31","langKey":"en"},"frontmatter":{"title":"My Architecture Drivers","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACH0lEQVQozwXBS2/ScAAA8H4BowejmYclM84tmaI4HI4NRGxGGeXVDvoC2o5HC4y+oK9/KY91PtiYr6jRRKfOyzh7Il6MJ+PB0z6Qvx9UCF7fXp2PbQQGQBsBpYrBfSF/6DT3ckiXzO5E1ojIWhbeoNIxPOonUFhiySZLy/XSZtAPUesLW75rNIZ6fVuqsTQa/zqyJh0xGw4eq+K3XufpLm2RmE5mWjtJLpXkia2N0H08jcKbDyA6h9bTMBl/JDD5WipWR6JaIVNNJ+BQMOf3Gzz15YX30nOOLe2V3JpwxZN+sYsnavHHy4s3oBwcrRfwQni1QmBAbgYDd/yLi/mV29ksziCJz43d6en7d2/HT/aBBbo92xjpxrHa/q4IJ80qdPHCpavzC+uhlTyWSCbT8ctX7B3stQumd32zj29+EthfQ7M4ZtA3h0A3u4rjOjoATVka1MoQgmX3Avc+QNCPoTv7NZstLZ1RpHuwL2Cp30PjnMicLt+MrAaA3XFMTe8oruscHo1Nw6wKIvTn/N+03fg0Nzdgy5ptlViW4zmFKpwxhcnDUCYSJpIJRW4BXdY1qaNKg747PhoblikKIpRGUxhJYZUKTpIsQwk1XqxyXp2fSg0bjvlWblmWNrA1sytZuqJ3FO9g3zvwVFUVagKEIAiOY+USQxN5vkzzXFGo80yJ2s6k8imUZYtyW9S1tm2owOy6PfD88JnTc0RR3OX4/26V0IuD7TAvAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/d3ac5b456d98d37dcfd581c62fcf25d1/bc3a9/2024-08-31-cover.png","srcSet":"/static/d3ac5b456d98d37dcfd581c62fcf25d1/6d6b7/2024-08-31-cover.png 200w,\n/static/d3ac5b456d98d37dcfd581c62fcf25d1/d184d/2024-08-31-cover.png 400w,\n/static/d3ac5b456d98d37dcfd581c62fcf25d1/bc3a9/2024-08-31-cover.png 750w","srcWebp":"/static/d3ac5b456d98d37dcfd581c62fcf25d1/64954/2024-08-31-cover.webp","srcSetWebp":"/static/d3ac5b456d98d37dcfd581c62fcf25d1/21c67/2024-08-31-cover.webp 200w,\n/static/d3ac5b456d98d37dcfd581c62fcf25d1/4b6b9/2024-08-31-cover.webp 400w,\n/static/d3ac5b456d98d37dcfd581c62fcf25d1/64954/2024-08-31-cover.webp 750w","sizes":"(max-width: 750px) 100vw, 750px"}}]}}}},{"node":{"excerpt":"Some time ago, I wrote about the dangers that come from the I’ll just add one more field” attitude. Have you heard about the Broken Window…","fields":{"slug":"/projections_and_event_metadata/","prefix":"2024-08-25","langKey":"en"},"frontmatter":{"title":"Using event metadata in event-driven projections","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4dAAAuHQEHEELWAAACMElEQVQozwElAtr9AD5IQCw5M3NXPsKMZFhVRS4xJ0xJOlVdUD5MQz1HPkpVS05YS2FoWFJgVSUuKKNvTMWNZGp7bFpxZ4qPfAAqMy0eKiZ+X0XNkmhcVEMsMSlDRjtFUUc9TEI6QDdIUkhKVktETkU3R0ElLSaodE/FjmZmcWNlem5bUkEANDkwHSYhelc8xYleUEc4LDcxR09ESE1BRko/PUA2PEhAPEhAOUI5LTkyJCcgrnpUxpRrNzYtNTMqYl5NAEdLQioyK21MNKp1UTwzJRITDnFuW15LOZF4WYt9YRYcGCcqISQkHCAkHhoZEmlQOndbQyIfFiw9NlleTwBxa1lOTUBSOymLZkmBdFpya1Sdl3uQe2GqjGeplXFuZU1zaE52Z0t+cFFdUTtSOiluVT+RjneLk3+Wm4UAwrKVZ19MNCETd1g/cVxFaFM9Ykw3bl9KbmFOdGdRiXFWhXFXjXZZlHJQXks0OCgaXEItbWVSaF1Ja11JAPb413x6Zy0gFGtRPGhMNXJNNHhPM5d4WqGFZp+CY5x2VpJ1WoptUY5zWHFgSkVAMmliUJCJcolzWYloSwCkoYp2bVlbTz93Zk95X0aIZUmAWz+JYEKhb0uTcFGSdFeKbFF2W0N8blhuYExKPi9BPTBGPzBQPixMNyYAf3lmjoZwnY91mXFRnGlHk2lKe1pCq3JKyYxdqXVMp5BynYxwfWdPY1tKSD0vMS0iHxwTFRYPEhMOHR0X4XO7cL5aDjkAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d3b3f36478db62c37631cf815bf85de9/e24fb/2024-08-25-cover.png","srcSet":"/static/d3b3f36478db62c37631cf815bf85de9/6d6b7/2024-08-25-cover.png 200w,\n/static/d3b3f36478db62c37631cf815bf85de9/d184d/2024-08-25-cover.png 400w,\n/static/d3b3f36478db62c37631cf815bf85de9/e24fb/2024-08-25-cover.png 800w","srcWebp":"/static/d3b3f36478db62c37631cf815bf85de9/b303b/2024-08-25-cover.webp","srcSetWebp":"/static/d3b3f36478db62c37631cf815bf85de9/21c67/2024-08-25-cover.webp 200w,\n/static/d3b3f36478db62c37631cf815bf85de9/4b6b9/2024-08-25-cover.webp 400w,\n/static/d3b3f36478db62c37631cf815bf85de9/b303b/2024-08-25-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the previous article, I told what happened when Emmett and Pongo walked into a bar. In other words, I announced that you can now do Event…","fields":{"slug":"/emmett_projections_testing/","prefix":"2024-08-14","langKey":"en"},"frontmatter":{"title":"Writing and testing event-driven projections with Emmett, Pongo and PostgreSQL","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4dAAAuHQEHEELWAAACMElEQVQozwElAtr9AAMEBAEBAQEBAQEBAQAAAEFGTZKXoIiOmhsdIQAAABcdK4+arXyBko2XrZOdsn+KnXaEm3F+k3qJn5iowQAAAAAICQoFBgcKCguKlJ3T3OO4qqzHp6mxnZkaHygUKkqRoLaSnrKbqL+IlalGbZRcgaZPeaVqiKaRoLYAMz1HkqawOEJFGxwf8Pr/xsTEu5+guo2Q3KaMl5OaHEBwg5axp7PFn6i7jZOiR3GbX4atT3mkdoqfbG54AJCou+X5/2d0dm9ydvr//8m1tMufobmLkM2WiMi2rFRjgUxUaFpWXFJJTU1BRk1edHCIoz9tnnF7iTYzOwCnu8jV6vGarLK9xs3s9vjNs7LMoKXEj5W+g26ng2aPbFJ6YFJxZmp3am5/ZmKTd2+UhYBffZuJenWKcWcAYXR/2ejx8f3/2Ofy2urz1MXHvJicroSDrYh3nJOIdHBugWtgwquh7cy0xYpWpoNkj29TaVxVV0g5TzcnAJ6krv7//+r4/OHo7tzm8OPm6oRYTnJXSZGYoIilvkQ7PWdQR6aMg9O0oMSnhjAcEhgOChkOCBIJBSIWEgD4+fvu+v3m9v3o7vLh4ubv+f9dT0tCQ0CXk56jtcZvbXKAbWe6o5nHpInwyaF0VkAOBQMgEw0dDwgfFAoA+/7+6vj85vX94+ru4t7d8fv/jZOXTEdCiYaUpaWrk4+Sm46Oc2Nfy66QwJBme1tFSERNR0FHQ0FKPz5HmDsaON0y72AAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/5566e1eee42e2f76ee638e555fc4d646/e24fb/2024-08-14-cover.png","srcSet":"/static/5566e1eee42e2f76ee638e555fc4d646/6d6b7/2024-08-14-cover.png 200w,\n/static/5566e1eee42e2f76ee638e555fc4d646/d184d/2024-08-14-cover.png 400w,\n/static/5566e1eee42e2f76ee638e555fc4d646/e24fb/2024-08-14-cover.png 800w","srcWebp":"/static/5566e1eee42e2f76ee638e555fc4d646/b303b/2024-08-14-cover.webp","srcSetWebp":"/static/5566e1eee42e2f76ee638e555fc4d646/21c67/2024-08-14-cover.webp 200w,\n/static/5566e1eee42e2f76ee638e555fc4d646/4b6b9/2024-08-14-cover.webp 400w,\n/static/5566e1eee42e2f76ee638e555fc4d646/b303b/2024-08-14-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week, I announced Pongo - Mongo, but it was on PostgreSQL. So, the Node.js library allows using PostgreSQL as a document database…","fields":{"slug":"/emmett_postgresql_event_store/","prefix":"2024-07-12","langKey":"en"},"frontmatter":{"title":"Event Sourcing on PostgreSQL in Node.js just became possible with Emmett","category":"PostgreSql","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4eAAAuHgGqqWO7AAAClElEQVQozx3Sy0vTAQDA8R/0FGdaatMZSCPDmnNzpWY6dc61+XPtoXs1Z2S+5ky3wjlb2XzOfCE2QzMxLSIoqEsRXYoIOknUKQp6HKJDBHXrcfkGff6GjxBt0RNylWNXZ2NVyTAezMKQLyUkHmDMVc6kpZJZcwXhY0o+P5vn2XKIcU8xQ+4SojY1nbVyjPmZ2DR7MKiyEOIBE2FvBQ0FmdiUUqrlqRgV2Yx1mLk3NcCAXk19/m6Gm8t4kvDzfMHP7QsNDDo0TLabuBZrI+Spo6VWgV6RjjAbEhnwaXEUpGPen0qbeITrE2HWJvu5uxin31ZFVa6EHquKqz0GVvpEls6KXHKoeHp/ja8///Dx4ye+fHpPYrQP4fIZkYhXizVPQqSpjluJcRKxHpZGQ6xOR4h2eWmsKCB8ooKZU1rGfUcZbz7KXGsVN9fXsFxcwzN0gwcv3/Hi0R2EeJdI0F6Mq3A3K9MxEiNnGQ76WJmMsjjSSzzSTu8pGx2ikjH3IWLOImKNhVzxG9h49ZrWy7cx9S/z8PkGd+YvIEz1inSblbTWKFmZG2U05CPa5WY2do6F4SB9bXbaPQZCjeV4D0lxqqWY81Lori/jx/dvvHn7gfj6Y/7+/oXfrkOYCYoE6hWEm+tZiEc45zMS8JqYG+lj6nwnnR4jnU11uCqLKNu5naocCdUyCfkZKag0xRy3WAmHI6wuL2FS5CBM+I10W9Rc7PIwO9jNSfEwPT4TU1E/bc4aOpqttLj06FR70UgliPJ0rPvS0eVlsiMpmbTUNDKkMrYJAg5NDsJwq46go4xIu5NYwIlTpyDgriXg1nPCUknHaSc+u5ZS+S6KZMn/j7ZolVTnydi7dROyLZvJTU2iVJ6BqySXf0UzeXyHONQBAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/21de7aa5676ecf81e6a64ae81d26984d/e24fb/2024-07-12-cover.png","srcSet":"/static/21de7aa5676ecf81e6a64ae81d26984d/6d6b7/2024-07-12-cover.png 200w,\n/static/21de7aa5676ecf81e6a64ae81d26984d/d184d/2024-07-12-cover.png 400w,\n/static/21de7aa5676ecf81e6a64ae81d26984d/e24fb/2024-07-12-cover.png 800w","srcWebp":"/static/21de7aa5676ecf81e6a64ae81d26984d/b303b/2024-07-12-cover.webp","srcSetWebp":"/static/21de7aa5676ecf81e6a64ae81d26984d/21c67/2024-07-12-cover.webp 200w,\n/static/21de7aa5676ecf81e6a64ae81d26984d/4b6b9/2024-07-12-cover.webp 400w,\n/static/21de7aa5676ecf81e6a64ae81d26984d/b303b/2024-07-12-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Flexibility or Consistency? Why not have both? Wouldn’t it be great to have MongoDB flexible schema and PostgreSQL consistency? MongoDB is a…","fields":{"slug":"/introducting_pongo/","prefix":"2024-07-07","langKey":"en"},"frontmatter":{"title":"Pongo - Mongo but on Postgres and with strong consistency benefits","category":"PostgreSql","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4eAAAuHgGqqWO7AAAB/UlEQVQoz2WSz3LSUBTG8wS1La0lEPKPJBDoOECg6rgCAxaK0KQFhCQkBDpddFHHZcdddScLZ1w548qNHWd8CBeu1JWObvBJ6nzOvZHaGRd37rm55/zy3XM+RpY1aNo2BEECz4uQJAWyrEKWFRqLYpru12NBkMGyKSSTPM1dfic7oyg6dlvHaDyYoms9QS63gwSbBMeJf8HqfzBdz8M0G6hW74PjBChK5h+QFNgHPThugJEzhet66Ha7aLcfUgUsy1EIKUinNcRiN1GvN7BYLDCfz8EwDDY24uB5ieYwmUwOYTiBZe2j2dxFv9/HZBIgDEOYZh3Vag3ZbJ5CCXBrK4HT08f4fXmJdxcXMEol9A8OUSgYFMpoWhau68KyLHieh9FoCNu20el04LoO9vbayOdvUSB5TSolwrYP8fnLV/z68R0vXr3B+4/fcHb2FOvrmxHQ98cU2Gy2cHQ0o3E8ztE+kr9eDUZMU5U3Vjfh7rdwfhLi5eu3+PDpJ86fPcfaagyMqmYQBD4GgwF830ev16M9HI89TKchZrMpgiCA4zgwjApVSJyRVWUkEwnUaiaGj4YoFsv0jg6lVKqgXL4Nw9jB3Tv3UCiUaQJZpDfFYgW6vk3VRWrTEMXIXmRIKytrdHjkzJCEpT1IvDwvvSdJ6pVdrvstuotaQGyzrP8DltIukJ4279cAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/a85203c2ed52d88de17d5d70d5209510/e24fb/2024-07-07-cover.png","srcSet":"/static/a85203c2ed52d88de17d5d70d5209510/6d6b7/2024-07-07-cover.png 200w,\n/static/a85203c2ed52d88de17d5d70d5209510/d184d/2024-07-07-cover.png 400w,\n/static/a85203c2ed52d88de17d5d70d5209510/e24fb/2024-07-07-cover.png 800w","srcWebp":"/static/a85203c2ed52d88de17d5d70d5209510/b303b/2024-07-07-cover.webp","srcSetWebp":"/static/a85203c2ed52d88de17d5d70d5209510/21c67/2024-07-07-cover.webp 200w,\n/static/a85203c2ed52d88de17d5d70d5209510/4b6b9/2024-07-07-cover.webp 400w,\n/static/a85203c2ed52d88de17d5d70d5209510/b303b/2024-07-07-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Regular expressions are one of the classic examples of hate and hate relationships. Yes, it’s not a typo; hate and hate. Do you know anyone…","fields":{"slug":"/filtering_eventstoredb_subscriptions_by_event_types/","prefix":"2024-06-30","langKey":"en"},"frontmatter":{"title":"Filtering EventStoreDB subscriptions by event types","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4eAAAuHgGqqWO7AAACAElEQVQozzWRv28ScQDF3/fLaS22QNGmENuL1JyoSFvwguWCDcXSAJIqJyTcCVfguB+Fo3g2JprQOKiNi4NDE5uYGKWDi0s3B5OaOLm4GAb/GDE0+slnfcN7DwAIASHE4aAA5ucvpdNpURRZlg0EAvF43OVysSy7mkx6prwTDgh+Evch7oP79CgKSglDCaVkIQNuyRNZ5AUhHgqFwuFwLBYLhUI8zwvLN8+4p29fwHCH/HmE4Q7ScxhxR8ST90zzgDEPoe1xD+TNslS2LMs0Tdu29RN2e71kas17CvJlInGQOMw4AX8Qb354+78y+19z5kesZvlaVa/Xa4ZhdDodXddVVa1Wq3pTjS7f4r34XaEDCQMJkfNA/S1eH9/YPcg9/XSx8+HsXSnx8EVuo5ARxaKmNRVFKRaLkiTdFwvZDVGYGz/K4Cg78uoUUOhh+3Ds+Rf22fHYq+8zjz9Pbr3kNdVsNlXbti3L6na7jUbDNIzEStLvhLWAdhhWGLMTAHXA40O7z7wbhPd/Xun2J1Vts7ttK0q13W63Wi1N02RZVuu1a5GYcA7DLh1aGHaQmgWIY7TZ9RTd+za9vuUQMqxh6LIsVyqVUVVdlyTJsixFqS4uRRgg6CGcG5wbTubfySP9QYy76EpiTdO1fD4vy3KpVCqXy/dOqNVq0WgUAKUU//kLgmSKeHdj9+AAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ac7ebf197e1a9ec135ecce515f6c4edb/e24fb/2024-06-30-cover.png","srcSet":"/static/ac7ebf197e1a9ec135ecce515f6c4edb/6d6b7/2024-06-30-cover.png 200w,\n/static/ac7ebf197e1a9ec135ecce515f6c4edb/d184d/2024-06-30-cover.png 400w,\n/static/ac7ebf197e1a9ec135ecce515f6c4edb/e24fb/2024-06-30-cover.png 800w","srcWebp":"/static/ac7ebf197e1a9ec135ecce515f6c4edb/b303b/2024-06-30-cover.webp","srcSetWebp":"/static/ac7ebf197e1a9ec135ecce515f6c4edb/21c67/2024-06-30-cover.webp 200w,\n/static/ac7ebf197e1a9ec135ecce515f6c4edb/4b6b9/2024-06-30-cover.webp 400w,\n/static/ac7ebf197e1a9ec135ecce515f6c4edb/b303b/2024-06-30-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Developer experience is a phrase repeated in multiple ways. In our industry, we finally realised how important it is to reduce the cognitive…","fields":{"slug":"/automatically_connect_pgadmin_to_database/","prefix":"2024-06-21","langKey":"en"},"frontmatter":{"title":"How to automatically setup pgAdmin with a Docker database","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4fAAAuHwF47oFfAAABvUlEQVQoz22S0UpUQRjH9xF6Ap+gRwhC6HpLiOgJuupGLDSFLiyC8EqCFhUU0YsIS0mrtdI2BNl1CbY1Pbu2LnrWs8vZTHE9dc6emXN+MaN7XMuBj2/4zcw3/+8/EwMIw5BWbo8WC4IgihYP2nnb3lj7QakO/FP4onERb7FYpOxsKZqrLKWgWrMxrZoO3/f1Wv3XIca2Sb5Yplbf/1+hGu/SWRLziyAFdsPRLG+UuNk7wo37Y9zuH6O4vav5g+czdPYkuNqdYPjF4qkNENMtSsnw+y90dD/hyuAzBt+kuPd6mSPHxyhVuDUwQbxvirtDL6nZdaSEoekk8YeTXOsbZ25pNfL1pGUh6JlNcTmxwKWns1wfT3LYaOD5IZ4vWfua487jSR6NzhH6Lp4A++c+r5IpugZG2SqVz1pWk2PHYbdcYjm3zsSnVaxqFcc5RgiBVHKA3MYPvm/tnJob6CRlwNq3TZrN5vmCG4UCM/MLpDMZstkMbz98ZCWdxvU8rD0Lo1CgYpqU9+oUTVtfUjlw+GxYrGyaZIvm+YJKibrlj+vy23V1IcW0L0GgX9ZTTEo8X2hlyi/Xa55wIaJv8xcofZMNZH8j3wAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/02f729724eee309d0e698546710c2397/e24fb/2024-06-21-cover.png","srcSet":"/static/02f729724eee309d0e698546710c2397/6d6b7/2024-06-21-cover.png 200w,\n/static/02f729724eee309d0e698546710c2397/d184d/2024-06-21-cover.png 400w,\n/static/02f729724eee309d0e698546710c2397/e24fb/2024-06-21-cover.png 800w","srcWebp":"/static/02f729724eee309d0e698546710c2397/b303b/2024-06-21-cover.webp","srcSetWebp":"/static/02f729724eee309d0e698546710c2397/21c67/2024-06-21-cover.webp 200w,\n/static/02f729724eee309d0e698546710c2397/4b6b9/2024-06-21-cover.webp 400w,\n/static/02f729724eee309d0e698546710c2397/b303b/2024-06-21-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"“Just put the load balancer in front of it, and call it a day”. But is it really that simple? Was it ever “just do XYZ?“. I was preparing a…","fields":{"slug":"/setting_up_nginx_with_aspnet/","prefix":"2024-06-16","langKey":"en"},"frontmatter":{"title":"Setting up NGINX load balancer for .NET WebApi","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4fAAAuHwF47oFfAAACD0lEQVQozwXB62vTQAAA8PxhA0VhIpP5wSGIfhCGsBVZ2XxM94Ah1Dq2yeZU8FGEVTdUxA+zMNfNdX2mTZpH87rcXe4ulyZL21T3J/j7CX54zrr/CB96foJZgtkA0T4ifRMF+3LFdLmLY4DPHBQBHDkoBDjULWoAbji+4Hf/0mBIeMKCIeUD4vchiQlLxI6VfrdkshiS2IZdgEMHhdiLfjfM+c9/Mj8bikkE1h0SPmBBooKgDbodFCFyBmns+YPNB/PF3V2PRh6LIQ5tyAmLC4fVpcza6sbrhqgKfjgM43Pbi7LfSzOfDo7ars972O/Xj0vr4yOzVy7tfMhXm0arpVZO68ViubB/INUasiipqi3URcUwoWF5r7bfb7/JHR2eqpqzXzja29lbmRibu3a1KVmiqEmy7ThUkvRqTQLAtyxidKDAPO4YQBaV2klNbsiaYiLICAmiKHn7eCp1fRQjylnkAiq20Wm5aeiOppqaanY0R+iFvdAPAz/CkOqq0RKlligpsgYB3vv2Ze3leltSbQN0VKNZl7IbW9Ozk+O3Ls8tpJW2LkjlahIPCfQIJAHhZzxiiELT1WTta34nn8udFI+Vpmzrdj7/8eL4yMTdG6n7t2/eGZtfTAkrT9ONSrnLeEh5uVR8lnm4sDyVefGk8OsHdiB1Pc9FyIbIhpVSZWvzeXZ1+dHizL3p0cmpC/8BF/eZZPweU1gAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/f8fac1bb08e9d2993a8f45c08b4eff19/e24fb/2024-06-16-cover.png","srcSet":"/static/f8fac1bb08e9d2993a8f45c08b4eff19/6d6b7/2024-06-16-cover.png 200w,\n/static/f8fac1bb08e9d2993a8f45c08b4eff19/d184d/2024-06-16-cover.png 400w,\n/static/f8fac1bb08e9d2993a8f45c08b4eff19/e24fb/2024-06-16-cover.png 800w","srcWebp":"/static/f8fac1bb08e9d2993a8f45c08b4eff19/b303b/2024-06-16-cover.webp","srcSetWebp":"/static/f8fac1bb08e9d2993a8f45c08b4eff19/21c67/2024-06-16-cover.webp 200w,\n/static/f8fac1bb08e9d2993a8f45c08b4eff19/4b6b9/2024-06-16-cover.webp 400w,\n/static/f8fac1bb08e9d2993a8f45c08b4eff19/b303b/2024-06-16-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Managing processes is non-trivial. I have written about it in multiple posts and told you the horror story of the case that should have…","fields":{"slug":"/to_do_list_and_passage_of_time_patterns_combined/","prefix":"2024-06-07","langKey":"en"},"frontmatter":{"title":"Combining the To-Do List and the Passage Of Time patterns for resilient business workflows","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4gAAAuIAHVHB4bAAABjUlEQVQoz2NgQALMzMxiYuJGhgZPbl/Ysffonn0H1NVVJSQkJSQkhIWEzM0tunt6GxublJVVGBgYGBkZGdAARKiqOPfKg/cb12wyV5ZkYGBgYgIJCggIKioqysrKsrCwMGAFzMzMDAwM/PwC/ZOmLJs3O9DdSU5OTkpKOjUlacvapaxgbVjshItKSkotWjDP2sKMgYGhsaHu58+fj548//313bGD25iYmBiZmLBrhljb3tH1/++v8qI8BgaG1ta2b+/fPnv4YP3aVWbG+mAvMGGxk5GREaI5ITHp////2dm5DAwMrGxsMyZNOHvypKWFhZiICEwzNpv5+PiERURKiwr////f0trmFxDo6eW9aMmyd+/fl+TnGBroCwoKQSxA8Se/gICXl3d+fuHa1SsP79917tyF7Tt2rVq9ZtmKVbt37Tly6OCKZUtmzZk/a8685JQ0NjY2FDtZWFl1dXS6OtpWrV4zc9bc5ctX9nT3TJ02vbOre9GiJZs2b12ydHlhYVF3d09ra5ugoBDEVgB2i4ewFqilfQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/ce5f962c100572ddf5d1cfdde678bee9/e24fb/2024-06-07-cover.png","srcSet":"/static/ce5f962c100572ddf5d1cfdde678bee9/6d6b7/2024-06-07-cover.png 200w,\n/static/ce5f962c100572ddf5d1cfdde678bee9/d184d/2024-06-07-cover.png 400w,\n/static/ce5f962c100572ddf5d1cfdde678bee9/e24fb/2024-06-07-cover.png 800w","srcWebp":"/static/ce5f962c100572ddf5d1cfdde678bee9/b303b/2024-06-07-cover.webp","srcSetWebp":"/static/ce5f962c100572ddf5d1cfdde678bee9/21c67/2024-06-07-cover.webp 200w,\n/static/ce5f962c100572ddf5d1cfdde678bee9/4b6b9/2024-06-07-cover.webp 400w,\n/static/ce5f962c100572ddf5d1cfdde678bee9/b303b/2024-06-07-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Everyone likes to talk about best practices. I went the other way around and gathered all the worst practices on how to build the worst…","fields":{"slug":"/lets_build_the_worst_event_sourcing_system/","prefix":"2024-06-01","langKey":"en"},"frontmatter":{"title":"Let's build the worst Event Sourcing system!","category":".NET","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4gAAAuIAHVHB4bAAACBUlEQVQozx2RzW8SURTF508w0CbDMCMEgiWFgXagBQSkSFqomkaLNrVJEZH4vTK6sCa6qSv/Gk2MGxdNF26RCDbBpH6kppEwM+/NvPfmowxjHslZ3M255/zuZYBuqDpRNQKRNRypjdZuQrq4e3O1VskuLWdv5Bdj4ZC4mKmsVkIB/5tXL23XVSBSNaJCzEzNhqoRDZunQ9BubhVy6Y1aoZjPSJK036pvlAoXxOza+tUZNvTk6Qt74ioQUwvEjIatqUxEbAXi5t075VLuWq1cLl6qLCXr9a2V0grL+tOZ/Dmvv9V+ZE9coBtUkDAjFcsAjQCSIVY1vNO4J4piqZhLJpIB3i/G4gIv+Dk+lSlwQnj7dkPD9khFCsAywIyqGQoktAnFNtuPn6WkJBeY5wIiL4Q4H8eynHfWF1tY5vjI9c0dDVs0VqOkjAKJTNcgGWAdW3uv9/lQ3Hd+zsNGvbO8xzMjxSLPG1eic1GOE6rV9WlBCkyZhwpSIAEaDSems/f2XTASDQcDmVQ8vTAv8MFEXGze2qxV1y9X1h7cfygDpOqGTMsS5qD3b3B88vP3CdQNbJ51vv/49Pnw4PBLt9vt9fudb0dHg+P+4Nefv8PTIZABhsiwxm7na+/9h4/02joyZYhUiBG27LHjuO7EdYnl6Ngm1tiwHcNysHGmIVMB9MPIsHRC5//QqlThRSohRAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/f427cc7be1ddfca8643259ccd11a478e/e24fb/2024-06-01-cover.png","srcSet":"/static/f427cc7be1ddfca8643259ccd11a478e/6d6b7/2024-06-01-cover.png 200w,\n/static/f427cc7be1ddfca8643259ccd11a478e/d184d/2024-06-01-cover.png 400w,\n/static/f427cc7be1ddfca8643259ccd11a478e/e24fb/2024-06-01-cover.png 800w","srcWebp":"/static/f427cc7be1ddfca8643259ccd11a478e/b303b/2024-06-01-cover.webp","srcSetWebp":"/static/f427cc7be1ddfca8643259ccd11a478e/21c67/2024-06-01-cover.webp 200w,\n/static/f427cc7be1ddfca8643259ccd11a478e/4b6b9/2024-06-01-cover.webp 400w,\n/static/f427cc7be1ddfca8643259ccd11a478e/b303b/2024-06-01-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"AsyncEnumerable is a sneaky abstraction. It allows simplified and performant usage for iterating on pull-based and push-based sources. “Pull…","fields":{"slug":"/batching_async_enumerable/","prefix":"2024-05-24","langKey":"en"},"frontmatter":{"title":"Why you should batch message processing and how to do it with .NET AsyncEnumerable","category":".NET","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4hAAAuIQEHW/z/AAACMElEQVQozwElAtr9AG1iU2FVRko9L0M0JVhGNGZPO4hvW8i6r7qkk3teRm9cSWRaSZCOhd3h4NPW1dXZ2Nfb3N/h4+Tn5+jr6gBzX0xgSjZYQi5uTjesiG7Su6rfzL374Mvm0MC9ppOvn5F5bV2TjoXj5uXZ3Nre4N/i5OTk5ufl6Ojo6+oAimhPnX5nmn1nd0krt4ht7dLE5Me25r6j6Mi05sm478+7l4NvkY6E5efm293b4OHf4+Xl4uTm4uXm6erqAOfc0tm/qr6qm3ZOM7GHa+PMv9q/sduxlt/CsN3EtePFtJaCb5OQh+Xm5d7e3OLi4OHj4eHj4uXm5ejp6QDv6+fJr5u3oI53UTiwhmbftI7Xs5XarITcuJrbs5Lgt5SWgmuXlIzs6+nj4uDj5OLj5OPk5eXn5+bq6ukAw7SjsKKSnINuc0wyqoBh37OO1KV/1aR82K6M162L2ql+l3xgoaCa+Pf37+/v8vLx8vLz8fHy8/P07OvrAKqdiqGZiZF8aGpJMKV5WeCvhdGxmNSkfNW5pNSwlt63mIJvXXp2bs7Ny7izr7OwrbGtp62noJiPhaGWiQCGfm2DfG16aFVhQSqieVfir4HWpnvVqofYsJDWrIveqn+YgWtpamhvamRORDpgWlJ3b2ROQDF+dWqYjoQAZ2NXbWtgY1VISC0blWhN1Jp2zaaQ1J+A1q+b16uV2qWGppSHmqCgubu6u728vb68xsfFp6KcycjE087KGfJgjmBFysMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/402acbaa5f6d413a6d5605649bed0cb6/e24fb/2024-05-24-cover.png","srcSet":"/static/402acbaa5f6d413a6d5605649bed0cb6/6d6b7/2024-05-24-cover.png 200w,\n/static/402acbaa5f6d413a6d5605649bed0cb6/d184d/2024-05-24-cover.png 400w,\n/static/402acbaa5f6d413a6d5605649bed0cb6/e24fb/2024-05-24-cover.png 800w","srcWebp":"/static/402acbaa5f6d413a6d5605649bed0cb6/b303b/2024-05-24-cover.webp","srcSetWebp":"/static/402acbaa5f6d413a6d5605649bed0cb6/21c67/2024-05-24-cover.webp 200w,\n/static/402acbaa5f6d413a6d5605649bed0cb6/4b6b9/2024-05-24-cover.webp 400w,\n/static/402acbaa5f6d413a6d5605649bed0cb6/b303b/2024-05-24-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Erik Shafer asked me on the Emmett Discord if I could provide a sample of how to run the WebApi application using Emmett. Of course, I said…","fields":{"slug":"/docker_compose_profiles/","prefix":"2024-05-18","langKey":"en"},"frontmatter":{"title":"Docker Compose Profiles, one the most useful and underrated features","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4hAAAuIQEHW/z/AAACM0lEQVQoz1WS+0tTARTH939V0M/91E/5Q9AvEUWQM9IiISOpFM2cFRqUr0wS5ys10qUznXs4h48me9S1OffUu4db9+7eve4nvAOpA4dzvhzOh3Pga0iNDXA83Ef2pES+UGass4P5wRFUIGJZxHXtMmHLkq7npofo735MvJjlNDRN0/PfMGQ2vpFzzuPzpli37eIwGVkwtbDpPSLY18Nx/0N8pld4UhEWh9pZbmvka8BWA1YrZ0C9ahqGVfMKK++niEdltt07DLY0M9DeSTiaRVjfILg4SdDqIqMVabf00tBbz246VIPoIKhUNCpVjeopcP8gh0/InZ3sj8kcpkt6ryhF8sd5FEWtzSQRWzZWQ2lQUqOA/P/L/uE+PK1NZCWVgz8yxqYGnr02UQZO9hM8udtIyLNHEbC5NlmemUSQam9KiQnEeBCzReLluB/7QRTD4ScTkTf32QulaBsZ5fmV89RduoDjd4LyTgR7bxMFpxe3CEsbawjfP/IhXNGBzkOR27M+zt2Y4WKPj3khgqHraRvNjQ+IZRVGp6ZpvVNH/c2r/IwlKWzF2OruILsaIK5As1ukc2oBS0yFkkLP3hH1rgjvzGaMAZWJYBKDc/cHC+t2qtWaBULJJMlMzRa5ozxuixUxLOp6Laow641TqlR17QiGeLsvYfwF1x1JPOEEhs+jXbx4dAtIQ0njxP4FxefRF9ScFcbvUZasSGWQUgJKJkA6X9DnsizjEcLM+SNsh2KnPuIvgFxupz0+GMQAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/0b1ec18fed5441a1f769767fdd9e587d/e24fb/2024-05-18-cover.png","srcSet":"/static/0b1ec18fed5441a1f769767fdd9e587d/6d6b7/2024-05-18-cover.png 200w,\n/static/0b1ec18fed5441a1f769767fdd9e587d/d184d/2024-05-18-cover.png 400w,\n/static/0b1ec18fed5441a1f769767fdd9e587d/e24fb/2024-05-18-cover.png 800w","srcWebp":"/static/0b1ec18fed5441a1f769767fdd9e587d/b303b/2024-05-18-cover.webp","srcSetWebp":"/static/0b1ec18fed5441a1f769767fdd9e587d/21c67/2024-05-18-cover.webp 200w,\n/static/0b1ec18fed5441a1f769767fdd9e587d/4b6b9/2024-05-18-cover.webp 400w,\n/static/0b1ec18fed5441a1f769767fdd9e587d/b303b/2024-05-18-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week, we covered the latest improvements to Java 22 around pattern matching and records. They enable explicit business logic modelling…","fields":{"slug":"/how_to_write_left_fold_collector_in_java/","prefix":"2024-05-09","langKey":"en"},"frontmatter":{"title":"How to write a left-fold streams collector in Java","category":"Java","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4hAAAuIQEHW/z/AAACdklEQVQozxXM209SAQCA8fOP1J/QemrrtZd66DVf2urBtly3rVy11GkOU8u0nOUg00maQ2UWGuI9uSsehAMcDxyQSzhTQdTEQzT1az59D7/tE8wt9/GMfsA7Z0VKbZP9d0qq+JdITkPZ1Uj80ciUj8kcnfWE9cMS4R0N+cwLRyT2NZTNQ2LZXdR8EWHW+AZz1wtM3U34/R4kpxk5soy0XUbaKZLUyihhBx6TDpd1gPhBkei+Rjh3hHJ4gpopEAv+QppzsWybQWh7/pi2pw+Zd4f5OWPhW1MV9tFPSGtrhPdATUWYeveAqbeV2D7WsqpukNDKqIcawblFpBk7cTWPIsYQLRYEX1ojsHlMIFkgIPlxT3xhoacRj8OJN31MaOkHQ7W3mO5pxLfsZdoVJZ4rk8oVcXV1Mt9UQ8QXIhHbQ3YuITgtvcjJGLGDE+zeAPbpcWzGVgydHczKx7jti8zq65gdM9LZ/BpHaIugK4JvaISoR0RedCGOT6CIKuvyJsJY3Q2mO6oQvQ6iB+AMprGO9mId6iagpllKlNC36qi4cB7r91F+/QU5s4koRXDbRRymbziNRsTxSRR3AGG4/ibDzdUs9Onwr8XZOIWvhnb0VdeY+/ySZSVPt3GRwUELmfwuqUKJZO6I9XyJlVCK/lc62iuuMlh9D7vBgDA20Iutrw3rxxe4PR6UeJz2quv01NzF2tvMpM2BJ3lCMJom8XufWDZPOLZOMl8ini2w5Fygu/o2jy6f49mViwht703UP6zEoHuCT86y4g8xqW/A/KGBEf0bujr78SXyrPpcxLdKBNeSiCEVdeNsXiCaPcDnj9LXUsOdS+f4D9fiRlojmN0pAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/8c724b354c0146997b36f2d37f7205fd/e24fb/2024-05-09-cover.png","srcSet":"/static/8c724b354c0146997b36f2d37f7205fd/6d6b7/2024-05-09-cover.png 200w,\n/static/8c724b354c0146997b36f2d37f7205fd/d184d/2024-05-09-cover.png 400w,\n/static/8c724b354c0146997b36f2d37f7205fd/e24fb/2024-05-09-cover.png 800w","srcWebp":"/static/8c724b354c0146997b36f2d37f7205fd/b303b/2024-05-09-cover.webp","srcSetWebp":"/static/8c724b354c0146997b36f2d37f7205fd/21c67/2024-05-09-cover.webp 200w,\n/static/8c724b354c0146997b36f2d37f7205fd/4b6b9/2024-05-09-cover.webp 400w,\n/static/8c724b354c0146997b36f2d37f7205fd/b303b/2024-05-09-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I like learning new things. It stimulates my creativity, helps me gain diverse perspectives, and helps me be humble. When you’re a notorious…","fields":{"slug":"/this_is_not_your_uncle_java/","prefix":"2024-05-04","langKey":"en"},"frontmatter":{"title":"This is not your uncle's Java! Modelling with Java 22 records pattern matching in practice","category":"Java","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4hAAAuIQEHW/z/AAACMElEQVQozwElAtr9ALlwT71zUrVrSa9nRaZfPqRZNYVkU6Sio8OtqbqhnZuAfJBxbJBwa29VT3xcVXVXTlFIRlE7M6dgPqRgPQC4bUu1ZkSsXjqfVC+iWTWgWTeWgnrCvb3ftKffsKTIoJeUdG17XVd7V06LYlaGWkxhUEpjSj2tZEGkYT0AwYpv4MCx2bam2biqvIRpnV0/tLCw0srJ5K6c77al8sa72aaWtIZ3uYFtrXFYk1k+d2FXaVJGrmNApWA9ANCnk/////TX2P///8yrmphOLsetpsm5teavnem2pey+s+isnN6hjsyIcrRxWZhaQGlVS39eTa5iPqNfPADTqJP+///tsq/+/P/Fo5OWSSfKjHfAo5nbrZ/htaXVq6DHkILSkYLKj3+TYU5+TzdfQDGgYUOsYj6kXzwA0qaR4/L+u8re6PX/w6KTiT8c1pyF37OiroNz26iXv5mLvIl51ZiHnW5edlNDeU44eks0qmE+pV88n1w5AMqgjt/w/r/X6+v9/8eklIg+G8KHcO25pMyvopdvYIxoWaN3Zs6kk3pQPW9QQm9KN2U+KqFcOaVfPZlYNQDJnIn1z9Lsv8D21dnDnY2LQyKTUTLfqI/NppmabmGwdF2ccmK6m5V9WUt/TjpkPy5iPCmlYD2eWTacVjMAx5iF78fH6cC99dTTwZmHi0AfjVg+yp2J7Limy5eJpnNmyp2V3aKWiVVFfk4+jmBMc2FWbl5RfGRTfWFPNasppqddQakAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/8414046d23c406e48554c300363a6976/e24fb/2024-05-04-cover.png","srcSet":"/static/8414046d23c406e48554c300363a6976/6d6b7/2024-05-04-cover.png 200w,\n/static/8414046d23c406e48554c300363a6976/d184d/2024-05-04-cover.png 400w,\n/static/8414046d23c406e48554c300363a6976/e24fb/2024-05-04-cover.png 800w","srcWebp":"/static/8414046d23c406e48554c300363a6976/b303b/2024-05-04-cover.webp","srcSetWebp":"/static/8414046d23c406e48554c300363a6976/21c67/2024-05-04-cover.webp 200w,\n/static/8414046d23c406e48554c300363a6976/4b6b9/2024-05-04-cover.webp 400w,\n/static/8414046d23c406e48554c300363a6976/b303b/2024-05-04-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Testcontainers became a popular way of setting up dependencies for integration testing. They’re not ideal, as configuring them to run your…","fields":{"slug":"/custom_test_container_on_esdb_example/","prefix":"2024-04-28","langKey":"en"},"frontmatter":{"title":"How to configure a custom Test Container on the EventStoreDB example","category":"Testing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4iAAAuIgGq4t2SAAABzUlEQVQoz2P4////2YdP/Zdvnb7t5P+/f/9jA//+g8Tff1xw6LrI0juGzdcYplxXLF7Jw4Ci6N+/v3///kMCf//+/f3nx////1992rbxnlHbVYYZN3W3XmjqOCFcsZMRpPnbjx9Pnz/78+cP3Ih///4hbAWTSx5YdF/h3P2oZN4Nw9zMkp6VoXUnGRiePHkycWJ/c1vbyVOnnz559OPHN5gRIKd++PZ02j6v+Ydip15Um3xZNi+trnmZS9Nm9ZlH3LoPqjE8evx41aqVK9dvOnryzNnzF+YvWX7t6uUXz5/9+fvr////V59uT5zHkDSXMW8FY/NJhil7vPp22iQtYKjaItJ/VJMB4sLTZ87evXv31KXrpS0TXr18cfnSxdVrVz978uzzzxfVa2TLV0oWLBYq3MDQekRoxlGn8p0M9ccZOk4IMiB78szZsxOnTPv+/fvff//nrty0bu2qf//+XXuy+9SdlWfurN10umnSccO6PTxtJ3iW3LVaeN2WAS2Q/v379+fP77v37nf0Tti9awc8Iv7+AwXnxeer8jcyTDurP+WcavsRMSxR9f///0+fPt2/d+/OndtgwT9/wQgShJMPWZftYJh8Uqf/gAEAXkWhAe2aaOoAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/15bd9a552317ca7f1a7c2f5fb6bcf305/e24fb/2024-04-28-cover.png","srcSet":"/static/15bd9a552317ca7f1a7c2f5fb6bcf305/6d6b7/2024-04-28-cover.png 200w,\n/static/15bd9a552317ca7f1a7c2f5fb6bcf305/d184d/2024-04-28-cover.png 400w,\n/static/15bd9a552317ca7f1a7c2f5fb6bcf305/e24fb/2024-04-28-cover.png 800w","srcWebp":"/static/15bd9a552317ca7f1a7c2f5fb6bcf305/b303b/2024-04-28-cover.webp","srcSetWebp":"/static/15bd9a552317ca7f1a7c2f5fb6bcf305/21c67/2024-04-28-cover.webp 200w,\n/static/15bd9a552317ca7f1a7c2f5fb6bcf305/4b6b9/2024-04-28-cover.webp 400w,\n/static/15bd9a552317ca7f1a7c2f5fb6bcf305/b303b/2024-04-28-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week, we discussed an overused but applicable pattern: in-memory bus. This time, we’ll continue with the leitmotif and talk about…","fields":{"slug":"/mocking_nodejs_native_test_runner/","prefix":"2024-04-17","langKey":"en"},"frontmatter":{"title":"Mocking the native Node.js Test Runner","category":"Testing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAABVElEQVQoz4VS3UvCcBT1v6zAjyArhRn0oJQfaSFWMtgES0mEBIUkijChpx4DiUALqdA5H0JalrVR4KZuJ/zE0Q+7T4f7O+fc8+NeA2aUpmkzehpRYyCJ+1hV1QHmOA72lVWwDKt7H/Onsc6QaAxg2WJGcMMFNhSEJIo6DukHBtLUjqKg01EG+PGugCxNQ+QrE5HcbkOR5dkJx80+8YWvQ2q18CY0cZ49gd8yh3w6hWLxAR/NJt4FAdLnFzHpH8Net4tquYx6lQMTZmGaN2LH48OajYLb6cHFWQ5PpSJawuv/CbXRIvjba5weHcBiWoLb5UYqmUY4RIOyUdjfi+B41wexdj/UjTREQ7XXG2725gqXjBfmBSOc605E2Rh8m35Qdgfi0TgyAQfEWmliSE44Na1RKeM5l8AhQ8O6aEUilkTAu40trx/yzzcKmQikBj8Kouou8hfOfI3xwX75dwAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/2e81ac57bcc28bf5ca5dce91b648413c/e24fb/2024-04-17-cover.png","srcSet":"/static/2e81ac57bcc28bf5ca5dce91b648413c/6d6b7/2024-04-17-cover.png 200w,\n/static/2e81ac57bcc28bf5ca5dce91b648413c/d184d/2024-04-17-cover.png 400w,\n/static/2e81ac57bcc28bf5ca5dce91b648413c/e24fb/2024-04-17-cover.png 800w","srcWebp":"/static/2e81ac57bcc28bf5ca5dce91b648413c/b303b/2024-04-17-cover.webp","srcSetWebp":"/static/2e81ac57bcc28bf5ca5dce91b648413c/21c67/2024-04-17-cover.webp 200w,\n/static/2e81ac57bcc28bf5ca5dce91b648413c/4b6b9/2024-04-17-cover.webp 400w,\n/static/2e81ac57bcc28bf5ca5dce91b648413c/b303b/2024-04-17-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m writing this article on Friday, and it’s about time to have some fun. As this is a programming blog, let’s have some fun coding. Let’s…","fields":{"slug":"/inmemory_message_bus_in_typescript/","prefix":"2024-04-12","langKey":"en"},"frontmatter":{"title":"How to build an in-memory Message Bus in TypeScript","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA20lEQVQoz5WQXQvBYBiG95c5dCCbmI9eW0iSIiKxKAc+FuGEHcjBym/wsbEPa3PyvK/YCQvjPnx6rrurmyKvwRgDAMaY/BDq7RU/8gfsfmuq0ukJu+OBEOKr4IUtXUMcGooj+3LxVaCeXe+woVdQrJnLCLXyZrW4Xp0vCl5YVxShkK7ybJFLt0q8NB+dT+qnIajXnYAQsl1LZTqQRcl4lGZDwSKXmA766mH/09oAsJyJ+QSTTUZZJsxEwjxKtRp1WZYNw/gGu2KOY0+6bWk8cGwbANxGy7JM03yGbwyM9sWt1No8AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/0614ac53e9a1e43c7bd0738558c80ac5/e24fb/2024-04-12-cover.png","srcSet":"/static/0614ac53e9a1e43c7bd0738558c80ac5/6d6b7/2024-04-12-cover.png 200w,\n/static/0614ac53e9a1e43c7bd0738558c80ac5/d184d/2024-04-12-cover.png 400w,\n/static/0614ac53e9a1e43c7bd0738558c80ac5/e24fb/2024-04-12-cover.png 800w","srcWebp":"/static/0614ac53e9a1e43c7bd0738558c80ac5/b303b/2024-04-12-cover.webp","srcSetWebp":"/static/0614ac53e9a1e43c7bd0738558c80ac5/21c67/2024-04-12-cover.webp 200w,\n/static/0614ac53e9a1e43c7bd0738558c80ac5/4b6b9/2024-04-12-cover.webp 400w,\n/static/0614ac53e9a1e43c7bd0738558c80ac5/b303b/2024-04-12-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Have you heard about Passive Aggressive Events or CRUD sourcing? Or maybe about the Clickbait event? If you don’t, you better check the talk…","fields":{"slug":"/anti-patterns/","prefix":"2024-04-07","langKey":"en"},"frontmatter":{"title":"Event modelling anti-patterns explained","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9ADeIezpyaV9zZTBsZCxhWQhBPVB1esnm7b3h57rc4aTHzKfKzqTHy6zP1KXIzKLGyqfLz6rN0sPm68Hl6wApbFctQTdGUEIjZE8iXUkIPzFlgH/7+P308vXT0dO6t7jJxsnLyczSz9LLyMvEwcTJxcfY1dfz8PPy7/MAH1RILCwtPTk3O1BDJ1NDBzAmXXl49fr+s7i7dnp8cnZ3tbi68PHz6Ors5+rs6Ozv7fP37fT56O7y5+zwABhURRorJjY6LxM2LCI4MD9WTYCYk+3v8m1tare4uJiWk0s+M9e9qrGOe5t7a761ruPl5uro5erp6evt8QAASjAWQzFFZlpHaVw8X1AALBhhfXTy8/ZuXUmHfG9yb2xRQTXMrZind2p7TT2ikIvg3tnUr4DXvJjr7fAAACULS2ZY8fHw4uXjsr23AA8AWG9l9ff8wcXGgoWGZmJfinxuqY2GnXSCo4SFiG9y2drb5Onr5Onq5+3wAAAgCxMxIE9iV1doXzZOQAASAF1yaP7///f5/Pf6/ufn6tTR0MjDx8rEytTT2MLCxerq7/j1/PXx9/Xx9wAAHQoAGwgFHg4LJBQFHw0AFAAyTUOVpKacpqGkr6uiramirKqkrquiramhqqijrauktq2l0cSl1sij08YAABkIARoJAhoKAhsKAhoJABoJABUEAA4AAA4AAA0AAA0AAAwAAAoAAAkAAAgAAAcAABcAAE0iAI9WAJFYBswbc6Ra0BYAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/b9f6386f123628b338f86fd5303834b8/e24fb/2024-04-07-kafka.png","srcSet":"/static/b9f6386f123628b338f86fd5303834b8/6d6b7/2024-04-07-kafka.png 200w,\n/static/b9f6386f123628b338f86fd5303834b8/d184d/2024-04-07-kafka.png 400w,\n/static/b9f6386f123628b338f86fd5303834b8/e24fb/2024-04-07-kafka.png 800w","srcWebp":"/static/b9f6386f123628b338f86fd5303834b8/b303b/2024-04-07-kafka.webp","srcSetWebp":"/static/b9f6386f123628b338f86fd5303834b8/21c67/2024-04-07-kafka.webp 200w,\n/static/b9f6386f123628b338f86fd5303834b8/4b6b9/2024-04-07-kafka.webp 400w,\n/static/b9f6386f123628b338f86fd5303834b8/b303b/2024-04-07-kafka.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Folks, I’d like to inform you that I’m no longer a Marten maintainer. As you know, sometimes in the project’s lifetime, there’s a moment…","fields":{"slug":"/i_am_no_longer_marten_maintainer/","prefix":"2024-03-29","langKey":"en"},"frontmatter":{"title":"I'm no longer Marten maintainer","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAClElEQVQozwXB7VPLAQDA8d9f4aUXcedFjjh3xNHlqa5yuXPVxUqJjoj1tGyZWSVpxc62atNae2I92LS1sk01lSLRAxfiojeuc1FaqR3u6/MRllfCtDqaGRjoZWV1nV/Lq/hGgrh6nHR7neSe209wqIu+Pi+1ylSGR4YJ/f7H2lqYpZV1FpbWmF/4yeSHaT7OziAshsLYrXr8/m5mPn9i/keIwIthgmMj+H1OskS7cXqbMBmrKMmLJzjUz1oYFhZDhP/A+y9zTEyP8XLqJaPvxhG+fV+kyaDG7XHyce4rE1OveTXkZuSZC6/bTHpaNJ2+Dh7YblMtTWbguZ+l0F8m38/wenoKb38rz0b9dAfb6XxqQ/gwO4dKpeSBqZqAQ4tHLcF35wL99QUMWiuplKRisCmouXuJa4qjeIJuPs0tMDQ6SJunng5vA54+O61dOhxdDQhjb9+g09ZQLy+g6tJp8o/HkHFwFycPRFKVfZiee0X02MvxO9Q0KgtwtzUz++0Xo+ODuANq7rddx9xeSUvHLeyP1QiDzwNU3BCTlZSAQVOGRlVA9JbN7IncRGpMJHkJO7mZfRR5+gEuJ23lTPIhnvgCPA2asTxSoGq+iMF2FVNbBVZXLYIv0IlcepaU+MMoSvN40tdITmYCcfv2IMsXcSJ2G7HbI4jauAFJdiI6TSEudwsujw6tqRiNuQSdWYLOWkrTQwWCr9dNuTwXmVRGyrF4NKYSVE2FiDITyUpLRJx3hDrVWXLSj7BjcwTns5MxGuuwOmrQGsXo7VJ0LSXobTL0tjKE1vY6JOI0lMrLiESH0NqK0Dvk2B/X4LBUk3EqikazGKPuKsXnkkmM20vplVxabBVom4vQW2QYrDK0lmL0Fin/AcJt9bOAAWimAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/3bf55549d3381c9a8a179266bc781c4c/e24fb/2024-04-29-cover.png","srcSet":"/static/3bf55549d3381c9a8a179266bc781c4c/6d6b7/2024-04-29-cover.png 200w,\n/static/3bf55549d3381c9a8a179266bc781c4c/d184d/2024-04-29-cover.png 400w,\n/static/3bf55549d3381c9a8a179266bc781c4c/e24fb/2024-04-29-cover.png 800w","srcWebp":"/static/3bf55549d3381c9a8a179266bc781c4c/b303b/2024-04-29-cover.webp","srcSetWebp":"/static/3bf55549d3381c9a8a179266bc781c4c/21c67/2024-04-29-cover.webp 200w,\n/static/3bf55549d3381c9a8a179266bc781c4c/4b6b9/2024-04-29-cover.webp 400w,\n/static/3bf55549d3381c9a8a179266bc781c4c/b303b/2024-04-29-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ve been going pretty down the rabbit hole in the last few years. What am I searching for? A way to deliver better software. And that’s, of…","fields":{"slug":"/testing_event_sourcing_emmett_edition/","prefix":"2024-03-23","langKey":"en"},"frontmatter":{"title":"Testing Event Sourcing, Emmett edition","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA9hAAAPYQGoP6dpAAACwElEQVQozx2R3UtTYRzHf85eHHURQUTdFEFCN6lzQ5+zc87znHNmWy8gVpTkRZhBUFEGaVHQXVFgCElBjG7cgpD1YsFcVGSBpul02KbOuVC3tmptlS+tzrbnF/r9Az58+HzB6/UaOjs7wePxiKFQ6O/MzMzSnfb27V+bmgAdDsCLF+Gv3b4mparrxiRpfVtZmRGMRoPOGKDdXoSNjYCHD8MDkwlWhojFsVgcvN6ehvFQ8HUwMHL3ykhw7RghLXFKuz6JQu+AUB0OiEIqKouZjMLmUoxF+gk5OCvL8IOxVVhTA19kGfbt3LkChKFh/96ZaKSjvrWtEQ7d3eLasa1uVCCINhv+tDL0m6oxYhYxSxRERUNu0zDN2ML98vLSJ2YzDBFSPEwI9BMC4HQ6t/p8Pj40OIBef+jUMduRel9VVXZeUTFfo+rpYzSfbJIL30/TQvocLfw8wApc1HReo2FClkOwaZOxZdcueGqxFN2rqABwPXy48anHc9T5+LG2Y/OGjcMVZYFJx358u+dIru+qGRNTMv+XUHEpruDiN4Wn+ilP1VIsWDU9b1NxWhS7sKFhJd/13bsB2qamoNvpBAQwjBDSm2AUUbLpo+dEHP1IeGxU4oFeghN9Vgy+E3Dxi8IXogpPnpQ5SppesGkYEsUbWFoKWFdnAG9tbfFLAHhBqeOzJC53yycVxieuCryQUfnirILj7wWc6BPw9zTDXELlwfcCn69X+JKk5KKSiJOEtGZv3VqWArjnckHX4CCMXboMjyorO6asVuw5LutxmWH6GuXzScYXkgr+ijHUUyr/HBF5zxkTzlGih0UrvjNb3IBY9Mbnq7x982YJnG9uNjzv7j7UPzhQufz4M4t57LfCEDVbNiupue8naC7TSnPpCzSfbqb5+Fkp/2ef8i9MBXxFqtMlAKs/DPsvhScn0e12l/8H36aD8MdP8tMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e85c2584a937eaa1d342b4bd583e8092/e24fb/2024-04-23-hexagon.png","srcSet":"/static/e85c2584a937eaa1d342b4bd583e8092/6d6b7/2024-04-23-hexagon.png 200w,\n/static/e85c2584a937eaa1d342b4bd583e8092/d184d/2024-04-23-hexagon.png 400w,\n/static/e85c2584a937eaa1d342b4bd583e8092/e24fb/2024-04-23-hexagon.png 800w,\n/static/e85c2584a937eaa1d342b4bd583e8092/95584/2024-04-23-hexagon.png 1200w,\n/static/e85c2584a937eaa1d342b4bd583e8092/33e1c/2024-04-23-hexagon.png 1600w,\n/static/e85c2584a937eaa1d342b4bd583e8092/97f73/2024-04-23-hexagon.png 3444w","srcWebp":"/static/e85c2584a937eaa1d342b4bd583e8092/b303b/2024-04-23-hexagon.webp","srcSetWebp":"/static/e85c2584a937eaa1d342b4bd583e8092/21c67/2024-04-23-hexagon.webp 200w,\n/static/e85c2584a937eaa1d342b4bd583e8092/4b6b9/2024-04-23-hexagon.webp 400w,\n/static/e85c2584a937eaa1d342b4bd583e8092/b303b/2024-04-23-hexagon.webp 800w,\n/static/e85c2584a937eaa1d342b4bd583e8092/bd3e9/2024-04-23-hexagon.webp 1200w,\n/static/e85c2584a937eaa1d342b4bd583e8092/dcbba/2024-04-23-hexagon.webp 1600w,\n/static/e85c2584a937eaa1d342b4bd583e8092/99f21/2024-04-23-hexagon.webp 3444w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Event Sourcing is a pattern that is quickly gaining popularity. Many companies see the advantages it brings, e.g. business focus and keeping…","fields":{"slug":"/speed_up_your_event_sourcing_journey_with_workshops/","prefix":"2024-03-17","langKey":"en"},"frontmatter":{"title":"Join my Event Sourcing workshops at Techorama and DDD Europe and speed up your journey!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBA//EABUBAQEAAAAAAAAAAAAAAAAAAAEA/9oADAMBAAIQAxAAAAG85yVhf//EABoQAAICAwAAAAAAAAAAAAAAAAECAxEAEBL/2gAIAQEAAQUCaR1j6LAXUmDX/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGxAAAQQDAAAAAAAAAAAAAAAAAAECEDEhMnH/2gAIAQEABj8CvJunCxs//8QAGxAAAgIDAQAAAAAAAAAAAAAAADEBERAhcZH/2gAIAQEAAT8hRkPVbob9EMlVv6JxjCP/2gAMAwEAAgADAAAAEI/P/8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAEDAQE/EFR//8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8Qp//EAB4QAQACAgEFAAAAAAAAAAAAAAEAESExQXGBobHB/9oACAEBAAE/EFGiAMANUsLV9irMN6cX3xBAUhRHiPs49H1NU//Z","aspectRatio":2.2222222222222223,"src":"/static/ffb939951e5d2fc18eeb254743ff7184/f8504/2024-03-17-cover.jpg","srcSet":"/static/ffb939951e5d2fc18eeb254743ff7184/f137a/2024-03-17-cover.jpg 200w,\n/static/ffb939951e5d2fc18eeb254743ff7184/8494e/2024-03-17-cover.jpg 400w,\n/static/ffb939951e5d2fc18eeb254743ff7184/f8504/2024-03-17-cover.jpg 800w","srcWebp":"/static/ffb939951e5d2fc18eeb254743ff7184/b303b/2024-03-17-cover.webp","srcSetWebp":"/static/ffb939951e5d2fc18eeb254743ff7184/21c67/2024-03-17-cover.webp 200w,\n/static/ffb939951e5d2fc18eeb254743ff7184/4b6b9/2024-03-17-cover.webp 400w,\n/static/ffb939951e5d2fc18eeb254743ff7184/b303b/2024-03-17-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Do you recall moments when you’re sitting and closing dozens or more browser tabs? Most of them are Google, GitHub, Blogs, and others. You…","fields":{"slug":"/how_to_tackle_esmodules_compatibility_issues/","prefix":"2024-03-09","langKey":"en"},"frontmatter":{"title":"How to tackle compatibility issues in ECMA Script modules (and in general)","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACMElEQVQozwElAtr9AMWYbsaZb7+YcriUcbuVbY1xXVdVVmNiZmJiamdpdWtseJeEc9qqe+u6kvLDnvbInv/Snf/Xnv/aoP3SnACrimiOcVCedklxWExsWlFZUlo+NzZxb3VoZnB1c3t0cnyHgYWbhniWhnuMe2mpjnPFoXvMqIPXtY7yx5QAZlhQW0o6h25TVlhXWlVGW2JkPENVbWpvc3J7bGxya2hwZl9ccWxomYBqjmtPdFxIcVlIPTIvfXl60b2fAF9ILkk1IFdFNW5OOXVLM19maDpASjs2M0I8OVpVT15SOz0zIpiGcNqtd9mrd7WIWmFKNEQuGEo9M97ClwCifE+abDiIXzBPRUNJREFOPiVSNhZYPBtLLQtZUUCijmqHdFbKoG7cqXHjsXn3wH+0hFN5XULGnWr3zIwAvJVns41im3pUeF46l3I/soNGrX9Fr4FLrYNMeF4yeGlSo4tt4LB13q566rV/6LuQyauRgXlyvqOD3LeDAKuIZaGVkpuOi2VXRJ6CX76XabSWcW5ZRHReQ0s8Kkc7Ln1uXsygb9endKB/XoiDg7Wjh49wUKiKYNKsegCXeV2dkY2KfnV1YEG7nnurkHTGqIc+Oz0WHCYgISpmVUFQST6NeF2OfmqEe2tzZk/Gro6rknKKdljatYAAk3hfnJGOg3VsbVg8y6yHrZF0wKF/Pjw7GB4oJCUsgm1YYU08dWZRaFhCaltFY1lJqZZ3gmxMnoZk/9CKk6P8u9WXvtYAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/4b1031627c090e7dba0a8ec4cb3076e5/e24fb/2024-03-09-cover.png","srcSet":"/static/4b1031627c090e7dba0a8ec4cb3076e5/6d6b7/2024-03-09-cover.png 200w,\n/static/4b1031627c090e7dba0a8ec4cb3076e5/d184d/2024-03-09-cover.png 400w,\n/static/4b1031627c090e7dba0a8ec4cb3076e5/e24fb/2024-03-09-cover.png 800w","srcWebp":"/static/4b1031627c090e7dba0a8ec4cb3076e5/b303b/2024-03-09-cover.webp","srcSetWebp":"/static/4b1031627c090e7dba0a8ec4cb3076e5/21c67/2024-03-09-cover.webp 200w,\n/static/4b1031627c090e7dba0a8ec4cb3076e5/4b6b9/2024-03-09-cover.webp 400w,\n/static/4b1031627c090e7dba0a8ec4cb3076e5/b303b/2024-03-09-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Being busy is not something we strive for; it’s an axiom. Social media are not helping; our whole lives are on the plate. And we’re chefs…","fields":{"slug":"/keeping_overachieving_freak_on_a_leash/","prefix":"2024-03-01","langKey":"en"},"frontmatter":{"title":"Keeping our overachieving freak on a leash","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACMElEQVQozwElAtr9ANzou8C+knVgRHx1XYmIcoB9ZouKb5OUgRIbIgMNFhcgJykxLGx0c213fEFMVHyIkYuXni02QzU+SwAIGADY47bKu4dvZk6AgGZzcFyYl3yfl3aYjWyDeF1tbl9iZU5LTztOVVVmcXtfa3VrdoBcZ3EmLzw4QU8BCBsAy8mYn5JqfXpednNbcW5YpqWEvLeQtqVzq5t1mpl9aW1SQEY7MDlATlphkJ6kSVNdAAkWDhYmHSY1BAweAJSCW3p4X3FvWIB+ZKemh6Kji7KfcZqPbaWkfYmJa251aFFYTDA3ODE7QiEqNBskLxUeKgsTIQsSIgoSIwDIl12BZ0V7e2Ouroq1tZeHiH1+b1C4tYe2t4atrIeeoIyOk4JzeXBLUlFDTFM3QEkxO0RGT1g6QkwOFSYAp4FNoIFXtLeOtbWReHdmmZZ6s6Jzy8iUw8eZvsCPtraEs7KDn551goNgVllHLTMvGCElGSMpEhslCxMhAHVeM56JY6qsin18amBgUo2LboWCZo+Lac7TosrPnsbKmcbKm8XHmbm4iKShcoOCYFNWRCctKxMdIxQdJgBpVzF9ZkZubl5vbVllZFRgYFJTUkOBf1uzs4K4uIe1tIO3t4bBxJW7vY65t4WyrnqZlmlsa002OzMhKCoATkothmU6VFBAQkM3S0g7YmFVhIFgb2o/bGhBeHRLfnpPdXFGh4NXqad2uLmJtbaFsK56pKBuenZPUlI7WiXnOaJqm7AAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d83a0d0e9897abf4dbc273a6793f03c7/e24fb/2024-03-01-cover.png","srcSet":"/static/d83a0d0e9897abf4dbc273a6793f03c7/6d6b7/2024-03-01-cover.png 200w,\n/static/d83a0d0e9897abf4dbc273a6793f03c7/d184d/2024-03-01-cover.png 400w,\n/static/d83a0d0e9897abf4dbc273a6793f03c7/e24fb/2024-03-01-cover.png 800w","srcWebp":"/static/d83a0d0e9897abf4dbc273a6793f03c7/b303b/2024-03-01-cover.webp","srcSetWebp":"/static/d83a0d0e9897abf4dbc273a6793f03c7/21c67/2024-03-01-cover.webp 200w,\n/static/d83a0d0e9897abf4dbc273a6793f03c7/4b6b9/2024-03-01-cover.webp 400w,\n/static/d83a0d0e9897abf4dbc273a6793f03c7/b303b/2024-03-01-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last article and others I did my best explaining why keeping streams short is important in Event Sourcing. I also showed you how…","fields":{"slug":"/should_you_always_keep_streams_short/","prefix":"2024-02-24","langKey":"en"},"frontmatter":{"title":"Should you always keep streams short in Event Sourcing?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACMElEQVQozwElAtr9AJ+taZabXJWmbJipZJewZnPDV23HSGO+QWmqV87b1KC/hJq+bIalUIKbVIufWoCTSoCOR3iURGmELnOAPACCmkeImUiKnkuNnVOInFdMp1I4jzE3kR6EuXCLwX5/vVqUvW2XvGiHqVd9nVFwi0F0jklpkT1jgzlvkT4AfY5QdIM4mZtQl6Zgj55ZXI86RJ09SGs0YpRYD1sJR3wylJ9mjaNbhKNWiKBfeZhFaoc6a384Y403YH0uAGWnWoWeXJaaYpGhaH+qYnmqSUSgOmmgcHyedk6BOnSUXYyecmujU2ucTWeQUWmKTFt+NV17NlVuMVBnKQBJljtlrkl5l1Rokj9en0hrszp6sj6ZvoykvKGXs3SktoVjnlE0hiZKbitVaDlocUhSZzVUcTFFYidQciwAepJYYJFIaodHd5A3cJI6b6RIjrRNwsirncWkf7hrhLxwOJA5U4tBb4NRbYNGb4lIbZdEYJM0RHIhPF0hAIuWcmuZYUifSlKSNmqXPIGYXVaRPWeocXOcemWkSXOrWlSNPIGwYYSyXn6tXG6LUGaNRFSFMTVdHhk3CgBckltQnFkmmUEqjTpAo0iOnWxlflU3fzR1m4BynFx1pUdtpFBxrk2Fr1teoEhNeDdRWTY0VB4ZQAkGFgMASno+T3xHPYxCRZZIVp1Vjpl3mLt2o8h1o8KOYItZVp8yfMBRT5w6UZIrT5kqWHs5R1UrHkIMAxABBgwDBnfobtWmRKQAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/231b8733d083f3341835454dba48c1cb/e24fb/2024-02-24-cover.png","srcSet":"/static/231b8733d083f3341835454dba48c1cb/6d6b7/2024-02-24-cover.png 200w,\n/static/231b8733d083f3341835454dba48c1cb/d184d/2024-02-24-cover.png 400w,\n/static/231b8733d083f3341835454dba48c1cb/e24fb/2024-02-24-cover.png 800w","srcWebp":"/static/231b8733d083f3341835454dba48c1cb/b303b/2024-02-24-cover.webp","srcSetWebp":"/static/231b8733d083f3341835454dba48c1cb/21c67/2024-02-24-cover.webp 200w,\n/static/231b8733d083f3341835454dba48c1cb/4b6b9/2024-02-24-cover.webp 400w,\n/static/231b8733d083f3341835454dba48c1cb/b303b/2024-02-24-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"No one knows who invented Event Sourcing. I overheard that Hammurabi did. Why? Because he standardised the first set of rules of accounting…","fields":{"slug":"/closing_the_books_in_practice/","prefix":"2024-02-17","langKey":"en"},"frontmatter":{"title":"Implementing Closing the Books pattern","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACSElEQVQozx2SzUtUcRSGJyIIaiEF2X/TJmgZtAtCcFNRChHVroikRVZoKTrOx/383e97vXccdVTKkMx00MJx1BmsSIWSqLTSGEx9Yu7i5SwO73NeXk4ilcyS7pPIpGRS9ZmUCf2Ib183YP+ASqmE1NXN7s4Oe7u7bH3/QWB7JLuTqFkNTRKoWR05o5FOSiSyKRkpo6BIGlJGjRfLC4v8q9ViYPH1FONDBTg4YPvXb2rbf5iZfENXRxdyWolhSlZDyQiktE5CVw0M3cQyLDRFYBkOK4tl1qtV2NtnJMozEg1Q296mODFBefot1dI8SlpGkzQMzUQoBrpixv6EKSwsYWEbDkIVuJbL+soKr6KI1coyRkYmsj02N75QsC1yqsSncglTFaiSiqkZGIpAl3VEHWibDq7p4llefG0giFguzuCmeqnMzdHxsJ3QtFldKhMpMtLjdj6W5gldH0M18EwXR9ixbGGT8Gwf3/Hp9/rjpC8Ko6xVlxi2dD4slLjTehMrK1MpzjA9OsJ42M/i1CRj+aEYEDoBruFg6xaWbpHw3YC6AjfANl0GhE5Z9FIaH+Pv1ibNF5uQe3r5ufaZ6uwsOV3nZdtt1KdPcOwAz3TilLEMl0QdFPohuSCH5wSEQvD++QOS7e3cuHqdc2fOcv/mLe62tHLp/AW0VJZ3PY/Qn3Xi2kH8QoHjx5W5deBQvkA+GmIwV2BwYDjusJjp5EpTM0ePHKfxRCOnT56i4VgDhxKHabl8DbPtHnJvH0E9gOuT80MiLyTnR/wHFQYaL+GGWaYAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/b812d413e0870f2b0b1519e0fdf1ea70/e24fb/2024-02-17-cover.png","srcSet":"/static/b812d413e0870f2b0b1519e0fdf1ea70/6d6b7/2024-02-17-cover.png 200w,\n/static/b812d413e0870f2b0b1519e0fdf1ea70/d184d/2024-02-17-cover.png 400w,\n/static/b812d413e0870f2b0b1519e0fdf1ea70/e24fb/2024-02-17-cover.png 800w","srcWebp":"/static/b812d413e0870f2b0b1519e0fdf1ea70/b303b/2024-02-17-cover.webp","srcSetWebp":"/static/b812d413e0870f2b0b1519e0fdf1ea70/21c67/2024-02-17-cover.webp 200w,\n/static/b812d413e0870f2b0b1519e0fdf1ea70/4b6b9/2024-02-17-cover.webp 400w,\n/static/b812d413e0870f2b0b1519e0fdf1ea70/b303b/2024-02-17-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Simple is not easy. Each person has its definition of it. For me, it means that when I look at the solution, I think: “So simple. Why didn’t…","fields":{"slug":"/introducing_emmett/","prefix":"2024-02-11","langKey":"en"},"frontmatter":{"title":"Announcing Emmett! Take your event-driven applications back to the future!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB7UlEQVQoz22SOW8TURSF5w8gmcWzvFk98TLjZezESSACKSEQ28E4ZLybiCgusEJBWFIADT2/gJKChgpqIKJC/AT+zofeWI4UoDg69933dPTOuVcRwkFVNTRVn0MzME33AuSb/9UXIOasOE6W+touUXWLau02lWgTXbfRNBNVNTEM+x8xXdiowkIzbVTdQhU2hmkn94rvB3T7x+w0HtLuTLnfeUShUCIISpTLVVzXT8QXYpKzVoHIKhKJgFq2ROSE+EaAKzIonpdl0O8yGvVp32vR68VMJhOGwyGz2WMajSaO45PJZDGFw1Vhcepv8zV6wqfl5/ycnfJjJ+aNesCGtYziukuMRmP29h4wnkySutPZo9fr0Wy2iOOY6fSIjY2baKqJJkxaYcz3W8/4sHrMl+0jPjZf8DJ3wg29LAV9BoNB8qvDw0OiqIauW+f2FlZllpbpkTYEjWCfs9Zrfp285Wz3mN+v3vHt/Weq6TKKbWdYWVmnXl+nVqsTBBVyuSJhWCEIyuTzJfL5IrlciJUMxGHNzdOtbnGweYf26l1Gq9d5Ou5T8EIUy/IIw4hMJocQbpKXhIxCwnGWznuL9ZBTvawZpK7pXFF1UqrgUiqdTF+RlqRFaWlhUUKe/+4lMOcR2KaHbXlJDJKlU7mHfwCLZRevDQzA1gAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/c97294c9e971f829961393908b28cd60/e24fb/2024-02-11-cover.png","srcSet":"/static/c97294c9e971f829961393908b28cd60/6d6b7/2024-02-11-cover.png 200w,\n/static/c97294c9e971f829961393908b28cd60/d184d/2024-02-11-cover.png 400w,\n/static/c97294c9e971f829961393908b28cd60/e24fb/2024-02-11-cover.png 800w","srcWebp":"/static/c97294c9e971f829961393908b28cd60/b303b/2024-02-11-cover.webp","srcSetWebp":"/static/c97294c9e971f829961393908b28cd60/21c67/2024-02-11-cover.webp 200w,\n/static/c97294c9e971f829961393908b28cd60/4b6b9/2024-02-11-cover.webp 400w,\n/static/c97294c9e971f829961393908b28cd60/b303b/2024-02-11-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Putting the career bets is not easy; I made boring and pragmatic choices for most of my career. They took me far. Yet, I always felt that…","fields":{"slug":"/production_grade_event_sourcing/","prefix":"2024-02-04","langKey":"en"},"frontmatter":{"title":"Production-Grade Event Sourcing Workshop - Modelling, DevOps, Process","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACl0lEQVQozx3Py0/SAQDA8d/J6pLLliudlpFtUZqTNU2XFqVmqZnPtDHKQIEyE18kKqkziAwTfGMOFcEHQj5KSlLJrFWrY49bl9a1dezybevzH3yEq/kZWG+V4G6S89am58dMD79W7Ng6VHS3KOjvus2QuYHR3hYmhjuZnbCwMNOPf2GMgH+K9bU51jd8rAWXCG4FEEyKAuy3i3ikKWHiroLF+3fwmBtxW2oZ7FLhsGhx2nS4BtrwjBl56rSwON3HitfOxgs3wfV5Xm8+482HDYLvNxEeq0uZ0cnZNNUyXydj01TPl/EHLPdqmezWsDyqZ8XRTsBlIjBtYXXWyppvkC3/ON7xx6x4Hayv+vA47Wx9/oigvJCEu1lB4P4d+q4X8/yelq/ObkzVRTTLzzPcVI6qMJ1Xk518WrDyfW2CVaeZ/lYlPZpCbDolnfVVlGdJGXe5EM7E7sasvIyjRYmnQcW7ASMj+gp0+cexyhJpzJOQLo4iM1nM6lg7/oEGBhsV3MzLZkCTj99czWxbJVkSMbammwgFmWk80mtR56XxQCNjpLWGnNQ4JKI9pMXtJzo8lIN7d3FJKqGnoYz+a+dY0ldgrcrF26XiT8CBp07OiLqAxd52hOnWRoafuLB2ddBdU8FCjwH5lWJCdmxnW8g2osJDSRDtJj42guYcCTWn4jAUneO1UcG3IRne5jJyU05Qm3OaytJiBI9Oy6ShDZsvyLOXG/QZdMzP+fAtv+C8NJW4A2HkJovIOLIPZfpRchJESGMjqU5JRBwTw86wSPZHRCM/mYwo5jCCY8pH4N5dRh2z2P2fMD7s443/FT9//8Ux5f5ft9w4hVudQnZ8FBclhzgrjqYuNRZDSRIy6THUl9MwVpZQVV7AP0LCsv5kcDzlAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/79af8a34fbba203ee6f1641cdb9172a9/e24fb/2024-02-04-cover.png","srcSet":"/static/79af8a34fbba203ee6f1641cdb9172a9/6d6b7/2024-02-04-cover.png 200w,\n/static/79af8a34fbba203ee6f1641cdb9172a9/d184d/2024-02-04-cover.png 400w,\n/static/79af8a34fbba203ee6f1641cdb9172a9/e24fb/2024-02-04-cover.png 800w","srcWebp":"/static/79af8a34fbba203ee6f1641cdb9172a9/b303b/2024-02-04-cover.webp","srcSetWebp":"/static/79af8a34fbba203ee6f1641cdb9172a9/21c67/2024-02-04-cover.webp 200w,\n/static/79af8a34fbba203ee6f1641cdb9172a9/4b6b9/2024-02-04-cover.webp 400w,\n/static/79af8a34fbba203ee6f1641cdb9172a9/b303b/2024-02-04-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"TypeScript is an intriguing language. Some say that its type system, by itself, is Turing Complete. Some take it to the extreme and even…","fields":{"slug":"/how_to_have_fun_with_typescript_and_workflow/","prefix":"2024-01-28","langKey":"en"},"frontmatter":{"title":"How TypeScript can help in modelling business workflows","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABw0lEQVQoz12S2W7TQBSG8zLc8CDcwIOA1AskQEgIbnuB1AiEUMsitSqgFJQFp/FSL7M4dhbq1PGSBp7mQ7GdtHDxazSjme/8/5zT8nONX9QKco0sNcYviXn6jDzY5/PZIWl3D7W0cTONLEJEGRPkY0SuK/lbFZrWduNmEncpGc0dRjOLnuwyigeYsxGDcICXuoSXffzURyVDxksbP1P4S1lBg0atLdlLBW4qGE0dzicW0Z+YYB0jSo1eRxx1PpD1H/PDOsX4uEcxPcJcSC4WAd5S7VzugBu6k/h1tUzRCQxm3gHR/AxjYjGMh5hRj4vEZqC6uIlNWCpma8X8tyYsbwMbu14qsS9d/KXgk9FB9F4RTb/yMzbRK4lXhgSFrJKoXPDW0TxoC+63Be8cxXjVAINb0Nrh5l8EVrqJIrEXHgcnhyT9p8RJDzsVTK8lD48Vd56PuftizJNvisl6AyxuuhTkqoq7XcVGucK58vhiddD+e9TVOW5Wx3x0LLn3esLL7wva5hi5UrT+cZfddKsaiawpkElkqfCKqL6bKXSh6USKfUPxxtZ0ZxpRNMD/VYEax7uR2DrObs50qYnXmvBaIYv6zV8cs0LcXV7f2QAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/19588ef9936c3cd565b75a60849c06fb/e24fb/2024-01-28-cover.png","srcSet":"/static/19588ef9936c3cd565b75a60849c06fb/6d6b7/2024-01-28-cover.png 200w,\n/static/19588ef9936c3cd565b75a60849c06fb/d184d/2024-01-28-cover.png 400w,\n/static/19588ef9936c3cd565b75a60849c06fb/e24fb/2024-01-28-cover.png 800w,\n/static/19588ef9936c3cd565b75a60849c06fb/9595a/2024-01-28-cover.png 957w","srcWebp":"/static/19588ef9936c3cd565b75a60849c06fb/b303b/2024-01-28-cover.webp","srcSetWebp":"/static/19588ef9936c3cd565b75a60849c06fb/21c67/2024-01-28-cover.webp 200w,\n/static/19588ef9936c3cd565b75a60849c06fb/4b6b9/2024-01-28-cover.webp 400w,\n/static/19588ef9936c3cd565b75a60849c06fb/b303b/2024-01-28-cover.webp 800w,\n/static/19588ef9936c3cd565b75a60849c06fb/e8df3/2024-01-28-cover.webp 957w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"You’re reading much more code than you’re writing. Readability is a highly subjective term. That’s probably why some call what we’re doing…","fields":{"slug":"/on_putting_stream_id_in_event_data/","prefix":"2024-01-21","langKey":"en"},"frontmatter":{"title":"Stream ids, event types prefixes and other event data you might not want to slice off","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABNklEQVQoz5WSSUsCcRiH/9s4MlRmQprSBEZRYEUKiQsj0iGKEiFCo0N1CMPAQ12COkSHlkPQLWiBLn2Fvt4TTeUhsqbDe3i3h9+7CCEEv5lSGqkM1XyWyfE0f9WL3iCD0QapLYxU3HWaNJc8P6eV/B9Qa4MQikw6xZSb8mPF6TSdjTrRoWGEkEgpgwGlVP6YyWiUPc/j9vKKxUKBkjvGzcE+F9u7lLP5z1oZTGHIsljL5dhZKLBcrvL48Mzr2TUvh0fct1scN7aw7L7gQK0MdsjBhB2SEZvKnMt5e5OnToPWisdpbZ3yzLy/lh+gvZariPU7lDMjZNwIsQGbidE4teIsJ7VV6qUKQhi00kGBX/ahQBmbkO34fmIwRiIWR6hQ8LfpHukdJgWWZWGHwxhjuhO8H/B7zxvKIdY7+1gUkgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/277c9e214c497e79574a0cadbf4a3eff/e24fb/2024-01-21-cover.png","srcSet":"/static/277c9e214c497e79574a0cadbf4a3eff/6d6b7/2024-01-21-cover.png 200w,\n/static/277c9e214c497e79574a0cadbf4a3eff/d184d/2024-01-21-cover.png 400w,\n/static/277c9e214c497e79574a0cadbf4a3eff/e24fb/2024-01-21-cover.png 800w,\n/static/277c9e214c497e79574a0cadbf4a3eff/dbfa5/2024-01-21-cover.png 805w","srcWebp":"/static/277c9e214c497e79574a0cadbf4a3eff/b303b/2024-01-21-cover.webp","srcSetWebp":"/static/277c9e214c497e79574a0cadbf4a3eff/21c67/2024-01-21-cover.webp 200w,\n/static/277c9e214c497e79574a0cadbf4a3eff/4b6b9/2024-01-21-cover.webp 400w,\n/static/277c9e214c497e79574a0cadbf4a3eff/b303b/2024-01-21-cover.webp 800w,\n/static/277c9e214c497e79574a0cadbf4a3eff/c2764/2024-01-21-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Asking people for feedback is an intriguing story. I like to get constructive criticism for my work, as that allows me to learn something…","fields":{"slug":"/one_or_more_event_that_is_the_question/","prefix":"2024-01-14","langKey":"en"},"frontmatter":{"title":"Should you record multiple events from business logic?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AJ+EU5d8Tpl+TqKGU6qQW6GDU4xgSrKEb3RWOJqAVYZsQ4NiRMeYh5BpS5qCU62RXq+TYLGVYrKWYrmRVQCReE6YfEuTeEmfhFKkh1N5WjRpPSiHVj9OLhqWdUuGaUBnRS2vemN6TziLcEaxlmKtkF2rj12skF2yi1IAlXpPkHRIj3NGnYFNmoBURi4eIgwGOyQaPCUbnYVli21HSzAgWzotKAwEcEwrq49bp4xap4tZpYpcp4xmAIpzTYZrQYpuQZl7RJeKeG94hZmzv6fDz4WXqKCqtqSuuKzGzrfU1X6Pmnh2d6qOXaSHVJ6DVqGJX6eRdACDbk2DakN/ZTuXe0mCZkh4dXqv1/ew2PmSqsOUem6CenqqzurI9P+u0+2Hg4aghVucgE6agVehimaahnEAhW9Qe2Q/fmQ6j3RFfloza1VNmaOyrL7VfYeVmm5bfVtOhZu0utn6j6bBel5Nl3dHlHtPm4FaloBlmodyAH9pTnZgPnhfOYJoPIxmR5uXoZ2rvLjH2KXB27KPiZ+HhaG4zLK2w5yms4drYo9yS413TZB6WpmEaZmGcQB9aFJ4YkNwWTd8ZDqHYUWYlaKMobapu9GVscybf3+hn6ugwuKZqb6atM6ch4aNbUiFcE2TfV6Qe2SPfG0AfWlUcFpCblg4dmI9ck0xkYeOhpiqorHDh5mslHRxkZmolrHLmaS2karBkHx6gWRGhXFPh3JaiXVikHxqQ8AMUjfJLpEAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d7b0f9d0b0dd689cbe371fd616629a7c/e24fb/2024-01-14-cover.png","srcSet":"/static/d7b0f9d0b0dd689cbe371fd616629a7c/6d6b7/2024-01-14-cover.png 200w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/d184d/2024-01-14-cover.png 400w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/e24fb/2024-01-14-cover.png 800w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/dbfa5/2024-01-14-cover.png 805w","srcWebp":"/static/d7b0f9d0b0dd689cbe371fd616629a7c/b303b/2024-01-14-cover.webp","srcSetWebp":"/static/d7b0f9d0b0dd689cbe371fd616629a7c/21c67/2024-01-14-cover.webp 200w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/4b6b9/2024-01-14-cover.webp 400w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/b303b/2024-01-14-cover.webp 800w,\n/static/d7b0f9d0b0dd689cbe371fd616629a7c/c2764/2024-01-14-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Cynefin’s framework states that we have four types of decision-making contexts (or domains):  clear, complicated, complex, and chaotic. They…","fields":{"slug":"/how_to_solve_complicated_problems/","prefix":"2024-01-05","langKey":"en"},"frontmatter":{"title":"Not all issues are complex, some are complicated. Here's how to deal with them","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACMElEQVQozwElAtr9ALGwlaqqjMC+rs/LwNPTw9/e0puhiKWxlr3Ku6vNl6CykpuUmI6MiomIioSEiYGAg4+QlZ2fqZ+fo6WkpgDFxLS+vKTKxbbHx8qusLWjpKhqZ2yAgIuPkKCbnayqrK+Zl5eZl5ebnJ+Vlp6WmaOlp6+tr7Str7SsrLEAvryixMKkf3x5bXCAiY6ci4yVUFFaPjg4PTg3WVpmampygHt3j4qHmJSTsa2nuLe1x8G6wLanwby2uLSxALCylXt6eSAcITAuNoiKmGViZRcXHCgiIz86P0FBS0BATWpufYOAgoiCfqGYisG2o6yXeH5mR7Ojj8C5sACGhoo5OUYVEhQfGBktKS0mGhYjGBQcExAuJyY1LzJCQEliZ3xzdoGNhn6gm5evopKSeVE3JxKFdmHGvrIARUhWJCUrEw8QIB8jGhcbNSklTDkxPzAqLScpLygrODQ7b3B7amNjfXd1opqPrJqCmYJdh3JSp5iDx8K8ABgZHwsJChYSEzEwNiUiJj82Nl9KQFpENyYdGxsVFSccGVhUV3dycIJ9fI+If6iZgbGfhbalj8C4r8TBvwANDRAIBQQsKCsnIiUtKC1BOjxYRT0rHxkHAwMNCgoODA4+NTJXUlBsZ2WBfHeZkIOsopTBvLW1sq6ko6QACAQEDgsNOzc+IhweJR4hOTM2Sj05LCQjFRETFhESDQ0ROzIuTkdEcm1rfHZyj4Z7npePr6mitbOyn5+kz+Pm5E/vBcAAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/6d5d15a913a9a3c44212fbe6e892cfef/e24fb/2024-01-05-cover.png","srcSet":"/static/6d5d15a913a9a3c44212fbe6e892cfef/6d6b7/2024-01-05-cover.png 200w,\n/static/6d5d15a913a9a3c44212fbe6e892cfef/d184d/2024-01-05-cover.png 400w,\n/static/6d5d15a913a9a3c44212fbe6e892cfef/e24fb/2024-01-05-cover.png 800w","srcWebp":"/static/6d5d15a913a9a3c44212fbe6e892cfef/b303b/2024-01-05-cover.webp","srcSetWebp":"/static/6d5d15a913a9a3c44212fbe6e892cfef/21c67/2024-01-05-cover.webp 200w,\n/static/6d5d15a913a9a3c44212fbe6e892cfef/4b6b9/2024-01-05-cover.webp 400w,\n/static/6d5d15a913a9a3c44212fbe6e892cfef/b303b/2024-01-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Dune series has a lot of great thoughts. They’re more than just sci-fi books. Let me share one with you: Moneo: For what do you hunger, Lord…","fields":{"slug":"/dune_and_long_term_goals/","prefix":"2023-12-30","langKey":"en"},"frontmatter":{"title":"What Dune can tell us about setting our goals","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAChElEQVQozx3O20tTAQCA8fNf9BaWoSldnNnU6fKSuqm7OXecc27nuOvZ2Xa2MzdLtCCL8hKJVFSkgd0sH4pFiVI9hBFREHSDXnzoJUgICiKCoi/q4Xv98Qkle7spq/VQaR7AaIlgd6fweNKY7Bp1Lh2jQ6PalsbQnaLGkcHo0tlnS1NlSbCnQ6HKEsfQHmZPc4DdBwYQtu9zUmH2U2tV8Ho1JpQU67M5xrI6O9p1Ki1Zyi05SluSlDRG2dYYobxZwWBVaXBlaHCkqbdGqW+TMDb5EHabfbR2hkj641wtRHl/LsH3Yo6va4e4e6HAmeMFRg8VUIfHUPNjaMMjRLUCtkCeGruOyaFRb0thtCpUt4UQ5E43k/5+7uhDPJ2I83xS4flUgo8LSX4Us/xazfH7YZ6fqzo/VjJ8KWq8vZrmycUsc0fz/093HYywq1mmomEAYbzHzUlfP9OBADPBICcHJUZEieWczJvpEK9nQrybi7KxoPG1OEo2kaGyKUaHI0avGMPQIrHT5PuPldd5EYKtXUQtLlSbSNLhI+kOIDtlMmKIZT3My8k4G1cyfL6d48/9PK/mh3H2qZQ2htlqlCipDVJqkqkwS1Q0+BE8Zgtymx21q4ecU2S018dUIMhiOszakQjPToV4MSXzZjbMxqUE325qbF7P8GA6yeSwQkyKYHUMUWYaYEtVH0KTwYy9rpVgs5W8w8Vc0Mud7CCPDvtZyfdT1H2sjAzyeFxifULmxVSED2cVPs0rbC7E2bwc4f1piXsj/ZwY7EGw7W8k3m7lmMfJednNjYTIkiqyGPMwH+5lIeLhSlRkMd7HddXLUvpffSylRG4lPSypvSwneliO27k2ZOUvUXCVLigGb6AAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/22a285d61ac0be8c946272d7e3d58714/e24fb/2023-12-30-cover.png","srcSet":"/static/22a285d61ac0be8c946272d7e3d58714/6d6b7/2023-12-30-cover.png 200w,\n/static/22a285d61ac0be8c946272d7e3d58714/d184d/2023-12-30-cover.png 400w,\n/static/22a285d61ac0be8c946272d7e3d58714/e24fb/2023-12-30-cover.png 800w","srcWebp":"/static/22a285d61ac0be8c946272d7e3d58714/b303b/2023-12-30-cover.webp","srcSetWebp":"/static/22a285d61ac0be8c946272d7e3d58714/21c67/2023-12-30-cover.webp 200w,\n/static/22a285d61ac0be8c946272d7e3d58714/4b6b9/2023-12-30-cover.webp 400w,\n/static/22a285d61ac0be8c946272d7e3d58714/b303b/2023-12-30-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"When you’re angry, take a breath, take your time and then talk. So I did after I tested .NET Aspire yesteday. I hoped it could be a decent…","fields":{"slug":"/nay_to_aspire/","prefix":"2023-12-21","langKey":"en"},"frontmatter":{"title":"Why I won't use .NET Aspire for now","category":".NET","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACd0lEQVQozyWQTUhTAQCA30w3nXPObW9v7ul+fTr32p/bdHP+ttQZav40DBEpSo2VVkaYhWXkDmqQYEglXTrkoQ6eDSwogk5dCzzYpUOnjt2+yA7f8YOPT/DVmhk7HScYUfGqAWSXE0OliUR7Gn84hFmSUNQAZSYzvW1xDt+u82HlAp9WL7M7n6OQy1BXY0dvMFBaVoaguKykUlEamyL4w0EMFhFBU4Sxqgqb7MDToNDckcbucuGRJXqTEZJBP7tXc2xeHCGqeNCc0KLXl+OQ7Qgetx1/NIgSVPH662hNqJSX6RAEDRVGI7LbidPnRZQdaA0GtCYLqXiI7Yke/DUygiCgK9UhOex469wInnoPgViYeFsL24U8HO3xfreA1y1TVKLF5fMgyTKheIRoMoZbUZieyvFqbZG52Uk62pOcVP1YJZHScj2CSbRSJVqw1TjY27wJh3vwc59v755RU21Do9UhOuyEmyMkO9P4Gurx1dcRiUUJhwJEQgESiSi2agntv4fFJSUUFxUdp+cH2/i9v8WPg+f8+fqajXszdGe7WS4sYXfYMItmJNlBlWilVK8/dv6jwWqzYLaaESySBd3xMwGbycDHJ9d5s5rnYGOOzy+WOPr+hV+PH/Jo5AyDkzl6st10Z1ppTkZpDDTgb/RhtpgwGitoCCgIsZZmQk0xfI0qouxkfqCdl1fG2JrqZ2d2lPUbt9lp62Cms4t0tp/c+DgDI2cJhKPUqyEUNUilRaS61k0slUK4lb/E0wcLLC/kGT8/QTqVZrQlRi6ZYDiTYXZmmmsLCyzevcP6WoGVlfsMjp0jOzRMIt1BdmiITLaf1q5TdPX18ReJezQyI31ASgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/4121642a7f4fcf1b2cc6e8d20318ca55/e24fb/2023-12-21-cover.png","srcSet":"/static/4121642a7f4fcf1b2cc6e8d20318ca55/6d6b7/2023-12-21-cover.png 200w,\n/static/4121642a7f4fcf1b2cc6e8d20318ca55/d184d/2023-12-21-cover.png 400w,\n/static/4121642a7f4fcf1b2cc6e8d20318ca55/e24fb/2023-12-21-cover.png 800w","srcWebp":"/static/4121642a7f4fcf1b2cc6e8d20318ca55/b303b/2023-12-21-cover.webp","srcSetWebp":"/static/4121642a7f4fcf1b2cc6e8d20318ca55/21c67/2023-12-21-cover.webp 200w,\n/static/4121642a7f4fcf1b2cc6e8d20318ca55/4b6b9/2023-12-21-cover.webp 400w,\n/static/4121642a7f4fcf1b2cc6e8d20318ca55/b303b/2023-12-21-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Knock knock? Who’s there? It’s me, Oskar, the end is near, did you know that? Ah, you know it but don’t know how to proceed? Let’s talk…","fields":{"slug":"/the_end_is_near_for_crud_data/","prefix":"2023-12-15","langKey":"en"},"frontmatter":{"title":"Hitchhiker's Guide To Moving From Relational Data To Events","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB4klEQVQoz22QS09TURSF+Rs+iMaRA+PAkb/Agcz8BQ6EkcbEB6IQQILGxGB0YBOdmGDSBIM8arANtBLa3l7ac8/rPuiDWKJoAokDrB0w+0yptUEZrJw9+M7aa+0eYwwtaa3RWmH8GmvJEWpiAOVlyS49QmUfY4z6y3X5rjo+PZ2hC1u0EpRLd/hcddis5PlSt1i7geeJNtfi/5gEQXDwSikP/vccNmuDShusXyXwQ1xHsLuzgxUzKCkOFrYYaQzlSoXAWDLpT8zOzlHIO4cTdrYqJalVy/jWsprJ8v2rwjiDKB1gtEKHISaTRqaSJNZyxOMzrL+dpijEUZUNnuexWauipUDJiO16CpF/ibGV9p2tpX7vBrn5OZZjMZZHRqgO3cT15NGGrYRhECFKBlFaJ5PJ4uQKRIFF+QHBapofl89TSCxSfDHO8sQoW1f7qL2P/WNoNEppotDwYUkwNFbBdX0mnvgMPkihPAcdlQkyKzSu9LI9eQ05PcpsYpFv/Zdo3D73f8KWfN8Sj79j7OEbcjmXj8k8U1OvkbKECSPqsUka/WdoXj/J3vAFthaesTdwlubd40dVbtcWoohSLtYarFV4wkWHZTZWFti91cfPpxfZf36M5vgp9l+doHm/l1/Dp/kN9EdJS0p3uE4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/8b59709ef54e36c71a032a94903e9f03/e24fb/2023-12-15-cover.png","srcSet":"/static/8b59709ef54e36c71a032a94903e9f03/6d6b7/2023-12-15-cover.png 200w,\n/static/8b59709ef54e36c71a032a94903e9f03/d184d/2023-12-15-cover.png 400w,\n/static/8b59709ef54e36c71a032a94903e9f03/e24fb/2023-12-15-cover.png 800w","srcWebp":"/static/8b59709ef54e36c71a032a94903e9f03/b303b/2023-12-15-cover.webp","srcSetWebp":"/static/8b59709ef54e36c71a032a94903e9f03/21c67/2023-12-15-cover.webp 200w,\n/static/8b59709ef54e36c71a032a94903e9f03/4b6b9/2023-12-15-cover.webp 400w,\n/static/8b59709ef54e36c71a032a94903e9f03/b303b/2023-12-15-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m feeling like a surgeon in recent days. Who knew that changing the connection management in storage library would be a delicate thing to…","fields":{"slug":"/notes_on_migrating_storage_library/","prefix":"2023-12-07","langKey":"en"},"frontmatter":{"title":"A few notes on migrating storage library","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACfUlEQVQoz2XMy0vTAQDA8R9BktHB8lEOH5tuvrbffO+Vj+lSUTa2aVN/bunyMaezOc1lZvOJ4hMDSVIjEYuslMQ6BGZQFw92iW6B9Fd0/oZdO3yuH+FGfBxpKSkok2RY9PmcHuzy68Mb5ns6aamupEybQ5QgEC0IpMbGcvJ6mz+nn5nt9SIIwv9U6UoKtFo06XIifd0cb22wYDMzmKekraYCm1FH1vU4Ui5f+pd21Vaw3FTHlKOSAW8bPreXRquD1EQZV6IuIohqNaZiHWW6Qoa7OpmXnBwtjLE/OUKo0YmjRE92/DUqczXMtrpYa7Fh16TxLNxLpNuLVFuFvaIEc56GwuR4hFxRpNRooqa8lBpDEaM2C2dfjvh5eEDE58VZakSXLifc7uHraA9nQQ+rzip2FscINtuxFIqUF2vR52RgSpMhaM9DgxGzvojaMhNTjVb2x0eY7u4i0FSPu6oCfYYCf6Od79ur/Fh+zFK1iRXvbVpt1ZSKmdiKRZp1WjrMOoTsrCxu6g0M9fXzdvM5J6+2eRn2M+nvYDLYh9tiRp1wlUGvxO/9LT497GXN18KEtRzJIFKUIWe8UsdmtQG7qERQpCoIBgbY297l/foG397tcbi5zsb4Iz5ubuBvcOFSydjy1nMckFg1FxCympEKlPRrFTiy5UiZycyZNKiiLyLkZKoZCo1wvyfAzECInaVF1sZGWXkQ4sX0BIGGenz5KuZqS+hUyZhrqmPIVYdkyseRlkiPRsGdjCScSTFozsPsTDWSy43P08ZQZxdPIhGmAn5mgn6eRoa5V2/HKk/Abcyl3SASthhZ9Tg5HB+m/VYZlsQY7mal4EyNQ3FB4C+lImPWT8+VfgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/69fc49fcfc53a544d63c4b71b936e2c4/e24fb/2023-12-07-cover.png","srcSet":"/static/69fc49fcfc53a544d63c4b71b936e2c4/6d6b7/2023-12-07-cover.png 200w,\n/static/69fc49fcfc53a544d63c4b71b936e2c4/d184d/2023-12-07-cover.png 400w,\n/static/69fc49fcfc53a544d63c4b71b936e2c4/e24fb/2023-12-07-cover.png 800w","srcWebp":"/static/69fc49fcfc53a544d63c4b71b936e2c4/b303b/2023-12-07-cover.webp","srcSetWebp":"/static/69fc49fcfc53a544d63c4b71b936e2c4/21c67/2023-12-07-cover.webp 200w,\n/static/69fc49fcfc53a544d63c4b71b936e2c4/4b6b9/2023-12-07-cover.webp 400w,\n/static/69fc49fcfc53a544d63c4b71b936e2c4/b303b/2023-12-07-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m always saying that the Marten community is one of the things that keeps me doing Open Source and staying in the .NET community. It’s…","fields":{"slug":"/marten_user_survey/","prefix":"2023-11-30","langKey":"en"},"frontmatter":{"title":"Are you Marten or Wolverine user? Tell us more!","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACg0lEQVQoz03N/U/McQDA8Y8WaXGGY0lGo04cmSMlbtVx0yFsxAqpNHIW17EWoVFdNZWmMKRSm4fZlWdGlqfN4YTRtDWdGMKShy19v9/rbeun3n/A6y2eKG6aFIWbioxdkalT3NQCN/rg8j+Z55LEF1lCkWUG1qHI3P3bQ/GLz+y73c726maSSu4jHLIbh+LmsSzTKMnc6vlL+ctnXPjWSYui0D0A+eBqx7otBceb17wFzv+UKHzVTXZjB5lX2kirdCLeKQpOWaZZkvgIXLtjZ712DMXlh+kDXjsdPHxwrx9sunSG1IXBvHjXwiOpD8vuDBKyikm/+glLQxs7LrUiemWZH8D7X98pqSgkPWUdaREaLtac4EtXF3VFWdypP0dVbTWZ5kTM8Stw/f7Dvc9fsRlnsDgqGsv9bjIbOylt7kS4FXf/ve7sUfRzgpgdOI6cbAtXj5VjnjUV27YEjh+rYLnJQE5RAQtD52CrOk3FUyf7zZtISkxg2rxIbE3NNCogensl2l0trFqqx6jXET4jgMSNq6gtK8M0yZc043ymjVUTFT6XDOtOgn3VVJceYk9+HiXnLhC7ZBEeQhC7Ng4nIFrbWmmw16APnY4hYjZBfip2mJOxV1ai9RqMIUzHkUN7idVpWb1yOeO9h3Lq5HFSk5LYYt2Fxn88ah9vxvoMo87hQNRfv0LuASsRuqnotIH4CEF+7kF2ZecghGBLymYKbHmohEA91IuA4SMwRerxU6lYk7yVoAkTGTnEkxBNIPGpqYjcogJCQ7TEzQtm0mg1XkIQYzQQHWlg2YJwliwIY8QgD2ZOmcwozyFo/P1wfXBh3RCHIUSLysMToymG4tqzRMWY+A/7QNTnDqufPQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/31cc9f8c5bb38e33d52f423a0c236a58/e24fb/2023-11-30-cover.png","srcSet":"/static/31cc9f8c5bb38e33d52f423a0c236a58/6d6b7/2023-11-30-cover.png 200w,\n/static/31cc9f8c5bb38e33d52f423a0c236a58/d184d/2023-11-30-cover.png 400w,\n/static/31cc9f8c5bb38e33d52f423a0c236a58/e24fb/2023-11-30-cover.png 800w","srcWebp":"/static/31cc9f8c5bb38e33d52f423a0c236a58/b303b/2023-11-30-cover.webp","srcSetWebp":"/static/31cc9f8c5bb38e33d52f423a0c236a58/21c67/2023-11-30-cover.webp 200w,\n/static/31cc9f8c5bb38e33d52f423a0c236a58/4b6b9/2023-11-30-cover.webp 400w,\n/static/31cc9f8c5bb38e33d52f423a0c236a58/b303b/2023-11-30-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The law to be forgotten and immutable data sounds like fire and water. How to remove data if you’re building an event-driven system based on…","fields":{"slug":"/gdpr_in_event_driven_architecture/","prefix":"2023-11-26","langKey":"en"},"frontmatter":{"title":"How to deal with privacy and GDPR in Event-Driven systems","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/0lEQVQozxXKO2sUQQAA4AV7LawM2okWUYuAGIXYpbAJpPAfaG8lgoX6ByziAyEJCBZqk0JREkKeRiNJvIfr3l1unzM7uzvvmd3ZTfYuasSv/qyMasILKkumKow5YzrGIk55Xg2VGUhTc1WpopZmkB8c6XKAsIApRxknLLeoNEyVTBoqDUYZcAPH7nT8gKpCFjVXJRWGiIKK/6Hvw0bb2W3ae007AKlFRMF1xfShLodMlVxXVOZu6LthHMYYMy30gdAHTJWEF91+uPl1Z23z2+6Pn64PLWVqTOjMk/vz869N/Ycqk1DV3/ednu8GMUAEIAJTxpQRuoIJsTv9z0srTs8LYWrxYtjYWr09cenKxfPNdofwAgYhjWOGUJLSFKI0CNIwgnHGVAUQWV//AhMWpxxhYTFd79vNybELtyYndVEdHv2NAoAABGEEYoz8MHW9zPUQzLj53dpYeXl3+s3s7OHRcUqkxVSlTT33YmZqavrBw0dLy+sRTFptZ98LEZGeB37Z3V7XhTGm+TDZXnae3lt8/7aojzMqLJDQ7Z3Ws+evro/fsKwTI2fO9pqNkmRZ4KNMoCAUMeQgghHA+QB9X914fKfXbnFZZlRZCxv22NWJ8Ws3R0cvj4ycO3Xy9IePi0zmUZyKvEowgyiDSUZlgTzX/vTOWZiL9rYSzyPC/AO6lbsQQyW0cQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/b04e350d77a67f8c494264f5eae83e2e/e24fb/2023-11-26-cover.png","srcSet":"/static/b04e350d77a67f8c494264f5eae83e2e/6d6b7/2023-11-26-cover.png 200w,\n/static/b04e350d77a67f8c494264f5eae83e2e/d184d/2023-11-26-cover.png 400w,\n/static/b04e350d77a67f8c494264f5eae83e2e/e24fb/2023-11-26-cover.png 800w,\n/static/b04e350d77a67f8c494264f5eae83e2e/95584/2023-11-26-cover.png 1200w,\n/static/b04e350d77a67f8c494264f5eae83e2e/201d0/2023-11-26-cover.png 1350w","srcWebp":"/static/b04e350d77a67f8c494264f5eae83e2e/b303b/2023-11-26-cover.webp","srcSetWebp":"/static/b04e350d77a67f8c494264f5eae83e2e/21c67/2023-11-26-cover.webp 200w,\n/static/b04e350d77a67f8c494264f5eae83e2e/4b6b9/2023-11-26-cover.webp 400w,\n/static/b04e350d77a67f8c494264f5eae83e2e/b303b/2023-11-26-cover.webp 800w,\n/static/b04e350d77a67f8c494264f5eae83e2e/bd3e9/2023-11-26-cover.webp 1200w,\n/static/b04e350d77a67f8c494264f5eae83e2e/6769c/2023-11-26-cover.webp 1350w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We just introduced support plans for Marten, and here’s why. We’re really committed to providing tools that are accessible, safe and bug…","fields":{"slug":"/marten_support_plans/","prefix":"2023-11-19","langKey":"en"},"frontmatter":{"title":"We introduced support plans for Marten","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB7UlEQVQoz2NgAANeDk5hbm4hLp6S7NjmyoyQoIDkxJjy4syc9KjIsMCupuIJHWWVGaGyQpwMDAzMzEwMSIBRiFdAhIdXgp+nLT8+0ss70FZFgI0pwt+svSqEgYEhPchyTlNUU5KDlBAfAyMTKyuSZkZGRiEePk5mZl0dpeUJAQtctWpiDCR52EN97eKDbaREeZtLompjndtDzbsyXJUlBBkZGJgYGWGaGRgFuLn52JkMDQ1zzCz7ch2XZ5hEWynyCqoE+7rvXJSwdWZqkrfOqgaPDaXuIuzMfFwcSJoZGSX4eaX4uV2tbcJcQ/dubXp8NHVZnKKzrPbkopj2stAbO/tKU+0i4oOm1nkG2UgL8QkjvA3SLCgsISioqaabFR58flnNsZW2S+vVkqy1gqws/EIjb+9tTy4OKEo02txksiTZ2khdjoGRGaGZi42dl50l1Elv89SiOUXex5Zp9hYYxTgbqmkaJ5WnTF1bN6075Hij8dlE8Q3pzrGe1gwMcM0MDKysbGrSwlUZNjNaA0pDzFqSNHuilPvjdFSVrEsLY08c6NwxPWnf/ILTKQZzk5wM9SyYmFkQmuU1VO0stSPtdPpClevi7dxtvWYnaa/NUs9wUo+zV93e4nNtV+fDZfkzYszUlBRlpBSZmUE2AwB4tIUPBaKb6AAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/00a528532d3dbd1dee8848276fae0642/e24fb/2023-11-19-cover.png","srcSet":"/static/00a528532d3dbd1dee8848276fae0642/6d6b7/2023-11-19-cover.png 200w,\n/static/00a528532d3dbd1dee8848276fae0642/d184d/2023-11-19-cover.png 400w,\n/static/00a528532d3dbd1dee8848276fae0642/e24fb/2023-11-19-cover.png 800w","srcWebp":"/static/00a528532d3dbd1dee8848276fae0642/b303b/2023-11-19-cover.webp","srcSetWebp":"/static/00a528532d3dbd1dee8848276fae0642/21c67/2023-11-19-cover.webp 200w,\n/static/00a528532d3dbd1dee8848276fae0642/4b6b9/2023-11-19-cover.webp 400w,\n/static/00a528532d3dbd1dee8848276fae0642/b303b/2023-11-19-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"This year, we had the fifth anniversary of the Developers’ Doomsday. In 2018, on the 25th of May, the European General Data Protection…","fields":{"slug":"/gdpr_for_busy_developers/","prefix":"2023-11-10","langKey":"en"},"frontmatter":{"title":"GDPR for busy developers","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9AEpJmMDAu//nO5FzXl1ZpGJhsEA8ky0qfgsxiwU0lQIykwAqiwAhewEhbgAdYAMjX5mqv629zHySqlN0kgBZWZg5OIq4t9hMTao+PowuNpIeKooTJ4M2WKlWeLxYeLxJa7MKNY8EKXkAG2EFG1zN0+D7/P3y+/7v9foAtrnSnp/Dw8XcwMTYBiV0FTJpLUluNliXO12XIUmYHESVGkOTEzyKHDyAHj56OVaK2d3l9Pf46L2869jaAPH1+Pf7+/3//uHm6QIkbj1OZ1xpb3GCnmR3jw44kBlBmFVlZUZXY6K74u/d4O/Ix/////LKyckRBOKVkADm6fDk6O/p7PJ/lb4AJXgIMogLN5IALIcFM5McSKoDMpQdRJMPPI+ik6zvazrQLBDfdU/ZUCLOLxnx29oA6e3z6u3z6+/zP12hJCyAGjaHCDaLDTiLDzyVKlfCCDWSBzOUACKHeG2Q50YdyBIA0TMA2V0I0R4A4Xp3AOzu8urt8+7091VtqblFdGpLgCtXnjZUlBhCnXiX68bP373I3bK+1dPe6/zh4fHHxOB2cNVCLtlVS/PQzQDP3eza4Ojv7+9berIXI3kYNocHN40AKYEDMJt8nvr4+fn09vn1+Pr09ff5/Pz6///x8fLr5+zn4+Xr9voA2uTx3uLs8/TyaYS3ACKCAS+KFTyKXnemiJ7Nwc/z7PD27PD37fL37vH26+zx6Onu7fH17/T37vH26uzxBMUwqjVcWBIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/780b76d337c6f23e92bcab631deda495/e24fb/2023-11-10-cover.png","srcSet":"/static/780b76d337c6f23e92bcab631deda495/6d6b7/2023-11-10-cover.png 200w,\n/static/780b76d337c6f23e92bcab631deda495/d184d/2023-11-10-cover.png 400w,\n/static/780b76d337c6f23e92bcab631deda495/e24fb/2023-11-10-cover.png 800w","srcWebp":"/static/780b76d337c6f23e92bcab631deda495/b303b/2023-11-10-cover.webp","srcSetWebp":"/static/780b76d337c6f23e92bcab631deda495/21c67/2023-11-10-cover.webp 200w,\n/static/780b76d337c6f23e92bcab631deda495/4b6b9/2023-11-10-cover.webp 400w,\n/static/780b76d337c6f23e92bcab631deda495/b303b/2023-11-10-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Doctors Hate Her! Discover the Simple Trick to Lose Weight Overnight! This One Weird Trick Can Save You Hundreds on Your Energy Bills! The…","fields":{"slug":"/clickbait_event/","prefix":"2023-11-05","langKey":"en"},"frontmatter":{"title":"Anti-patterns in event modelling - Clickbait event","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABgUlEQVQoz42RS08aARSF/XVddNHEnelvcNGu2RBMqIrgIxgoJZEao23csZGSGJGoceOrgzNgIcwwIA0MMgM6IDLzGUZNfOtJbm5yk/Pl3HuHuJVt204NlEgkmJgYx+fzEQqFiMViRKNR5oNBZ+b1ekkmk098Aw09B1xcWmb0y1fcbjd+v59wOEwkEiEQCODxeHC5XMTj8fcDa5pG5fQUtaSiaXUURcHQdSpllf/VKm3DoNvpvA28641GA0WWKRaKFPIFJFHiWBA4/CuQkUSa7XPMbu+B5wlwIMuynK6qKul0mtXfv5j65iE0N0NyR+Ayv4+0skD25yyX8hH2De3lhHfAolwkldokOD3FyKcPfB7+iN83iZFa5s/3H6zPjGFl1ug7RuvlhI/j16pVdrfS7G1vkM8cUK/IlI730csFuu3m6yvfP65lW1z1epjnF7SMFqbZod+3MfQWmnZGU29hXnTe/2WlVOIkl6OilmnUNaeyooRweERWFPmXy6HV6s8CrwGVN5J9Dec0ggAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/6daab209c7154b2e77a112700ebc4b82/e24fb/2023-11-05-cover.png","srcSet":"/static/6daab209c7154b2e77a112700ebc4b82/6d6b7/2023-11-05-cover.png 200w,\n/static/6daab209c7154b2e77a112700ebc4b82/d184d/2023-11-05-cover.png 400w,\n/static/6daab209c7154b2e77a112700ebc4b82/e24fb/2023-11-05-cover.png 800w","srcWebp":"/static/6daab209c7154b2e77a112700ebc4b82/b303b/2023-11-05-cover.webp","srcSetWebp":"/static/6daab209c7154b2e77a112700ebc4b82/21c67/2023-11-05-cover.webp 200w,\n/static/6daab209c7154b2e77a112700ebc4b82/4b6b9/2023-11-05-cover.webp 400w,\n/static/6daab209c7154b2e77a112700ebc4b82/b303b/2023-11-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I used to play football. I wasn’t talented, but still, I loved it. Football is a team sport, and playing is not the only essential part of…","fields":{"slug":"/women_in_it/","prefix":"2023-10-27","langKey":"en"},"frontmatter":{"title":"Women in IT","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABc0lEQVQoz3WRSYvCUBCE/f9/wKNePIgKoh7EBTVGjRoVF9yixgXxIobgkoOHGqogw4hMoHnh0e+r6upIq9WC67pwHAebzUbF/7B2ux1GoxEsy9LZ7XYxm810H75ZrVY4n89IJpOIdDodHI9HXYaQ7XarRj4aDodYLBZ4vV54Pp/wfR+DwUBQ9rH/A9hoNGCaJprNpoqOa7Ua5vO5oL1eD0EQ4P1+q/jdbjf0+/3fyT6AxWIRhmFgvV5LcTqdIpfLYTweq7lQKMgNxyXc8zzc7/f/gdVqVTBecHSCOCadn04n1Ot15PN5lMtlXC4XOaR79oU5fgCpysdUozoF2u22QPv9XkvIZDJyThCnqVQqEqeRr6XQOiF0w9Dp7nA4KMvlcikgYax4PI50Oq0YaIDAL4fc8mQywfV6xePxQCwWQyqVQjQahW3bcsSTC6M4M2eFmX855GilUknNHDWRSGhExsDcuHECKMweusxms3LJt8zxL/AHPUdpsyERlI8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/8c0b85d22a787b1c37584605e761fb77/d4826/2023-10-27-cover.png","srcSet":"/static/8c0b85d22a787b1c37584605e761fb77/6d6b7/2023-10-27-cover.png 200w,\n/static/8c0b85d22a787b1c37584605e761fb77/d184d/2023-10-27-cover.png 400w,\n/static/8c0b85d22a787b1c37584605e761fb77/d4826/2023-10-27-cover.png 500w","srcWebp":"/static/8c0b85d22a787b1c37584605e761fb77/c89cf/2023-10-27-cover.webp","srcSetWebp":"/static/8c0b85d22a787b1c37584605e761fb77/21c67/2023-10-27-cover.webp 200w,\n/static/8c0b85d22a787b1c37584605e761fb77/4b6b9/2023-10-27-cover.webp 400w,\n/static/8c0b85d22a787b1c37584605e761fb77/c89cf/2023-10-27-cover.webp 500w","sizes":"(max-width: 500px) 100vw, 500px"}}]}}}},{"node":{"excerpt":"I’m happy I didn’t have to use Object-Relational Mapping tools in the last few years. They’re solutions to some set of problems, but those…","fields":{"slug":"/in_the_defence_of_orms/","prefix":"2023-10-22","langKey":"en"},"frontmatter":{"title":"In the defence of Object-Relational Mappers","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4gAAAuIAHVHB4bAAACd0lEQVQozx3MSU8TARiA4S/FIEXrglAxiELLjoIVECoF2gGmZaAbZUqXAdvSWgIo4kZdiEEETVQkRE0wxpAYl5MXj5y8+G9IjAc9viY+P+CRxUySTDJGLBwiNh4iHtFITfpJxQIY+iix4CDt1SepNpvxuhwkdBVVcTI57iNnjDMdDZKbirIwkyStjyLrtzLcnc8zm5khnYhjRAP/wysxP8akRlb3UVB6GLaW421vJRFW6Sq30G+rwm2rovawGc3j4t7iVa6ndGRtLsTG/bvcWbzNXDZLJjmBEfER8fYxNuwkGlbYGvMw12An7XWTDQ9x55ydFVcb2lkrh0SoPHKUuegEs1MR5EFEZfXmdQq3ljGCGpOuS3x6ucGv/X2+ftvlkaeb5QorKXsjT0YUvr9YZqH5DC8HnLzzDaKVltDb2sTqtTybqw+RPvtZ4tEoM9Ew9WYTbcXCY/8wf3//4eeXjyyJEBRhtPI06eJSnl7uYfNajoXuDl73trPa08HVsRjb62u8LdxAtJYzaEo/Y/291FtKGLCWMd9Qzc5SgeeKD0OEvAjZgwcJmoq453Lz/tUOHY1NXKg4zkoyz7QvzkIiz0YujdRWlHG5oQqv0k2zxcJsi43Fpmr29j7w49lN/CIsFZn47B1kO+TniT/AfT1B/akqTpdXshzQmXC6GXG40XtVxHygmC6rhZTNytSR4wweLkGtOcVMYRPDGaRNhC6TCcNWw+aoym4qxu50nK1IgDchjQedrSj2Jrzt/fQ19yDW0kP0lZgZlyJUES6IiRMi1JY1UF58jDoRukVwinBRBL3OTk5RCJxvYcLh4LbHg3rOQbBTYajVyT80ZExzQLKrkAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/e2ae2c80857380bf9d06ad103483ebef/e24fb/2023-10-22-cover.png","srcSet":"/static/e2ae2c80857380bf9d06ad103483ebef/6d6b7/2023-10-22-cover.png 200w,\n/static/e2ae2c80857380bf9d06ad103483ebef/d184d/2023-10-22-cover.png 400w,\n/static/e2ae2c80857380bf9d06ad103483ebef/e24fb/2023-10-22-cover.png 800w","srcWebp":"/static/e2ae2c80857380bf9d06ad103483ebef/b303b/2023-10-22-cover.webp","srcSetWebp":"/static/e2ae2c80857380bf9d06ad103483ebef/21c67/2023-10-22-cover.webp 200w,\n/static/e2ae2c80857380bf9d06ad103483ebef/4b6b9/2023-10-22-cover.webp 400w,\n/static/e2ae2c80857380bf9d06ad103483ebef/b303b/2023-10-22-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"One of the things that we’re learning too late in the Event-Driven approach is that we should have been splitting events into internal and…","fields":{"slug":"/internal_external_events/","prefix":"2023-10-15","langKey":"en"},"frontmatter":{"title":"Internal and external events, or how to design event-driven API","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4gAAAuIAHVHB4bAAABnklEQVQoz2Pwi1oBQf7RK71ClyQU7Hx4+Hpr9hK3iJUB0WDxqBVekSuXVM3PTl/tEQ7iwrUwoGgOW5JWfGLHvsOT5szwCFnpH7PCP2qld8SymNQtC2e+nDf9eWTSRp+IZf7YNC/3DFvbNXXv//9h399G5OfN9QhbFRizwjNsSXb+3qVzXq+c/66m5oxH6GL/6JWYmld4hy/LLD9+73T9///+ew+XugevCYxd4RG2uKzixPol39cs/FRUetQzbAlWzSt9IhZFpJ1asWLvv7+Bv/+HVzROcQta4xO1rLJkR03Z2rL8ZUGx63wjl2P3s3f44qSC4w2TPtx9UvH/v+/ZSzn+0Sv8Y9YGB3fomAWbOBX7R6/2i8LQ7B+9IiBmhVfk8uystW0l+7Ytn/D/f8j//xEVTV0eIRtcgyZYuZY4+jRj1+wbudI3YqVb+Oq8hDk9aRO6sqes3JqZlmVtbJ0YGLfRwbvX3KXC2r3BP3oVFs0hCUsjUxYHJy4uylvUVjKvp2qlR9gEFS1XG5ecoPjNSemL4hOmRsVN84lciRzPAJw9BLOaaH4PAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/98bea3c5e670343ff0ff640f9698db92/e24fb/2023-10-15-cover.png","srcSet":"/static/98bea3c5e670343ff0ff640f9698db92/6d6b7/2023-10-15-cover.png 200w,\n/static/98bea3c5e670343ff0ff640f9698db92/d184d/2023-10-15-cover.png 400w,\n/static/98bea3c5e670343ff0ff640f9698db92/e24fb/2023-10-15-cover.png 800w","srcWebp":"/static/98bea3c5e670343ff0ff640f9698db92/b303b/2023-10-15-cover.webp","srcSetWebp":"/static/98bea3c5e670343ff0ff640f9698db92/21c67/2023-10-15-cover.webp 200w,\n/static/98bea3c5e670343ff0ff640f9698db92/4b6b9/2023-10-15-cover.webp 400w,\n/static/98bea3c5e670343ff0ff640f9698db92/b303b/2023-10-15-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ve run numerous workshops in recent years. It’s intriguing to see different ways people solve the same problem. Some start from general…","fields":{"slug":"/how_to_design_software_architecture_pragmatically/","prefix":"2023-10-06","langKey":"en"},"frontmatter":{"title":"How to design software architecture pragmatically","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4gAAAuIAHVHB4bAAACMElEQVQozwElAtr9AKWlqcDDzaGkrnaFna+rssObosWkt7Wuu0pKU2BiacXL1ZuTm5h+jdTM2Pn//7q4wMO9yeLm6NXIwEI9OgCqn6a6srnAuceDhY1dU1iGd3VmZGMvMDeBgY6LkJ+nmJ9lWCCimXzMztb5///FucG0o7LbzdjXvMpTSksArpmmvqy3dWdzuqaxpqiqQ0RDeFlKZ1lQRUtVKykykYWGwrKErJ+GkY2S4ODhvL6+vLu5yK+2nZqbPDo9AJeZopSXm3N2etDD1s3CyVtJQZJtYG1PTFtKWIB3fNLL1YOEj6+nsZqCfaSgoJKXkKanoLSkrpeIjmppbQCSlKKAgoiyuMbl6vNnX1xNRUY2JiJ8a3TIt8vW2OLRvsinlI2Zhn2KfXnAw862ubNDSDtgZ2Ht7e59gH4AjY+dtK+nzsjGkYJ9oqWuorDCLjQ9pbDApLLEnqm7k4J+eV5VmIyTtbrGv8PMmJmSb3hglqCUw8bEdXl5AIuPn6CXjVpDMTs4OpupuqivvEhJTaKrvI2Vo6+4xa6dpr+qvrOywqepsLe6sbu+s9PU0cnL0cDEwaywqwA/Qkc8OzwgHh5OV2Zea3taYm42MzGboazY2NfQ083Bv7nPwszJzte5u7+hpZmbnpSUl46wtae3uLCmraQAQTUbiXRDeXFeaHWJfYqcUFhjJCMhiYuPeXt8eHp0n6OXuL6vysu/q66lvL+whoeEkpSMwsa2q7erdJJ+w6861qCyVt0AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/80dbbcb1cd07a02254a83a1b05b6b006/e24fb/2023-10-06-cover.png","srcSet":"/static/80dbbcb1cd07a02254a83a1b05b6b006/6d6b7/2023-10-06-cover.png 200w,\n/static/80dbbcb1cd07a02254a83a1b05b6b006/d184d/2023-10-06-cover.png 400w,\n/static/80dbbcb1cd07a02254a83a1b05b6b006/e24fb/2023-10-06-cover.png 800w","srcWebp":"/static/80dbbcb1cd07a02254a83a1b05b6b006/b303b/2023-10-06-cover.webp","srcSetWebp":"/static/80dbbcb1cd07a02254a83a1b05b6b006/21c67/2023-10-06-cover.webp 200w,\n/static/80dbbcb1cd07a02254a83a1b05b6b006/4b6b9/2023-10-06-cover.webp 400w,\n/static/80dbbcb1cd07a02254a83a1b05b6b006/b303b/2023-10-06-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Having a single source of truth and data point is a sweet spot for running business logic. We check the data from one place and update it…","fields":{"slug":"/is_strategy_pattern_an_ultimate_solution_for_low_coupling/","prefix":"2023-10-01","langKey":"en"},"frontmatter":{"title":"Is the Strategy Pattern an ultimate solution for low coupling?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4hAAAuIQEHW/z/AAACMElEQVQozwElAtr9ABAWJCEhLE9QaUJCVyolLgUJFCoYKiEjNo5hUl84LXNPSxcWHRIQFkg1PGplfnN6nkI1QEsoMC8fJxgXIABVOkAzJzFSXH5vV2YrMUMjICkrIi1iRkqze2BbNihDMDMREBg5KjNMQFBYTl8pICYeGBxIMDMqEhU4GR0ASzM5IxskcnaVh4ejeWh0oYWCgmJtilVhtG9ermhNom50Vj5OfFtdTElTSDpBUC41KxkeOSgtQAoRNxYcAD4wPQsLEUVATodxhK+Nh5JsY3tNVC82RGVHVKNxe4drcqhxcb58br+XkKaRlVw7QFU1OjQeIiUHDiYYHAAbFh4PERhXPEKMbnKXfXyIZmF0WFh6YFt5X1u+hXvMf3THcmzEenTHiHzv5ei/wcp+eH8bHB8ODhRBMjcAX0ZJNDM/kZCoq4uMlGxiiWdalGdXnXVqf3Z5kYqRvrCzloWLmllUjFRHw5+R9ezt+///ys7WWEZRGxkjAHNFRUAsMnl1i5RycoVWRqBOPT0jHCEoLyswOjc8RXp1fjVASVMpLXhPXDovNIlhWN7Qz/r7/5V4g0wYKQApFxtlOzwzIyZqY3aNe4a9ZW9sBQ4PChAEChIYFBqcfH8SFRokJC9OOD8ZGSFFLzebcG+MXFxeRD6hWFsAAAUMOSouZkpQYDo6b1VWw8TJuFNYcQEIDggMEw8RaEtHBQcJGhwmU0RQgFpcXFFcTD1LQyUtPCgtPy87KQez+8YnLiIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e1764ada3a11425bce8089e83509e760/e24fb/2023-10-01-cover.png","srcSet":"/static/e1764ada3a11425bce8089e83509e760/6d6b7/2023-10-01-cover.png 200w,\n/static/e1764ada3a11425bce8089e83509e760/d184d/2023-10-01-cover.png 400w,\n/static/e1764ada3a11425bce8089e83509e760/e24fb/2023-10-01-cover.png 800w","srcWebp":"/static/e1764ada3a11425bce8089e83509e760/b303b/2023-10-01-cover.webp","srcSetWebp":"/static/e1764ada3a11425bce8089e83509e760/21c67/2023-10-01-cover.webp 200w,\n/static/e1764ada3a11425bce8089e83509e760/4b6b9/2023-10-01-cover.webp 400w,\n/static/e1764ada3a11425bce8089e83509e760/b303b/2023-10-01-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"One team win is a loss for the other. For some people, money loss is a gain for others. In the same way, the challenging parts of Event…","fields":{"slug":"/how_to_update_past_data_in_event_sourcing/","prefix":"2023-09-22","langKey":"en"},"frontmatter":{"title":"Oops I did it again, or how to update past data in Event Sourcing","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4iAAAuIgGq4t2SAAACMElEQVQozwElAtr9AHVjbGxlbzUmKyIHB2U0IMeQbmRhYzJGVjtKVztKVjtJVUBJU0FFTD4+QkY+Pkc6OUY3NUcyLkYtKUErJQCyj5WUe4VkPz9oJxKHSCyfaExkaWg8TVpKUlxLVF5NVF1JSlRQSVBTRkZdR0FlSkFtTD91Tz9vSDdgPC4A27q5tH+DcyEap0Aeq04jnV1AZ0VFQkpUTFVgV1RhbFFXkmZamnNnflpRd1JHil5Oo25WuH1gn2lPekw3AN7Gs93FxqZANbBGI5lBIqBHNYQlKllOWnVkbpx7db2ij968ldmhfNCqkMCWiMSRf9Szp9rDuNKunLKCaADi48bj5sTXk2nPb0GtSiyrJhuySji8gm3PsZrk17Hl6dLg2bbcwJ/gz7Pk5svl2r3j6NPi9fXj4dHgvp4Au31Vzpxe3sV52LSJ2Zhw0YBYyX9YyIlk1ZFx1pF12Jh42Z5z3aNz3Jhr04Vcxn5RzpJk062c2a+VvolsAGYYDoMcD8dqI93AZd3Khte+iMWoeMOQX7xYMb5HHsJYJsRYKbU7H48cDmoHBGMaEqFYN7l4VZ5rUYtYPgA0BQZ6HRPEVibNZx/ThTTSlkrIdTS/Vx6KJxFqGhFfGQ9MCQpMChBHExg+IiFBMS1UOzJwQy5jPy9eNycAEgIHRBQMnlgnfCQZXRIQaBsRhyISQhAJGwECCwAACQAAJAkKMCcrMiktLSYpKiQkLiYmNSgnNiUgNCAcmYTh28O78ukAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/f51d37090439a8cf91fe878273e8a93a/e24fb/2023-09-22-cover.png","srcSet":"/static/f51d37090439a8cf91fe878273e8a93a/6d6b7/2023-09-22-cover.png 200w,\n/static/f51d37090439a8cf91fe878273e8a93a/d184d/2023-09-22-cover.png 400w,\n/static/f51d37090439a8cf91fe878273e8a93a/e24fb/2023-09-22-cover.png 800w","srcWebp":"/static/f51d37090439a8cf91fe878273e8a93a/b303b/2023-09-22-cover.webp","srcSetWebp":"/static/f51d37090439a8cf91fe878273e8a93a/21c67/2023-09-22-cover.webp 200w,\n/static/f51d37090439a8cf91fe878273e8a93a/4b6b9/2023-09-22-cover.webp 400w,\n/static/f51d37090439a8cf91fe878273e8a93a/b303b/2023-09-22-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Boom, I got this week such a nice picture from the Substack. My Architecture Weekly newsletter appears to have become the Substack…","fields":{"slug":"/architecture_weekly_became_substack_bestseller/","prefix":"2023-09-17","langKey":"en"},"frontmatter":{"title":"Architecture Weekly became the Substack Bestseller!","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4iAAAuIgGq4t2SAAABKElEQVQoz3WQ3U7CQBCFff8H0EvfwBcgKheg0lBIaunP7ralttsVQhEoTYWyZ0wF/IUvmcm5+eYkc0EH0EyRI7ERDaEEcgnFMUuarDgUoxebVlPQNxdH91OeBLp1pVuXZN9RNKSxRbFFiUOBSUF/89yuRl28l//k/YWqqI2bun2t7Vt4HfhdzXs6NDG2EJqV36use8ySr7JfcsOmpO2atiWlNsVDkiOK+hQaFBgUDSjs0zw7Le92tcxUIjP1OpFZFgmhMhm7VjroILYoGoAbWE5Py1rrQAjHGTHmc8Zc1+Wce77PhCiKNeoNpIu5Oi0DeDuS5/khLVeL5aIsSw2Q9JCnZ+U9+6y1bvYq16lLqUOpA/aEuTz/sD9sK2KP5HXBewhN+A8/mz8AQij9AoTgrmgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ef1199e2c6ccb423312debbeb8e50255/e24fb/2023-09-17-cover.png","srcSet":"/static/ef1199e2c6ccb423312debbeb8e50255/6d6b7/2023-09-17-cover.png 200w,\n/static/ef1199e2c6ccb423312debbeb8e50255/d184d/2023-09-17-cover.png 400w,\n/static/ef1199e2c6ccb423312debbeb8e50255/e24fb/2023-09-17-cover.png 800w","srcWebp":"/static/ef1199e2c6ccb423312debbeb8e50255/b303b/2023-09-17-cover.webp","srcSetWebp":"/static/ef1199e2c6ccb423312debbeb8e50255/21c67/2023-09-17-cover.webp 200w,\n/static/ef1199e2c6ccb423312debbeb8e50255/4b6b9/2023-09-17-cover.webp 400w,\n/static/ef1199e2c6ccb423312debbeb8e50255/b303b/2023-09-17-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I was recently asked what drove me to mostly use immutable data and methods rather than the Aggregate Pattern in my samples and videos. I…","fields":{"slug":"/my_journey_from_aggregates/","prefix":"2023-09-08","langKey":"en"},"frontmatter":{"title":"My journey from Aggregates to Functional Composition","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAChklEQVQozx3Mz0tTAQDA8Yf5Y9FYpTU1f2Samvl7c3vb2/Pp3NyPt+29/XCWv5aaK7FYmilFDdOKJBSsKCIoISrw4C2kOnSoU4cgkiLq0KFD3fsDvlGnz+0jtHcrWHq6aPe4sQd7UaIqYiiAS1OR9DBiJIJT01ASUVzRf8aQoxqOsIotFMKhhZG0IGLYj6XXg2D1urH09qCEvGgBO5Gglf7xGFJUQz85SHpmlBOZMdwDxwmkhpBDvv+hnEgQSYaIxH3IcR05GsGu+hFsfi+i6ifoczDqaSTjruNcysvE/Clmz6oo7eVMDsssrV7E1dtFqTGXijIzPUmdp4sDvL6RwuMWUZJ9SFoYwR7w0ampWJqruZVW+bQyyWxSIXsxTlvlHm6P+xlyVLN0dZJO8SjX+10sRiz4PO2sz/fz/V6GjGpB0nXcfXEEZyiAEtPo6qjj/aM5Pq6cYXlGZ1BvIdnZzJ9Xa1zwt3L5UoqJqIuvD2d5mQkjNRSRiTnZXk6T7m6gtUvBMzKC4FQD1FotdDTXsLU0xOM5nStnNBxNZUxHRX4+W+BYWwXLSym07ia2sn1ci9lxNu6no87MZrafqwkrcmMNseMJhFaXiwNVVQiCQFyu586UnzfXUsRtNaxM6SyMRSg05rEwq9Ej1vLlyXlS3iYKDDmU7N3F8+wAv7cWeTkR5O3yMEKLJGMuL6fAkMfpYDPbGzf5tp5lWrVSMjpDfnKG3EMtmPftJi83h1TIQVlxIQajCWPRfjrrS/nwIM27gQCf76cRGiUJo8lEviGfpK2SXy9W+XF3nnNKPUKLmx2+UQwHGyg0F2MqLKKq9jANNhsltXXsNO2l1FjAmniEjbJ6NuMKfwGN01dQttVFvwAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/9e34b03aadbd1e43e0a675a76b5a3bec/e24fb/2023-09-08-cover.png","srcSet":"/static/9e34b03aadbd1e43e0a675a76b5a3bec/6d6b7/2023-09-08-cover.png 200w,\n/static/9e34b03aadbd1e43e0a675a76b5a3bec/d184d/2023-09-08-cover.png 400w,\n/static/9e34b03aadbd1e43e0a675a76b5a3bec/e24fb/2023-09-08-cover.png 800w","srcWebp":"/static/9e34b03aadbd1e43e0a675a76b5a3bec/b303b/2023-09-08-cover.webp","srcSetWebp":"/static/9e34b03aadbd1e43e0a675a76b5a3bec/21c67/2023-09-08-cover.webp 200w,\n/static/9e34b03aadbd1e43e0a675a76b5a3bec/4b6b9/2023-09-08-cover.webp 400w,\n/static/9e34b03aadbd1e43e0a675a76b5a3bec/b303b/2023-09-08-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"One of the biggest pains in traditional software design is accidental complexity. We want to understand and reflect on the business process…","fields":{"slug":"/event_transformations_and_loosely_coupling/","prefix":"2023-08-31","langKey":"en"},"frontmatter":{"title":"Event transformations, a tool to keep our processes loosely coupled","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACHklEQVQoz22RXUhTYRjHT9BFF912E11EEESFUiJRVs6Igoosk5mK+dkxTS3LUejmB+icVpol07nBjsJMxcCQNVBGWKCJCX2AGhEGkRXJBs5q6jn7xdk6Vtj/5v+8L8/74/+8j6AoCqo+vpmiNS0N+42beDLSsaZnYhfzmbA7WPT5wz1qb0iWUWQ57KFQKHyvulYLihIp5j59JbnYSmNRJeYDh7kn5jPQ0Mh77xN83+YJLAT4n1S4JhUqaOSl4DJxiRbuWh+RlVdL3dlkpIpyRsxmxp4+48v3H+oL3rkfM/Ogh/mXr1gK/lybUCtWlldwdHvJvWbjeswJnHGHaDVV4UhJ5X5RCcOmSvpTUunasQvHvv10n0nCm5XN26Ghf6CCdgg7YG7owZmgw7I3hhpBoLe8klZjFV3r19EcE4t0MJ7a0jKco6M4M7MYtLYhB4NrR9aWIy/4qUvQUXKpEKdYiNvWwa3bZmoyspG2bMW1YSOu3VHY4o/gKLiMq+Qq/tnZCFBRIsAINITyG/5haoqcvDxO6ZOpsdTT0tJE47bt9G7ajH1nFG5Rj8dSj/RwEFdOLnOTE6uhhL9Xr2reF8BQ18ee2ONER+swVduoqu7kSsJpRH0KDTkirw1ljHdKPJ98wXh7O59npv8k1GCyHBl5ZGyacxlG7jRL6M8Xc/RYEicTCxBLTRiMFVzIvUib1MWA20OHvYne/j4WAourf/gLXAgzd4kSLoUAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/f959d882f2258f0782415fcceda6e6c9/e24fb/2023-08-31-cover.png","srcSet":"/static/f959d882f2258f0782415fcceda6e6c9/6d6b7/2023-08-31-cover.png 200w,\n/static/f959d882f2258f0782415fcceda6e6c9/d184d/2023-08-31-cover.png 400w,\n/static/f959d882f2258f0782415fcceda6e6c9/e24fb/2023-08-31-cover.png 800w","srcWebp":"/static/f959d882f2258f0782415fcceda6e6c9/b303b/2023-08-31-cover.webp","srcSetWebp":"/static/f959d882f2258f0782415fcceda6e6c9/21c67/2023-08-31-cover.webp 200w,\n/static/f959d882f2258f0782415fcceda6e6c9/4b6b9/2023-08-31-cover.webp 400w,\n/static/f959d882f2258f0782415fcceda6e6c9/b303b/2023-08-31-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Coding is an underestimated part of the design. When we think about the design, we immediately fall to whiteboard diagrams, sticky notes, or…","fields":{"slug":"/prototype_underestimated_design_skill/","prefix":"2023-08-25","langKey":"en"},"frontmatter":{"title":"Prototyping, an underestimated design skill","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAABuUlEQVQoz2Noh4G2trbent7ahnq/9Ch3zyB7G78Id8e4KDMrS2NzcwtdXZ3CwqLJkye3tLTAtTA0wkB9fX1HR0dpaamxkbGOrr62toa2loaWlra2lraurq6iokJWVlZfX19dXR1cC0M6EsjMzGxubk5Nz0xOSkhLz8zOzsnJzs7IzMrKSE9KSevs7CooKEhNTYWrZ0iDgdTUVJDZ/f1T22t/7Ju6ZVpjSlpmakpaR23Zr33T9szrnDRxUmFRcXJyMlwLVHN6enpSUlJVdfW0SROvzcz7v7nmwOSyqJjYkLCIibUFP9dUflpVtmpyW1NbT2JCfHp6OormjIyMuNiYtq6eT7dO/d/b/nHv1Mvnzl65eu3qlSsXr1x/cnjF/13N/69sWrxkeWxMTEZGBrrNKSnJXr4hxzcuebV9YnFmUnRcQnx8fBwIJcTFx++fUfXx1NrU1JzIiKisrEyE5tTUtMzMjODgcFU1Q0fXgMKissSkJFAYgEFaampSUlJuXn5kbJqympG9vSuKs9PT0xMTk/T1LfUNbYxN7SMjo8FmI2IhIz09LTXV2tbVyMReXcM4IDAkKzMzNTUVAOXz7HJhVw1xAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/74f82846a3ca42f3d9a57c9e19c3cd9a/e24fb/2023-08-25-cover.png","srcSet":"/static/74f82846a3ca42f3d9a57c9e19c3cd9a/6d6b7/2023-08-25-cover.png 200w,\n/static/74f82846a3ca42f3d9a57c9e19c3cd9a/d184d/2023-08-25-cover.png 400w,\n/static/74f82846a3ca42f3d9a57c9e19c3cd9a/e24fb/2023-08-25-cover.png 800w","srcWebp":"/static/74f82846a3ca42f3d9a57c9e19c3cd9a/b303b/2023-08-25-cover.webp","srcSetWebp":"/static/74f82846a3ca42f3d9a57c9e19c3cd9a/21c67/2023-08-25-cover.webp 200w,\n/static/74f82846a3ca42f3d9a57c9e19c3cd9a/4b6b9/2023-08-25-cover.webp 400w,\n/static/74f82846a3ca42f3d9a57c9e19c3cd9a/b303b/2023-08-25-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Why did I name the testing library Ogooreck? Between my friends, I’m well known for my lame jokes. Ogooreck is one of them. Ogooreck is a…","fields":{"slug":"/behaviour_driven_design_is_not_about_tests/","prefix":"2023-08-17","langKey":"en"},"frontmatter":{"title":"Behaviour-Driven Design is more than tests","category":"Testing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAACqUlEQVQozwXB209SARwH8PNf9NBbtVatF7OyqzlbeAlRy4pSj2GIchQOcAxUhDyCyq063IKDwBiEpVuuzZxabbmZW5etnPZg66m5teY6/Afn9+3zYVyW+6qZbcMA206i00Rh0YGwz0ryzACKj21w99WCaz+Cab4ZQXcP5FAvwl49JlwmxENeKmefQgqMU1I008vZEBiB61L1LXXobK2n0IRAmSfDWCyNk5NrhMd2F4mgFYb2KqQ9LJZnxyAam5CVzHiRtiEREOh5NopMbEqdnbFRIeEH4xxi1faG89BdPU0jFgO9lAX82QrQarEPSW89vqwFMGW9iNnag3jVV42y+xr2ttPY/RhCKTFC+WcRyJJPzQTslI/7wQwPdqk9txrxQN9E7O0WKiWHoOyG6O1zI1JiI5ZLHPpbDiGnPYRlyzlEe09jdzOCrVUPQmMGysSDyMV8qjTJUz45A8Y7bFQHulvBGztIst+hYqAL2ZlumnZrYWUvw2WqhcBWw6s7CrvuJBz6WoiONkxZNbAbrpPLYsBcNqJGRQtlopNgRvkelWPbYDfepE+vPfT9rQ8BoYFEUzXyzkvw8Vewsyljac4Dv6MKG0scxk3HUE6NYefDI1rMu5CN+Wla6KaM5AVje3BDHbWwGB28q357J9LfHzEqhzUUGjxAOfEwzUebaf9nnn59lmi93EoLweMUsZ2g7Y007X2fpPXFMTJ3aUnk75EseYkJcxrE7FrE+GasFazYeS+iMKXFSllA3K1BIdiE/V9FfF0dxdzjTixF+pET9Vh54ULl9zzeFAU4O+vwhNdBnjCCSQzV/YuZairPzDWKzF9QktbzlRRXpcz7dUruYZ2SdZxRFsIdSoKvVtKWs0rB3aRIplNK0dOgrMhGpSi2VuJ2nZKyNSgp583Kf9YWunOjZMRyAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/e24fb/2023-08-17-cover.png","srcSet":"/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/6d6b7/2023-08-17-cover.png 200w,\n/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/d184d/2023-08-17-cover.png 400w,\n/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/e24fb/2023-08-17-cover.png 800w","srcWebp":"/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/b303b/2023-08-17-cover.webp","srcSetWebp":"/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/21c67/2023-08-17-cover.webp 200w,\n/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/4b6b9/2023-08-17-cover.webp 400w,\n/static/0aaeb7f0054d926d5e20bfdd55bfa0b0/b303b/2023-08-17-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I realised that I could do more to help you and other folks. I’ve been sharing online content for free in the last few years on this blog…","fields":{"slug":"/online_course_survey/","prefix":"2023-08-11","langKey":"en"},"frontmatter":{"title":"Could you help me by filling a short survey about an online course?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAC4jAAAuIwF4pT92AAAClklEQVQozwXBWUzScQDA8Z8yU/4KCBKCgaCimZmgAmYe5ZGZSYJQUGIeE3Vmq1Wr5lUtlpmZaYfVulOrtbW1Xjq3WltrHW/VrK16bG2VPfjWw7fPR+jViSgkBblmDXcH/MwMNmNK0qFXqXBmmZns68FqMBAjohjv9dLprUAIwa1DHXx5egV7TiYpqkSWaNQkK5UIjTwOrSShlidgtxi4vHcD7lIrsTIJrUpNi78RmyUVozKB8DYfDnMKGXmpnDjeS4HJgBQVRZIUh1oeS3yMDBGnymRlvp2GAislWgWbc9U8GSzmTucaHuyo5O1QAx+P+vgQ8TI32cbXY43sa1mFVSNhU8XS7DTjSNMjl8ej0y5GyPTVXB4/zPf7w3TtH6AzHGZ+IsCv01vgWjsL50P8u9rG36kQf84Emb8Q4lG4mHVZJqY61/JmMsyuQA1mgxFXdibCZbTQvb6Mka0VtGysZbC7iXdDbmbDpTzeXc1MuJxXA/VMBIp43lfPy/71vN5TSesKC9td2ZzwrGLYXczOlcs5UO1E5KjlpCyKRiME8UIwXJXBtxEfz3ZV8yniYe6ohx9ntvB5ZBNzEQ8LF5q43VpOfkoqjfY0akxadjrTOVlfxMEqB6JQLmObzcxefxljoUomam1M++zcaHfwe6qJeyEnD4Mufk5u5XqgkNEN+Yy7C+gotDLbH2Ssx4/TmEtPXjrT3kLEl7VK5o/U8/7+OXrdJSRFC/KTlXSFnDQsTUYni6LfuZxISTYNBhVlGUs41VzDWPkyznpdBFavQ1pUR4a2lrp0G+JPi44X/jSCeRYWC8EKRRyX+jqY6PJjlEWjk2I4uy/IUG0R23NNlGjjGW2t42LYy02fi1NuB1U5pSQlbCQ5Mch/xlta2opd32UAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/fe59b8b4a0bbc236c6659d97b98bda9e/e24fb/2023-08-11-cover.png","srcSet":"/static/fe59b8b4a0bbc236c6659d97b98bda9e/6d6b7/2023-08-11-cover.png 200w,\n/static/fe59b8b4a0bbc236c6659d97b98bda9e/d184d/2023-08-11-cover.png 400w,\n/static/fe59b8b4a0bbc236c6659d97b98bda9e/e24fb/2023-08-11-cover.png 800w","srcWebp":"/static/fe59b8b4a0bbc236c6659d97b98bda9e/b303b/2023-08-11-cover.webp","srcSetWebp":"/static/fe59b8b4a0bbc236c6659d97b98bda9e/21c67/2023-08-11-cover.webp 200w,\n/static/fe59b8b4a0bbc236c6659d97b98bda9e/4b6b9/2023-08-11-cover.webp 400w,\n/static/fe59b8b4a0bbc236c6659d97b98bda9e/b303b/2023-08-11-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Continuing an effort to explain DevOps scenarios, today I’d like to show you a simple way to set up integration tests that I’m using in my…","fields":{"slug":"/configure_ci_for_integration_tests/","prefix":"2023-08-05","langKey":"en"},"frontmatter":{"title":"A simple way to configure integration tests pipeline","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAC4jAAAuIwF4pT92AAACEUlEQVQozwXBaU/aYAAA4P6tfdkRd8iCig5xihQph0CLBSoCFqxtOdrSF2gp9lDKUUorR0ZMFhIXv2zZlyX7Bfszex4oli48KU0SPR+Q+Hq+mhvqTTYThBNwJHWFYSOmvATM88Jxe8CVubXRnXaa0k1JpYo14gIqV2qqwOEIopL56XQxG5gK6Gxt+7x7gVyu1KsUdZa0h+Z6pDugNgPMEtwM2KKeO+OycShyCq9reDZ00svAA0WTGJolqwTZkHS7esurfGOmiK7R+/4g2QJp8WWnQytMuU+XqRwKcZL5232gsXP5AllN3bki0QRBi8bPv/+G1mpjT16W1khu3TVvdY7SOKrfoHTuliUwkbyCNqb+x1YbWKKXTSymrtvvAZqNolfyvVsHWpvjpVq1zVaEQhKUUBaPNvHwNXZejvjSERgaAoD4/TsfPRqRcsezocCvzGEexYL7vrD/gMSTVDEf+OKPHx1gSOh03xvxefY+ewJbr968fgvZT78CcHLnk1fNp2zT0lvA0oypZshcq0NVnL5o0IV08FDOIWwqJGKn9cQxl43lg4fXsSPI+fZyDMe9H7bVy7T1MHLkrjO2tVZLafJilRyLrHCZRpEzjbo0BeaOKQmZMCiiTGi3FP0KjZc/Dk+Q7Xfvu1h0MnlUeGHYad9zdSYdbeZQjcQVIp6Jwo5pPDvjzeLRksF6ta4mI3Q2+R8iyhJfkNNQ1AAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/c7ed5de8d703a594b15600b372d87ae9/e24fb/2023-08-05-cover.png","srcSet":"/static/c7ed5de8d703a594b15600b372d87ae9/6d6b7/2023-08-05-cover.png 200w,\n/static/c7ed5de8d703a594b15600b372d87ae9/d184d/2023-08-05-cover.png 400w,\n/static/c7ed5de8d703a594b15600b372d87ae9/e24fb/2023-08-05-cover.png 800w","srcWebp":"/static/c7ed5de8d703a594b15600b372d87ae9/b303b/2023-08-05-cover.webp","srcSetWebp":"/static/c7ed5de8d703a594b15600b372d87ae9/21c67/2023-08-05-cover.webp 200w,\n/static/c7ed5de8d703a594b15600b372d87ae9/4b6b9/2023-08-05-cover.webp 400w,\n/static/c7ed5de8d703a594b15600b372d87ae9/b303b/2023-08-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"If you are already a reader of this blog, you probably know already that I’m not so fond of the Will it scale? question. I believe that, too…","fields":{"slug":"/scaling_out_marten/","prefix":"2023-07-30","langKey":"en"},"frontmatter":{"title":"How to scale out Marten","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AHV5Z3V7aXd6ZYx5X4V1WZqdUqKvVLKwXLSeY5uKYI6bRZOrSKOVdpaWfYZ6Z3FrTZSOQZWCVpaKTISERACGf2WOdmCEd2CxlXCBbVCOnVKYoFSfo1i7o26DZFGYolOZq1qljGuQdF+EdGB6fl6hmlmVd16Dak6Pe18AmZF2rIdckXRXj3ZhoYdcjohak5hRnLNb3ceH4bx9lJRYdXRJpppwtI5fknZbgnRfs6Zx27V0zLB9m3hVAKuefvrRjt/Aj6iFWta3iYtoU4qLT6SyXOXHk/vapaSUYHdoQLOkeP/ZltSyhnxjQ7+tfP/gpPHUovLIhgC4o4D31aHtzZjyzpLTu5DmvnursF6ipVaPeV+TgGSgkGGZklS7pnnx0J/oxo/evHyci2exl3bFq4H92qIAiHNaal5Opo5q58mY1ryQ/9+mtrdvr6NdZVJEMDIvioVQp61ViXdXXFJHpo9p/+GqjnVcNDIuV1BDgG9ZAJBwVTEwLFVQRWZaSI54XZ6Ha5CSVbCmXVc9Lk5JN6GoVbG4X5BzVS8uK2deTqOSaY1tTDoyKl1TRTUzLwB/YkE6MCJaTD1QRjt8Y00tLC5wd0alsFtbVTBXVS6ir06ksVd8ZEE5LyBTRDxaYD6Ee0VCOCFXPytLRS4AgH1HUU4rSDsjgnxKdlk9OzUshZlRk5tWams/W2U2gZtFkahTg4BJUE4rSj0ofIVLhoZOWF8zZG03eIdAiEAGMYnIrt4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/92ed2c496ced77d7b4a8aa158fd94ceb/e24fb/2023-07-30-cover.png","srcSet":"/static/92ed2c496ced77d7b4a8aa158fd94ceb/6d6b7/2023-07-30-cover.png 200w,\n/static/92ed2c496ced77d7b4a8aa158fd94ceb/d184d/2023-07-30-cover.png 400w,\n/static/92ed2c496ced77d7b4a8aa158fd94ceb/e24fb/2023-07-30-cover.png 800w","srcWebp":"/static/92ed2c496ced77d7b4a8aa158fd94ceb/b303b/2023-07-30-cover.webp","srcSetWebp":"/static/92ed2c496ced77d7b4a8aa158fd94ceb/21c67/2023-07-30-cover.webp 200w,\n/static/92ed2c496ced77d7b4a8aa158fd94ceb/4b6b9/2023-07-30-cover.webp 400w,\n/static/92ed2c496ced77d7b4a8aa158fd94ceb/b303b/2023-07-30-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"XUnit is not my favourite testing tool; I already mentioned that in How to set up a test matrix in XUnit?. To be fair, none of the .NET test…","fields":{"slug":"/xunit_global_settings/","prefix":"2023-07-23","langKey":"en"},"frontmatter":{"title":"How to set global setting for XUnit tests","category":"Tests","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ALGgcJeHMJ2QPKOZNLauLLSgMYlyNox2RayQSaSOT5l1XoxhSbWimN3a3ePf4e7s7ebi5OPf38a4vJeBhQDKz3SxujaEgzp1cTCkpSLo7S16dTmOiULq5lDPzF/Funq/o2SXZTu2rYTa2qbOy7jT2L27uKyUiXevopIAy8ldvLchv5gqo3Ujo3ol0swznZgxo50y6tw2tZtHxK9kvJRMn2Ed1ahQ49+bzcqU4uegyM+c08Bw2L2OANPEV8u7H+u7JYdfHJ93RJZ0ML2wM9C8NdzCOdCoO8egOKh8LcSdW6qMZYB4YtXQh8OwbtWxVeWxReHCiQDcxV/o1zTYvkqYbSLbmiLPqkS6o03GqUbTsVHrwVyagStMORaIfGd9aESpfjJONRJpUCL2x1L+y0roxn8A58tR9Noo07NetXUzqWUeupND0q5N1p5C2aNJ2a1fcmAxWzoM4JkqrXQtxpAzqXwu2a1L/NBi7LtE58d2AOrJTPnPGMutV6ZvQXREJINSKdCYR9enQt+5QcquQ7iAQb95JN2JJ710Jp92Oua8Wf/TUtu2XbSVZr+tjADgu1nzuxbiwku7i1KfZjyocD3AkEToySzr0Cjhwy68iUKzeiG/eiXijSjLjC3tuDXkrTrNnFrVp2vCoYAA7+fZ7+LH6d/O4djR5NnQ5dnR6eHS9OvK8OXG7ubO597R49nK5tvJ6dzK593N7+TM49fL5dbN5NbI8ObcuChCIva/Gy4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/6bbf576105954136cddb400a0f263bc1/e24fb/2023-07-23-cover.png","srcSet":"/static/6bbf576105954136cddb400a0f263bc1/6d6b7/2023-07-23-cover.png 200w,\n/static/6bbf576105954136cddb400a0f263bc1/d184d/2023-07-23-cover.png 400w,\n/static/6bbf576105954136cddb400a0f263bc1/e24fb/2023-07-23-cover.png 800w","srcWebp":"/static/6bbf576105954136cddb400a0f263bc1/b303b/2023-07-23-cover.webp","srcSetWebp":"/static/6bbf576105954136cddb400a0f263bc1/21c67/2023-07-23-cover.webp 200w,\n/static/6bbf576105954136cddb400a0f263bc1/4b6b9/2023-07-23-cover.webp 400w,\n/static/6bbf576105954136cddb400a0f263bc1/b303b/2023-07-23-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Containerisation is something that pushed our industry much further. Generating immutable artefacts is a foundational aspect of the DevOps…","fields":{"slug":"/marten_and_docker/","prefix":"2023-07-13","langKey":"en"},"frontmatter":{"title":"How to create a Docker image for the Marten application","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABfElEQVQoz2P4DwZ//v77////9J1X85Zfnbrt8vRNp1fuPP3q4e3XT+6/f/Pyx4+v375//fjuzd8/f/4jAQYI9fcfSPOZm0+la89ULjyslL2aLW6VY9Muq8nXKzoXHZ3evrmrYXq459X9O//////v718UzRDw+/Ob0JnndSc/spp4zWPiGdmpHyXm/Q/J6muxVpmb6N8V5njh0G7smv/9///r3dO4OWcFp/60n3nfumKtQu8juemfFfseLeyq3dIauX9u04dXz37//A5Wi6oZ5O1fn9fsOS3efk98yhfDhV/Ltz/3nHHdtmHz1i3bt3am7Z7f+ejB/b+/fqD7GWo5yMTfM/fcdJp1t2LP+5nnfhQsOpI5adGEhetvXjy5esmC3csXwd2Mrhmq+8f3hu7p4Xmt245cWrXrWEzjjObF237//b96w7aThw6BVf3DZfP/T58/L1m9denKjZ8+vAdxP30+ceH62QtX3n/4CI7Qfzhs/o/mjn9///7DowAANJLDIOybiNEAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/e24fb/2023-07-13-cover.png","srcSet":"/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/6d6b7/2023-07-13-cover.png 200w,\n/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/d184d/2023-07-13-cover.png 400w,\n/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/e24fb/2023-07-13-cover.png 800w","srcWebp":"/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/b303b/2023-07-13-cover.webp","srcSetWebp":"/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/21c67/2023-07-13-cover.webp 200w,\n/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/4b6b9/2023-07-13-cover.webp 400w,\n/static/4ddeb79f4c6f57c79c116e7a3f3db9a0/b303b/2023-07-13-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m a preacher for the CQRS, Vertical Slices, and Feature Folders. I won’t hide that, and I won’t even try. I believe that structuring code…","fields":{"slug":"/vertical_slices_in_practice/","prefix":"2023-07-09","langKey":"en"},"frontmatter":{"title":"Vertical Slices in practice","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABCElEQVQoz2M4vm/CjLa8mQVBJxqTK2rbj22p3zm3fElP6PrKoimdZVNLk07XxR+dU757UtrMcru3ByftKsra2VtdWRJ9IMaJAbvm3tAN5YW9PZMmVRcerM48Oqts10QiNc+rWNwVuLG96+HTr2fnN50vDj4yu3I38ZqXdAWu6Z9y8MTVY0u6LpaFHJlVSayzd8wpWzkpalZ777zZC8/Pr79YHkaa5hUTwlfPXLRs7qyzk7IuV0UdnlVBfIBVLOsJXNw5YfnsyecmZZ6riDoyq4JoP88tX94bPKuxe+mk5n09+TPzMo7PKtk1KZ04Z88uWzUlenLbpFkthQtbCidXVR2fXbJrIhbNAC0DLUjnLe3EAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/12b74e544624d5c5d201394a3bc22145/e24fb/2023-07-09-cover.png","srcSet":"/static/12b74e544624d5c5d201394a3bc22145/6d6b7/2023-07-09-cover.png 200w,\n/static/12b74e544624d5c5d201394a3bc22145/d184d/2023-07-09-cover.png 400w,\n/static/12b74e544624d5c5d201394a3bc22145/e24fb/2023-07-09-cover.png 800w","srcWebp":"/static/12b74e544624d5c5d201394a3bc22145/b303b/2023-07-09-cover.webp","srcSetWebp":"/static/12b74e544624d5c5d201394a3bc22145/21c67/2023-07-09-cover.webp 200w,\n/static/12b74e544624d5c5d201394a3bc22145/4b6b9/2023-07-09-cover.webp 400w,\n/static/12b74e544624d5c5d201394a3bc22145/b303b/2023-07-09-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I noticed that we, developers, struggle to follow the money. And that’s impacting our design in the wrong way. Of course, we’re pretty good…","fields":{"slug":"/follow_the_money/","prefix":"2023-07-02","langKey":"en"},"frontmatter":{"title":"Follow the money to get a better design","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AIZ+o4mCpY2EopqUs6ubrFk/LygOA0YeC14uGXI/KoBPPVo2JyodGYB1fWlcZG9ibYt+g5+VpIJ7pX50jgCdlq+gnsGXkrmVi56xoqZsVEdpUUYwGQ9KIBFhNSRjPS+DVkRcOzKAaGRVMixUMS2Je4CglqSBc3+tp7EAppibfG9zhnyIm5Gei3ZvVD0yeWBUFwIAORQMbDorXDUqnnRjhUw6hVxUaVVOTi4lbGBidmppgnZ5wLu8AHRnaVFDR2VYWHdlXWY4JjIQCCkOCDcRAk4kG51hU5lkVaV2aI1WRodmZmdPTlY6NHlub6efn4Z7fJCFgAAdEgsYDgoVDQxjRDdhNiUmFRAoBwNFEwRHFQmNU0iWYFKVW0afgoK9yOF4ZmwrAACCcXOhl5mhmKWzqawAGw8FHhQLcWxsmXtwTC8iIxENVSMZQQwAOxAFWTMqeUg5ilNAu7rEytnwnZmpgnqCnZqlkoSCkoGErp+bACgcFZWOjJWBe41rXHdOPVkrHlwwJWMwHVAYEDADAVcmGpRlVszT5La1xamns9v3/8rf+311eFI2HYVwYACflZmun6JsTD6Ze2yRbV2aZFJwRDhPJRxWHBFQIBhwOCiIYlnCxtmppLO3t8m8xd23wNqSmrNVRDpcSjsAind3a1JLelREmn1uflpKp3VljmdcRScjNQUAVyIWYzAfhG9vwsbZp5+utLHFpaGzrrDHzeL/kpGaYk5Gr0PcA9TiE+cAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/646623cfa35f1157b69e17c27e67a91f/e24fb/2023-07-02-cover.png","srcSet":"/static/646623cfa35f1157b69e17c27e67a91f/6d6b7/2023-07-02-cover.png 200w,\n/static/646623cfa35f1157b69e17c27e67a91f/d184d/2023-07-02-cover.png 400w,\n/static/646623cfa35f1157b69e17c27e67a91f/e24fb/2023-07-02-cover.png 800w","srcWebp":"/static/646623cfa35f1157b69e17c27e67a91f/b303b/2023-07-02-cover.webp","srcSetWebp":"/static/646623cfa35f1157b69e17c27e67a91f/21c67/2023-07-02-cover.webp 200w,\n/static/646623cfa35f1157b69e17c27e67a91f/4b6b9/2023-07-02-cover.webp 400w,\n/static/646623cfa35f1157b69e17c27e67a91f/b303b/2023-07-02-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"A diverse system with multiple pathways and redundancies is more stable and less vulnerable to external shock than a uniform system with…","fields":{"slug":"/removability_over_maintainability/","prefix":"2023-06-23","langKey":"en"},"frontmatter":{"title":"Removability over Maintainability","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACFUlEQVQoz0XM3U9ScRwG8PMndVNrsGAqxgERQTpweEnPQJhgBPJylMXLXEcktYumzpe86Yplba3NlRdu6lZOxFjNNgfohCYoweYLoPHy+30bdtGzz93z7CEA3wDcwn9a4J86wjUMDWgFAa791xpfA1QArggMFxguAcoYKhgqgMsA1evq6cqbmXEutPx67uRXElov1VbbUga4ADgHKBGoWcCogNFvhIoIFTEqAlytrSzMsYxBSSpknX6v9ST7AzWLGJUwKtZrp7h5hhtnqJ4joJGH+q1GHjfyAKXU/tbMOPt+NjjSr7CbdTbm0erbBcAFXM/hWu7yPF2rZmuVzE3lmEgktn7uf0klY+lk7DAV34uvL89PvYsuLYa9QQv1MvRkftL1Ofrq+/bq0eFeOrlzcLCTzSQyx98O07uE2WbpMxqYAcMoa/O6LCxr29j8uLnxIWBnzEpRyMVM+AcXOcfsBDsWGXvGhZ5PRcLTEW76RTDMEZS8rYsU6hUddK/YREtYp2n766d4bC1gZxh5m8dK+6xqv5UOeIeG3G7b8LDN6bA6nZanDrvbRdBqJa3TGB7rab1eqdZqdLpodGk3vt4j7eTfuyOVCMSkQC1rV6mUlIHR9htNg1ZtH+P2ODwOE0H2UBKlmlRQD7tVIqlC0EHyhSKK1vJ4fN79u2KRUNT+gOqVRTjfqM9tNA/IVRpxV7ffa5kcMf4FxRFf5YuwLpwAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/7b9aa72ad5c914570c81e3d5bae8f7c0/e24fb/2023-06-23-cover.png","srcSet":"/static/7b9aa72ad5c914570c81e3d5bae8f7c0/6d6b7/2023-06-23-cover.png 200w,\n/static/7b9aa72ad5c914570c81e3d5bae8f7c0/d184d/2023-06-23-cover.png 400w,\n/static/7b9aa72ad5c914570c81e3d5bae8f7c0/e24fb/2023-06-23-cover.png 800w","srcWebp":"/static/7b9aa72ad5c914570c81e3d5bae8f7c0/b303b/2023-06-23-cover.webp","srcSetWebp":"/static/7b9aa72ad5c914570c81e3d5bae8f7c0/21c67/2023-06-23-cover.webp 200w,\n/static/7b9aa72ad5c914570c81e3d5bae8f7c0/4b6b9/2023-06-23-cover.webp 400w,\n/static/7b9aa72ad5c914570c81e3d5bae8f7c0/b303b/2023-06-23-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"InfoQ claims that Event Sourcing is in the late majority adoption phase. That means that if you haven’t started to use it, you better start…","fields":{"slug":"/event_sourcing_live_2023/","prefix":"2023-06-15","langKey":"en"},"frontmatter":{"title":"Recap of Event Sourcing Live 2023","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/aAAwDAQACEAMQAAAByax24RAf/8QAGRAAAwEBAQAAAAAAAAAAAAAAAQIDADJB/9oACAEBAAEFApBTW6SE/E1ed//EABYRAQEBAAAAAAAAAAAAAAAAAAAREv/aAAgBAwEBPwHKP//EABcRAAMBAAAAAAAAAAAAAAAAAAABESH/2gAIAQIBAT8BWop//8QAGxAAAQQDAAAAAAAAAAAAAAAAAQADEBESMTL/2gAIAQEABj8CGXKtvdyY/8QAGxAAAgMAAwAAAAAAAAAAAAAAAAERITFxgaH/2gAIAQEAAT8hQSu1wXY7BJQ4Ns9QsP/aAAwDAQACAAMAAAAQhw//xAAXEQEAAwAAAAAAAAAAAAAAAAABEBEx/9oACAEDAQE/EGrsP//EABURAQEAAAAAAAAAAAAAAAAAABAx/9oACAECAQE/ELh//8QAHBABAAICAwEAAAAAAAAAAAAAAREhADEQUYGx/9oACAEBAAE/EHSpqlg8vD4UhnQvsyfwKybd59XIX//Z","aspectRatio":2.2222222222222223,"src":"/static/78403dc7d73ea0c59dbef7f6dab639ef/f8504/2023-06-15-08.jpg","srcSet":"/static/78403dc7d73ea0c59dbef7f6dab639ef/f137a/2023-06-15-08.jpg 200w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/8494e/2023-06-15-08.jpg 400w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/f8504/2023-06-15-08.jpg 800w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/1ce69/2023-06-15-08.jpg 1200w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/09e63/2023-06-15-08.jpg 1476w","srcWebp":"/static/78403dc7d73ea0c59dbef7f6dab639ef/b303b/2023-06-15-08.webp","srcSetWebp":"/static/78403dc7d73ea0c59dbef7f6dab639ef/21c67/2023-06-15-08.webp 200w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/4b6b9/2023-06-15-08.webp 400w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/b303b/2023-06-15-08.webp 800w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/bd3e9/2023-06-15-08.webp 1200w,\n/static/78403dc7d73ea0c59dbef7f6dab639ef/3cee9/2023-06-15-08.webp 1476w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I got a surprising question during my workshop this week: It seems that communication with the business is critical to make Event Sourcing…","fields":{"slug":"/a_few_words_on_communication/","prefix":"2023-06-11","langKey":"en"},"frontmatter":{"title":"A few words on communication","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACAklEQVQoz2P4OOPvwsRtpjpBkSH5hbnN6WlVoQ65N9tevJry/dnEz88nfnk28fO76b/a4md6eMQXZrdkJldHBuUH+advKj3I8HrS9yzXpqjw/NSYita6KeUlHRG2RQ+63r2c/A2i+emET1/m/p+dsi4morA4uy02tDjcP9fGOHxh8maGV5O+xViXutrH+jln+DimWeqEqwt4rkzb82HGn6cTPz2b9OX5pC/Pp3yOtip1sIi01Aw3Vw1VFnbTFQy43PyQoTt4vgSjnQybgyK3i5qQhzy3iwyXw6bCwx9mgjQ/n/Ll2aTPb6b+yHFpUZFwlWJykGC052cwnxi2/Mvs/wxiTDaxRpXRBuX8DOaSjPbSLI76goFHqq68m/rr6QSQs5/0f/wy6//0yDUSDHYyLE7SzI5SzPa7ik99mP6HQYTB2lY61kwsQpDBUpXHc1PO0fs9bx71fXgx8ctzJPS478Ol5vtOcgmiDDbCDFaR+qVvp/1gkGZ2FGW0EWeyFWGwnhKx6vvc/y8mfn0x6SuyzmcTP7+Y+PXt1B/+GrmCDBYyLE5iDDaLk7cxSDE5yDA7iTHYGgoH3+1+9Wryt2dg1yKjpxM+vZ/+e2/JWWlmB0lGBxlmR1EGGx1BP5BmCJJgtF2ZtvvjjL9P+z+haYZ4u9V3Di+DqSyLkxSTgzSTozijLQDLNwlVWSqOXAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/c7ccf546ef760d06d2c0e4fc629d0551/e24fb/2023-06-11-cover.png","srcSet":"/static/c7ccf546ef760d06d2c0e4fc629d0551/6d6b7/2023-06-11-cover.png 200w,\n/static/c7ccf546ef760d06d2c0e4fc629d0551/d184d/2023-06-11-cover.png 400w,\n/static/c7ccf546ef760d06d2c0e4fc629d0551/e24fb/2023-06-11-cover.png 800w","srcWebp":"/static/c7ccf546ef760d06d2c0e4fc629d0551/b303b/2023-06-11-cover.webp","srcSetWebp":"/static/c7ccf546ef760d06d2c0e4fc629d0551/21c67/2023-06-11-cover.webp 200w,\n/static/c7ccf546ef760d06d2c0e4fc629d0551/4b6b9/2023-06-11-cover.webp 400w,\n/static/c7ccf546ef760d06d2c0e4fc629d0551/b303b/2023-06-11-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Our industry is harmed by the disease of “There has to be something more!” also called “The Holy Grail syndrome”. Instead of trying to…","fields":{"slug":"/holy_graal_syndrome/","prefix":"2023-06-01","langKey":"en"},"frontmatter":{"title":"The Holy Grail syndrome","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AAEFFgQUMAggPQghSA0sWxU8ZSRPgjxnqFuGxXKd2nal5Hyv64K39HWv8oW6+I/C/aTJ/dDp/8rl/8jl/wADEzEGHDoJIj0LKEgWN10fPWVSWG5SaplVg8RklNB5rOmHvft+ptmMseKj1f+z3v7B5v/P8//W9//W9/8ABx06Bxw/Bx0+DS1KHjlYICMrMzc1TWmXY5TWfq3ok7/5irr4coq2lbPYwev/xOv90Pb/zO//0/L/1fb/AAMUJAYZMQkhORsqPTUZKzAcGUZJVGOGw36n65zA/Lvb/7PQ9Ymbu77K5MHW7uD2/uf9/+/+//X///f//wA/S1E8TlNIWWpoZHQxGxJDMiFWQDSXmrzA0//H3f7a7f7s/P+rvt6FmcLu8fb////+/v////////////8Ap5qnp5yrsqi3c2VoGRwRPTYlYUgmdm922d3v6ff/8f3++v//1N7tvMvj/////v7/////////////////AJyeq6Gis6mtuV5gXBggGyYxMlljX7zM5sHb98zk/N/z/+34/t7n/Ovy/P////n+//n9//b7//T7//L4/wB4lLSBnbmLrMSSrsKKn7BLUViDkJ7FzdyswNGuw9W2y+Hr8Pnz+//x9/7u9P3o8P/k6v7U3fvP2/zQ2/wAepOXf5aRgpeVlKKfaXF0Ii8oQlBFs62vsbS+uLe8w7/IsrS4oLG8wM7n1N30ztn1w9T1v9L6wNb9wtT7Kr1fRLgKYE4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/3ec9feb6a907cbbf183677ad17e6cbd3/e24fb/2023-06-01-cover.png","srcSet":"/static/3ec9feb6a907cbbf183677ad17e6cbd3/6d6b7/2023-06-01-cover.png 200w,\n/static/3ec9feb6a907cbbf183677ad17e6cbd3/d184d/2023-06-01-cover.png 400w,\n/static/3ec9feb6a907cbbf183677ad17e6cbd3/e24fb/2023-06-01-cover.png 800w","srcWebp":"/static/3ec9feb6a907cbbf183677ad17e6cbd3/b303b/2023-06-01-cover.webp","srcSetWebp":"/static/3ec9feb6a907cbbf183677ad17e6cbd3/21c67/2023-06-01-cover.webp 200w,\n/static/3ec9feb6a907cbbf183677ad17e6cbd3/4b6b9/2023-06-01-cover.webp 400w,\n/static/3ec9feb6a907cbbf183677ad17e6cbd3/b303b/2023-06-01-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Programming origins are in mathematics. Scientists like John Von Neumann and Alan Turing built the foundations for today’s computers. That…","fields":{"slug":"/i_will_just_add_one_more_field/","prefix":"2023-05-28","langKey":"en"},"frontmatter":{"title":"Anti-patterns in event modelling - I'll just add one more field","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AFqCJV2DHF2GIV2BGWOLJ1+MLV+NLGSRMD13PxlTNhZNLCZWJ1OCJ1aCKFKAJkp4JD5nIEpzI1J7JVF4JABOfSVKmoNLsr1mu6lWlFdbjCRfkC5ejicydzMZYjQWVionXiNeiypchylUgiZOfSZIcSNKdCNHdSFJdCEAToAyNZKtRpzAPoybQXpLZJEzgKRhl7l8OH47GWM0E1goQnNIbIlKUnwnU30jTXYhUHgpRHIeRW4iQWogAFyBNlJ3KmJ5M5iwfLrPpMrZvePo5MTRx02OYA9eLRVRJixVOjlNPzxaPo6qinKRVmSJQXucXlN4LEpyIwBZgTVsh1d0kGSVuJu6xb9sdXG8x8Ph8O17jncqXjdll4B1lYxFWFVNXFeVqpnX5dNkelpVaU5VeTVLciIAVnovZoNNTm8zW3RHaIBnbYB3tMezps+oi5yDcY12UXNkPlJCNEQ+sce9h6p84ezeqbOyJUcXTnMoS3EiAFF1JU9xJUlsKjViGH6retf3967Jsb3Ks8Xb12OAdycxLjA5NkNUT3OMgneecmKEUpWtfpOtcVB8N1N/OQBFaiFIaCpNZC1qi1F2nWbH1cS0ybKCoHJBWEI0R0AsPjAoOyYkNiNiemBReUAwWR4/YiFif0FHbzhYfkUARWgiP2YhUW0qk5ZqbIdba4NbQWwlPWsfPmQjO10mOmUnOWYpNWQhUHk6TnQ2UWs5MkImQGErj6iFfZVvJBnWVOZ8e+sAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/0b8fa1798ac1285b698c40a03b6cf6db/e24fb/2023-05-28-cover.png","srcSet":"/static/0b8fa1798ac1285b698c40a03b6cf6db/6d6b7/2023-05-28-cover.png 200w,\n/static/0b8fa1798ac1285b698c40a03b6cf6db/d184d/2023-05-28-cover.png 400w,\n/static/0b8fa1798ac1285b698c40a03b6cf6db/e24fb/2023-05-28-cover.png 800w","srcWebp":"/static/0b8fa1798ac1285b698c40a03b6cf6db/b303b/2023-05-28-cover.webp","srcSetWebp":"/static/0b8fa1798ac1285b698c40a03b6cf6db/21c67/2023-05-28-cover.webp 200w,\n/static/0b8fa1798ac1285b698c40a03b6cf6db/4b6b9/2023-05-28-cover.webp 400w,\n/static/0b8fa1798ac1285b698c40a03b6cf6db/b303b/2023-05-28-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Usually, one of the main drivers for Event Sourcing is the audit log capability. Indeed event stores are append-only logs, theoretically, we…","fields":{"slug":"/audit_log_event_sourcing/","prefix":"2023-05-20","langKey":"en"},"frontmatter":{"title":"Is the audit log a proper architecture driver for Event Sourcing?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACK0lEQVQozxXL+08ScQAA8Ps3+rHWipmZYDSZTDkSjgOEg+N5vOR73sk9SDsIuIGiwJoPVFqRjAjs0lLH42ASVmttrcfW6sfWv9P6/P6B/MAfiUViCVpYf7C2Le5US8+O9lpntdO+1P/YHn6W+5dvOnKz3WsMhtJ5p15r7JYrGxvF5KMMAxEkAbgol2JSBWGzvFaubdVPqlK71f3QkbuNXq8xGEn9d1K33xLzqbWS2JQqlWqp+DidyfIQsRQgeRAXuVQhsVstSm/3pZP9r987n35cvHi62Tgs9S6ag5EkD4+2DorbB4WWVCk/2cjmhWSahXQogjhsGOFyLxIZkZaPN993dn59eS6PXnUvh63jw/rrw+1dMV9KFvfyuVJaEOMkE/UGPW6vA5qGdbDZhGA2u98dDDt52plNBOWT3Lefw99//6znhRgLWCYEKIJNMvQqRXIgBIJG1DA9q4U0elhvRlGnHSM8XsLhdBrtC3qBJ85Oa6fnL1k2HAUefoUk2Ug8xcYe0iQHPGGfZl53Y1L1P8Nmk8lhs3lxM243LKCwyaBHTTjhxf1ui9OGYNZ5q5kAASaxvLxK0RxpwCy352aUWi2kgWEdihgxa5AKRZlIiApQHAhTi8qZ2Vsq9ZjyrkKlNuOYK+QjOUDxIEQGrTZErRq/p74DTet0cwhisKI05eFZfzSCR4HfFfBdHVdOTE0pJiavXB+DLeh9K4oTOLtCZws5ISPMo4ZrNxX/AA4e54Vls4HwAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/5445ce2391a2dcfcd6a70dd7259f1d40/e24fb/2023-05-20-cover.png","srcSet":"/static/5445ce2391a2dcfcd6a70dd7259f1d40/6d6b7/2023-05-20-cover.png 200w,\n/static/5445ce2391a2dcfcd6a70dd7259f1d40/d184d/2023-05-20-cover.png 400w,\n/static/5445ce2391a2dcfcd6a70dd7259f1d40/e24fb/2023-05-20-cover.png 800w","srcWebp":"/static/5445ce2391a2dcfcd6a70dd7259f1d40/b303b/2023-05-20-cover.webp","srcSetWebp":"/static/5445ce2391a2dcfcd6a70dd7259f1d40/21c67/2023-05-20-cover.webp 200w,\n/static/5445ce2391a2dcfcd6a70dd7259f1d40/4b6b9/2023-05-20-cover.webp 400w,\n/static/5445ce2391a2dcfcd6a70dd7259f1d40/b303b/2023-05-20-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week we released the next major Marten release, and I’d like to share some of my lessons learned and insights with you. And by “you”, I…","fields":{"slug":"/a_few_notes_on_running_open_source_project/","prefix":"2023-05-13","langKey":"en"},"frontmatter":{"title":"A few notes on running open source project after Marten v6 release","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AOHewdPMr7qvlsK2odvTuNzSt5uNhpF+c62CbGJHU2VNV4RnY1JBTls+S5N0bbaaiI9qYZBhVoFZU1s6RQDd2r3Vza/IvqXk4cXAq5Gkj325r6nNwrrGtKfLwbmah4F+YV6YfnRWRVKfhXu+oYqSbGCcb12KX1VZNUMA1dCz0Metyb6lzsKmtJ6HRz9LvreywbWpqp2RtKeapJeQVT1LkHNts5qIpot8oYJ0k25irX9kjF5UZDpFAMzBqLSmkbGeiKqResKskjk2RYeEi7eomXpnWa2ekKKThkAtQGNIUbOZh6OKfnxbWJtzY7iJZ41gVHtNTQDLwKe9q5CgjHqciHahjHs4LkFwX2PEtKWnmYqbinqNeWZgUU5ZQU2fhHdxWF5VOUeleWSvfmKSYVSVaVwAsJ2FqJJ5uaCFmYR1TT1HcmBh08Omzr6topKEi3dninZmfWlXcFlPhmNfSDFENCg9VT5IZUZKeVZTlm5kAIVuXZJ4ZHdjWm1bYa+jlLiqk7+wldrPt6qbi4x5aXllVYl2ZpyMeJ+DcJp3bIhsZjw1RkhIUHReWZFpYACQgnOik4Gck4a8rprdzrDVx63BpIvUw6molYNzYFCLdGLCrJXQtp7EpI7Do4u4o5CmkYKwnIe/qJK/n4cA2tCy3ta36N28y7WZzb2jwKOMr4h0s4ZyoYBsim5dvJiFyKmRuZeCxaWOvpqDxKGIwp+GvZiAuZR+qIJwV1IlCMLig54AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/7b6c4e5853416a519857a8b718965e1a/e24fb/2023-05-13-cover.png","srcSet":"/static/7b6c4e5853416a519857a8b718965e1a/6d6b7/2023-05-13-cover.png 200w,\n/static/7b6c4e5853416a519857a8b718965e1a/d184d/2023-05-13-cover.png 400w,\n/static/7b6c4e5853416a519857a8b718965e1a/e24fb/2023-05-13-cover.png 800w","srcWebp":"/static/7b6c4e5853416a519857a8b718965e1a/b303b/2023-05-13-cover.webp","srcSetWebp":"/static/7b6c4e5853416a519857a8b718965e1a/21c67/2023-05-13-cover.webp 200w,\n/static/7b6c4e5853416a519857a8b718965e1a/4b6b9/2023-05-13-cover.webp 400w,\n/static/7b6c4e5853416a519857a8b718965e1a/b303b/2023-05-13-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I was recently asked how to migrate a project using relational data to a document-based approach (e.g. from .NET ORM Entity Framework into…","fields":{"slug":"/strategy_on_migrating_relational_data_to_document_based/","prefix":"2023-05-07","langKey":"en"},"frontmatter":{"title":"General strategy for migrating relational data to document-based","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB9UlEQVQoz13LyW9McRwA8Mc/4eTIf8ANNxOuLiQihIQQiUqrh6oD1QOxpymVjLQNUq2xZmokHdOOjk5mzILZOrvZ3jJv//6W93vvzROJAz73Dwf/MwFUABHhBiEZQj8Sa27AJtPe1M5k/EBw2nDHGbtD6DtMcty/zQBQEOphXCYkTuhbi83YbMKyhz3v1BtpfNvKwvHysm4FKEkC6nB/TR1ARqiDSZ7Qz5QGGJu27QnXvWSxc543FKkc2fdwd1XxU2sDUB1A/pMNUzdM2YQ2QnlMogS/tNhj27nhOpdV83x88xilw3lx9HV2zHPXAJVMJAHovzMCc+Doji06btUeJNxBiHkBak5R87rnTX6pnwmmj3reTYwf2VYI4x8APQANwOQAIQBjZu3nSX8u/D7binwqJV5JTy6KZ31EvgXBQ9krO/yB/cyZpWwZ02+YdAHrCCOEMQdav8fze+aqWw+nR0aS7bHI0va9KW4Lf/ogcmbl576Wjyvd3SVL8wYfUjsJpV1QWmWlXVO7TU5uV6RGKVxuPA0X4+sbEFsRHlxr3b4ghu/1m/Pq6qiwcKIfvSrXlqTiB6m4LhTiQiEpbmakWo5T+abcqadK9XCqUkgVhfT3ZiLWX11Uoi90IWZWnmlf73dri6qQ0YSyKjQ1saNLvC6Lhtr/BQv+vvOBIreoAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/80dce87bccae167764b303f4277f616d/e24fb/2023-05-07-cover.png","srcSet":"/static/80dce87bccae167764b303f4277f616d/6d6b7/2023-05-07-cover.png 200w,\n/static/80dce87bccae167764b303f4277f616d/d184d/2023-05-07-cover.png 400w,\n/static/80dce87bccae167764b303f4277f616d/e24fb/2023-05-07-cover.png 800w","srcWebp":"/static/80dce87bccae167764b303f4277f616d/b303b/2023-05-07-cover.webp","srcSetWebp":"/static/80dce87bccae167764b303f4277f616d/21c67/2023-05-07-cover.webp 200w,\n/static/80dce87bccae167764b303f4277f616d/4b6b9/2023-05-07-cover.webp 400w,\n/static/80dce87bccae167764b303f4277f616d/b303b/2023-05-07-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Projections in an event-driven world are a way to interpret registered events. We can take a sequence of events and build from them read…","fields":{"slug":"/testing_event_driven_projections/","prefix":"2023-04-29","langKey":"en"},"frontmatter":{"title":"How to test event-driven projections","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ALnV5e/q6dnZ3KLG25W61qPL5YrC4GiMowAgP4Cjt/bx8NPe5qPN497x/NTr+Nfu+uH0/tjt+afd9pvd+QCkxdj////w8fW50ODg5+z6+vx/ttcAOmQABR8rUnDZ5Oyv0eN4wOWLzfCMze6Oy+yo2POW1PKa2/me3voAwtzqx+HvzOXz4/b/4Ovxw8vT7fn/JXqoSnuWW4iigLfTjc7rueX5xuv7ouL8mtv4mNj2nt75ndv1m9n1ACJtmKbG2a7P5fH//66/y8PO2P///2GkyZLF3uL3/9jy/tvx/N7w+u74/r7l+JnY9J3c95zi/5nZ9JXU8ABBjLX/////7eD56+Oap7Xx9ff///+FutcAN1+Wqrmp1u2T0vOl2fSq2vOf3fmQx+CZ1/Krxcymm5G03OwAN3+noLPDv9Tfuri4rZ+f//////z6gLPQAUhzvr7DnrvMerrYhMDfltf1n9/7ntz2xtbW27ylu31ax6eOADh2nwhJdqzI2L7c64Khtu3v8v///4m+2gAtWAMbOAQjQAAbO3+YqrHf9IvZ/L7X28nGx93OwPDCo5+tuABFf6YZXIft6+vW4egqXX01WHRKaoMXSW0cWX9ShaMQP2IKK0l9mKvH5PPB6PrJ4u2isdy9udDFv9GZsugAWIyuB0p3wdjkr8rZAC5UASlNACRIBTtjw9nk////jb7Ygb/glc7sodfyptnzo9n1lczvn7broLTrnrvruFF/TKf4oW0AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e28ca783c9c1e46f71330bbb02c632ef/e24fb/2023-04-29-cover.png","srcSet":"/static/e28ca783c9c1e46f71330bbb02c632ef/6d6b7/2023-04-29-cover.png 200w,\n/static/e28ca783c9c1e46f71330bbb02c632ef/d184d/2023-04-29-cover.png 400w,\n/static/e28ca783c9c1e46f71330bbb02c632ef/e24fb/2023-04-29-cover.png 800w","srcWebp":"/static/e28ca783c9c1e46f71330bbb02c632ef/b303b/2023-04-29-cover.webp","srcSetWebp":"/static/e28ca783c9c1e46f71330bbb02c632ef/21c67/2023-04-29-cover.webp 200w,\n/static/e28ca783c9c1e46f71330bbb02c632ef/4b6b9/2023-04-29-cover.webp 400w,\n/static/e28ca783c9c1e46f71330bbb02c632ef/b303b/2023-04-29-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Integrations have different names, shades and colours, but only one adjective: challenging. Trying to glue systems together requires…","fields":{"slug":"/publishing_read_model_changes_from_marten/","prefix":"2023-04-23","langKey":"en"},"frontmatter":{"title":"Publishing read model changes from Marten","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7AAAAOwAFq1okJAAABKElEQVQoz51Ry07CQBSdrdDOfbQzfVCg5VFgJC1URBMwiEpijCaSKNGdLv3/HzAUNhBjjGdxc1/nJPdcQb+C9yDmH6bieJUIcZsjIgBaNlQsWbGkZcty40BlT2YiCVixpATUSgFi6HlR4J8NkkXRXRTdvB8joi3BsoEInVJjS0badtNmOB0k76vseTmq12qX+eDtpvi8n6ym5mWZvd5NiNi0G+N+TMwnVRsRBSJq1x22Gx+r8XpmHmbDtBWFgd+J63kvdh2nKoGYlVImbT/Ni6/H8811Nht1A1+JKAzm4+FVYS6yntaK2GFmKcHTGsrLdy4wc+BprRQzT02yuc1P00RMMtPvxH6g+dDQHe2og2WUAFHgtZo14bosARCQ/gze/wLErvgHmOgbhUgzBPwrbA4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/22ae2719cb7e11f5cc93cdac3931369c/e24fb/2023-04-23-cover.png","srcSet":"/static/22ae2719cb7e11f5cc93cdac3931369c/6d6b7/2023-04-23-cover.png 200w,\n/static/22ae2719cb7e11f5cc93cdac3931369c/d184d/2023-04-23-cover.png 400w,\n/static/22ae2719cb7e11f5cc93cdac3931369c/e24fb/2023-04-23-cover.png 800w","srcWebp":"/static/22ae2719cb7e11f5cc93cdac3931369c/b303b/2023-04-23-cover.webp","srcSetWebp":"/static/22ae2719cb7e11f5cc93cdac3931369c/21c67/2023-04-23-cover.webp 200w,\n/static/22ae2719cb7e11f5cc93cdac3931369c/4b6b9/2023-04-23-cover.webp 400w,\n/static/22ae2719cb7e11f5cc93cdac3931369c/b303b/2023-04-23-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Look! Up in the sky! It’s a bird! It’s a plane! It’s Superman! I have such a thought quite often while working with Postgres. Why? Let’s say…","fields":{"slug":"/postgres_superpowers/","prefix":"2023-04-15","langKey":"en"},"frontmatter":{"title":"Postgres Superpowers in Practice","category":"Postgres","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7BAAAOwQG4kWvtAAACB0lEQVQoz03Q20sTYACG8c88lBctdqFeBEJiCYXQhUFUGNFFQgcqS9KLKAqJVBKJKCwJSspEcgbVSo1cBjN1KWRk2ETJ42C4KTabm6ljLufanBO3ue+J2U1/wO954RU+E0Er0gFLEAQIS24YXMnvncdbxpVqu6gY2/Z40uYOssT8AJNdjLUx3ETvS0R4BhbBD2GklIDj9/KtEo2i2nz41WDq+Qcpx6raxhYAGZJrdtzGaOJnNyYdAif4IETUgTdEpsaWocxLKuhIuN11SZF9dHNO3adhICKl9BCcxjvBwij2b//hyIa2eILxtbNx13Tp6XcSzz1V5D5L3H0l9XpDYCMt/URmWbGwaGTuO2LNhnTBCqz/G5cVI75T5dryxIy2wp1nMtLikvbV5JfimI8EVuViOGTDN4HLgF2PcBnw/yA8B25kMMpXlv1FmSUnYwpzUgpOby3LEgeqN4mPsXH9J/LWp+SSCcegnO5hvBNh7sDag3OIPyZWf0Vx44g79mzT3rQLB5Xb98RnZyXnlsYIVcIWg6rVM46la92sY7SZvteIzzX0qhl6h7E9+kHAxhGVVVzUF7/pZcq4P79SFGgPKXfM1H3wWjA0R/rUdNfSWUlLOaK+GM1NtHfRPUT/nJHWcFH91K6yr/cefbEOeq4+GcqpGtC+Nc/q6W+Q7ffRlNFYjLqQF5f5C+uwhwbcBhz3AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/45432bd59909acaa65d9150df4e3b0bb/e24fb/2023-04-15-cover.png","srcSet":"/static/45432bd59909acaa65d9150df4e3b0bb/6d6b7/2023-04-15-cover.png 200w,\n/static/45432bd59909acaa65d9150df4e3b0bb/d184d/2023-04-15-cover.png 400w,\n/static/45432bd59909acaa65d9150df4e3b0bb/e24fb/2023-04-15-cover.png 800w","srcWebp":"/static/45432bd59909acaa65d9150df4e3b0bb/b303b/2023-04-15-cover.webp","srcSetWebp":"/static/45432bd59909acaa65d9150df4e3b0bb/21c67/2023-04-15-cover.webp 200w,\n/static/45432bd59909acaa65d9150df4e3b0bb/4b6b9/2023-04-15-cover.webp 400w,\n/static/45432bd59909acaa65d9150df4e3b0bb/b303b/2023-04-15-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Event stores are the foundational building block of Event Sourcing. They’re also one of the biggest sources of confusion. They are databases…","fields":{"slug":"/event_stores_are_key_value_stores/","prefix":"2023-04-07","langKey":"en"},"frontmatter":{"title":"Event stores are key-value databases, and why that matters","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7CAAAOwgEVKEqAAAAB3UlEQVQozxXP246aQAAAUL69L/2AJn1q2jTGhyabbLPJJu62tVq2rCCIIggo9+sMAzPMjIKiyTY9f3AEzPqKnNrjQPilQBTUDNSMdreGnVl/q8iJ8IF214b1qD3lFSH8AhqOWd/yXqgg9Aw5PViRrQemlu6tw0bJPfuwXqTeLrBWsb2JHGO/ljPfDrbLMnRdfRE7Rss6AZSlOptY6qsm/jQV0Vy+qLPJfi2r82dzKS1nE0OaWoqozZ9MRVSmj46+kKePjiZR3guU0o2upmlsmZs48osC2q6PMV7ryzxL4xzW5AQb5oV51VDXi1k3OF5UIsJOF6EORSC/R+YIrD605kcI4rCkHGiZ9K52719l7UWSgzjPASK8j8uqv71FaVE19P8ZggwkuyxystDKg22y1ndzEQVu5ukgck3D8r2wyEEQJKUX7eZim5VBktcNpfwskOOA+aCstn8kdWs44NfvbDwmXszPb4wPh7CANYc1s6MSqKvk8yckK24CK3ykx7PQ0o6yHmFWNbTGDIEalVUSpe4+zFzT//G1+HtXyg/e8xfkW0UGkb/zpiOoPxHSCgEgSQ4wPZ7OV95dWDew7mrae1kzIndTy99q5Q4q90ga4+zALzecH8DLCC6/Nw3+BxPR1MyozqLjAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/e03ee592796deb290705fa72888717da/e24fb/2023-04-07-es1.png","srcSet":"/static/e03ee592796deb290705fa72888717da/6d6b7/2023-04-07-es1.png 200w,\n/static/e03ee592796deb290705fa72888717da/d184d/2023-04-07-es1.png 400w,\n/static/e03ee592796deb290705fa72888717da/e24fb/2023-04-07-es1.png 800w","srcWebp":"/static/e03ee592796deb290705fa72888717da/b303b/2023-04-07-es1.webp","srcSetWebp":"/static/e03ee592796deb290705fa72888717da/21c67/2023-04-07-es1.webp 200w,\n/static/e03ee592796deb290705fa72888717da/4b6b9/2023-04-07-es1.webp 400w,\n/static/e03ee592796deb290705fa72888717da/b303b/2023-04-07-es1.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I started my career when StackOverflow didn’t exist. That’s how I quite often introduce myself. I’m that old. That’s, of course, nothing…","fields":{"slug":"/chat_gpt_revolution_or_not/","prefix":"2023-04-02","langKey":"en"},"frontmatter":{"title":"ChatGPT, revolution or not?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9AEg4KjkrIJaBafbasuXNqN/Lq+rPpPfOlLWSakxJSDQ4P0Y8Q4hjUL1xSnZMRGxgUr+feLebdpF9Y4FsVgA3KSE4KiCnkHT/4bXqz6fly6TwzZrtxpC8mW5qWUxBQUV8VlT3uWD6iC+fRjVUTkiQfGKylXGUfmOBbVcAMSQdJRoUj3xl/9+w4cWa07qU8cqU1rOIyaZ6nYNmcmRaoHBm76RW/7M14l0eb1FJWFNHnoRlkHpggW9ZADwrIzEkHJiEbfPTqsuykLSghd25jsWkfbeWcI13XXJiVax6W9STP6h7L9t0GYFJL0RAO3BeSnJjUmxdTQAzJiEzKCRwYlOfjXmVhXKKfm2cinKTgWmLeWJrVkFVQjJgRzNXPylALCJGMCA7KR00Jx80KiM9NzI7NzIAIxwfIBseQTYuUUdAZFlNbGFTcGRWdWhZdGVUalpJX1JCW0w/T0E1RDgsNiwkMSkkNy0nMCcjLSgkNTAsACUbGysfHC0lIEItJVk8L1lIO2FTRmdWR3VfSXlcRGZGNHJZQWhPOV5GMlQ8Kko3KUQ2Kz4oITMmITszLQAxHhZCJxk+HBMsGBMqFxJHMCJFMSdFLiVrSzRlRTI7Ih5fQy5ePCpJMCJcOydZMyBSKx1nQC1EIRUyHBYAFwwKIRMPGw0LEAoNFgwOQSweMykkHBYXUjclNisjIBwaOy0hRywgJBgUWEArWjgeXT0rkU04KAMCKRgSCWu9mEtLCgcAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/eb3608be37e78079e9dbe76972051ed7/e24fb/2023-04-02-cover.png","srcSet":"/static/eb3608be37e78079e9dbe76972051ed7/6d6b7/2023-04-02-cover.png 200w,\n/static/eb3608be37e78079e9dbe76972051ed7/d184d/2023-04-02-cover.png 400w,\n/static/eb3608be37e78079e9dbe76972051ed7/e24fb/2023-04-02-cover.png 800w","srcWebp":"/static/eb3608be37e78079e9dbe76972051ed7/b303b/2023-04-02-cover.webp","srcSetWebp":"/static/eb3608be37e78079e9dbe76972051ed7/21c67/2023-04-02-cover.webp 200w,\n/static/eb3608be37e78079e9dbe76972051ed7/4b6b9/2023-04-02-cover.webp 400w,\n/static/eb3608be37e78079e9dbe76972051ed7/b303b/2023-04-02-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Unique constraint validation is one of those things that looks simple but is not always easy. I explained already that, in Event Sourcing…","fields":{"slug":"/unique_constraint_in_marten_event_store/","prefix":"2023-03-24","langKey":"en"},"frontmatter":{"title":"Ensuring uniqueness in Marten event store","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACIElEQVQozx3CS0sicQAA8PkcXbt1js4dunaJDtUXsAx2YQpdJYIy7GE5Icj6GAVpFDNHUsNHs7YOKk4+YJwknf/MpPmcFF3H1cRDsWw/fhBoj0r1PpWl01QmFLxLJZLV3hQ0Ja415NpD0BpyrSFoDqq9aSqRDAXv0lSGytGleh+0R1ChXA24UKNGEfZi6SjuMezn6aLQmbCNAduU/m8MhM4kTxc9hn0qioe9V0aNIuBCC+UqdO82G1SyE8W2DdGWmdwj4Qs6Lougyr1NSo1+qf6He5sUQSXouHwkfGUmZ0O0J4ptg0p27zZDIVRj18LosTLidZIhPIpjRzubN+ZT9lUE4giII/ZVvDGdHu1sRnGMDOERrxM9Vtq1cAjVQIT1B4Hu+Y2q3IP/OZsg8CvbxQECbyBqeYxiYhSDqOUIvGG/OPiFXz1nE7mHgN+oItA9wqqCklYZc61M2+UC6WCTt/mIK2DR/jyEMZu5IIi0IGI2i+kQDli0+YiLTd4KpIOyy5lrZdIqgwjdMnm+xKCrg4yZJ7F02P1UoIt87aU3FbrvQvf9pTct8rWnAp0Ou3kSG2TMDLpKni8RumXIp573wLPxs8WMaY3269lKu9L/4LtjIA6B+PerxHfHlf4HW2nTfn3GtBY/W/TAsz71POTcXdCtz1i25mL6FdLyLfU7VpM+gShxnTHfGXNfgSjVpM9UPEZav8eQFcvWnG59xrm78A+3CX6sgdHRRQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/c5a43f3f18feab2bc79d19ea881895bc/e24fb/2023-03-24-cover.png","srcSet":"/static/c5a43f3f18feab2bc79d19ea881895bc/6d6b7/2023-03-24-cover.png 200w,\n/static/c5a43f3f18feab2bc79d19ea881895bc/d184d/2023-03-24-cover.png 400w,\n/static/c5a43f3f18feab2bc79d19ea881895bc/e24fb/2023-03-24-cover.png 800w","srcWebp":"/static/c5a43f3f18feab2bc79d19ea881895bc/b303b/2023-03-24-cover.webp","srcSetWebp":"/static/c5a43f3f18feab2bc79d19ea881895bc/21c67/2023-03-24-cover.webp 200w,\n/static/c5a43f3f18feab2bc79d19ea881895bc/4b6b9/2023-03-24-cover.webp 400w,\n/static/c5a43f3f18feab2bc79d19ea881895bc/b303b/2023-03-24-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I told you already that Projections are an Event Sourcing killer feature, and today I’d like to repeat that. In Marten, we embraced that and…","fields":{"slug":"/projecting_from_marten_to_elasticsearch/","prefix":"2023-03-18","langKey":"en"},"frontmatter":{"title":"Projecting Marten events to Elasticsearch","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABeklEQVQoz2PYMj14Srry/BztiYUuh3cte/3+xdcfX//+B4N///7++fPv/7//OADDl5+f1uwu7m20CTQStlflrY0xmVPtP68v6/zxNT9+fgSbgFvz////5y8ujfCTt7OS1dYQMFNkspZncFJk8tHjKY+33rZ99tcfX0FGYLMfpPnho1v3nly4//Ta5evnDhzatHBhZ0VNuIwUT4aPZJwN69IFHRAfYNeMDCCO/PXvW3Sig2+USky0bFtDDi7HM0BM/fv3z+8/f3/++//7779fP3/8////2JmdE+ZUnL5y9Omzh/////8LBv/ASiEAbjPY1L8v/n9d+//3A4QIIcAAUffjx8+r6+OP7zZ4+XL+x/efjx49eu3a1evXr586dfLM2TOPHj26cePGnTt3bt++fffu3aNHj96+fRukGeKZJ0+fuoSF8/Tt7Xj2//b507Pnzl25cuWcOXNmz569aNGi7du3T506dcGCBUuWLFmzZs3atWuPHDny69cvAGHZuevh/93VAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/762b0d58d7d96f31ba9dbb610689d428/e24fb/2023-03-18-cover.png","srcSet":"/static/762b0d58d7d96f31ba9dbb610689d428/6d6b7/2023-03-18-cover.png 200w,\n/static/762b0d58d7d96f31ba9dbb610689d428/d184d/2023-03-18-cover.png 400w,\n/static/762b0d58d7d96f31ba9dbb610689d428/e24fb/2023-03-18-cover.png 800w","srcWebp":"/static/762b0d58d7d96f31ba9dbb610689d428/b303b/2023-03-18-cover.webp","srcSetWebp":"/static/762b0d58d7d96f31ba9dbb610689d428/21c67/2023-03-18-cover.webp 200w,\n/static/762b0d58d7d96f31ba9dbb610689d428/4b6b9/2023-03-18-cover.webp 400w,\n/static/762b0d58d7d96f31ba9dbb610689d428/b303b/2023-03-18-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s say that we’re starting a new project. It’s a small tool for internal needs, maybe even some sort of shadow IT project. It may also be…","fields":{"slug":"/simple_transactional_command_orchestration/","prefix":"2023-03-12","langKey":"en"},"frontmatter":{"title":"How to handle multiple commands in the same transaction","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMElEQVQozwElAtr9AIJ+e5KQkJWTlamorJKMjX93dbq4vsTDysvM06ulp3tKQl9EPRQUFgoJCiknKkRBQRAQFQAJJBAfQZKWpQB9e3iZl5etq7CZmZwfDgtTGQyUgH3KzdXIx83S09nJyM7U09mUlJgGBgYDAgMoJiURER4AByUoNlelpq4AioeFiYaGend4PTMyViIamj4yvKGh0dbdycjMvr7D29vg19je5ebslpaaFhcZCggGOCkuAQwrUV9+ubi9ACwoJxQMCAYCAAgDAmojGYY9MsfCxdra21xZWAYFBXZ0ddTV2rq6vqSjqJycnhMQFHREPx8YMGBuh7OwsQAAAAAEAgEMBgQCAwMNAQAkEA1PTU1ZVVMrJSIAAABXU1Kdm5tXU1OYmZyZjIseERUQFy0UJExoc4uOi4gADhYtBQcNAwEAAwEBCAoKAAAAWVZXhH9+sK2pBwcHKCUjube2t7i+3N3jzMrPJiY1CRU1DyJMiZGpvLi6AAQIFgEDBgQBAB4aGY2MjyAeHz05OZiVlGliXigeFgYBAGJcW9LR1sXEysTEyxwlPgMMKAcZQXqEnbe0tgAAAQsCAwIAAABgXFrc299LS00IBQSclI9hV1KQf3KfjoBmXlunoKG5ucCwsLgUGzMDDCgACixdaYW0s7UABgYOAAAAAAAAJSAcqqGVjIV8BQICST00lIuAsqWTwLOjpp+Vkop+l4+Dl5GJDhMmGiM8BhEuOEFajIN4L2jJuX76HqEAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ed2689fc47b2797d7047edfa25d9b150/e24fb/2023-03-12-cover.png","srcSet":"/static/ed2689fc47b2797d7047edfa25d9b150/6d6b7/2023-03-12-cover.png 200w,\n/static/ed2689fc47b2797d7047edfa25d9b150/d184d/2023-03-12-cover.png 400w,\n/static/ed2689fc47b2797d7047edfa25d9b150/e24fb/2023-03-12-cover.png 800w","srcWebp":"/static/ed2689fc47b2797d7047edfa25d9b150/b303b/2023-03-12-cover.webp","srcSetWebp":"/static/ed2689fc47b2797d7047edfa25d9b150/21c67/2023-03-12-cover.webp 200w,\n/static/ed2689fc47b2797d7047edfa25d9b150/4b6b9/2023-03-12-cover.webp 400w,\n/static/ed2689fc47b2797d7047edfa25d9b150/b303b/2023-03-12-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"JSON serialisation is so much fun. We can make jokes and curse, but we must live with it. Surprisingly, that’s not getting simpler if we use…","fields":{"slug":"/fun_with_json_serialisation/","prefix":"2023-03-05","langKey":"en"},"frontmatter":{"title":"Fun with serial JSON","category":"JavaScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7CAAAOwgEVKEqAAAACMElEQVQozwElAtr9AERFQj9CQkFDQ0hLT01PVTw8QWZrcnZ7gDYzMSMgIBYVGR0aG2leVLe5t8jW3rXCynuCildaZDMyNUVHOwBRVk9PU1FWWl1KTlA7PD00NDZLT1Q7NzQxKSM3NTYeGxswLCtjW1OQgG7M0c/E1NyQmKBZXGQzMC88OTUAV2BNTFNGRUhJQEJCNzk3NTgyOzs2Jx8YMiojMS8uHxwcKCUmVlFNjXlkxLutydnioq21Z2ttU1FPLy0xAGt4XGRvWlJZS0pMUj9BPURLP0E9NCgeFyEbFiEdGh0bGSQhI2BWT6CHbK+bhMnW2qu2voOHiF5fYTc3PQB/j3eJmn1ocmJjaG5ERUtHSk1hVk0tIxocFxIjHhsfHR0iISRtX1KOd2CEbli5vbuirbaIjY9aXWM+QEgAam91f4mIe4KFl6Cmc3mDTE1SdmVVOjAmKiMfKiQgJSQmNDM5aVtPZVpQQDQqgHt1m6WsgISEVVdfREVPAG90gGxyf3+HkoqSnm1yeUJCRVRNSTIsKDErJjkyLiIhJDMxM2FVSmlmYkFAP1NMRo6UmoSHiFhZYEFCTACksLmyvsWmsbhudXxOUVY4ODxDREQjIiEzLSpIQj8VEhIkIB9QR0KFhodtc3g6Mix4en1/g4NaW2E/QEwAgomPjZeedHyDb3V+fIOMcXd+UVRaREVKIR0aPTk4GhgYHRgVTEVBfHt6pq6wOjg3aWtvXmBkc3ZyXWFgy5C9sQUiVpMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/db562488565c387c598f26eb8ce347b0/e24fb/2023-03-05-cover.png","srcSet":"/static/db562488565c387c598f26eb8ce347b0/6d6b7/2023-03-05-cover.png 200w,\n/static/db562488565c387c598f26eb8ce347b0/d184d/2023-03-05-cover.png 400w,\n/static/db562488565c387c598f26eb8ce347b0/e24fb/2023-03-05-cover.png 800w","srcWebp":"/static/db562488565c387c598f26eb8ce347b0/b303b/2023-03-05-cover.webp","srcSetWebp":"/static/db562488565c387c598f26eb8ce347b0/21c67/2023-03-05-cover.webp 200w,\n/static/db562488565c387c598f26eb8ce347b0/4b6b9/2023-03-05-cover.webp 400w,\n/static/db562488565c387c598f26eb8ce347b0/b303b/2023-03-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I see a lot of new terms like Command-Event, Event-Based Compute, etc., presented around Event-Driven Architecture. Let me clear that up…","fields":{"slug":"/dont_let_event_driven_architecture_buzzwords_fool_you/","prefix":"2023-02-26","langKey":"en"},"frontmatter":{"title":"Don't let Event-Driven Architecture buzzwords fool you","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACGUlEQVQozy3Na09SYRwA8P/zf57jQUQbwwNdmDck7iAc7gQmgkKGLTzClCHGgXJgZmyGphtuNX1Razov1dxYNmvxqhdt9QH6Br2u71JtfoDffoCIAOCyRSeimW5FV09PXyYRbLfWzjbXG48Kab9zftyfT04WU1NOw6DT6XXbfXGLgec4QgggIqUoqAcocpQiII17HBc7WzuLuYTHno2F0kHv3O1xn81sHLymFfrFSD4RSXQxeokZYwq+V6e74fcFhG4+IYrvGo2laMhoGA7aTQGryW+xynemLlpNn2nE5EyGIhKllCABikgQVRx7vX/47fvPhXBYNNjWJGnKaIj2qVxCn8dsNA8NRUYGdqX0sFat0bvs3lnG2P+ZUgoAN3XC8XrzZalqsHuCGl1Wq9VfHd7RXJF1wtx08u3e9vOlrBxx3xMt8VGT1xImlEMkwDEGADOxia+tF7vFgttoTdo8ae+tDYv9Vbm8Ulo6qJc+Plx4k8tsxQNNt62u5Au9KkYZQQSO4wBALpZ///ojS7PiWOD+5FylJO81NtK55ajDUenvlQDqAKtqZUPVFUNM8bySUkAEgsgRaLlGjtYf58eDzebW2dn55y+dg5PT45P35+0Ph3v7242nPzqd9uazukoxitSj4FWXmCDPcTPW6znRWis/qJRXa9Un83ezqYnErLS4LOXmY7HpsbHTqvxppVITNHogFsqUiP/wXzWyeDCiO9iCAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/4335effe772a6a8306330ad60ff10809/e24fb/2023-02-26-cover.png","srcSet":"/static/4335effe772a6a8306330ad60ff10809/6d6b7/2023-02-26-cover.png 200w,\n/static/4335effe772a6a8306330ad60ff10809/d184d/2023-02-26-cover.png 400w,\n/static/4335effe772a6a8306330ad60ff10809/e24fb/2023-02-26-cover.png 800w","srcWebp":"/static/4335effe772a6a8306330ad60ff10809/b303b/2023-02-26-cover.webp","srcSetWebp":"/static/4335effe772a6a8306330ad60ff10809/21c67/2023-02-26-cover.webp 200w,\n/static/4335effe772a6a8306330ad60ff10809/4b6b9/2023-02-26-cover.webp 400w,\n/static/4335effe772a6a8306330ad60ff10809/b303b/2023-02-26-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"If I had to select the Distributed Systems Song, I’d choose Land of Confusion. This is the world we live in. And these are the hands we’re…","fields":{"slug":"/set_up_opentelemetry_wtih_event_sourcing_and_marten/","prefix":"2023-02-19","langKey":"en"},"frontmatter":{"title":"Set up OpenTelemetry with Event Sourcing and Marten","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUBAgT/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAXJNrMYqC//EABoQAAICAwAAAAAAAAAAAAAAAAABAgMQETP/2gAIAQEAAQUC2MV8GsX9P//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/AUf/xAAVEQEBAAAAAAAAAAAAAAAAAAAAAf/aAAgBAgEBPwFK/8QAGRAAAQUAAAAAAAAAAAAAAAAAARARICFB/9oACAEBAAY/AsSy0P/EABsQAAMAAgMAAAAAAAAAAAAAAAABEUFRIZGx/9oACAEBAAE/IYy+w0TcvBcJfTNmDyP/2gAMAwEAAgADAAAAEA/f/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAEDAQE/EFnX/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAR/9oACAECAQE/EJU2/8QAGxAAAwACAwAAAAAAAAAAAAAAAAERITFRscH/2gAIAQEAAT8QlVUtjJqGcQiNDlsEEOj6f//Z","aspectRatio":2.2222222222222223,"src":"/static/28fce316f2b3deca4551769dd86170d0/f8504/2023-02-19-cover.jpg","srcSet":"/static/28fce316f2b3deca4551769dd86170d0/f137a/2023-02-19-cover.jpg 200w,\n/static/28fce316f2b3deca4551769dd86170d0/8494e/2023-02-19-cover.jpg 400w,\n/static/28fce316f2b3deca4551769dd86170d0/f8504/2023-02-19-cover.jpg 800w","srcWebp":"/static/28fce316f2b3deca4551769dd86170d0/b303b/2023-02-19-cover.webp","srcSetWebp":"/static/28fce316f2b3deca4551769dd86170d0/21c67/2023-02-19-cover.webp 200w,\n/static/28fce316f2b3deca4551769dd86170d0/4b6b9/2023-02-19-cover.webp 400w,\n/static/28fce316f2b3deca4551769dd86170d0/b303b/2023-02-19-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Projections are a neverending story. One does not simply write a single guide. One needs to write more examples of more advanced cases. That…","fields":{"slug":"/projections_in_marten_explained/","prefix":"2023-02-12","langKey":"en"},"frontmatter":{"title":"Event-driven projections in Marten explained","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUBAwT/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABuaY2EsgUf//EABoQAAICAwAAAAAAAAAAAAAAAAEDAAIQMjT/2gAIAQEAAQUCLG2ZXeDpx//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/ASf/xAAaEAACAgMAAAAAAAAAAAAAAAABAhAhAEFx/9oACAEBAAY/AlRqIOsaoPZ//8QAGhAAAgIDAAAAAAAAAAAAAAAAARARUQAhof/aAAgBAQABPyETnQZDRE3bwr//2gAMAwEAAgADAAAAEIfP/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/EFwn/8QAFhEBAQEAAAAAAAAAAAAAAAAAAREQ/9oACAECAQE/EBW5/8QAHRABAAMAAQUAAAAAAAAAAAAAAQARQSFRYXGx8P/aAAgBAQABPxAThq0Thr1K9xIEuLcG3Pm7TcN8z//Z","aspectRatio":2.2222222222222223,"src":"/static/d4a7b30f8a33dda960a692bfe222f01c/f8504/2023-02-12-cover.jpg","srcSet":"/static/d4a7b30f8a33dda960a692bfe222f01c/f137a/2023-02-12-cover.jpg 200w,\n/static/d4a7b30f8a33dda960a692bfe222f01c/8494e/2023-02-12-cover.jpg 400w,\n/static/d4a7b30f8a33dda960a692bfe222f01c/f8504/2023-02-12-cover.jpg 800w","srcWebp":"/static/d4a7b30f8a33dda960a692bfe222f01c/b303b/2023-02-12-cover.webp","srcSetWebp":"/static/d4a7b30f8a33dda960a692bfe222f01c/21c67/2023-02-12-cover.webp 200w,\n/static/d4a7b30f8a33dda960a692bfe222f01c/4b6b9/2023-02-12-cover.webp 400w,\n/static/d4a7b30f8a33dda960a692bfe222f01c/b303b/2023-02-12-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Validation is a thriving concept. It enables incredible creativity in developers implementing it in various ways. I explained my general…","fields":{"slug":"/explicit_validation_in_csharp_just_got_simpler/","prefix":"2023-02-05","langKey":"en"},"frontmatter":{"title":"Explicit validation in C# just got simpler!","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEFBP/EABUBAQEAAAAAAAAAAAAAAAAAAAEA/9oADAMBAAIQAxAAAAGe6uQWUiP/xAAcEAABAwUAAAAAAAAAAAAAAAACAQMzAAQRMkL/2gAIAQEAAQUC5BMoTIrTkNjKW/8A/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHRAAAQMFAQAAAAAAAAAAAAAAAAECERIhMUFxgv/aAAgBAQAGPwKTMqJSmrj+Hkcf/8QAHRABAAEDBQAAAAAAAAAAAAAAAQARITEQYXGhsf/aAAgBAQABPyEqJZCGLUl0pLQncc6bj5ezsT//2gAMAwEAAgADAAAAEPc//8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAwEBPxBLCH//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAgEBPxBX/8QAHhABAAEEAgMAAAAAAAAAAAAAAQARITFBUfBhocH/2gAIAQEAAT8Qv2E43KGKUCUMRRkAE3t/k9xO+5Tu+Cf/2Q==","aspectRatio":2.2222222222222223,"src":"/static/2ed90da63699cbcfbc05fa37a0447d1e/f8504/2023-02-05-cover.jpg","srcSet":"/static/2ed90da63699cbcfbc05fa37a0447d1e/f137a/2023-02-05-cover.jpg 200w,\n/static/2ed90da63699cbcfbc05fa37a0447d1e/8494e/2023-02-05-cover.jpg 400w,\n/static/2ed90da63699cbcfbc05fa37a0447d1e/f8504/2023-02-05-cover.jpg 800w","srcWebp":"/static/2ed90da63699cbcfbc05fa37a0447d1e/b303b/2023-02-05-cover.webp","srcSetWebp":"/static/2ed90da63699cbcfbc05fa37a0447d1e/21c67/2023-02-05-cover.webp 200w,\n/static/2ed90da63699cbcfbc05fa37a0447d1e/4b6b9/2023-02-05-cover.webp 400w,\n/static/2ed90da63699cbcfbc05fa37a0447d1e/b303b/2023-02-05-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We, developers, are searching for Holy Grail, one pattern to rule them all. There’s no such. In his excellent book “Atomic Habits”, James…","fields":{"slug":"/stacking_the_bricks/","prefix":"2023-01-29","langKey":"en"},"frontmatter":{"title":"Stacking the bricks in the software development process","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBAX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHUjvgo4f/EABkQAAMBAQEAAAAAAAAAAAAAAAECAxEQEv/aAAgBAQABBQKocm/tprud/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGxAAAgEFAAAAAAAAAAAAAAAAABEBAhIgIjH/2gAIAQEABj8C1ZTayH3D/8QAHRAAAQMFAQAAAAAAAAAAAAAAEQAhMQEgQVFhgf/aAAgBAQABPyHkZhB6qfQ9xlQQA9n/2gAMAwEAAgADAAAAELMP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGxABAAMAAwEAAAAAAAAAAAAAAREhQQAQMcH/2gAIAQEAAT8QOCJpBW01mcAQJtMitQDfvPCoEBm+jzr/2Q==","aspectRatio":2.2222222222222223,"src":"/static/153581fcbd8de709ca1ea147d86b316c/f8504/2023-01-29-cover.jpg","srcSet":"/static/153581fcbd8de709ca1ea147d86b316c/f137a/2023-01-29-cover.jpg 200w,\n/static/153581fcbd8de709ca1ea147d86b316c/8494e/2023-01-29-cover.jpg 400w,\n/static/153581fcbd8de709ca1ea147d86b316c/f8504/2023-01-29-cover.jpg 800w","srcWebp":"/static/153581fcbd8de709ca1ea147d86b316c/b303b/2023-01-29-cover.webp","srcSetWebp":"/static/153581fcbd8de709ca1ea147d86b316c/21c67/2023-01-29-cover.webp 200w,\n/static/153581fcbd8de709ca1ea147d86b316c/4b6b9/2023-01-29-cover.webp 400w,\n/static/153581fcbd8de709ca1ea147d86b316c/b303b/2023-01-29-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"If I had to choose the killer feature of Event Sourcing, I’d select projections. Why? I’ll explain that in detail in this article. Events…","fields":{"slug":"/projections_and_read_models_in_event_driven_architecture/","prefix":"2023-01-20","langKey":"en"},"frontmatter":{"title":"Guide to Projections and Read Models in Event-Driven Architecture","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIDBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEA/9oADAMBAAIQAxAAAAHtRcJoC//EABcQAQADAAAAAAAAAAAAAAAAAAEAESD/2gAIAQEAAQUClBn/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAWEAADAAAAAAAAAAAAAAAAAAAAICH/2gAIAQEABj8CIv8A/8QAHBABAAIBBQAAAAAAAAAAAAAAAQAQQREhMYGx/9oACAEBAAE/IUE0cw3Hqsw47r//2gAMAwEAAgADAAAAEMc//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGxAAAgIDAQAAAAAAAAAAAAAAAAERITFBsYH/2gAIAQEAAT8QcnVkpguVvVu+nox1Cwf/2Q==","aspectRatio":2.2222222222222223,"src":"/static/505e8cec2615da883c59ff655ba4437d/f8504/2023-01-20-cover.jpg","srcSet":"/static/505e8cec2615da883c59ff655ba4437d/f137a/2023-01-20-cover.jpg 200w,\n/static/505e8cec2615da883c59ff655ba4437d/8494e/2023-01-20-cover.jpg 400w,\n/static/505e8cec2615da883c59ff655ba4437d/f8504/2023-01-20-cover.jpg 800w","srcWebp":"/static/505e8cec2615da883c59ff655ba4437d/b303b/2023-01-20-cover.webp","srcSetWebp":"/static/505e8cec2615da883c59ff655ba4437d/21c67/2023-01-20-cover.webp 200w,\n/static/505e8cec2615da883c59ff655ba4437d/4b6b9/2023-01-20-cover.webp 400w,\n/static/505e8cec2615da883c59ff655ba4437d/b303b/2023-01-20-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Fox Mulder got advice: “trust no one”. I’m claiming that each software developer should define their level of paranoia. The thing that we…","fields":{"slug":"/how_to_validate_business_logic/","prefix":"2023-01-15","langKey":"en"},"frontmatter":{"title":"How to validate business logic","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAIB/9oADAMBAAIQAxAAAAGd8TWc4UG//8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACAxEEMTP/2gAIAQEAAQUChITw2nVcWsjmv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABgQAAIDAAAAAAAAAAAAAAAAAAABESAh/9oACAEBAAY/AiWZT//EABoQAAICAwAAAAAAAAAAAAAAAAABEEERITH/2gAIAQEAAT8hsozrNj3mouUf/9oADAMBAAIAAwAAABCk3//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCMf//EABYRAQEBAAAAAAAAAAAAAAAAABEAAf/aAAgBAgEBPxBMnb//xAAcEAACAgIDAAAAAAAAAAAAAAABEQAxIaEQQVH/2gAIAQEAAT8QKWYLBSUtiCxQ1Hb+hdymaR4//9k=","aspectRatio":2.2222222222222223,"src":"/static/81cb81f0a2ae8318986c32161541d119/f8504/2023-01-15-cover.jpg","srcSet":"/static/81cb81f0a2ae8318986c32161541d119/f137a/2023-01-15-cover.jpg 200w,\n/static/81cb81f0a2ae8318986c32161541d119/8494e/2023-01-15-cover.jpg 400w,\n/static/81cb81f0a2ae8318986c32161541d119/f8504/2023-01-15-cover.jpg 800w","srcWebp":"/static/81cb81f0a2ae8318986c32161541d119/b303b/2023-01-15-cover.webp","srcSetWebp":"/static/81cb81f0a2ae8318986c32161541d119/21c67/2023-01-15-cover.webp 200w,\n/static/81cb81f0a2ae8318986c32161541d119/4b6b9/2023-01-15-cover.webp 400w,\n/static/81cb81f0a2ae8318986c32161541d119/b303b/2023-01-15-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last year, I completed two items from my speaker bucket list NDC Oslo and Domain-Driven Design Europe. I’m proud and happy, as those…","fields":{"slug":"/lets_build_event_store_in_one_hour/","prefix":"2023-01-08","langKey":"en"},"frontmatter":{"title":"Let's build event store in one hour!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQT/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//aAAwDAQACEAMQAAAB3gSChMQN/wD/xAAbEAACAQUAAAAAAAAAAAAAAAAAAgEDERIxMv/aAAgBAQABBQIrmLXH5nf/xAAXEQEAAwAAAAAAAAAAAAAAAAABAhAR/9oACAEDAQE/AYGNf//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/Aaf/xAAWEAADAAAAAAAAAAAAAAAAAAAAASD/2gAIAQEABj8CFP8A/8QAGRABAAMBAQAAAAAAAAAAAAAAAQARMRDw/9oACAEBAAE/IfZNNy4orG48tJ//2gAMAwEAAgADAAAAENDP/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAEDAQE/EFB2f//EABcRAAMBAAAAAAAAAAAAAAAAAAEQESH/2gAIAQIBAT8QGIv/xAAcEAEAAgMAAwAAAAAAAAAAAAABABEhMXEQseH/2gAIAQEAAT8QBDNcdIaPsocVs+Rwzjd1ubPJ7jxv/9k=","aspectRatio":2.2222222222222223,"src":"/static/6ef462ab1ed36e131f9a10834bda07fd/f8504/2023-01-08-cover.jpg","srcSet":"/static/6ef462ab1ed36e131f9a10834bda07fd/f137a/2023-01-08-cover.jpg 200w,\n/static/6ef462ab1ed36e131f9a10834bda07fd/8494e/2023-01-08-cover.jpg 400w,\n/static/6ef462ab1ed36e131f9a10834bda07fd/f8504/2023-01-08-cover.jpg 800w","srcWebp":"/static/6ef462ab1ed36e131f9a10834bda07fd/b303b/2023-01-08-cover.webp","srcSetWebp":"/static/6ef462ab1ed36e131f9a10834bda07fd/21c67/2023-01-08-cover.webp 200w,\n/static/6ef462ab1ed36e131f9a10834bda07fd/4b6b9/2023-01-08-cover.webp 400w,\n/static/6ef462ab1ed36e131f9a10834bda07fd/b303b/2023-01-08-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"There is a cult of workaholism in our industry. Just like the guys from the gym brag about how much they pulled on the chest or did in the…","fields":{"slug":"/a_few_words_about_workaholism/","prefix":"2022-12-29","langKey":"en"},"frontmatter":{"title":"Don't be like Ebenezer Scrooge. A few words about workaholism","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQAE/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABNQwNAchH/8QAGhAAAwADAQAAAAAAAAAAAAAAAQIDABIxM//aAAgBAQABBQKQG6RRlMzkun3fv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAECACEgYZH/2gAIAQEABj8CvkYsb1j/AP/EABwQAAIBBQEAAAAAAAAAAAAAAAABMRARIVGxcf/aAAgBAQABPyFxJa2HarAi8HddVKLw/9oADAMBAAIAAwAAABBzD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB4QAAEEAgMBAAAAAAAAAAAAAAEAESExUbFBYYHw/9oACAEBAAE/ECK+8F2geoYBCAWA5EjMItDG4VKbUNr5Oyv/2Q==","aspectRatio":2.2222222222222223,"src":"/static/c1b6dc893aad7424294cf0714352b329/f8504/2022-12-29-cover.jpg","srcSet":"/static/c1b6dc893aad7424294cf0714352b329/f137a/2022-12-29-cover.jpg 200w,\n/static/c1b6dc893aad7424294cf0714352b329/8494e/2022-12-29-cover.jpg 400w,\n/static/c1b6dc893aad7424294cf0714352b329/f8504/2022-12-29-cover.jpg 800w","srcWebp":"/static/c1b6dc893aad7424294cf0714352b329/b303b/2022-12-29-cover.webp","srcSetWebp":"/static/c1b6dc893aad7424294cf0714352b329/21c67/2022-12-29-cover.webp 200w,\n/static/c1b6dc893aad7424294cf0714352b329/4b6b9/2022-12-29-cover.webp 400w,\n/static/c1b6dc893aad7424294cf0714352b329/b303b/2022-12-29-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Events serialisation is an intriguing topic. On the one hand, it’s part of the campfire spooky tales, so (in)famous events versioning. On…","fields":{"slug":"/explicit_events_serialisation_in_event_sourcing/","prefix":"2022-12-23","langKey":"en"},"frontmatter":{"title":"Explicit events serialisation in Event Sourcing","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUE/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABjapwA//EABgQAQADAQAAAAAAAAAAAAAAAAIBAxIg/9oACAEBAAEFAqYMpinPH//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABcQAQADAAAAAAAAAAAAAAAAAAEAICL/2gAIAQEABj8C3FGv/8QAGRABAAIDAAAAAAAAAAAAAAAAAREhACBx/9oACAEBAAE/IV4oIrBXsK7r/9oADAMBAAIAAwAAABDAD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAAEDBQAAAAAAAAAAAAAAAAEAEVEgITFBcf/aAAgBAQABPxAmV2ekSi92vDEmn//Z","aspectRatio":2.2222222222222223,"src":"/static/203e334658240b0cc3fa1c591db510f9/f8504/2022-12-23-cover.jpg","srcSet":"/static/203e334658240b0cc3fa1c591db510f9/f137a/2022-12-23-cover.jpg 200w,\n/static/203e334658240b0cc3fa1c591db510f9/8494e/2022-12-23-cover.jpg 400w,\n/static/203e334658240b0cc3fa1c591db510f9/f8504/2022-12-23-cover.jpg 800w,\n/static/203e334658240b0cc3fa1c591db510f9/1ce69/2022-12-23-cover.jpg 1200w,\n/static/203e334658240b0cc3fa1c591db510f9/10c8f/2022-12-23-cover.jpg 1600w,\n/static/203e334658240b0cc3fa1c591db510f9/d170a/2022-12-23-cover.jpg 1680w","srcWebp":"/static/203e334658240b0cc3fa1c591db510f9/b303b/2022-12-23-cover.webp","srcSetWebp":"/static/203e334658240b0cc3fa1c591db510f9/21c67/2022-12-23-cover.webp 200w,\n/static/203e334658240b0cc3fa1c591db510f9/4b6b9/2022-12-23-cover.webp 400w,\n/static/203e334658240b0cc3fa1c591db510f9/b303b/2022-12-23-cover.webp 800w,\n/static/203e334658240b0cc3fa1c591db510f9/bd3e9/2022-12-23-cover.webp 1200w,\n/static/203e334658240b0cc3fa1c591db510f9/dcbba/2022-12-23-cover.webp 1600w,\n/static/203e334658240b0cc3fa1c591db510f9/3e738/2022-12-23-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The magic is that there is no magic. Many patterns perceived as complicated appear to be simple or even simplistic under the cover. Take…","fields":{"slug":"/the_magic_is_that_there_is_no_magic/","prefix":"2022-12-18","langKey":"en"},"frontmatter":{"title":"The magic is that there is no magic. Or how to understand design patterns.","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABYBAQEBAAAAAAAAAAAAAAAAAAMABf/aAAwDAQACEAMQAAABmfI2e8wPlf/EABoQAAICAwAAAAAAAAAAAAAAAAABAgMRMjP/2gAIAQEAAQUCyIjUnGe1XM//xAAXEQEBAQEAAAAAAAAAAAAAAAABAxAR/9oACAEDAQE/AbqTeZ//xAAWEQADAAAAAAAAAAAAAAAAAAACEDL/2gAIAQIBAT8BGl//xAAZEAEAAgMAAAAAAAAAAAAAAAABABAREoH/2gAIAQEABj8CxDVg12v/xAAcEAEAAQUBAQAAAAAAAAAAAAABABEhMUFR8HH/2gAIAQEAAT8hStVBG3Yy/ajedkTJ7U8PhDE//9oADAMBAAIAAwAAABDU3//EABgRAAMBAQAAAAAAAAAAAAAAAAABEUHB/9oACAEDAQE/ELi3oq0f/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAR/9oACAECAQE/ECI2b//EABoQAQADAQEBAAAAAAAAAAAAAAEAESExoXH/2gAIAQEAAT8QYCBaCrNqUkhUNHDPZtQpdbk9UcPqXOf/2Q==","aspectRatio":2.2222222222222223,"src":"/static/2d00ba2a0ca1bb744bdd72974dea36af/f8504/2022-12-18-cover.jpg","srcSet":"/static/2d00ba2a0ca1bb744bdd72974dea36af/f137a/2022-12-18-cover.jpg 200w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/8494e/2022-12-18-cover.jpg 400w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/f8504/2022-12-18-cover.jpg 800w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/1ce69/2022-12-18-cover.jpg 1200w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/10c8f/2022-12-18-cover.jpg 1600w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/d170a/2022-12-18-cover.jpg 1680w","srcWebp":"/static/2d00ba2a0ca1bb744bdd72974dea36af/b303b/2022-12-18-cover.webp","srcSetWebp":"/static/2d00ba2a0ca1bb744bdd72974dea36af/21c67/2022-12-18-cover.webp 200w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/4b6b9/2022-12-18-cover.webp 400w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/b303b/2022-12-18-cover.webp 800w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/bd3e9/2022-12-18-cover.webp 1200w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/dcbba/2022-12-18-cover.webp 1600w,\n/static/2d00ba2a0ca1bb744bdd72974dea36af/3e738/2022-12-18-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Event Sourcing is a concept that helps to build the bridge between business and technical implementation. It’s a storage pattern that takes…","fields":{"slug":"/share_your_story_on_event_sourcing_live/","prefix":"2022-12-06","langKey":"en"},"frontmatter":{"title":"Share your story on Event Sourcing Live 2023","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFA//EABUBAQEAAAAAAAAAAAAAAAAAAAIA/9oADAMBAAIQAxAAAAFJuXsk2RCP/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAIBAxMUMkP/2gAIAQEAAQUCreFszwptoe93B//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEv/aAAgBAgEBPwEbbf/EABkQAQADAQEAAAAAAAAAAAAAAAEAEBExgf/aAAgBAQAGPwJWajk417X/xAAcEAABBQADAAAAAAAAAAAAAAABABARMUEhcfD/2gAIAQEAAT8hxqFKEZzyCA3Z9iv6N//aAAwDAQACAAMAAAAQMy//xAAWEQEBAQAAAAAAAAAAAAAAAAABERD/2gAIAQMBAT8QW3P/xAAWEQADAAAAAAAAAAAAAAAAAAABEBH/2gAIAQIBAT8QkEf/xAAcEAEAAwACAwAAAAAAAAAAAAABABExIVEQofD/2gAIAQEAAT8QvXS5HLSEEBjiE47zZXiw9xHzOvH/2Q==","aspectRatio":2.2222222222222223,"src":"/static/095a1724e3d5e503a9cf19618938ffff/f8504/2022-12-06-cover.jpg","srcSet":"/static/095a1724e3d5e503a9cf19618938ffff/f137a/2022-12-06-cover.jpg 200w,\n/static/095a1724e3d5e503a9cf19618938ffff/8494e/2022-12-06-cover.jpg 400w,\n/static/095a1724e3d5e503a9cf19618938ffff/f8504/2022-12-06-cover.jpg 800w","srcWebp":"/static/095a1724e3d5e503a9cf19618938ffff/b303b/2022-12-06-cover.webp","srcSetWebp":"/static/095a1724e3d5e503a9cf19618938ffff/21c67/2022-12-06-cover.webp 200w,\n/static/095a1724e3d5e503a9cf19618938ffff/4b6b9/2022-12-06-cover.webp 400w,\n/static/095a1724e3d5e503a9cf19618938ffff/b303b/2022-12-06-cover.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s say that you have an event-driven application. It has an event bus that listens for events from asynchronous processes (e.g. Kafka…","fields":{"slug":"/testing_asynchronous_processes_with_a_little_help_from_dotnet_channels/","prefix":"2022-12-04","langKey":"en"},"frontmatter":{"title":"Testing asynchronous processes with a little help from .NET Channels","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFAf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAGYxO0XxMuf/8QAGhAAAQUBAAAAAAAAAAAAAAAAAgABERIxMv/aAAgBAQABBQIYu4hNqounwc//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAaEAACAgMAAAAAAAAAAAAAAAAAARARAiEx/9oACAEBAAY/AnZjzZShR//EABgQAQEBAQEAAAAAAAAAAAAAAAERADEQ/9oACAEBAAE/IUZKRcCJGynhunqP/9oADAMBAAIAAwAAABCoL//EABcRAQADAAAAAAAAAAAAAAAAAAABESH/2gAIAQMBAT8QvEv/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAECAQE/EJtE8P/EABsQAQADAQADAAAAAAAAAAAAAAEAESExEHGh/9oACAEBAAE/EKCwB7DI6XlXSg7sKwVcqfT4HGf/2Q==","aspectRatio":2.2222222222222223,"src":"/static/9c05375d8d0e8027263b503b97c2587f/f8504/2022-12-04-cover.jpg","srcSet":"/static/9c05375d8d0e8027263b503b97c2587f/f137a/2022-12-04-cover.jpg 200w,\n/static/9c05375d8d0e8027263b503b97c2587f/8494e/2022-12-04-cover.jpg 400w,\n/static/9c05375d8d0e8027263b503b97c2587f/f8504/2022-12-04-cover.jpg 800w,\n/static/9c05375d8d0e8027263b503b97c2587f/1ce69/2022-12-04-cover.jpg 1200w,\n/static/9c05375d8d0e8027263b503b97c2587f/10c8f/2022-12-04-cover.jpg 1600w,\n/static/9c05375d8d0e8027263b503b97c2587f/d170a/2022-12-04-cover.jpg 1680w","srcWebp":"/static/9c05375d8d0e8027263b503b97c2587f/b303b/2022-12-04-cover.webp","srcSetWebp":"/static/9c05375d8d0e8027263b503b97c2587f/21c67/2022-12-04-cover.webp 200w,\n/static/9c05375d8d0e8027263b503b97c2587f/4b6b9/2022-12-04-cover.webp 400w,\n/static/9c05375d8d0e8027263b503b97c2587f/b303b/2022-12-04-cover.webp 800w,\n/static/9c05375d8d0e8027263b503b97c2587f/bd3e9/2022-12-04-cover.webp 1200w,\n/static/9c05375d8d0e8027263b503b97c2587f/dcbba/2022-12-04-cover.webp 1600w,\n/static/9c05375d8d0e8027263b503b97c2587f/3e738/2022-12-04-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Events are an essential block of Event-Driven Architecture. They represent business facts that happened in our system. We can use them to…","fields":{"slug":"/how_to_map_event_type_by_convention/","prefix":"2022-11-27","langKey":"en"},"frontmatter":{"title":"Mapping event type by convention","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEEA//EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAGgzVIXDEf/xAAZEAADAQEBAAAAAAAAAAAAAAABAgMQBDP/2gAIAQEAAQUCo5Do5plPblz/xAAVEQEBAAAAAAAAAAAAAAAAAAAQQf/aAAgBAwEBPwGH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAQMFAAAAAAAAAAAAAAAAAAECEBFRcYGh/9oACAEBAAY/AkSvC0aHZj//xAAaEAACAwEBAAAAAAAAAAAAAAAAAREhMRBx/9oACAEBAAE/IUMgmr0XScPBZbkyGOX/2gAMAwEAAgADAAAAEPgP/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIf/aAAgBAwEBPxCDS//EABYRAAMAAAAAAAAAAAAAAAAAABARIf/aAAgBAgEBPxB0f//EAB0QAAIBBAMAAAAAAAAAAAAAAAERABAhcaExUbH/2gAIAQEAAT8QJpfJZWJwiiQrjbMAhGO0po/TNvT/2Q==","aspectRatio":2.2222222222222223,"src":"/static/455631b320975f8a96d281795939b0c6/f8504/2022-11-27-cover.jpg","srcSet":"/static/455631b320975f8a96d281795939b0c6/f137a/2022-11-27-cover.jpg 200w,\n/static/455631b320975f8a96d281795939b0c6/8494e/2022-11-27-cover.jpg 400w,\n/static/455631b320975f8a96d281795939b0c6/f8504/2022-11-27-cover.jpg 800w,\n/static/455631b320975f8a96d281795939b0c6/1ce69/2022-11-27-cover.jpg 1200w,\n/static/455631b320975f8a96d281795939b0c6/10c8f/2022-11-27-cover.jpg 1600w,\n/static/455631b320975f8a96d281795939b0c6/d170a/2022-11-27-cover.jpg 1680w","srcWebp":"/static/455631b320975f8a96d281795939b0c6/b303b/2022-11-27-cover.webp","srcSetWebp":"/static/455631b320975f8a96d281795939b0c6/21c67/2022-11-27-cover.webp 200w,\n/static/455631b320975f8a96d281795939b0c6/4b6b9/2022-11-27-cover.webp 400w,\n/static/455631b320975f8a96d281795939b0c6/b303b/2022-11-27-cover.webp 800w,\n/static/455631b320975f8a96d281795939b0c6/bd3e9/2022-11-27-cover.webp 1200w,\n/static/455631b320975f8a96d281795939b0c6/dcbba/2022-11-27-cover.webp 1600w,\n/static/455631b320975f8a96d281795939b0c6/3e738/2022-11-27-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In an earlier article, I described Push-based Outbox Pattern with Postgres Logical Replication. The idea is to store the outgoing message (e…","fields":{"slug":"/how_to_get_all_messages_through_postgres_logical_replication/","prefix":"2022-11-20","langKey":"en"},"frontmatter":{"title":"How to get all messages through Postgres logical replication","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGQAAAQUAAAAAAAAAAAAAAAAAAAECAwQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIQAxAAAAHPJqmZBon/xAAZEAACAwEAAAAAAAAAAAAAAAAAAQIDETL/2gAIAQEAAQUCitNlXJsu7t6R/8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAEDAQE/AVB//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAADEBAhCB/9oACAEBAAY/ArxYbGQcz//EABoQAAIDAQEAAAAAAAAAAAAAAAABESExYaH/2gAIAQEAAT8hzBONjtQZSUaokY9pmMH/2gAMAwEAAgADAAAAED/f/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAB/9oACAEDAQE/EBqi/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAh/9oACAECAQE/EHSL/8QAGxAAAwADAQEAAAAAAAAAAAAAAREhABAxobH/2gAIAQEAAT8QG1oNQI4O3OQKCMgw5WJNLQ+X9Oj/2Q==","aspectRatio":2.2222222222222223,"src":"/static/43b6f170e08908f1b2e668b3a132593a/f8504/2022-11-20-cover.jpg","srcSet":"/static/43b6f170e08908f1b2e668b3a132593a/f137a/2022-11-20-cover.jpg 200w,\n/static/43b6f170e08908f1b2e668b3a132593a/8494e/2022-11-20-cover.jpg 400w,\n/static/43b6f170e08908f1b2e668b3a132593a/f8504/2022-11-20-cover.jpg 800w,\n/static/43b6f170e08908f1b2e668b3a132593a/1ce69/2022-11-20-cover.jpg 1200w,\n/static/43b6f170e08908f1b2e668b3a132593a/10c8f/2022-11-20-cover.jpg 1600w,\n/static/43b6f170e08908f1b2e668b3a132593a/d170a/2022-11-20-cover.jpg 1680w","srcWebp":"/static/43b6f170e08908f1b2e668b3a132593a/b303b/2022-11-20-cover.webp","srcSetWebp":"/static/43b6f170e08908f1b2e668b3a132593a/21c67/2022-11-20-cover.webp 200w,\n/static/43b6f170e08908f1b2e668b3a132593a/4b6b9/2022-11-20-cover.webp 400w,\n/static/43b6f170e08908f1b2e668b3a132593a/b303b/2022-11-20-cover.webp 800w,\n/static/43b6f170e08908f1b2e668b3a132593a/bd3e9/2022-11-20-cover.webp 1200w,\n/static/43b6f170e08908f1b2e668b3a132593a/dcbba/2022-11-20-cover.webp 1600w,\n/static/43b6f170e08908f1b2e668b3a132593a/3e738/2022-11-20-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In my last few articles, I showed the power of functional composition. That’s a foundation for effective modelling of your business logic…","fields":{"slug":"/how_events_can_help_on_making_state_based_approach_efficient/","prefix":"2022-11-13","langKey":"en"},"frontmatter":{"title":"How events can help in making the state-based approach efficient","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAwACBP/EABUBAQEAAAAAAAAAAAAAAAAAAAIE/9oADAMBAAIQAxAAAAEs8ihlHGn/xAAaEAACAgMAAAAAAAAAAAAAAAAAEQECEjEz/9oACAEBAAEFArohYstueZ//xAAXEQEAAwAAAAAAAAAAAAAAAAAAAQIx/9oACAEDAQE/Aaox/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8BZ//EABcQAQADAAAAAAAAAAAAAAAAABARUYH/2gAIAQEABj8Cm3H/xAAaEAADAQADAAAAAAAAAAAAAAAAATERIUFx/9oACAEBAAE/IUVT09OLrcHp6REhQ//aAAwDAQACAAMAAAAQDB//xAAWEQEBAQAAAAAAAAAAAAAAAAABACH/2gAIAQMBAT8QAm2w3//EABcRAQEBAQAAAAAAAAAAAAAAAAEAIVH/2gAIAQIBAT8QfJNv/8QAHRABAAICAgMAAAAAAAAAAAAAAQARITGhwWFxkf/aAAgBAQABPxAEkN0G/KAPQMaL+zPFnJdzj9TX6n//2Q==","aspectRatio":2.2222222222222223,"src":"/static/b5d3471b91ede8b299343b5f06a16a98/f8504/2022-11-13-cover.jpg","srcSet":"/static/b5d3471b91ede8b299343b5f06a16a98/f137a/2022-11-13-cover.jpg 200w,\n/static/b5d3471b91ede8b299343b5f06a16a98/8494e/2022-11-13-cover.jpg 400w,\n/static/b5d3471b91ede8b299343b5f06a16a98/f8504/2022-11-13-cover.jpg 800w,\n/static/b5d3471b91ede8b299343b5f06a16a98/1ce69/2022-11-13-cover.jpg 1200w,\n/static/b5d3471b91ede8b299343b5f06a16a98/10c8f/2022-11-13-cover.jpg 1600w,\n/static/b5d3471b91ede8b299343b5f06a16a98/d170a/2022-11-13-cover.jpg 1680w","srcWebp":"/static/b5d3471b91ede8b299343b5f06a16a98/b303b/2022-11-13-cover.webp","srcSetWebp":"/static/b5d3471b91ede8b299343b5f06a16a98/21c67/2022-11-13-cover.webp 200w,\n/static/b5d3471b91ede8b299343b5f06a16a98/4b6b9/2022-11-13-cover.webp 400w,\n/static/b5d3471b91ede8b299343b5f06a16a98/b303b/2022-11-13-cover.webp 800w,\n/static/b5d3471b91ede8b299343b5f06a16a98/bd3e9/2022-11-13-cover.webp 1200w,\n/static/b5d3471b91ede8b299343b5f06a16a98/dcbba/2022-11-13-cover.webp 1600w,\n/static/b5d3471b91ede8b299343b5f06a16a98/3e738/2022-11-13-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Relational databases are not losing data. They’re robust, consistent and secure! Are they? Too often, we mix technical and logical concepts…","fields":{"slug":"/never_lose_data_with_event_sourcing/","prefix":"2022-11-06","langKey":"en"},"frontmatter":{"title":"Never Lose Data Again - Event Sourcing to the Rescue!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAFu42yhOH//xAAcEAABAwUAAAAAAAAAAAAAAAACAAMSASEiMTL/2gAIAQEAAQUCoeDNmzjJnsUW/wD/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAaEAACAgMAAAAAAAAAAAAAAAABAhAhABFx/9oACAEBAAY/AiEts07XLdj/xAAbEAABBAMAAAAAAAAAAAAAAAAAARExQRAhgf/aAAgBAQABPyFOhBc6fe2FXEfCOA//2gAMAwEAAgADAAAAEJPP/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERMf/aAAgBAwEBPxBLSH//xAAXEQEAAwAAAAAAAAAAAAAAAAAAAREx/9oACAECAQE/EJxb/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARIVGhscH/2gAIAQEAAT8QHUBm8BcmukTSUOLl4hRnQ+p13k8Z/9k=","aspectRatio":2.2222222222222223,"src":"/static/08436d286b1afb2c951becc9df73db6e/f8504/2022-11-06-cover.jpg","srcSet":"/static/08436d286b1afb2c951becc9df73db6e/f137a/2022-11-06-cover.jpg 200w,\n/static/08436d286b1afb2c951becc9df73db6e/8494e/2022-11-06-cover.jpg 400w,\n/static/08436d286b1afb2c951becc9df73db6e/f8504/2022-11-06-cover.jpg 800w,\n/static/08436d286b1afb2c951becc9df73db6e/1ce69/2022-11-06-cover.jpg 1200w,\n/static/08436d286b1afb2c951becc9df73db6e/10c8f/2022-11-06-cover.jpg 1600w,\n/static/08436d286b1afb2c951becc9df73db6e/d170a/2022-11-06-cover.jpg 1680w","srcWebp":"/static/08436d286b1afb2c951becc9df73db6e/b303b/2022-11-06-cover.webp","srcSetWebp":"/static/08436d286b1afb2c951becc9df73db6e/21c67/2022-11-06-cover.webp 200w,\n/static/08436d286b1afb2c951becc9df73db6e/4b6b9/2022-11-06-cover.webp 400w,\n/static/08436d286b1afb2c951becc9df73db6e/b303b/2022-11-06-cover.webp 800w,\n/static/08436d286b1afb2c951becc9df73db6e/bd3e9/2022-11-06-cover.webp 1200w,\n/static/08436d286b1afb2c951becc9df73db6e/dcbba/2022-11-06-cover.webp 1600w,\n/static/08436d286b1afb2c951becc9df73db6e/3e738/2022-11-06-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Big picture descriptions and overall explanations are great. They help us to understand the foundations of new ideas and then find the place…","fields":{"slug":"/ordering_in_postgres_outbox/","prefix":"2022-10-28","langKey":"en"},"frontmatter":{"title":"How Postgres sequences issues can impact your messaging guarantees","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8ElEQVQozx3GS2vUQAAA4Pwzj168etCf4E0QVBARPHgoSO2hUqnaotZHDy5FcJGtW211u933K26yyeYxyWSemZlkkt3Yi+B3+gwf4NHM9mIICIkwiVhutWqjw0dxAkOESZpjniOWuT4UKoMg6Pz4ihGUKvNCaAQxmZpORGiIkA/jgPDp+VGntgGY8AiHNCVpLrIqAPjbSbv+Yae9eb3/63g4ccy5a0hdxYiPTTvEGHGBKcdqTfXl9OP9RXM/4orLYurPf/ZPPzWODt896e7crDf2a2df+tOJwWQBEmq5QcJ5zEXApQdhEIPe8dv5oAm5oGkeYDyZTT6/fFHbuHv24Nr315v1g71ht2dAIqkoHA+0R9a4+b61dcN35xFVAc1CqhIiIZFMrZe219p+dfLwTuvWlcHW0+HuG/NiYJBU01QDSL2IxqG97DcgTrBQCWWYSy5LJkuWrZYLv7m9e/z43vntq93nz3p7B2Z3aCRUQSIxzyPEhzNn7uNliOxlZLmh5QJrCRw/hlTFKHVtf2Hai8k0dILADWPIDCo0EzrNSpDQ09/tTm80NheTP4vRzBrPLMvxHS9CTHFVptla6IrrykUSJCzGwpBZKfNSZEWmV2V1qVdVVqzzstLl37yo8v9XeqXyUqpCqCJV2kc8wYww+Q9hlc0fi5MVNQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/18234f66fdd47135465a32320f78e26e/e24fb/2022-10-28-08.png","srcSet":"/static/18234f66fdd47135465a32320f78e26e/6d6b7/2022-10-28-08.png 200w,\n/static/18234f66fdd47135465a32320f78e26e/d184d/2022-10-28-08.png 400w,\n/static/18234f66fdd47135465a32320f78e26e/e24fb/2022-10-28-08.png 800w","srcWebp":"/static/18234f66fdd47135465a32320f78e26e/b303b/2022-10-28-08.webp","srcSetWebp":"/static/18234f66fdd47135465a32320f78e26e/21c67/2022-10-28-08.webp 200w,\n/static/18234f66fdd47135465a32320f78e26e/4b6b9/2022-10-28-08.webp 400w,\n/static/18234f66fdd47135465a32320f78e26e/b303b/2022-10-28-08.webp 800w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"My road to functional programming was pretty long. I started with structural programming in C++ and then rebranded into an Object-Oriented…","fields":{"slug":"/writing_and_testing_business_logic_in_fsharp/","prefix":"2022-10-23","langKey":"en"},"frontmatter":{"title":"Writing and testing business logic in F#","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIDBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAcGk2EAP/8QAGRAAAwADAAAAAAAAAAAAAAAAAQIxABAR/9oACAEBAAEFAhX5oV7n/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFhAAAwAAAAAAAAAAAAAAAAAAACDh/9oACAEBAAY/AiL/AP/EABoQAAICAwAAAAAAAAAAAAAAABExARAAcYH/2gAIAQEAAT8hECjkYAPikbt//9oADAMBAAIAAwAAABDQD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAAEEAwEAAAAAAAAAAAAAAAEAEBExIXGhUf/aAAgBAQABPxACHYEwJ4ocZ9CjeS3GVm2//9k=","aspectRatio":2.2222222222222223,"src":"/static/25d90fad4e81b76cff5288e985d5b082/f8504/2022-10-23-cover.jpg","srcSet":"/static/25d90fad4e81b76cff5288e985d5b082/f137a/2022-10-23-cover.jpg 200w,\n/static/25d90fad4e81b76cff5288e985d5b082/8494e/2022-10-23-cover.jpg 400w,\n/static/25d90fad4e81b76cff5288e985d5b082/f8504/2022-10-23-cover.jpg 800w,\n/static/25d90fad4e81b76cff5288e985d5b082/1ce69/2022-10-23-cover.jpg 1200w,\n/static/25d90fad4e81b76cff5288e985d5b082/10c8f/2022-10-23-cover.jpg 1600w,\n/static/25d90fad4e81b76cff5288e985d5b082/d170a/2022-10-23-cover.jpg 1680w","srcWebp":"/static/25d90fad4e81b76cff5288e985d5b082/b303b/2022-10-23-cover.webp","srcSetWebp":"/static/25d90fad4e81b76cff5288e985d5b082/21c67/2022-10-23-cover.webp 200w,\n/static/25d90fad4e81b76cff5288e985d5b082/4b6b9/2022-10-23-cover.webp 400w,\n/static/25d90fad4e81b76cff5288e985d5b082/b303b/2022-10-23-cover.webp 800w,\n/static/25d90fad4e81b76cff5288e985d5b082/bd3e9/2022-10-23-cover.webp 1200w,\n/static/25d90fad4e81b76cff5288e985d5b082/dcbba/2022-10-23-cover.webp 1600w,\n/static/25d90fad4e81b76cff5288e985d5b082/3e738/2022-10-23-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"There are only a few patterns that I’m comfortable saying: “You should use it always if you want to build mature system”. One of them is the…","fields":{"slug":"/push_based_outbox_pattern_with_postgres_logical_replication/","prefix":"2022-10-13","langKey":"en"},"frontmatter":{"title":"Push-based Outbox Pattern with Postgres Logical Replication","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAECAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB7cuU0GH/xAAZEAACAwEAAAAAAAAAAAAAAAAAAQIQETH/2gAIAQEAAQUCZqpEen//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAACAwAAAAAAAAAAAAAAAAABEAARIf/aAAgBAQAGPwKYbRf/xAAaEAEAAgMBAAAAAAAAAAAAAAABEBEAITFR/9oACAEBAAE/IbawYoF5HMj/2gAMAwEAAgADAAAAEA8//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHRABAAMAAQUAAAAAAAAAAAAAAQARIRAxUXGh8P/aAAgBAQABPxBC1YavaAkXaJst+J7TOj4eP//Z","aspectRatio":2.2222222222222223,"src":"/static/df0bc7f95463875eca32513aea9cf439/f8504/2022-10-13-cover.jpg","srcSet":"/static/df0bc7f95463875eca32513aea9cf439/f137a/2022-10-13-cover.jpg 200w,\n/static/df0bc7f95463875eca32513aea9cf439/8494e/2022-10-13-cover.jpg 400w,\n/static/df0bc7f95463875eca32513aea9cf439/f8504/2022-10-13-cover.jpg 800w,\n/static/df0bc7f95463875eca32513aea9cf439/1ce69/2022-10-13-cover.jpg 1200w,\n/static/df0bc7f95463875eca32513aea9cf439/10c8f/2022-10-13-cover.jpg 1600w,\n/static/df0bc7f95463875eca32513aea9cf439/d170a/2022-10-13-cover.jpg 1680w","srcWebp":"/static/df0bc7f95463875eca32513aea9cf439/b303b/2022-10-13-cover.webp","srcSetWebp":"/static/df0bc7f95463875eca32513aea9cf439/21c67/2022-10-13-cover.webp 200w,\n/static/df0bc7f95463875eca32513aea9cf439/4b6b9/2022-10-13-cover.webp 400w,\n/static/df0bc7f95463875eca32513aea9cf439/b303b/2022-10-13-cover.webp 800w,\n/static/df0bc7f95463875eca32513aea9cf439/bd3e9/2022-10-13-cover.webp 1200w,\n/static/df0bc7f95463875eca32513aea9cf439/dcbba/2022-10-13-cover.webp 1600w,\n/static/df0bc7f95463875eca32513aea9cf439/3e738/2022-10-13-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ve heard a few times that Event Sourcing is hard to test. I’m not sure where this myth comes from; maybe from mixing it with event…","fields":{"slug":"/testing_event_sourcing/","prefix":"2022-10-07","langKey":"en"},"frontmatter":{"title":"Testing business logic in Event Sourcing, and beyond!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAb00pjSkwI//xAAbEAACAgMBAAAAAAAAAAAAAAABAwACESExMv/aAAgBAQABBQJ24wZsbGM4r0e//8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oACAEDAQE/AcR//8QAFhEBAQEAAAAAAAAAAAAAAAAAABFB/9oACAECAQE/AdV//8QAGhAAAgIDAAAAAAAAAAAAAAAAAQIQEQASMf/aAAgBAQAGPwIA3W2IwHDDT//EABwQAAICAgMAAAAAAAAAAAAAAAABESExwUFhof/aAAgBAQABPyGEa0FLYxHSukr7EHweY2GQ/9oADAMBAAIAAwAAABAg7//EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAIAQMBAT8QA7gZf//EABcRAQEBAQAAAAAAAAAAAAAAAAEAESH/2gAIAQIBAT8QV4lbf//EABwQAAICAwEBAAAAAAAAAAAAAAERACExYfChwf/aAAgBAQABPxBAAWAYADvRwnKcoEPhQCTgh3O3QmfmJ7p//9k=","aspectRatio":2.2222222222222223,"src":"/static/a0d2d81822d9c122512c41765977ae13/f8504/2022-10-07-cover.jpg","srcSet":"/static/a0d2d81822d9c122512c41765977ae13/f137a/2022-10-07-cover.jpg 200w,\n/static/a0d2d81822d9c122512c41765977ae13/8494e/2022-10-07-cover.jpg 400w,\n/static/a0d2d81822d9c122512c41765977ae13/f8504/2022-10-07-cover.jpg 800w,\n/static/a0d2d81822d9c122512c41765977ae13/1ce69/2022-10-07-cover.jpg 1200w,\n/static/a0d2d81822d9c122512c41765977ae13/10c8f/2022-10-07-cover.jpg 1600w,\n/static/a0d2d81822d9c122512c41765977ae13/d170a/2022-10-07-cover.jpg 1680w","srcWebp":"/static/a0d2d81822d9c122512c41765977ae13/b303b/2022-10-07-cover.webp","srcSetWebp":"/static/a0d2d81822d9c122512c41765977ae13/21c67/2022-10-07-cover.webp 200w,\n/static/a0d2d81822d9c122512c41765977ae13/4b6b9/2022-10-07-cover.webp 400w,\n/static/a0d2d81822d9c122512c41765977ae13/b303b/2022-10-07-cover.webp 800w,\n/static/a0d2d81822d9c122512c41765977ae13/bd3e9/2022-10-07-cover.webp 1200w,\n/static/a0d2d81822d9c122512c41765977ae13/dcbba/2022-10-07-cover.webp 1600w,\n/static/a0d2d81822d9c122512c41765977ae13/3e738/2022-10-07-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We live in a time of information overload. We are constantly stimulated. Our focus skills are similar to a goldfish. Seemingly our life is…","fields":{"slug":"/dive_a_bit_deeper_look_a_bit_wider/","prefix":"2022-09-28","langKey":"en"},"frontmatter":{"title":"Dive a bit deeper, look a bit wider","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABAACBf/EABYBAQEBAAAAAAAAAAAAAAAAAAADBP/aAAwDAQACEAMQAAABK7i7vnZCj//EABoQAAEFAQAAAAAAAAAAAAAAAAABAgMUITL/2gAIAQEAAQUCieWMWTWicn//xAAVEQEBAAAAAAAAAAAAAAAAAAAQMf/aAAgBAwEBPwGH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFhABAQEAAAAAAAAAAAAAAAAAADEg/9oACAEBAAY/AlXH/8QAGRAAAgMBAAAAAAAAAAAAAAAAAREAEDFB/9oACAEBAAE/IU9UBOMZD0M6/9oADAMBAAIAAwAAABA0L//EABYRAAMAAAAAAAAAAAAAAAAAAAARIf/aAAgBAwEBPxCsin//xAAYEQACAwAAAAAAAAAAAAAAAAAAAREhMf/aAAgBAgEBPxCnpJ//xAAcEAEAAgEFAAAAAAAAAAAAAAABABExIWGBobH/2gAIAQEAAT8QohyRZxVpW0a3XMJ2H2OZ/9k=","aspectRatio":2.2222222222222223,"src":"/static/0e1d7d3ffc8896925c2ff3871347fc68/f8504/2022-09-28-cover.jpg","srcSet":"/static/0e1d7d3ffc8896925c2ff3871347fc68/f137a/2022-09-28-cover.jpg 200w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/8494e/2022-09-28-cover.jpg 400w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/f8504/2022-09-28-cover.jpg 800w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/1ce69/2022-09-28-cover.jpg 1200w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/10c8f/2022-09-28-cover.jpg 1600w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/d170a/2022-09-28-cover.jpg 1680w","srcWebp":"/static/0e1d7d3ffc8896925c2ff3871347fc68/b303b/2022-09-28-cover.webp","srcSetWebp":"/static/0e1d7d3ffc8896925c2ff3871347fc68/21c67/2022-09-28-cover.webp 200w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/4b6b9/2022-09-28-cover.webp 400w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/b303b/2022-09-28-cover.webp 800w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/bd3e9/2022-09-28-cover.webp 1200w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/dcbba/2022-09-28-cover.webp 1600w,\n/static/0e1d7d3ffc8896925c2ff3871347fc68/3e738/2022-09-28-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Paweł Janas is a significant figure in Polish football history. He was a decent defender on his own, then coaching our best clubs and…","fields":{"slug":"/on_the_importance_of_shaping_the_boundaries_in_team_management/","prefix":"2022-09-21","langKey":"en"},"frontmatter":{"title":"On the importance of setting boundaries in team management","category":"Management","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQGAwX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQP/2gAMAwEAAhADEAAAAWM+WmbWk+HT/8QAGhAAAgMBAQAAAAAAAAAAAAAAAAECAwQUMv/aAAgBAQABBQKWlFGxNdNYvECJ/8QAFxEBAAMAAAAAAAAAAAAAAAAAAAEDEf/aAAgBAwEBPwFFev/EABURAQEAAAAAAAAAAAAAAAAAAAAS/9oACAECAQE/AVP/xAAZEAACAwEAAAAAAAAAAAAAAAAAARASMSH/2gAIAQEABj8Csujvpo5//8QAGxABAAICAwAAAAAAAAAAAAAAAQAxEBFxgdH/2gAIAQEAAT8hKIIDcH6q1DT5wbdko8z/2gAMAwEAAgADAAAAEBz/AP/EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAwEBPxBgG7f/xAAVEQEBAAAAAAAAAAAAAAAAAAABAP/aAAgBAgEBPxAJRf/EAB4QAQACAgEFAAAAAAAAAAAAAAEAESFh8DFRgZGh/9oACAEBAAE/EE856KHse7iD0osqI5rw4jQ33lPvZwNzgan/2Q==","aspectRatio":2.2222222222222223,"src":"/static/b8b49eac6f7f53d2f2d7e3227f5d1926/f8504/2022-09-21-cover.jpg","srcSet":"/static/b8b49eac6f7f53d2f2d7e3227f5d1926/f137a/2022-09-21-cover.jpg 200w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/8494e/2022-09-21-cover.jpg 400w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/f8504/2022-09-21-cover.jpg 800w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/1ce69/2022-09-21-cover.jpg 1200w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/10c8f/2022-09-21-cover.jpg 1600w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/d170a/2022-09-21-cover.jpg 1680w","srcWebp":"/static/b8b49eac6f7f53d2f2d7e3227f5d1926/b303b/2022-09-21-cover.webp","srcSetWebp":"/static/b8b49eac6f7f53d2f2d7e3227f5d1926/21c67/2022-09-21-cover.webp 200w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/4b6b9/2022-09-21-cover.webp 400w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/b303b/2022-09-21-cover.webp 800w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/bd3e9/2022-09-21-cover.webp 1200w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/dcbba/2022-09-21-cover.webp 1600w,\n/static/b8b49eac6f7f53d2f2d7e3227f5d1926/3e738/2022-09-21-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We work in an industry that’s full of passionate people. Doing what you like and getting paid for it is a privilege and a curse. We’re…","fields":{"slug":"/it_doesnt_have_to_be_toxic_at_work/","prefix":"2022-09-14","langKey":"en"},"frontmatter":{"title":"It doesn't have to be toxic at work","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMFBP/EABQBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAULzrGqSRP/EABoQAAICAwAAAAAAAAAAAAAAAAABAhEDMUP/2gAIAQEAAQUCi6LZlkk3vmf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAeEAABAwQDAAAAAAAAAAAAAAARAAESAxAhIjFRYf/aAAgBAQAGPwJxUHikdjyU0Osp7//EABwQAAEEAwEAAAAAAAAAAAAAAAEAECHBQVFhsf/aAAgBAQABPyH0KQjA9yihMeGWRu3/2gAMAwEAAgADAAAAEH8f/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQMBAT8QJ//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAdEAEBAAIBBQAAAAAAAAAAAAABEQAxUSFBcaGx/9oACAEBAAE/EEUKqoBHjrlMgC3iXXZrDRglZdtuziZ7Dm/z9Yaz/9k=","aspectRatio":2.2222222222222223,"src":"/static/f431906d892322f9badd1c3b88a31fb8/f8504/2022-09-14-cover.jpg","srcSet":"/static/f431906d892322f9badd1c3b88a31fb8/f137a/2022-09-14-cover.jpg 200w,\n/static/f431906d892322f9badd1c3b88a31fb8/8494e/2022-09-14-cover.jpg 400w,\n/static/f431906d892322f9badd1c3b88a31fb8/f8504/2022-09-14-cover.jpg 800w,\n/static/f431906d892322f9badd1c3b88a31fb8/1ce69/2022-09-14-cover.jpg 1200w,\n/static/f431906d892322f9badd1c3b88a31fb8/10c8f/2022-09-14-cover.jpg 1600w,\n/static/f431906d892322f9badd1c3b88a31fb8/d170a/2022-09-14-cover.jpg 1680w","srcWebp":"/static/f431906d892322f9badd1c3b88a31fb8/b303b/2022-09-14-cover.webp","srcSetWebp":"/static/f431906d892322f9badd1c3b88a31fb8/21c67/2022-09-14-cover.webp 200w,\n/static/f431906d892322f9badd1c3b88a31fb8/4b6b9/2022-09-14-cover.webp 400w,\n/static/f431906d892322f9badd1c3b88a31fb8/b303b/2022-09-14-cover.webp 800w,\n/static/f431906d892322f9badd1c3b88a31fb8/bd3e9/2022-09-14-cover.webp 1200w,\n/static/f431906d892322f9badd1c3b88a31fb8/dcbba/2022-09-14-cover.webp 1600w,\n/static/f431906d892322f9badd1c3b88a31fb8/3e738/2022-09-14-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"War never changes; migrations are always complex. It’s always a mind gymnastics and searching for risks and what may go wrong. Sometimes we…","fields":{"slug":"/event_versioning_with_marten/","prefix":"2022-09-07","langKey":"en"},"frontmatter":{"title":"Event Versioning with Marten","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAID/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAcLi5LIVP//EABkQAAIDAQAAAAAAAAAAAAAAAAABAgMSMv/aAAgBAQABBQKKEtLLKuIiP//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPwGNf//EABYRAQEBAAAAAAAAAAAAAAAAAAASQf/aAAgBAgEBPwHUP//EABgQAQADAQAAAAAAAAAAAAAAAAAQMYGR/9oACAEBAAY/AmKdn//EABwQAAEEAwEAAAAAAAAAAAAAAAEAESExQVFxgf/aAAgBAQABPyFg28NCEATG1lFzD1VdTLgVV//aAAwDAQACAAMAAAAQS8//xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAEDAQE/ENplH//EABYRAQEBAAAAAAAAAAAAAAAAABEAcf/aAAgBAgEBPxBBav/EAB0QAQACAgIDAAAAAAAAAAAAAAEAESFBUfAxcbH/2gAIAQEAAT8QdC4tkFHXqE1V7SkHTwVUziLAx0PE8ezE+rP/2Q==","aspectRatio":2.2222222222222223,"src":"/static/b871002a0dad67e44f57319ae70c18ef/f8504/2022-09-07-cover.jpg","srcSet":"/static/b871002a0dad67e44f57319ae70c18ef/f137a/2022-09-07-cover.jpg 200w,\n/static/b871002a0dad67e44f57319ae70c18ef/8494e/2022-09-07-cover.jpg 400w,\n/static/b871002a0dad67e44f57319ae70c18ef/f8504/2022-09-07-cover.jpg 800w,\n/static/b871002a0dad67e44f57319ae70c18ef/1ce69/2022-09-07-cover.jpg 1200w,\n/static/b871002a0dad67e44f57319ae70c18ef/10c8f/2022-09-07-cover.jpg 1600w,\n/static/b871002a0dad67e44f57319ae70c18ef/d170a/2022-09-07-cover.jpg 1680w","srcWebp":"/static/b871002a0dad67e44f57319ae70c18ef/b303b/2022-09-07-cover.webp","srcSetWebp":"/static/b871002a0dad67e44f57319ae70c18ef/21c67/2022-09-07-cover.webp 200w,\n/static/b871002a0dad67e44f57319ae70c18ef/4b6b9/2022-09-07-cover.webp 400w,\n/static/b871002a0dad67e44f57319ae70c18ef/b303b/2022-09-07-cover.webp 800w,\n/static/b871002a0dad67e44f57319ae70c18ef/bd3e9/2022-09-07-cover.webp 1200w,\n/static/b871002a0dad67e44f57319ae70c18ef/dcbba/2022-09-07-cover.webp 1600w,\n/static/b871002a0dad67e44f57319ae70c18ef/3e738/2022-09-07-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the traditional approach, what we get is what we store. Our write model is too often used directly as our read model, because the typical…","fields":{"slug":"/slim_your_entities_with_event_sourcing/","prefix":"2022-08-31","langKey":"en"},"frontmatter":{"title":"Slim your aggregates with Event Sourcing!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEBf/EABcBAAMBAAAAAAAAAAAAAAAAAAACAwT/2gAMAwEAAhADEAAAAXWxiuWUj7f/xAAdEAABAgcAAAAAAAAAAAAAAAACAAMBERIhMTNC/9oACAEBAAEFAihMaCNE1djVyef/xAAXEQADAQAAAAAAAAAAAAAAAAAAAQIx/9oACAEDAQE/AWycP//EABURAQEAAAAAAAAAAAAAAAAAABBB/9oACAECAQE/Aaf/xAAcEAACAAcAAAAAAAAAAAAAAAAAAQIDEBIhMXL/2gAIAQEABj8Cl2jwbIeR0//EABsQAAICAwEAAAAAAAAAAAAAAAABETEhcaGx/9oACAEBAAE/IZZVKRuURWSLQcIXA8T/2gAMAwEAAgADAAAAEJvv/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERMWH/2gAIAQMBAT8QerOGJ//EABYRAQEBAAAAAAAAAAAAAAAAAAEAEf/aAAgBAgEBPxBNDBf/xAAdEAEBAAIBBQAAAAAAAAAAAAABEQAhMRBRcaGx/9oACAEBAAE/EEZcOdwySMupimCIoYurudEe9zg8Pmf/2Q==","aspectRatio":2.2222222222222223,"src":"/static/4fb7e9b76a8d20656bdfafc7fea23634/f8504/2022-08-31-cover.jpg","srcSet":"/static/4fb7e9b76a8d20656bdfafc7fea23634/f137a/2022-08-31-cover.jpg 200w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/8494e/2022-08-31-cover.jpg 400w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/f8504/2022-08-31-cover.jpg 800w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/1ce69/2022-08-31-cover.jpg 1200w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/10c8f/2022-08-31-cover.jpg 1600w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/d170a/2022-08-31-cover.jpg 1680w","srcWebp":"/static/4fb7e9b76a8d20656bdfafc7fea23634/b303b/2022-08-31-cover.webp","srcSetWebp":"/static/4fb7e9b76a8d20656bdfafc7fea23634/21c67/2022-08-31-cover.webp 200w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/4b6b9/2022-08-31-cover.webp 400w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/b303b/2022-08-31-cover.webp 800w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/bd3e9/2022-08-31-cover.webp 1200w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/dcbba/2022-08-31-cover.webp 1600w,\n/static/4fb7e9b76a8d20656bdfafc7fea23634/3e738/2022-08-31-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The first time I did not become a musician was when my grandma tried to sign me to music school. During rehearsal, I stubbornly said I would…","fields":{"slug":"/how_playing_on_guitar_helps_in_being_better_developer/","prefix":"2022-08-24","langKey":"en"},"frontmatter":{"title":"How playing on guitar can help you to be a better developer?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/aAAwDAQACEAMQAAABnXkDUVG3/8QAHBAAAQMFAAAAAAAAAAAAAAAAAgABMQMREiMz/9oACAEBAAEFAjqG6y13ZHAdTn//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPwGI/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8Bqv/EABwQAAIBBQEAAAAAAAAAAAAAAAABAhARMkGBof/aAAgBAQAGPwKyaQoR0YenR0//xAAdEAACAQQDAAAAAAAAAAAAAAAAAREQITGxQVFh/9oACAEBAAE/IbSGIa7GqumTjk9AzDW1R//aAAwDAQACAAMAAAAQfw//xAAWEQEBAQAAAAAAAAAAAAAAAAABACH/2gAIAQMBAT8QTk3/xAAVEQEBAAAAAAAAAAAAAAAAAAABAP/aAAgBAgEBPxAUX//EAB0QAQACAgIDAAAAAAAAAAAAAAEAETFRcaEhQbH/2gAIAQEAAT8QWRFU7NqjshuRcjyOvUNTyp3/ANnYln4n/9k=","aspectRatio":2.2222222222222223,"src":"/static/f7f1a5403efe3430c32f38612bea42b7/f8504/2022-08-24-cover.jpg","srcSet":"/static/f7f1a5403efe3430c32f38612bea42b7/f137a/2022-08-24-cover.jpg 200w,\n/static/f7f1a5403efe3430c32f38612bea42b7/8494e/2022-08-24-cover.jpg 400w,\n/static/f7f1a5403efe3430c32f38612bea42b7/f8504/2022-08-24-cover.jpg 800w,\n/static/f7f1a5403efe3430c32f38612bea42b7/1ce69/2022-08-24-cover.jpg 1200w,\n/static/f7f1a5403efe3430c32f38612bea42b7/10c8f/2022-08-24-cover.jpg 1600w,\n/static/f7f1a5403efe3430c32f38612bea42b7/d170a/2022-08-24-cover.jpg 1680w","srcWebp":"/static/f7f1a5403efe3430c32f38612bea42b7/b303b/2022-08-24-cover.webp","srcSetWebp":"/static/f7f1a5403efe3430c32f38612bea42b7/21c67/2022-08-24-cover.webp 200w,\n/static/f7f1a5403efe3430c32f38612bea42b7/4b6b9/2022-08-24-cover.webp 400w,\n/static/f7f1a5403efe3430c32f38612bea42b7/b303b/2022-08-24-cover.webp 800w,\n/static/f7f1a5403efe3430c32f38612bea42b7/bd3e9/2022-08-24-cover.webp 1200w,\n/static/f7f1a5403efe3430c32f38612bea42b7/dcbba/2022-08-24-cover.webp 1600w,\n/static/f7f1a5403efe3430c32f38612bea42b7/3e738/2022-08-24-cover.webp 1680w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Gilbert Keith Chesterton was a British writer from the turn of the 19th and 20th centuries. As for his times, we would call him an…","fields":{"slug":"/chesterton_fence_and_software_architecture/","prefix":"2022-08-17","langKey":"en"},"frontmatter":{"title":"What do the British writer and his fence have to do with Software Architecture?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACmUlEQVQozwXB7U/MAQDA8Z8/wBtjY4hmyzLlRieVmrlxKDZmJmJemNpQWejBRXHVuUMRrU3Eiy4RctyVJt1D3VWn61dXl+535K7nKzRu1rzw9fkIbd0+gjNzlJhGWVPUx6pCF5El/SwpFFl0uY+d9yTMvX4c4gjiyCRzP0PYBoMYu/yEQn8Y8n7D4uhjYmqWhYUFhBbbAENeP/7xGb4EZtF3TxNbPsKy4iEWX3Gjt3xlbHwKKTBHxmOJiuYJrIPfMdgkHjW0UlzZwP23A2iaJ3B5gwh2l4dBbwBfIMiQb4phKUDoVwjfZIjazlk0Tz/S1uXGHQhhHgziCfzAE/iFwfqZq7UW3thHKTLOc9fyG4uzH8Ha1Yuh28+dJjemdifV9UbetnVicw4wMz2DNDqJXZRwiJ+xO/uwOUWm5+axSn8Rx/7h8M2ja/rAsxcq8lVyhCazyIknXpRVw5yt85Bd5+Z8TRdP3znQm6w8b7HSbHVisHt53eHD4vqK2enB2G6i0VDCraoUclThnMlcyrnLYQgfPnm5ZRqhpt1HY88YRnGaDu939FaJh0aRalM/Lz/28L7TzIPnldTU51JRtYcrJevIVa8gr3Q1ReVRFOpk5JXKEN7bh2ntdGMwu2h404r+lQnd/SqyVBdQlZ3k5t1T5BTIUesiUWvDUN1YTkFZOEXaaPKvxXEpV0laWhL798azT7EFIVuj4lB6KruOK0lJU3A6M4bzBWtRlydRrIuhuDwMbWUk6tsbKauQcV27jaxMBakHlexTJLErMYmEmGjk0evZvGEtQvKhTRw5HMuJowlkZuygUpvKzbIDPLh3jNrqSxRo4rmYE0e+KpZCTTzpJ7ejjJOzO1HO1qgIYmURxG2NJEq2EkVyGP8BDr36SZPK4BgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/05c836a4ca371536718da6f8c7e1f45c/e24fb/2022-08-17-cover.png","srcSet":"/static/05c836a4ca371536718da6f8c7e1f45c/6d6b7/2022-08-17-cover.png 200w,\n/static/05c836a4ca371536718da6f8c7e1f45c/d184d/2022-08-17-cover.png 400w,\n/static/05c836a4ca371536718da6f8c7e1f45c/e24fb/2022-08-17-cover.png 800w,\n/static/05c836a4ca371536718da6f8c7e1f45c/caa3b/2022-08-17-cover.png 1000w","srcWebp":"/static/05c836a4ca371536718da6f8c7e1f45c/b303b/2022-08-17-cover.webp","srcSetWebp":"/static/05c836a4ca371536718da6f8c7e1f45c/21c67/2022-08-17-cover.webp 200w,\n/static/05c836a4ca371536718da6f8c7e1f45c/4b6b9/2022-08-17-cover.webp 400w,\n/static/05c836a4ca371536718da6f8c7e1f45c/b303b/2022-08-17-cover.webp 800w,\n/static/05c836a4ca371536718da6f8c7e1f45c/c7a8b/2022-08-17-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I don’t know if it will work well in production! Will it scale? What if we get too many users during Black Friday? Do you know those…","fields":{"slug":"/why_are_we_afraid_of_our_decisions/","prefix":"2022-08-10","langKey":"en"},"frontmatter":{"title":"Why are we afraid of our decisions?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACHklEQVQozz3RzUtUURzG8UttgvbtguhPCCQiWgWtigiiFq6Ssqhoo/ZCETThEBURiEElWblQKhCycErINM10CmnUuc7bfT333nPfsqKCNn7j3EkXD7+z+pzze44mwxjPl7jCX4/nBXjCJ0m/c+9mjv6LbYx0tzM60EO68hMpQ8IwXk8UJcRxupqmK2iBjBBesI45/2cQhNi2Q+7kET4+7WFhuJ/ejlY8TxCGUYZKGWUJw3hVoUnybVXzgxDH9bAdkc21SF+yWCqRbz/MdG8O580Qj66cQtfLJHFMEATZpWtRcBynaGpdBVi2m6Eq6hz9+ctCeZET+1qYe3KbcOY119oO8GlyjPTHLzwh8P0gq8f3ZYaqV2agQgzTwbScJmw51Pv6GLx8nv0t2xl/mCfR5+g6tJOX3WdIHQsRBAhX4LrNzhWo+tRUfwppGBb1uoHtS4qFAvq2zXRqGvnOY8z25zAnh3l+5wKDWzV+n96LrXpXNTkK9ZqojNBcITEtQa1uUKnWMW3B7NQEiw/y3D+4B31mlBfHjzJ29Rz2xDOWW3dRu9FBbWEJ1wuwbTdDhfBR/6HZjp+B1ZqBvlylWjcpfS7y9dVjSoUBGpMjXN+wkUu7dyC+vMX9MIJolLFUPZaDadpNVL3Sl2iW7dEwHCoVg6XyMnq1wezEO+aH7pJUiry/1cX0Jo2zW7dQLAyyUhrHmZ/KNjEMM6sqQ9XqwucfeTNdI+mgGAcAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d865af1a156db30066ef2334ff2e2e74/e24fb/2022-08-10-cover.png","srcSet":"/static/d865af1a156db30066ef2334ff2e2e74/6d6b7/2022-08-10-cover.png 200w,\n/static/d865af1a156db30066ef2334ff2e2e74/d184d/2022-08-10-cover.png 400w,\n/static/d865af1a156db30066ef2334ff2e2e74/e24fb/2022-08-10-cover.png 800w,\n/static/d865af1a156db30066ef2334ff2e2e74/caa3b/2022-08-10-cover.png 1000w","srcWebp":"/static/d865af1a156db30066ef2334ff2e2e74/b303b/2022-08-10-cover.webp","srcSetWebp":"/static/d865af1a156db30066ef2334ff2e2e74/21c67/2022-08-10-cover.webp 200w,\n/static/d865af1a156db30066ef2334ff2e2e74/4b6b9/2022-08-10-cover.webp 400w,\n/static/d865af1a156db30066ef2334ff2e2e74/b303b/2022-08-10-cover.webp 800w,\n/static/d865af1a156db30066ef2334ff2e2e74/c7a8b/2022-08-10-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last two articles, I explained how to organise your business logic effectively, showing how proper typing and composition can help to…","fields":{"slug":"/type_script_node_Js_event_sourcing/","prefix":"2022-08-03","langKey":"en"},"frontmatter":{"title":"Straightforward Event Sourcing with TypeScript and NodeJS","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABVElEQVQoz5WQS0sCYRSG+4NBv6JFQWCQoZBQQYQhEdSiRbhyJYaBkRhUJkh0UZPKSs0xZjTFdLzNGM58T6QVXcTorA68t/OeEb6MEIL/zCD+yE/Q0DW0xzydUolWJk0rm0FXFDqyjCblaEkPqIkYerHwqftq/Muw22zQuLmmnkxQPYmiXsapZ28px84oJ+O8SBLVaLQXNtTwZwUhzP7yVOPaM0/o0EFgbZqLkA9DtBAYA2v/uvAjUXTfJDqq30N+bJSrwBztSpC91QlOfcuAxptkaOUe8E7q6Gm0ZoRabgc14UWvhBHmOZp6QObU+z38r8pdrYF67KYedqPsblIMbiL716nuu1G2XSSDns+3DK388bd2IYWyaKG0ZKXitFF22qi47DxvLHJvHyeytdLXmMZfhn2woSSQF2Yp2GcozFmRbRYk6xRPjlnurJOkjgI9njnA8BVViZ/r4ZpuYgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/24c37d5f1cf03b47c126c731a50d273d/e24fb/2022-08-03-cover.png","srcSet":"/static/24c37d5f1cf03b47c126c731a50d273d/6d6b7/2022-08-03-cover.png 200w,\n/static/24c37d5f1cf03b47c126c731a50d273d/d184d/2022-08-03-cover.png 400w,\n/static/24c37d5f1cf03b47c126c731a50d273d/e24fb/2022-08-03-cover.png 800w,\n/static/24c37d5f1cf03b47c126c731a50d273d/caa3b/2022-08-03-cover.png 1000w","srcWebp":"/static/24c37d5f1cf03b47c126c731a50d273d/b303b/2022-08-03-cover.webp","srcSetWebp":"/static/24c37d5f1cf03b47c126c731a50d273d/21c67/2022-08-03-cover.webp 200w,\n/static/24c37d5f1cf03b47c126c731a50d273d/4b6b9/2022-08-03-cover.webp 400w,\n/static/24c37d5f1cf03b47c126c731a50d273d/b303b/2022-08-03-cover.webp 800w,\n/static/24c37d5f1cf03b47c126c731a50d273d/c7a8b/2022-08-03-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the article “How to effectively compose your business logic”, I explained how explicit types definition can help in making our codebase…","fields":{"slug":"/union_types_in_csharp/","prefix":"2022-07-27","langKey":"en"},"frontmatter":{"title":"Union types in C#","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AFxob295gnWBi3F2eMy9qdfGvdnRweDStLyXaDMgEw8MDiEXFo9SJodKIIlePoJ6eHZ+hmdtcFheYFVcYABkcHpxfYZ0gYmDjJS5rp66iYPLvK7ZyqqAblQBAQIODRAPDhSKWDB5SCVzPRh4WkV9hY6CiZGAh49vd34AZXN9a3iDc4GKd4OLkZSSm4x4hnFXjHFNHxwYAAEFCQoNAAAIYEcxf1MuhFAndVhIho+bkpqlgImRdHyEAHiFkHKAi3WBi3mFj4uXol1iZjg1LENDOwkNEQ0MDi0gFwcHDC4oJVg8J41aMGBDNH6Ik4KLlH6Gj3iCjQBve4Rue4RwfIZ3g4yMlZ2fqbJ6hJIxOkEYICQpJB9nQyYHBggQDRRXOSWhd1FrXVepqa7T2+jM0uHByNkAnqq1rLfCv8vV1d3l7vL5+vv9////npOIQz89X1pVjW1RSj87Pi8skX1ruZ2DzMzNm46G/f//7vb+6u/9AOrw/un0/e/7//n7/vn5/fT1+f3//8e2o7aroN3a17eegq+dknlkWKuajqqVif///6yinbCrpuLo9OLn9gDk6vnl7Prr9v/1/P/+///w9vzm7PWunIXCuKjl4Nadi3LBtamWfmu5qJzCs6b////v+Py7u768vMXg5/kA4Obw2d7pxcnOwMHCrqyoqqeglI2EalxIdGtdgHhscGVXemxfbGRddmlakYV3paqs2uHr7fP/3+X52t/zCgEp+Y0ndnEAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/434eb05e8dbf58e96b66532185173039/e24fb/2022-07-27-cover.png","srcSet":"/static/434eb05e8dbf58e96b66532185173039/6d6b7/2022-07-27-cover.png 200w,\n/static/434eb05e8dbf58e96b66532185173039/d184d/2022-07-27-cover.png 400w,\n/static/434eb05e8dbf58e96b66532185173039/e24fb/2022-07-27-cover.png 800w,\n/static/434eb05e8dbf58e96b66532185173039/caa3b/2022-07-27-cover.png 1000w","srcWebp":"/static/434eb05e8dbf58e96b66532185173039/b303b/2022-07-27-cover.webp","srcSetWebp":"/static/434eb05e8dbf58e96b66532185173039/21c67/2022-07-27-cover.webp 200w,\n/static/434eb05e8dbf58e96b66532185173039/4b6b9/2022-07-27-cover.webp 400w,\n/static/434eb05e8dbf58e96b66532185173039/b303b/2022-07-27-cover.webp 800w,\n/static/434eb05e8dbf58e96b66532185173039/c7a8b/2022-07-27-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s say that we’d like to implement Shopping Cart. We have the following requirements: The customer may only add a product to the shopping…","fields":{"slug":"/how_to_effectively_compose_your_business_logic/","prefix":"2022-07-20","langKey":"en"},"frontmatter":{"title":"How to effectively compose your business logic","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACDklEQVQozzXQwUvqAADH8f0teVDSXYIc6WoralrgxYXrsPYGbq3DnDQJha1EFiHpTVzQJRqNYJAuqi0IdqvuBd2CkcEKLI1oHoLeI+N97j++8ANarZZlWY7jWJYly3K9Xt/b27u/v3dd9/n5ud/v+74/GPr8/Hx/f+92u57nPT4+Pjw8AGdnZ47j3NzcmKYpy7Ioivv7+6+vr29vb77vf39///3v6+vr4+NjMBj0ej3P8zqdDqDr+vHxcbvdtm374uKCoqharXZ+fn50dGTb9uXlpeM4V1dXd3d3t7e319fXLy8vT09Pruv+lKPR6MTERCwWg2F4ZmYGhmEMw0ql0sLCwvz8fDqdxnF8aWmJpmmGYSiKKhaLsiyXy+VKpQIEAgEQBMPhMAiC09PTyWQSgiBFUVRVJUkSx/E/QyzLMgxDkmQulxMEYW1tbX19HZiamkJRFBoaHx9HUXRycnJ5edk0TV3XC4UCQRAcx+VyuXw+z/P81tZWZUhRFGBkZCQYDIaHRkdHEQRJJBIcx/2+YBjG6upqKpVaWVmhaRrHcUmSNjc3JUna2Nj4GUcikd/y2NgYBEFzc3PVavX09PTk5GR3d7fZbIqimM1mFxcXEQSJx+OZTIaiKJZlgVAoFI1GZ2dnE4kEgiAEQezs7BwcHGiapqoqhmGHh4eGYWia1mg0tre3S6WSIAg8z4ui+A9hSxcl5eS1bgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/9d13107f0ccc3b9d6aa22fe137d9dc91/e24fb/2022-07-20-cover.png","srcSet":"/static/9d13107f0ccc3b9d6aa22fe137d9dc91/6d6b7/2022-07-20-cover.png 200w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/d184d/2022-07-20-cover.png 400w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/e24fb/2022-07-20-cover.png 800w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/caa3b/2022-07-20-cover.png 1000w","srcWebp":"/static/9d13107f0ccc3b9d6aa22fe137d9dc91/b303b/2022-07-20-cover.webp","srcSetWebp":"/static/9d13107f0ccc3b9d6aa22fe137d9dc91/21c67/2022-07-20-cover.webp 200w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/4b6b9/2022-07-20-cover.webp 400w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/b303b/2022-07-20-cover.webp 800w,\n/static/9d13107f0ccc3b9d6aa22fe137d9dc91/c7a8b/2022-07-20-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I wrote the general rules on processing the event-driven services. check my article Saga and Process Manager - distributed…","fields":{"slug":"/event_driven_distributed_processes_by_example/","prefix":"2022-07-13","langKey":"en"},"frontmatter":{"title":"Event-driven distributed processes by example","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9APT59e746vr++P38/vP069vhxNLMvsLIt7/LvNbe2PDw+fn3//z39fXu6/TbyPj59uTSv8iLYs+KVs5lIgDu5+Pr5NfbzL7JuavUz8bJvLHJwYbC0JGg1EDP9YDK36rM56Hq5K3z0Z32yoXsw5bvzqXZvp/Dj2exThUAzbmoqIBptZ+Q1M3C8Ovf8d7D9dGo48d7yM5Fy9FKnroiuupF2dlv78eH7saC2Y5K6II+7a50xJJsn21dAO309eDe2fHStvbUtPTMoOyseNmSW+SYT+6IMvCjTemjQei/Qt+2YuOWaPGxcfm8ZPa8aet8M/e3cPTsxgDx8/L668z62JnyxILekmDKeU/irWLtt1DjdCTreyb0v07pvkrElUHBYR3qk0TpsnLZkkrGdCzYjU752qkA9vj466yA6bt68sGB3XxB3JA/7LRL5rFU25ZA66hD68SDwHlCwGgwoFcrqVEe3beVuGMyvlYg2moz87SNAPP6++rJsMZjJ+GVV86WXfDfsMeEVs1RFsdaHdBgI8llL81zMN6XTch6O8xwNuSfX9GYU9+SVN6JRPG9ggDr8PDu4dDTez7Zh0jThkGpmXypdUXXfj7jpFzRdCrRiUuwWh3JczbTkFPQgTu+eEOpViadWzONSSPNo3YA6uzs7fDpypBjznxB1ngynl4opGMxt3JH2cWvwJ91sIhP0oI/0XEtu3AwqkcTymErtWo6jk0ntX9U3cq0ak1e2aWx7MUAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/10a23ca022f3e69537bf271fabf0793e/e24fb/2022-07-13-cover.png","srcSet":"/static/10a23ca022f3e69537bf271fabf0793e/6d6b7/2022-07-13-cover.png 200w,\n/static/10a23ca022f3e69537bf271fabf0793e/d184d/2022-07-13-cover.png 400w,\n/static/10a23ca022f3e69537bf271fabf0793e/e24fb/2022-07-13-cover.png 800w,\n/static/10a23ca022f3e69537bf271fabf0793e/caa3b/2022-07-13-cover.png 1000w","srcWebp":"/static/10a23ca022f3e69537bf271fabf0793e/b303b/2022-07-13-cover.webp","srcSetWebp":"/static/10a23ca022f3e69537bf271fabf0793e/21c67/2022-07-13-cover.webp 200w,\n/static/10a23ca022f3e69537bf271fabf0793e/4b6b9/2022-07-13-cover.webp 400w,\n/static/10a23ca022f3e69537bf271fabf0793e/b303b/2022-07-13-cover.webp 800w,\n/static/10a23ca022f3e69537bf271fabf0793e/c7a8b/2022-07-13-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In many projects, the approach to dates is quite nonchalant. People do as they want. When on-premise systems were king, the common problem…","fields":{"slug":"/is_keeping_utc_dates_best_solution/","prefix":"2022-07-06","langKey":"en"},"frontmatter":{"title":"Is keeping dates in UTC really the best solution?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AMKkkMa3rbmrn5R7arWOedKhg9C4qs7U1M7R082smsuafNeojMaVeZiMhs7X2tri4eDX1ruuqq+Ebq98ZQDAw8Hb2d/X3N/KuqbbrYzEqZXI0tfq6erh5urBt7PSoYTSpou7kXdzamjZ297l5ubo5+jCwsKzf2exfGUAwbq06ent193frJqK2KiMxKCJoaCfx8/Tt8DEo4t/spSBn5yWrpqNdl9VdHyBv8XJqrK3nIV7sH9nX1VTAKKCbpCQkJGEfbmKc9imlNqYgLOIdGleWnNaT7WIcIeCe9Pd5bjDx4xxYYZnV2VUTWJORqJ7Z3tqY1FXXADDrJ2pm5G6qp3UoZPd1NfhtrXRjn3Gt6vLraDNu6+ZkIeAhYebmZa8qJ3Kq5nCqpu7pZrCr6NoYV9TVVwAvZF3zaCE0KF/vItxspSPonZyr31pyKmUkn1whnx2rpeIpIl3x5N206mQy6eSw6ydu5+Qw6STZldTV1xjAK+JcbeOdZ15ZJR7Z3VZTYNbSqqBan96eaSmrK2vtYV7eNWoitCokcTBv9ba3tLU1r27ucCch5p6Zz5BRQChg2x9cmSGhXyOi4SSkouUgnagfmh4dnnk4OXq5et6fYKZfWy4s7Dg0tbsw8Xp3d7bwcS1p5+0hGd9Xk4AcWFWoZySx8G+1tPRwsG9lJSRgGtdZ2Ffo6ewpqmxa2BemndjqKKf4eHk5LSz5Le03Nnbr6WflW1Xkm5ZjO9QdtTgYsAAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/a5d941268d739662b3e908063317075f/e24fb/2022-07-06-cover.png","srcSet":"/static/a5d941268d739662b3e908063317075f/6d6b7/2022-07-06-cover.png 200w,\n/static/a5d941268d739662b3e908063317075f/d184d/2022-07-06-cover.png 400w,\n/static/a5d941268d739662b3e908063317075f/e24fb/2022-07-06-cover.png 800w,\n/static/a5d941268d739662b3e908063317075f/caa3b/2022-07-06-cover.png 1000w","srcWebp":"/static/a5d941268d739662b3e908063317075f/b303b/2022-07-06-cover.webp","srcSetWebp":"/static/a5d941268d739662b3e908063317075f/21c67/2022-07-06-cover.webp 200w,\n/static/a5d941268d739662b3e908063317075f/4b6b9/2022-07-06-cover.webp 400w,\n/static/a5d941268d739662b3e908063317075f/b303b/2022-07-06-cover.webp 800w,\n/static/a5d941268d739662b3e908063317075f/c7a8b/2022-07-06-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m often told that dull, repetitive tasks should be automated. However, there are times when it is better not to do this. I regularly see…","fields":{"slug":"/client_code_generation/","prefix":"2022-06-29","langKey":"en"},"frontmatter":{"title":"Should you generate the client code from the API?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACdElEQVQozy2OW0iTARTHv5ceDXrwociggqAgEIJeQh/qoZo9RJm3kmIRth4ER+UFGxouSMnLvC5mS1kiaczpZmYTw0uoK9OJqXPzUm5TtzZ30UzTX+yzA4fDOf/L+Qvn5HUkFDWT+KKNpHIDadWd3Kzu5Fa1iesqE8r6NtYtBpg1U1Sp49S9Mk6kFHDwymNiEh5y7PhJBEFg3+FYjlxTIKTXdZFWZSS10khyRTvJqg5SVUZSKtpJUXWQXmlivLMFQ0EGVzMLSNf0klSq53x+IxcelDCuLeF9cRaxZ+KITshGSCwzcKO8ndvqj0g1PdxRd4umySojiaVtpL3sJT4pg/0HormUW01aTZf4LJI+T9PBav87mDKRrygm6uIjhCdvB5hw+slUPCPm9Fl6hkb5MrfMXXUX8sYerEt+5AolUYeOYuobZmxhBZmmG9krMwPTS/hmLYQmzdgd83RbphAcLi+ww9DnQWqrKll2u4BttJ+s9E0uEKnxsW+oa2twzNrEvXlwEv3ItKgLh0OEQiHC4TBsbyI4PT6s8y7Y3RHJwVCYH8teRh1ubE4P1jknW1t/RGx9YwO3189Xh5uJxRUmF90EgsE9w1AQu3MVYdjupmXEzmY4iNf7C59/jZFZJz89ASx2N7rBGdaDa3i8Xtb8ETMXDrcPm8uLtn+GQCCAz+/ndzjIZ5sLwWyZ4LWpT0zwd2cvpW3Jg8vjY2BsiqqWD+Jtd1ccWB1LzDlXGJ2y87zR8B/bAy3f7QhSqRSJ5DJ6vZ76+np0Oh1KpZLc3DxksvtIJBJaW1vRarW8aWriaWEhWVlyZDIZ8fFxNDQ0iB3h5ORk8w99aCfxMbmNawAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/7fec91b6b694ef59bf6622bed34697bc/e24fb/2022-06-29-cover.png","srcSet":"/static/7fec91b6b694ef59bf6622bed34697bc/6d6b7/2022-06-29-cover.png 200w,\n/static/7fec91b6b694ef59bf6622bed34697bc/d184d/2022-06-29-cover.png 400w,\n/static/7fec91b6b694ef59bf6622bed34697bc/e24fb/2022-06-29-cover.png 800w,\n/static/7fec91b6b694ef59bf6622bed34697bc/caa3b/2022-06-29-cover.png 1000w","srcWebp":"/static/7fec91b6b694ef59bf6622bed34697bc/b303b/2022-06-29-cover.webp","srcSetWebp":"/static/7fec91b6b694ef59bf6622bed34697bc/21c67/2022-06-29-cover.webp 200w,\n/static/7fec91b6b694ef59bf6622bed34697bc/4b6b9/2022-06-29-cover.webp 400w,\n/static/7fec91b6b694ef59bf6622bed34697bc/b303b/2022-06-29-cover.webp 800w,\n/static/7fec91b6b694ef59bf6622bed34697bc/c7a8b/2022-06-29-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today I wanted to talk a bit about Key-Value databases. It is a seemingly obvious subject, but it is easy to overlook the basic assumptions…","fields":{"slug":"/key-value-stores/","prefix":"2022-06-22","langKey":"en"},"frontmatter":{"title":"Unobvious things you need to know about key-value stores","category":"Databases","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABWElEQVQoz2P4jwr+/ftXkb9AVbzARqPWTqfeQqvOQKlCT7FwzbIjINm//5AVM8BZf/78/f///8olh4zlCmeFtha5NFQ7tCz07Frq21Nm1WqlV3nn1rP/////RdLPgGZzSuRkR/Xqs5ldE8Nq54e03cqYfCdr0uyAPh2Zoun9W+F2oGj+Bzbu27cf/vbNjroN9lN3+GRNtSharTT/qsrCKyZ5m2xkiyoKF0H8hV3zr1+/I727nXRremZ3FudXVjVWzdpdO2dPTVldg4lUaVPVMpzOhoh2Nq61UC68MjdoamHcsvrwZxscn29yWFgdry1VunndcezOhrvnyeM33raNlurF7obN7kaN7iZ17iZ1xoqFKVGTv//4BXcjlgCDWH7l4sNw725zlRJzpVJzpTILtbKshOlPn7xF8zCW0IZIf/78bcuGUxO7N03p27J/z6Xv33+B5dDU/gcASQGalepQuw8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/a447c2161fecebed4dcceba95097e8f1/e24fb/2022-06-22-cover.png","srcSet":"/static/a447c2161fecebed4dcceba95097e8f1/6d6b7/2022-06-22-cover.png 200w,\n/static/a447c2161fecebed4dcceba95097e8f1/d184d/2022-06-22-cover.png 400w,\n/static/a447c2161fecebed4dcceba95097e8f1/e24fb/2022-06-22-cover.png 800w,\n/static/a447c2161fecebed4dcceba95097e8f1/caa3b/2022-06-22-cover.png 1000w","srcWebp":"/static/a447c2161fecebed4dcceba95097e8f1/b303b/2022-06-22-cover.webp","srcSetWebp":"/static/a447c2161fecebed4dcceba95097e8f1/21c67/2022-06-22-cover.webp 200w,\n/static/a447c2161fecebed4dcceba95097e8f1/4b6b9/2022-06-22-cover.webp 400w,\n/static/a447c2161fecebed4dcceba95097e8f1/b303b/2022-06-22-cover.webp 800w,\n/static/a447c2161fecebed4dcceba95097e8f1/c7a8b/2022-06-22-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I saw an excellent presentation of Dylan’s Beattie presentation - The Art of Code. It reminds us of what we are here for. By…","fields":{"slug":"/ogooreck_sneaky_bdd_testing_framework/","prefix":"2022-06-15","langKey":"en"},"frontmatter":{"title":"Ogooreck, a sneaky testing library in BDD style","category":"Testing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAA3ElEQVQoz2P4Txz49/8fpiADAT1//1+5ef75q6dQE4jU/O/f3////y/bMscjXymixvzW/av/////CxYkoPnvX5Cii1fPZTQFLtzR7lOmOmtjx//////8+U1Y879/IBcWtibwyzPG5HkG1euu278QpPnvHwKa/4JVHDmzz7dezrtAVdGey7tc/fnLp3BDcWqGSP768Se7OzBykmLaPAO3OsnOhSXwUMCn+e8/kLVz1vb5NksnTdf1aVTxrFS+cvMcZmiha4ZI7zy80aNKPmW2dlinllOlePOcXFzxDAAmLdyQcIeOiwAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/bb0725f0da9d422e89b16784bea39bf1/e24fb/2022-06-15-cover.png","srcSet":"/static/bb0725f0da9d422e89b16784bea39bf1/6d6b7/2022-06-15-cover.png 200w,\n/static/bb0725f0da9d422e89b16784bea39bf1/d184d/2022-06-15-cover.png 400w,\n/static/bb0725f0da9d422e89b16784bea39bf1/e24fb/2022-06-15-cover.png 800w,\n/static/bb0725f0da9d422e89b16784bea39bf1/caa3b/2022-06-15-cover.png 1000w","srcWebp":"/static/bb0725f0da9d422e89b16784bea39bf1/b303b/2022-06-15-cover.webp","srcSetWebp":"/static/bb0725f0da9d422e89b16784bea39bf1/21c67/2022-06-15-cover.webp 200w,\n/static/bb0725f0da9d422e89b16784bea39bf1/4b6b9/2022-06-15-cover.webp 400w,\n/static/bb0725f0da9d422e89b16784bea39bf1/b303b/2022-06-15-cover.webp 800w,\n/static/bb0725f0da9d422e89b16784bea39bf1/c7a8b/2022-06-15-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Event Sourcing is not a difficult pattern to understand. Event stores are not conceptually complicated databases (although implementation…","fields":{"slug":"/should_you_throw_exception_when_rebuilding_state_from_events/","prefix":"2022-06-08","langKey":"en"},"frontmatter":{"title":"Should you throw an exception when rebuilding the state from events?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB9UlEQVQoz2NgQALy4oI18c6tAcrzAkTPFOruSNfcn6Pe5yUyK0rBV52dlZGBiZEBHTCChZgZGX2s1VuijPr8xJfFyG2OV1oYLLMxRa3PW3hqgESZvYgiHxMjA0gpugnc7MxG8vzJbjqTUqwmB0ovT1Lbma2zIV5xWbxyj5dAuRVPijGXlzqHoQQrK9h2iH0MAlysZoq8IQZ8uZY8fZE6HYHKDY7886IUthWYbMkxWJqkUmLJlm3AFqPFEqDCnKDLFKjGKM0Ds99bTSBAkydCi8lPgSFEmSlcmaXUgnNaiPTyVK2lSRqrM3Sb3QWzTTgiNNg9pBiDlBkiNBj8lBiUBRlB2g0FmEwFGZzFGcz4GFxEGbzEGeNVGSb6iyxL1lgQp7wiTWtGpHymAZOHNKM5D4OTGANEf5QWg7kYM4MAA4MeL6OjiqSbuqSjvIifumiEvkSZh9K0ROMpcXoTE42npFlm2MsE6EkYS4o4Kov7aQg4SzPYiDHYiTAwCDIwiHOwdzQ1btmxc9bUyRN6uzdv27546fLFc6ZOaSzatuvA7OlTmkpz5s5bsGDRosXLVtSXl5jwM2hzMZgKgjXLsTE5ainFeztH2puGO1hEeXhkh3r35gXVx9p35wX353jG2aq4mxhEebmlBbiEW2tbCjN4yDDYizMAANlBe7KfAptWAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/6e741ed052523b895f1103a39d45d706/e24fb/2022-06-08-cover.png","srcSet":"/static/6e741ed052523b895f1103a39d45d706/6d6b7/2022-06-08-cover.png 200w,\n/static/6e741ed052523b895f1103a39d45d706/d184d/2022-06-08-cover.png 400w,\n/static/6e741ed052523b895f1103a39d45d706/e24fb/2022-06-08-cover.png 800w,\n/static/6e741ed052523b895f1103a39d45d706/caa3b/2022-06-08-cover.png 1000w","srcWebp":"/static/6e741ed052523b895f1103a39d45d706/b303b/2022-06-08-cover.webp","srcSetWebp":"/static/6e741ed052523b895f1103a39d45d706/21c67/2022-06-08-cover.webp 200w,\n/static/6e741ed052523b895f1103a39d45d706/4b6b9/2022-06-08-cover.webp 400w,\n/static/6e741ed052523b895f1103a39d45d706/b303b/2022-06-08-cover.webp 800w,\n/static/6e741ed052523b895f1103a39d45d706/c7a8b/2022-06-08-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ve got some news today. Here comes the boom: I’m leaving the Event Store, which means I just became unemployed! How come? I am a pragmatic…","fields":{"slug":"/leaving_event_store/","prefix":"2022-06-01","langKey":"en"},"frontmatter":{"title":"Why I'm leaving Event Store and getting ready for the next episode","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJElEQVQozzXMSWgTUQDG8WcFDRVxqYIUBMUFLCh41YMnoQoePKhoEVFaF1RQr4pIxUpjjIdY0VDooVWQqD200LqUFlubNImJaZqFTGayTJLZZzLLezOT4DxJQPidPv58IF2uMyI0kA2RhdosqwENlM9Tslw3TRv933XDytDatyQ/FWfn1gSypgGK0STVRKaFkNkqdIgxHn7h2b1ja3D+u4OxYZiwfV1g9BVCDhHyWqnOSgiZNqhrlmbYCNmW2Sp0HWGMb10fONrlSocWMcaSAkUFcRLM0mqyqLAi1I2GrFqKaoEYpf4pqHFKKfNQhzY0nSKZv9t/rmfvzuGhx3S5GiOlaF6OF5QQIf+mFIrRKxzMltUMrYIQIf/KyQtpaSnNpii2pjgf/J7LvT0X+689ePT0xOE9k9Nz4ZIdJqQIqUTySjAnz6fEqRg7u8qDMCGv5ERSaNy4c2//wX19fecvXTj98OyRmwNXT546c+xQ95WB28uUOZfkfySFmQQ3HWcno8znCPMlyoDZBD8V4wIrdM/xXgDWdWzsXN+5Zde2zdtdHZtcGw50dwEA7g+PfkrUx5crE8Hq+2B1PFgbW6r6f1bAYlZMFqSZ+bDX9843Mup9PeZ++XZo8Jnn+ZD/zYjX7XYPPgl8DGRLQqbA5UpCtsinyVqG4lIUByZ8r1YXvjalmqPx2FLbdGwbLU2ETR03oAOVplT9q7BYkx1VtHm6IVQcVfgHxyKcy87FR5gAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d0fc31a111a34c8d7073b7b9dad8a2b1/e24fb/2022-06-01-cover.png","srcSet":"/static/d0fc31a111a34c8d7073b7b9dad8a2b1/6d6b7/2022-06-01-cover.png 200w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/d184d/2022-06-01-cover.png 400w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/e24fb/2022-06-01-cover.png 800w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/caa3b/2022-06-01-cover.png 1000w","srcWebp":"/static/d0fc31a111a34c8d7073b7b9dad8a2b1/b303b/2022-06-01-cover.webp","srcSetWebp":"/static/d0fc31a111a34c8d7073b7b9dad8a2b1/21c67/2022-06-01-cover.webp 200w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/4b6b9/2022-06-01-cover.webp 400w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/b303b/2022-06-01-cover.webp 800w,\n/static/d0fc31a111a34c8d7073b7b9dad8a2b1/c7a8b/2022-06-01-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I was asked to compile various statistics from our Event Store GitHub community some time ago. We wanted to analyze our public repositories…","fields":{"slug":"/power_of_ignorance/","prefix":"2022-05-25","langKey":"en"},"frontmatter":{"title":"Power of ignorance, or how to write simple code","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AIybq5mrvZquwZmvxJmyyZmxxnl6e5JaRJ5bQ3dkWYCHkGFse0RARlpEP15IPWpbUoF1bq2vs+Xw+dvl7ADl7vLn8PLp8vPv+fvIzc2qnI1dT0Z5ZViOeWqTiX+lm5RlYGM5NTtgWluCdGqSg3WPgXR6a2KvsLXV5fUA3OTg2OHd3urnzNDLuKaPfGVPWUpCjIB0nI+Ak4V4joR8eHJzMiwvUUhJamBgdGdhVEdDXE1Fd2lhnKzFALbAw+Ht7M7W1ntvZl5MPV5US3VnXId5bp2PgXZoX4V7dImDgDw2ODApK1lQUmFXV0E3NjwwK1ZHQHaJpQCSiYe/trCclI1POzJjTkWyq6mPgnmMgnqbkYiKfnS1pZKnnJI+Nzs/NztXT1JYUFJANjdPPz9BMT09N0oASC4mdWNXspB6WlFSc2twa1RJp5WCwbGekYd9loV1vKeMlYh7Rj0+OjI0SkRHQjk+MR8rPio8QSw/RS9BAIdHNYVcS8ujh1Q/RUlScDEUD4ZmVNzApJ6JeqqWgZWFdWxoaiUpMx0fKVJVWjw2RDQhMj4rPkMvQUo1RQCCRzaWX0hnWklnMyKKSjaCUEDqtpeYfWw9LCdWSUNUTk8+R1kVJD4LHkEhLEBxTUyEUE6BUE6EVFOIV1YATj42gG1Wb2FLYjoug1hGfG5ZfFpIYUtBNC0tHBYZFQ8SCgoSBQ4rABI3JiU6tm1fvG9htW5htXJls3FkEiLpbHl6PPIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/bf56bbeed5fdd981532779aa000260ba/e24fb/2022-05-25-cover.png","srcSet":"/static/bf56bbeed5fdd981532779aa000260ba/6d6b7/2022-05-25-cover.png 200w,\n/static/bf56bbeed5fdd981532779aa000260ba/d184d/2022-05-25-cover.png 400w,\n/static/bf56bbeed5fdd981532779aa000260ba/e24fb/2022-05-25-cover.png 800w,\n/static/bf56bbeed5fdd981532779aa000260ba/caa3b/2022-05-25-cover.png 1000w","srcWebp":"/static/bf56bbeed5fdd981532779aa000260ba/b303b/2022-05-25-cover.webp","srcSetWebp":"/static/bf56bbeed5fdd981532779aa000260ba/21c67/2022-05-25-cover.webp 200w,\n/static/bf56bbeed5fdd981532779aa000260ba/4b6b9/2022-05-25-cover.webp 400w,\n/static/bf56bbeed5fdd981532779aa000260ba/b303b/2022-05-25-cover.webp 800w,\n/static/bf56bbeed5fdd981532779aa000260ba/c7a8b/2022-05-25-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I quite often make fun of Clean Code and Clean Architecture. I’m calling it an Onion Architecture. Not least because it has layers but also…","fields":{"slug":"/onion_clean_code/","prefix":"2022-05-18","langKey":"en"},"frontmatter":{"title":"What onion has to do with Clean Code?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB8klEQVQozx3Qa0/aUAAA0P70xYQQsfIwRAH3iICIYrZMAkaqQyYTC7K1tLS10Pft+/ZeCtRt3xZ3fsIh4CoBLtQ0LV6hZwlcPjnVsV2jQWsExgKIQi8KfOi5KIIIIQjhCmNF1R0fB3BDhDix3EhXlc5wTlJsUR/u8LV33MmBNiBvmS99FqEwwjFevcEYr9fxUtXtAAdoS8BV4vnwnubTX0fF8OrUaVKtA+q80LAah/iqcC/RvBHaS56bcRzH/zcXXny4hquECPGrqhk1SjwyJqdByy4VrfdZtbyn57NV6zQn9+t3Ms/Rwx/fn55omqbnc57lBDeMA7Qh4uTvUgOHnRkJute3JadAKuDMCC5gJd+/KWfc9nFPmC5eeFFgGIZhWc/3dBP40RptfhNx8udlqVeu+ZxLdUcfvSxpag0AztFR4eausme1P/QXS0O1PAtYlq1rnm2rmuFH6yh+JVy4EUS5+U1MD3vpaYEp521yF+zvzor7qSGZoanq7bzONi/Ersz8ejw+FqierOimEzl+/LZtWA49naVboxR9QYql9vNJe/wpK5Uz3Geyw4wZAUfQd6ArqXS9Lg0GimYGaA3xlghRIqtmFPpDZnHQk3I/H3fYZmp+mWdHhZ7Yn0g4ChzH9czAFZTJWVN+eFA0M0TbAG/+AY9Bs3FhgvYaAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/3bca633696495493d798a6132a5e5cc4/e24fb/2022-05-18-cover.png","srcSet":"/static/3bca633696495493d798a6132a5e5cc4/6d6b7/2022-05-18-cover.png 200w,\n/static/3bca633696495493d798a6132a5e5cc4/d184d/2022-05-18-cover.png 400w,\n/static/3bca633696495493d798a6132a5e5cc4/e24fb/2022-05-18-cover.png 800w,\n/static/3bca633696495493d798a6132a5e5cc4/caa3b/2022-05-18-cover.png 1000w","srcWebp":"/static/3bca633696495493d798a6132a5e5cc4/b303b/2022-05-18-cover.webp","srcSetWebp":"/static/3bca633696495493d798a6132a5e5cc4/21c67/2022-05-18-cover.webp 200w,\n/static/3bca633696495493d798a6132a5e5cc4/4b6b9/2022-05-18-cover.webp 400w,\n/static/3bca633696495493d798a6132a5e5cc4/b303b/2022-05-18-cover.webp 800w,\n/static/3bca633696495493d798a6132a5e5cc4/c7a8b/2022-05-18-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last few days, I have been working on guidance on piping EventStoreDB logs into Elasticsearch. ELK stack (so Elasticsearch, Logstash…","fields":{"slug":"/tricks_on_how_to_set_up_related_docker_images/","prefix":"2022-05-11","langKey":"en"},"frontmatter":{"title":"A few tricks on how to set up related Docker images with docker-compose","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABp0lEQVQoz11R604aYRDdd/JF/NHX8AVq4r8mbfzTqjHVtiZWrReEFFZSXdhCCm2A5bLAshsuiwjr0pVgotW9fN9+M82ymtCeTCbnTHJmMjMczuAzQEShN114lZBb7aDi+wAAiIwxAAjzPAEALjQTQkaGGRd/xrIS8f2wyBgjhOAzHNdljOEcOAC0KRRkNSpWYmIl/i3juS4i6peDSIIXMtlitda/uqorrbMLoSLX5aZSVxSt07EmE246nb5Y4ze+/kgXVbHaf/fx6Pe1QajPn58nhdTqxmauUFp5vdrW9U9fDj/sHbx9v717eJxMi8FkzyP5ctMY36Ty1eOEuLy2f1HtImJDa/+SJHM0KBULw8GlLNdaSrPXaWdzuYaqmZYVmCn1M/liraEexL9HE+mXW5GlzRjxvK6DuoPqA2o2dh+x72LPxo6Nd7ODQLiz4zj7kbPPJ/z6ztGbnegpnzJHBgXs3tHyhOQtKk2oYNLSDcmOSdIg40cfEVjwB+Rc17seW73+UNWHi7tSUtJmdwYKT+0DCUEA/g9uXtze/3mwnZDDc4Z/5bz5L6JD3pOM0JG+AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/67fd4c42f3de35627317b5d2fe97ce92/e24fb/2022-05-11-cover.png","srcSet":"/static/67fd4c42f3de35627317b5d2fe97ce92/6d6b7/2022-05-11-cover.png 200w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/d184d/2022-05-11-cover.png 400w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/e24fb/2022-05-11-cover.png 800w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/caa3b/2022-05-11-cover.png 1000w","srcWebp":"/static/67fd4c42f3de35627317b5d2fe97ce92/b303b/2022-05-11-cover.webp","srcSetWebp":"/static/67fd4c42f3de35627317b5d2fe97ce92/21c67/2022-05-11-cover.webp 200w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/4b6b9/2022-05-11-cover.webp 400w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/b303b/2022-05-11-cover.webp 800w,\n/static/67fd4c42f3de35627317b5d2fe97ce92/c7a8b/2022-05-11-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Events can be a great facilitator and glue for business workflows. Subscriptions are an essential block of the event-driven system. They…","fields":{"slug":"/persistent_vs_catch_up_eventstoredb_subscriptions_in_action/","prefix":"2022-05-04","langKey":"en"},"frontmatter":{"title":"Persistent vs catch-up, EventStoreDB subscriptions in action","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AGg6I2U8JmpFOHhSSF4zI2AyGX5HL2E5KwwFAkYvKLViTUQoHhEMB29AIck4H8hYO3hKKmQ2FnhJJpFhPABbQTdfRT1uVE5pUlNXOzRzTj2EMRikHRNjDQdnFQ+GRCpvGQ17FQ22HgzeCgCUMiRYQDNOMSZiRTmOcmIAs5iDt5yJwaWUt56Qo4yDyrKlqF9StAQA1BQF9hgL1yEO5xoF1BMCvQYAqDIlqYyAqYyCpYh8oYR4m4F0AL2ljsGmlMSomMisnMyvoMytn8+woahNQrwPAO8hEPUXBtQbCLYPAKlDN7mbkL2glribj7SYjLCTh6uQiAC3nYi6noy+opHBpZHDp5PEppPGqZbBrp3QPi7rFAT1GwraGAa0Gwu9mIu+o5e5mI20l4ywlImrj4SnjIUArINbrIVcsohdtYdctYlds4lfsYVdrI5nx0s07AwA8BgG1BEAwiMQs4RjrYVlqoFipIBjnX1glnZblXVfAKd+SaZ+UKd8U6V7U6d+Vad+V6Z6U6WAWLFBLtQcD9UcC88eDbYhEpReQ5ZxT5RtTZNvTpBsSopmQ4hiQgCGZDuZkYa6ubmsqqeno566uLe0rqe1q5+pmZeuko+1iobGxMOjkpGopaSzsa+hn5yrqKXKycenop5zTzQAkGtGknVbnYRrmoRrhG1Vn4huZVhNQzo3oDwywjksuzoswEk8uTAllFVChHNdhG1ab1pMd2RVgmtXd1pC8SXzpMBVqzIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ded5780b4118ec600d7e02afe9849123/e24fb/2022-05-04-cover.png","srcSet":"/static/ded5780b4118ec600d7e02afe9849123/6d6b7/2022-05-04-cover.png 200w,\n/static/ded5780b4118ec600d7e02afe9849123/d184d/2022-05-04-cover.png 400w,\n/static/ded5780b4118ec600d7e02afe9849123/e24fb/2022-05-04-cover.png 800w,\n/static/ded5780b4118ec600d7e02afe9849123/caa3b/2022-05-04-cover.png 1000w","srcWebp":"/static/ded5780b4118ec600d7e02afe9849123/b303b/2022-05-04-cover.webp","srcSetWebp":"/static/ded5780b4118ec600d7e02afe9849123/21c67/2022-05-04-cover.webp 200w,\n/static/ded5780b4118ec600d7e02afe9849123/4b6b9/2022-05-04-cover.webp 400w,\n/static/ded5780b4118ec600d7e02afe9849123/b303b/2022-05-04-cover.webp 800w,\n/static/ded5780b4118ec600d7e02afe9849123/c7a8b/2022-05-04-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today we will deal with event consumption. I’ll also explain how I wrote the new version of the MediatR library. Curious? We’ll get to that…","fields":{"slug":"/how_to_build_simple_event_pipeline/","prefix":"2022-04-27","langKey":"en"},"frontmatter":{"title":"How to build a simple event pipeline","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJElEQVQozxXMe08SAQAA8PsWTrSADfE85XnvF6874LiT8zwBDw8PEBGsTPBwPjKxBvbAnH+YuQab0aI13WqtP6y1pqutr9X6fYAfEFRStrs2xA0tZyLPt/TzVvXiqHLWqbaf7bzaKy9qUl4TpASL4+gUFY2QdF0KwT7Mr1SNBRVYMs1gmJZVcVETykbC0OOixNNygTO2lCi7VNTzemZGUQOJWY4Opxja54ELRomPTVvtTqBYW3+wu67k5wkax3AEhTEhu0pxMh+ik3E+GhdzQTrN4mEhSWMI5PLE1HL/6rpW37TbnYBs5LVCVpA4jMR8sIsk/ROQyzU5hTERJCJOebwRjxf3ol6hOD077ydD6WLj7dXthrk9PgYBBBfLGkpY5MhYyOYEbVar9c7I6OioZXgIR+EAGyAphqHoQEgIRZMIgkq8eHp8VsgZEAgCFIX7UD/GUm4Uc4xDE5Og0/F/GB6xjIEQCIFhluIImIJdchyfEeBSkhqYhc6aZqhRQJR4NkjjFBFm0JQclCUC9k86QOeQxWJzgG6MWRBjFT0djCZkgaiVIi9qqX5t4fPRw157BWiupJv3tb319HEjc2Bm6iW5rHNqhkVgECHY0tpu/13/188fX75dl3LaSiberMydr+qDl5vvT7aBr93W5XH9Q2v1zf69w41c96DSPVw7f7K8X53LavrHweXNze3t7z9/v3/qdxq9o0enj83e052Lk/bF684/Q26xoKGH/W4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/89cb7a29c60c5676501b12362360a158/e24fb/2022-04-27-cover.png","srcSet":"/static/89cb7a29c60c5676501b12362360a158/6d6b7/2022-04-27-cover.png 200w,\n/static/89cb7a29c60c5676501b12362360a158/d184d/2022-04-27-cover.png 400w,\n/static/89cb7a29c60c5676501b12362360a158/e24fb/2022-04-27-cover.png 800w,\n/static/89cb7a29c60c5676501b12362360a158/caa3b/2022-04-27-cover.png 1000w","srcWebp":"/static/89cb7a29c60c5676501b12362360a158/b303b/2022-04-27-cover.webp","srcSetWebp":"/static/89cb7a29c60c5676501b12362360a158/21c67/2022-04-27-cover.webp 200w,\n/static/89cb7a29c60c5676501b12362360a158/4b6b9/2022-04-27-cover.webp 400w,\n/static/89cb7a29c60c5676501b12362360a158/b303b/2022-04-27-cover.webp 800w,\n/static/89cb7a29c60c5676501b12362360a158/c7a8b/2022-04-27-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ve been asked recently at least a few times about Temporal Tables and how they relate to Event Sourcing. Beware, and don’t confuse it with…","fields":{"slug":"/temporal_tables_and_event_sourcing/","prefix":"2022-04-20","langKey":"en"},"frontmatter":{"title":"Are Temporal Tables an alternative to Event Sourcing?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7AAAAOwAFq1okJAAABsklEQVQoz12QW0vCcBjG+15R0HlmbW0d7BxBREFQdrK1NtCpy8xZKBlBCUXZMrXS5bS21Uqyi276AEFUGEW3XqTuH6kY+V68Ny+/53mfpwIAoKo5AEDAbVac/SKDRClIIDVxEyxbMZFpD+FQcL4+hDfEbD0c0aGE/QCAXDYLAKgA+clk1V3jeNI1JNswiYYlM3rH9tyudiUcunNKw5PQ8Xwdb0JOTL3y0U4ZrAIAguyCvKITLbBsRaKU9o7tvncNKsvtcWNLhGz2z9VdMJifQKPetTycKcIFmcg2K9BYcr3vxo4KlJantAlnr2RFQ4bGU7zep68WLOgx2ZmI/H87l/vN/JC43pvRJjdGFDsmWpAw3sTpa7npmoPJqsPpmkN9lewY8Bp0X58f+ZrUv8yF1z34aIhEFGe/ZNZIltaYsfWMgMJL0MFkZdzW51vEglv2UsF/cEHpI5VyTek4Q/P9xrDItMXollu285Jp463d3lmYc9HfmWypo//Oeb331xfP4ph7pDpAwH4CCZLIvgFZn4B9bjqdTpdsyuHiQf1dj0lF9nn4HYewt3kVCbw9P5VhBfgHT5mGiEEY4VwAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/6c01a039e3492455c5f497948c8e1a87/e24fb/2022-04-20-cover.png","srcSet":"/static/6c01a039e3492455c5f497948c8e1a87/6d6b7/2022-04-20-cover.png 200w,\n/static/6c01a039e3492455c5f497948c8e1a87/d184d/2022-04-20-cover.png 400w,\n/static/6c01a039e3492455c5f497948c8e1a87/e24fb/2022-04-20-cover.png 800w,\n/static/6c01a039e3492455c5f497948c8e1a87/caa3b/2022-04-20-cover.png 1000w","srcWebp":"/static/6c01a039e3492455c5f497948c8e1a87/b303b/2022-04-20-cover.webp","srcSetWebp":"/static/6c01a039e3492455c5f497948c8e1a87/21c67/2022-04-20-cover.webp 200w,\n/static/6c01a039e3492455c5f497948c8e1a87/4b6b9/2022-04-20-cover.webp 400w,\n/static/6c01a039e3492455c5f497948c8e1a87/b303b/2022-04-20-cover.webp 800w,\n/static/6c01a039e3492455c5f497948c8e1a87/c7a8b/2022-04-20-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I had this thought: most of the “Agile” methodologies and tools are invented by extroverts. Perhaps this is also why, although they are…","fields":{"slug":"/agile_vs_introverts/","prefix":"2022-04-13","langKey":"en"},"frontmatter":{"title":"Agile vs Introverts","category":"Agile","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7BAAAOwQG4kWvtAAACMElEQVQozwElAtr9AOwlL/ZudP///82VmXEVFHUoJBQFBbWDa+ulggIDAlkjGIcrGcyOg7ZwZLx5ZmBBOAkHD51ZRMSBd8BxZADIYWbnmJPHjHL36eK9tLYXAQQiBQWgXE6wVUGWjYpbXmJDNTDrlnx8OS/DaVDHm4tyZ18hCQSiWU/AXUwAw4pz//XnzoVp38rC////TDgtJgECgkErf0o8/f3/++jg9rGR8JVyqHtqxWVB25d9/93AUT80EwEAUA8IABIFBoliVt+Lbe6xm/bPrEkjFzAZCohVIaF6ZfnZzdKPefGde+GLcOhyU6BXP5JcRs+Zg5pfRiAYF5iHiAACAgIODAtDNC1xMCC4X0ImCAJbMhf4sIX/18NbJRNJLybegF2iORqmKw3biHZ2Sz5LFgx3MR6soJz///8Ao1EuPyIVAAAAHw4JYCgYBgAAXTYj8KuI5olng1E4nH9uMB8XAAAANRUNqk08upWLjHRq79nR9enh1puJALJRJ7hjPq1fOmUuFhIDAAABA00lGNt4UOmNaLJdOSgXDgAAADQxMgwODwAAAH5KPf/Tv9ugj7dNMao+IAA0EwVNIhDaeEX1wZZfYlSYlpGLbV6paU/x08a3im0UAAA4MkHv4dkbGRgAAAAaDArVoIR7KhynTUDRjHYAHhkQAAAAWCQN88KU/+3A/vbd++jZ9ODQ6NTI6tfDNRYFrLe+4r6fCQAAAAAAHAsIx56Sj1ROunVtxJOK8P3n/xmb9+kAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/0ae9fa4c36213854bc7aa47833a7726c/e24fb/2022-04-13-cover.png","srcSet":"/static/0ae9fa4c36213854bc7aa47833a7726c/6d6b7/2022-04-13-cover.png 200w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/d184d/2022-04-13-cover.png 400w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/e24fb/2022-04-13-cover.png 800w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/caa3b/2022-04-13-cover.png 1000w","srcWebp":"/static/0ae9fa4c36213854bc7aa47833a7726c/b303b/2022-04-13-cover.webp","srcSetWebp":"/static/0ae9fa4c36213854bc7aa47833a7726c/21c67/2022-04-13-cover.webp 200w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/4b6b9/2022-04-13-cover.webp 400w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/b303b/2022-04-13-cover.webp 800w,\n/static/0ae9fa4c36213854bc7aa47833a7726c/c7a8b/2022-04-13-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Do you like playing poker? I used to play Texas Holdem with my friends regularly. We took it easy; each person put 5 PLN into the pool, and…","fields":{"slug":"/the_risk_of_ignoring_risks/","prefix":"2022-04-06","langKey":"en"},"frontmatter":{"title":"The risk of ignoring risks","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7CAAAOwgEVKEqAAAACMElEQVQozwElAtr9ABApExImExgiFCseFhIPEBsUFC4cGzgwK006MDoiMSMgTzgrNYUfIakRFGIuKMrDrNLHpCojFSswJldXSgCbuZWvuKjMxbqkkIJvXlSpoqDOwb7j3tjPwbd3JjBUIChANTI0JyJBKiA6KyV4ZlxTUDwrPkdkZXaunqoA/vb+9Oj/8uHlyrys8Obl/vb89s3S0IWKh1Z4QylyRj6TUkmLOjBXT0RXW0tLPy0qIxkfJyNdQBtlbx9jAMfqz6XTqHiselqVXnaqhqC9wZ5vYdY8O8NQWolmj5qStauXtH5xvUFDokxKVDE4IUdRQU1RSmY/SYNNWQBtwn1dunBiv3NgvHF5vYW70cKNp42snJrApK2Xio7ArrHHtr9ahYlAhm1DjlFJnFJjsm6Z0aKNypNitGMAZbt4cLJ9faaElKKTraGlvai0tJ2roJGaqZujd2xxjYCI07vIkLyQZr9xb798b759Z7p2a7t3otmwteTGAJKVkqGRm7GYqJR9iDkxNFpRV5yOloN3foZ4f3ltc52Qlc+3w6i6qpjQp5nPppbPpKDUrp7VrW+9f3HAfgCnkKCok5+um6V5bXAAAABTTFK9q7TDrrbJtL7Ru8bOucLOucWzubKLxJmOxZyHw5Ws17md0K1otnhPq1wAppOgqZSirJikrpulmYePp5WftaCqtKmyt6qzt6WvtayzvK21s7KuSJlVQphQRJlSSp5XR55VS6FaUKVdp3kU+IHAkYgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/b39decc1fa7b955ea1b4d8533efa1797/e24fb/2022-04-06-cover.png","srcSet":"/static/b39decc1fa7b955ea1b4d8533efa1797/6d6b7/2022-04-06-cover.png 200w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/d184d/2022-04-06-cover.png 400w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/e24fb/2022-04-06-cover.png 800w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/caa3b/2022-04-06-cover.png 1000w","srcWebp":"/static/b39decc1fa7b955ea1b4d8533efa1797/b303b/2022-04-06-cover.webp","srcSetWebp":"/static/b39decc1fa7b955ea1b4d8533efa1797/21c67/2022-04-06-cover.webp 200w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/4b6b9/2022-04-06-cover.webp 400w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/b303b/2022-04-06-cover.webp 800w,\n/static/b39decc1fa7b955ea1b4d8533efa1797/c7a8b/2022-04-06-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"As I have mentioned to you many times, I like to test different approaches, technologies and solutions. I may not have told you yet that I…","fields":{"slug":"/12_things_I_learned_on_last_pull_request_review/","prefix":"2022-03-30","langKey":"en"},"frontmatter":{"title":"Twelve things I learned about Java during my last code review","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACFklEQVQozx3LW0/acBiA8be0pQco/bdQFWkt0gKyUMsUqCgKC+CBQZUhyGQ6PGxGIcuYTGdcmInJliVzS2aybPe72v1u9xn2kRb35Hf7wLut9LerzpePw167/OvH+5+3w5vT+oezvWF/f7BvHzUK/YOt67Nuu5zbtVe3y8tH7dbx9ubMBAqxAL3F4MNMrFnNNRe04fPyxclWt1V6ddi86LYHe3a/s7G7lt4sZZaTkdVEeCksl6anFnTFELEYD6DjUAi5Tjb0TEwsF+av33RfP6v1Wg8uTtqXvaeDw8ZjA4VcoCEyIeIGAxEcJgHibmxpkoUg67iuhfOmn8Jxv4usWPpm3mxm9Z2c1ppX1y311PKemowpkMmAOymRUQZMzmEJxJzCwZPs6E4+WDWll3Py90fm7eX5qFZnKVrz8xvpoJ0KpmXPp1n8a/VeNq7lVLY4zix68UkGeADoFuVKWmnlQ8e50EFKbda2XXwI/sdSpC6PAe78fP7i75/ftItbMQK2yqbdoBAgEwBFQ1pJ+KspuZ6d0AJqdqni80kAgDkwgnT6JD9Fkpdvryr2OgAgHlleIs+DRkGExqAYl9bu+6tJpTYnFwyl0xlMRSMAgOME4kXk4QUkeAWBdjoFD8chIY7wgoQpjCPKOWBteqQUH6vMjttJpWGNLxgJ5LubOTePkOhm2DssO+KTJFGkaJqjqRlEhD3kFE/+A9wgZ6hkAAK5AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/00dd435a69963311e2d7f66d6a42d6f1/e24fb/2022-03-30-cover.png","srcSet":"/static/00dd435a69963311e2d7f66d6a42d6f1/6d6b7/2022-03-30-cover.png 200w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/d184d/2022-03-30-cover.png 400w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/e24fb/2022-03-30-cover.png 800w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/caa3b/2022-03-30-cover.png 1000w","srcWebp":"/static/00dd435a69963311e2d7f66d6a42d6f1/b303b/2022-03-30-cover.webp","srcSetWebp":"/static/00dd435a69963311e2d7f66d6a42d6f1/21c67/2022-03-30-cover.webp 200w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/4b6b9/2022-03-30-cover.webp 400w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/b303b/2022-03-30-cover.webp 800w,\n/static/00dd435a69963311e2d7f66d6a42d6f1/c7a8b/2022-03-30-cover.webp 1000w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I listened to an enlightening episode of Scott Hanselman’s podcast on how to teach computer science. The guest was Maria…","fields":{"slug":"/small_rant_about_software_design/","prefix":"2022-03-23","langKey":"en"},"frontmatter":{"title":"Small rant about the Software Design","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABfUlEQVQoz23R20sbQRQG8PzlhYgKKhUUafVB0aLxodCHYBtQo4uIBlJrE7xFQ+KaZHcnO/f7TIi2Zku06OM8/OY73zk5p7HT2BsiSCIoGHouWZ+TxBviDUl67cODUu28cnJ8kEStoedWoYw4jXNjrHjaj0OKojQJGX7GTmPF+3G3yVC0s/OtXC49voudxlYhTmLFUyuR4s/hTmMCu1GnCcFD7Vdla/vLzfXvRy/G/r9kycDA0uzJSWwk3N/7fvbztBfeXdarpR/FINgdh73GWAsoRlWt+vfXwNJi8evH+blGo1Y5OSxsbeyXS71Oc+hYFv4ytjeEokiLNFuVZECyvtU4CHbzEx8mp/MLi/Obm2ut5uV4bbnXYxgJcdrVAjqNBU0kA1Yh0LtfW11ZXl6amZ2anMpf1KtPA/EOdgYbhSiMSBoJCrwhcbfVvrtKk7AT3n7+tFgorB8Fe09DbSR8g0flB5Z6Q0flkRJQsASCh7DduL2pn1WPOQHZFf/iPw1P43iJBvXSAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/7408f6899162bd0fdbb0a0f9ecdacda3/94b4e/2022-03-23-cover.png","srcSet":"/static/7408f6899162bd0fdbb0a0f9ecdacda3/6d6b7/2022-03-23-cover.png 200w,\n/static/7408f6899162bd0fdbb0a0f9ecdacda3/d184d/2022-03-23-cover.png 400w,\n/static/7408f6899162bd0fdbb0a0f9ecdacda3/94b4e/2022-03-23-cover.png 450w","srcWebp":"/static/7408f6899162bd0fdbb0a0f9ecdacda3/5bed6/2022-03-23-cover.webp","srcSetWebp":"/static/7408f6899162bd0fdbb0a0f9ecdacda3/21c67/2022-03-23-cover.webp 200w,\n/static/7408f6899162bd0fdbb0a0f9ecdacda3/4b6b9/2022-03-23-cover.webp 400w,\n/static/7408f6899162bd0fdbb0a0f9ecdacda3/5bed6/2022-03-23-cover.webp 450w","sizes":"(max-width: 450px) 100vw, 450px"}}]}}}},{"node":{"excerpt":"For many developers, Event Sourcing is like a Nessie, most of them have heard of it, but not many have seen it. I was one of them. I started…","fields":{"slug":"/introduction_to_event_sourcing/","prefix":"2022-03-16","langKey":"en"},"frontmatter":{"title":"Introduction to Event Sourcing - Self Paced Kit","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AKeLPbSCSLKAWKWBYrSeir2wo6WPfu7VvefPsczKwLq8tJ+ZiaCIacuaZN2cVuOfV9iXU9OXVdifX9ifXAC+m0fdrV/9v4j0tHrpqnHXnGarcD/InXv34svNuqCqqZ6QkomHjYxaXl9pXU+ceFHJjk7glkbYkkXTjkQAZE0UdVgm/8uQ/Mqd/cuZ/8yV/bx804ZF0rae1dTOw7mrw7qvmJOKcF9LWVVRPUJHRUZEcF5G2JdK7qRLAGlIB3tZGfrDhvjDk/3GkO/Hn93GrevFoN/SxtHT0ru3s4yEfoZZLcl7K8OBPrZ8QYxkPY9lOt6SQOWaRwCCVgCRagDdoV73vIr9voHEl3JiWliLd2uPdGJYRDocDwpLJgjEfSvjmDzsok7xplHwokzsm0XcjTrThDMAs3pGk2wYzK087LFr+bd7zJBcZjEInlYYmFMXgUoaoWMnzoU14JU/6qRU8a9h8rFk87Jj8Kxc76hU555IAPS1dNybYLCNWNvIkvDEke+0edyVTOOXSOufUfGlVvCnV+ylWu6pYPGvZvGuZPKxZ/GtYfCtYO6pWOqjTwDmp2n0uHzYllmog125noHqsnv3wYbvtHfsrW3npmTppl/qpVzopV7tpVvvqF7vp13up17splzppFjknVAA5qVl6aps9LV10IxLvHUy6qtq87uA87yA9Lp79Lp667Bw6qhj16Jr3ZtY4plQ35VK45pO551M5ZtK45tJJIU+snr/ifAAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/a722dd0107586c5dda02eb07f561f1c4/e24fb/2022-03-16-cover.png","srcSet":"/static/a722dd0107586c5dda02eb07f561f1c4/6d6b7/2022-03-16-cover.png 200w,\n/static/a722dd0107586c5dda02eb07f561f1c4/d184d/2022-03-16-cover.png 400w,\n/static/a722dd0107586c5dda02eb07f561f1c4/e24fb/2022-03-16-cover.png 800w,\n/static/a722dd0107586c5dda02eb07f561f1c4/dbfa5/2022-03-16-cover.png 805w","srcWebp":"/static/a722dd0107586c5dda02eb07f561f1c4/b303b/2022-03-16-cover.webp","srcSetWebp":"/static/a722dd0107586c5dda02eb07f561f1c4/21c67/2022-03-16-cover.webp 200w,\n/static/a722dd0107586c5dda02eb07f561f1c4/4b6b9/2022-03-16-cover.webp 400w,\n/static/a722dd0107586c5dda02eb07f561f1c4/b303b/2022-03-16-cover.webp 800w,\n/static/a722dd0107586c5dda02eb07f561f1c4/c2764/2022-03-16-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"“How do I ensure uniqueness? For example, a unique username or an invoice number.” That’s usually one of the first questions I hear from…","fields":{"slug":"/uniqueness-in-event-sourcing/","prefix":"2022-03-09","langKey":"en"},"frontmatter":{"title":"How to ensure uniqueness in Event Sourcing","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ADUyVjg1Vzw4Wjw5WT04WTo4WlFRbHF2iExLZzYsTY9DWppCWZ9EW6BDWJxDWpxDWaNEWqZEWadFW6lHXQClsbymsLmep7CkrLOyur6XhpFgX3AvL0dcXHM3LE+TRFyeRFmhRFqgRFqePlKgQVSnRlqrR1quU1ilV0sAqra8kJmhqLK0lp+jp6yusE1NWlRlOUFZZ2h8OCtOl0ddoUVapUVan0hfoSMmrDE4o0lhqVBTsHpJom45AKCrsKCqsMHNz7e5tHVdh4cxW7RgY7/DwYODkjYoS5tIXqNHXKhKYKpEVJctQZEvS6RAWK9UUrWDS6hyPgBZU2dYUWVWS2FSTGJfQXi3Jjx+ME+kWFyKf4k8MFKaSF2TMD6bNUN/QGk2T6toOXeHN2KxUlO5hUytdz4AOSxJMyhFMCI9LylEWj92jS9ZjYeS2MfBo6SmQDNUmkheoUBPljhLiUltZEyHOkmiWT56q2ZXvItVpm88ADsvTCsmQztBXjIsSyRQrxZPu2+KtrPAvnh8iz0wT59FWqpJXKpKXrZGUopGaTZHpXhUaL2ISpxsQIZQKgA2L04qKUhoh6cpPHA4UJhYW4s/WqRaV4BbXYlhX4aQUWuPUm2OVnGFUHA3UagWU8NlZYDKkEqaaDyMVy4AVlmHMzJVMTFNWixOaWWVa3Ohg0FgdWyZbnajbG+bZWqUZGuWZ22UN12oO1qjNFenamaErYJbnWo7jFYrplHht59Gi4MAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/4a5511c7643805f5fc2bc4736aece6f4/e24fb/2022-03-09-cover.png","srcSet":"/static/4a5511c7643805f5fc2bc4736aece6f4/6d6b7/2022-03-09-cover.png 200w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/d184d/2022-03-09-cover.png 400w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/e24fb/2022-03-09-cover.png 800w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/dbfa5/2022-03-09-cover.png 805w","srcWebp":"/static/4a5511c7643805f5fc2bc4736aece6f4/b303b/2022-03-09-cover.webp","srcSetWebp":"/static/4a5511c7643805f5fc2bc4736aece6f4/21c67/2022-03-09-cover.webp 200w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/4b6b9/2022-03-09-cover.webp 400w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/b303b/2022-03-09-cover.webp 800w,\n/static/4a5511c7643805f5fc2bc4736aece6f4/c2764/2022-03-09-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"War. War never changes… In IT, we’re living in a bubble. Compared to others we have good working conditions. We learned to complain about…","fields":{"slug":"/russian_invasion_of_ukraine/","prefix":"2022-02-30","langKey":"en"},"frontmatter":{"title":"“I'm not interested in politics” is not actual anymore","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACF0lEQVQozx3OXUhTcRyH8S/uEJHnd/5eBV1233VIdNHFDNbLyLBlMzSJ6exVIdSlUjqxcdYg3cztnDmT1dxO7uhxzqko6hRftrBmQWFCL0SWGIHVyruY8Ll/HqDwMQolHAvgeBAnwtCrKBpGUQwnx2CYxOkZnJmDcQHFyyhOoWQVF9dwIYOSDEyvkWdQ8k6purMx3blx3fkpnWmWK53nLi1xl9Nc+SpXmeGuvuEsb7mqd1z1Omd9z9VscNY91RtAeRKVaVjWYF3HjQ+o/Yw7m6jfQsM2bD/RsoN7v9Gahf0f7Lto32PfRdtftGVx0KYdblWPiJGjj4L6HtnY22162mWOdFZFHde0BzUx0TrmsiS6roz7yuK95lG/eUQqVaVipU8/EIYiH5roZyll33oMH8fxaQJfpvFtDt8XsL2U82MF2Qz+vMrZeYFfaWzNYXMaX6eAsGu/6j4wKucP+SjqY1qAKb6Cod6CmUGWVNmixlbibF4rWIyxl1NCKs6WR9h8lCX62cwAg6eVAiL1Ofmwmx/s5jWJ9ztJFoUhP40E+OQgP/mMxoKUCFG8n6ISyQ8FTwcN+0npJjTd4ptvk7WCt9eTw0bOZrLdJNkpBN2k9FBux0uTIVL9wnOZIpLgcQhtjdR+l7wOQl01Xa8koyG/ooya6gRHi9DRQF5RcN2n9gYSmyjkppBHeNJJ0wolgqR6qctOjbW5xn/T6eqv4O9thQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/e8311cb7ac03ca6917d1f80ce7bb05fa/e24fb/2022-02-30-cover.png","srcSet":"/static/e8311cb7ac03ca6917d1f80ce7bb05fa/6d6b7/2022-02-30-cover.png 200w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/d184d/2022-02-30-cover.png 400w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/e24fb/2022-02-30-cover.png 800w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/dbfa5/2022-02-30-cover.png 805w","srcWebp":"/static/e8311cb7ac03ca6917d1f80ce7bb05fa/b303b/2022-02-30-cover.webp","srcSetWebp":"/static/e8311cb7ac03ca6917d1f80ce7bb05fa/21c67/2022-02-30-cover.webp 200w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/4b6b9/2022-02-30-cover.webp 400w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/b303b/2022-02-30-cover.webp 800w,\n/static/e8311cb7ac03ca6917d1f80ce7bb05fa/c2764/2022-02-30-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"It’s always worth talking things through! But is it worth meeting? During my career, I have seen many projects and companies where the…","fields":{"slug":"/fifteen_tips_on_how_to_run_meetings_effectively/","prefix":"2022-02-23","langKey":"en"},"frontmatter":{"title":"15 tips on how to run meetings effectively","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABcUlEQVQoz12Nu0sdURCH988QUgpCIJVW1ooEFXxgLRY2YiWp0wTRQgRBFCxUUBTsxFot7PKAkC6Be0Hwuufs7sx5zuzevSLI2d1rRPiKeXzzm0hZUpYbXAANOe4+yMyQcVygIbSBYLrGqf2of9lEoGHjOU5pdOJ0bPbsMXXG58rw/wdviJTNlanWFaCIi/LHn3jg4+6HT9tX162y1wPFQbPvUyLQeQWDDm9Bs3Z8H5v5pdPphfXD8+/l03OKBCbHvomhro5TTRXcoChTlGhe/XYzOnewtnlDRU+CTzVlfS2rAM1RouiVOkiAL3rdr/s/xxdP5lbOOkkGJpfoG00HajOSSBK9VCSVl8onmgV67hbHV/8mly+W1nb+tttgS4G+0bDSQpCPYnACvQAnwAp0iSKBXju6+y2GPh8Nz2xc3rYs5500bGukchIDUd3HYGOwYaq8QJ9p1+7Ykam9wZEvW8e/8rJ4SLRAKzBoApwEK8G9ADiG2L95hJ/pAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/15d62e8adb3334bf659b38d17526ed06/e24fb/2022-02-23-cover.png","srcSet":"/static/15d62e8adb3334bf659b38d17526ed06/6d6b7/2022-02-23-cover.png 200w,\n/static/15d62e8adb3334bf659b38d17526ed06/d184d/2022-02-23-cover.png 400w,\n/static/15d62e8adb3334bf659b38d17526ed06/e24fb/2022-02-23-cover.png 800w,\n/static/15d62e8adb3334bf659b38d17526ed06/dbfa5/2022-02-23-cover.png 805w","srcWebp":"/static/15d62e8adb3334bf659b38d17526ed06/b303b/2022-02-23-cover.webp","srcSetWebp":"/static/15d62e8adb3334bf659b38d17526ed06/21c67/2022-02-23-cover.webp 200w,\n/static/15d62e8adb3334bf659b38d17526ed06/4b6b9/2022-02-23-cover.webp 400w,\n/static/15d62e8adb3334bf659b38d17526ed06/b303b/2022-02-23-cover.webp 800w,\n/static/15d62e8adb3334bf659b38d17526ed06/c2764/2022-02-23-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I love proper typing. But what does that even mean? I could say that this is a types’ structure defined in a self-explanatory way. But that…","fields":{"slug":"/immutable_value_objects/","prefix":"2022-02-16","langKey":"en"},"frontmatter":{"title":"Immutable Value Objects are simpler and more useful than you think!","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACKElEQVQozwXBS1MScQAA8L1ljMWYMpUzhpgh4AIrC26uBj0m+yKdGps6JD4g2fHFY5EFERKHFHUYqYOHDh0aY4Bddv/7/u+i2Mfp90O4LC5kCa2AgjWbXsDELatEe1QmwCdGhHWrcuBXyy5lZxIyGJewSV9HzAppnkWE3cF/5wFEr2CddatUeiGVMWnHKW+61fQoF7cqhYBa8smxx5D2KPmn2p5DTaOwiMvUvetvGKzhvfpzBJ691WpvhJTnatkjUnZ25YGUJZQy3o4OC1tuvexVaCefCOpFgo/dNfb9vRPSPPLC9PDNzzAilcZAblIsvG5tTrMUBlJE85OlGX0iMjigfc1lVyeOXn0cUDMusxqWaaewcqdfC/bOfeaJD4H1Rf1sUUg/E5PB9uf77bi9m47waV9zydZJzP5dGmJXnWA3KOX9ndVBfX/muuI1chP9/SmtHkJkelAroUrRDxhvdwcDSf+f9wPsZgBk3O2EpxNHeWqCW7Fo+Vm9QoK9cZi1m1W8f4zC2jRye47B716QC6iHC62opZOa43aD3W1X84uDo6ZasYdgGzWqEX7jkULZtGPCOA2ph87bBildeBDlYMyoRWRmHFRe8QfvuKTv9wdbl15gt6fYuEvMEOzGGKBs5tFcr0bCor1fD+s/gjeX8+YlicALUj4l4emCXPRfrQ0JzDyfD7VSM63My3ZsopsYVSpho0qwsWGdcfcb+PVl2GyEjF8RseH4D6r0DxOagvLBAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/09f2e82a600cba60c8efc8c46e9f56ec/e24fb/2022-02-16-cover.png","srcSet":"/static/09f2e82a600cba60c8efc8c46e9f56ec/6d6b7/2022-02-16-cover.png 200w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/d184d/2022-02-16-cover.png 400w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/e24fb/2022-02-16-cover.png 800w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/dbfa5/2022-02-16-cover.png 805w","srcWebp":"/static/09f2e82a600cba60c8efc8c46e9f56ec/b303b/2022-02-16-cover.webp","srcSetWebp":"/static/09f2e82a600cba60c8efc8c46e9f56ec/21c67/2022-02-16-cover.webp 200w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/4b6b9/2022-02-16-cover.webp 400w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/b303b/2022-02-16-cover.webp 800w,\n/static/09f2e82a600cba60c8efc8c46e9f56ec/c2764/2022-02-16-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Working with a legacy monolith is not easy. For years we learned how to tame that beast gently. We nurtured it and tried not to break it. We…","fields":{"slug":"/how_to_quickly_scale_a_legacy_monolith/","prefix":"2022-02-09","langKey":"en"},"frontmatter":{"title":"How to quickly scale a legacy monolith?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ALCfYtnOitrWyNLNutDMzeTeqOjip9TQ18nHxM7Jx+PbicDHOLTMQpuxQLbJRpumS7bPTpWpQ8DOSp2ZMQC0pGTOuVXx6Hj17Yzd2cvIxMnn4I7262rh1m1ccUSAikHX5kWLqT2vuj/b60rC2knf61CPmzyjt0aRmzUAs6NZ4NNg+O5r7OJq+e926N9/+PNp//1gssNhVolxhKBUuck7aXk1tcM/yN9DwthGvNNHang8gos9iJ06AI97RKaRROjbXvftZv7yZvvvYN/UV8PGW4O+hne2iqrHVbfJPIA/UqBiVqB1Upd8S5BgUaM2bK6dUKi7PACUg0iiiT7ayVz99Gv/+W768WqHj1h/lGeBu4JwsYOt1mG4t0a9Nn6lIHCUHWabI2iwHnm/ZHC/s1Wjsz4Ayr1j59dd/fJr7eNixLdV4t5opryCtNGMg7uDbllip6hJwblKpmtghTxRs6BO2sVeg1lIlzlgqYxTl687AK6cXeHOWf/4auTWd7epnNLDhLC7bIaUanGacYZydaKQQrepSosyV7WLWf//aP/4bPv5Zr+fWpldWn9USQDKvW6zoVjJtXrez4WzlpLDqZyzU2t8MVOAamd1p3mbb1ayal6eIGulTV3052P87mn/+WzDlWGZLmaCKFYA29F5ybR6waaesXp4p1dbrHeAnkdcs7Jkl1FplXBlzMhNq6lLklxSoVVr18hi//1r5dljsaFPj6RHd35F/IM9pmZ26V0AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/1220ba7841cb397ab995983467707cf3/e24fb/2022-02-09-cover.png","srcSet":"/static/1220ba7841cb397ab995983467707cf3/6d6b7/2022-02-09-cover.png 200w,\n/static/1220ba7841cb397ab995983467707cf3/d184d/2022-02-09-cover.png 400w,\n/static/1220ba7841cb397ab995983467707cf3/e24fb/2022-02-09-cover.png 800w,\n/static/1220ba7841cb397ab995983467707cf3/dbfa5/2022-02-09-cover.png 805w","srcWebp":"/static/1220ba7841cb397ab995983467707cf3/b303b/2022-02-09-cover.webp","srcSetWebp":"/static/1220ba7841cb397ab995983467707cf3/21c67/2022-02-09-cover.webp 200w,\n/static/1220ba7841cb397ab995983467707cf3/4b6b9/2022-02-09-cover.webp 400w,\n/static/1220ba7841cb397ab995983467707cf3/b303b/2022-02-09-cover.webp 800w,\n/static/1220ba7841cb397ab995983467707cf3/c2764/2022-02-09-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Testing on production usually appears in ridiculous stories. They may be only annoyances like getting questions from customers why they see…","fields":{"slug":"/i_tested_on_production/","prefix":"2022-02-02","langKey":"en"},"frontmatter":{"title":"I tested it on production and I'm not ashamed of it","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJklEQVQozwXBzU/aUAAA8B6XHUzMjIs6QbAfqAXa19G+tvCeRfEDoRUiQ1QMIJ8TRRDNFMdiMo2DbXHJDktmIiYe5OAmnmSXxWT+X/v9CAiEKYRnvdpG7E0sFFzyeeN6ILZoBKa9y/rCyf7u1pKxE4mU11byq+FU2O9XRSQCr1tmKQsxTpI8Q8/JQkhTfJKAxskAdLk5OyBNfheLJR6YByx9vYi1rSt8zCs4h3rood4xc784YSE06fWMImkSFDioAuDjx0IILky6FW7CRQ37FTGOse6cmAeORUmAdpEjGcCYOWaYMfUThia7HPyw2U5RQHbYfU465JGmVBd28RJjdZDWdW0yieG6KmoO0TLisZpU0yBHvxrs63lG+LEqczxFcjYaIOCY5egQhh6srGJ1BYIZFQYh8LOWDSzvzuvlZL5aKCEpSI9aqZGXxDxGTtpmNtmoUVZhGcwMLchcOKgnEVpThHfZxAxvn7P267wtizxbYf30oNKsvwc2euDFc6KYzRQLm/F4MpVMl9/mSplEdTNX292rl3f2C5nv518Oy6WD7WK1VKzkUvW96smHox/fzo9rB1EjQBzXDn9eXLRal83Gp5ub9kO3e3193Tw7+/f09LXZ6Nx1/j4+/r7r3N7+euj+abfbnxuNu06nc39/1bokokZAU90CL7Nj/CQUYyFjO5f2IpiIGNnlpUIint9IZVPJaHA2PC2HfaiaT32s7Z/Wjyq59H/+VKgI4dcjfgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/3d7470b2f734d8e05c87968599d7c77d/e24fb/2022-02-02-cover.png","srcSet":"/static/3d7470b2f734d8e05c87968599d7c77d/6d6b7/2022-02-02-cover.png 200w,\n/static/3d7470b2f734d8e05c87968599d7c77d/d184d/2022-02-02-cover.png 400w,\n/static/3d7470b2f734d8e05c87968599d7c77d/e24fb/2022-02-02-cover.png 800w,\n/static/3d7470b2f734d8e05c87968599d7c77d/dbfa5/2022-02-02-cover.png 805w","srcWebp":"/static/3d7470b2f734d8e05c87968599d7c77d/b303b/2022-02-02-cover.webp","srcSetWebp":"/static/3d7470b2f734d8e05c87968599d7c77d/21c67/2022-02-02-cover.webp 200w,\n/static/3d7470b2f734d8e05c87968599d7c77d/4b6b9/2022-02-02-cover.webp 400w,\n/static/3d7470b2f734d8e05c87968599d7c77d/b303b/2022-02-02-cover.webp 800w,\n/static/3d7470b2f734d8e05c87968599d7c77d/c2764/2022-02-02-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Idempotency is a word worth watching out for. It’s easy to miss a few letters and bang, and we have a problem. It is also a general problem…","fields":{"slug":"/simple_trick_for_idempotency_handling_in_elastic_search_readm_model/","prefix":"2022-01-26","langKey":"en"},"frontmatter":{"title":"A simple trick for idempotency handling in the Elastic Search read model","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACIUlEQVQozwXB7U8ScQAA4MtVCgwRPBQODwi5gwju7se98HJw3u+QV3nzMDHxUCGJiqEpiTPWlrq0rbFZtrb80tyqz239gT0PEhID1kcYA0Opp3GoRla2lPwmTBQ5OQeSUiAmUYICpFK0rKXkchTzuQIxhloSmJTAZkUkrFDzHgebCCzl2OoOfNbLr3WzFS31+/bg43GlmGaSkInlOKWWBJBxBomACIASpSEPliMIo9CsDH586TbXl9R1uXuqNg7yze7Kv18nh20YF7z2BRRIlNrMDfertdVEWOaDEh9MhgMiQBiFSpciny40gffTrG+3X2wNKtpOOhn1+wmbGZ02mw3ux87Oa/XP9V4lDSAERy9KnARcjA/JN5X9lwVtUwqzpJvAh2fN/of6aFi/PmuulQW9YRJFjXTsyfNWoVYUMMcsSTo2ihHcY8dDBNJ4U5Iy3Phyq1YVRch+/3l8eNF4e1q/u3m1pcZ1+ocuAuMyfLtbGb9vzFlNBUilEkHLghUPepDWUCUBORxUGXYxKoOrb732oLK2l//6udPR5Af3J3Avxi3zhY3s6LA2M6Pb1bKrhcgcgbsoEvECYoF0nY+PklnBGfISYZ99ETPZLKPz3slox4ajdq/TTroWad/lzTu4IobiNCfzbtrnpklkes4y657f7m/HMnHUaTPZ0CmT/t7kRDybuPt7SzCkzYvrTQadxcgpUVYWdBaj0TpjxtApo+4/y4qGTaT14mIAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ae76e1522a95d90262a065e1e303cb1d/e24fb/2022-01-26-cover.png","srcSet":"/static/ae76e1522a95d90262a065e1e303cb1d/6d6b7/2022-01-26-cover.png 200w,\n/static/ae76e1522a95d90262a065e1e303cb1d/d184d/2022-01-26-cover.png 400w,\n/static/ae76e1522a95d90262a065e1e303cb1d/e24fb/2022-01-26-cover.png 800w,\n/static/ae76e1522a95d90262a065e1e303cb1d/dbfa5/2022-01-26-cover.png 805w","srcWebp":"/static/ae76e1522a95d90262a065e1e303cb1d/b303b/2022-01-26-cover.webp","srcSetWebp":"/static/ae76e1522a95d90262a065e1e303cb1d/21c67/2022-01-26-cover.webp 200w,\n/static/ae76e1522a95d90262a065e1e303cb1d/4b6b9/2022-01-26-cover.webp 400w,\n/static/ae76e1522a95d90262a065e1e303cb1d/b303b/2022-01-26-cover.webp 800w,\n/static/ae76e1522a95d90262a065e1e303cb1d/c2764/2022-01-26-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s say that you have the following class definition: Now you can create instance using: So far, so good. What if we accidentally mixed…","fields":{"slug":"/using_strongly_typed_ids_with_marten/","prefix":"2022-01-19","langKey":"en"},"frontmatter":{"title":"Using strongly-typed identifiers with Marten","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACKklEQVQozwXB6U7aAAAA4L7HnmKJ7+CPbdkiapwDnFMQgZbScrUUSjmLyDHAIhPsOFYHdEQEFOWspDhEFpMZTbZlf6yavcW+D/B6UROBGaigHiM1qJ2K7iBu/8q6IhCOVri9RJxMZ0LNRlm8uspO/gWFR/9Aovr3ZPfe2ZWAHM8ZbJAGxRCnd0OnUukhwu1Z1cEur0/s185OquLwbC9Fc5+jwuUkKfwNnj/5BpKrL5FdCaCZDM1svzfCCBkMfYyguG7NbFnVoThJ3v4Qei0+tx+jg7Za41uzxuUOipnxIy08+gYS1ZMAsydk3Y6pMLdcg0ZSn1aooGxtU7a0iFOe6ahTrVcsBFQ9/Pp9JEwvz3vtBpvf2x/fh4YPAeEBeAvBy2pEDdsMoApEDAbcYzTrZxcWt8KRMpfeCmB8vdo6ru7GffU6X6+VomHy+u62OH2IiE/Aslol1yLpDLNph9edAQh3g4R3RQtbbdZL4biYY8bCaYnLkD683T4uHbBJJnohdpqtRnpwB7zUrs3rzXSSmbf65e8WFMrFDZP9xWvZTpb9fTO+FjvTsWB0WCKxgDjsDfsnR0d8PEYd1vhsngVmPliW1MZXSl2hkFHh8LMFECI8b5aUIKQfnVaatZID1zPZdCwVZ3djw/ZRq1l1ukydQbdS/gLINTDo9M3OyRMs+3yTnJlbRwiPQouGEqmfk8GfXzfWRAK3aG6uLraTUYcD5csc4cIKxVwuz/4H6k01r4gjlFAAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/8e481f97830a1f4ae0a8f155cf1a4aeb/e24fb/2022-01-19-cover.png","srcSet":"/static/8e481f97830a1f4ae0a8f155cf1a4aeb/6d6b7/2022-01-19-cover.png 200w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/d184d/2022-01-19-cover.png 400w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/e24fb/2022-01-19-cover.png 800w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/dbfa5/2022-01-19-cover.png 805w","srcWebp":"/static/8e481f97830a1f4ae0a8f155cf1a4aeb/b303b/2022-01-19-cover.webp","srcSetWebp":"/static/8e481f97830a1f4ae0a8f155cf1a4aeb/21c67/2022-01-19-cover.webp 200w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/4b6b9/2022-01-19-cover.webp 400w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/b303b/2022-01-19-cover.webp 800w,\n/static/8e481f97830a1f4ae0a8f155cf1a4aeb/c2764/2022-01-19-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Each of us has at least a dose of creativity. I have always liked drawing. I wanted to make effective plays in football. Today, I play the…","fields":{"slug":"/should_programmers_productivity_be_shown_in_code_formatting/","prefix":"2022-01-12","langKey":"en"},"frontmatter":{"title":"Should a programmer's creativity be shown in code formatting?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB20lEQVQoz2P4DwO/fv36CAZv3rx5//79hw8fPn78+OnTp2fPnr169er9+09fv357++bN9+/f4VoYINS/f//ev3//6+evb9++/fr1CyLy798/iOzfv/9ev7r379+vf///v37z5tu3byia//z58/bt2/9I4C8YPLn/4OPbtyWl5YsXTXh4/tqF1Uffv3j75t1bFM0/fvx49+4dyJS/f//8+fP3z9////9///atvbqhrbElOyPj+o0HKypnVjjnHZux9cuXT79//wFphrjty5cvHz9++ItwJ0jzlcOHK7u6Kzo6prdOXTilorQgd27pzMbCqdsOngH5C6759es3q1dvO3/+1OSVq+fO3/LyzoNbd281LV/rmJ3XWVjZ4lPS4pu0pGbKpLxyCd/cvO4FIAv+/WP4B7bk2c2r1aGJVbM2hldNtdYwD0mMmD67ctrCHR3z5lZXJ1bEFnWGFbcFFxdE1ivaFRZ2wTT//Qty/eVTe4rCPWyzu319M+OMPdMyi2fMbwkr7HXPzJ8+PbQ8LTkir94puSS1qi8xu6WxcxkoAv7/Z4B47/j56+6dEx0ic8IcUgpD0ivD0ybkNeXGFgUnpEzPDsnLKepbvHXhlEUd4bGOESU9EzeCbP7/HwCz3JvbrHsExQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/961adcd01246ac7632dc0738968898db/e24fb/2022-01-12-cover.png","srcSet":"/static/961adcd01246ac7632dc0738968898db/6d6b7/2022-01-12-cover.png 200w,\n/static/961adcd01246ac7632dc0738968898db/d184d/2022-01-12-cover.png 400w,\n/static/961adcd01246ac7632dc0738968898db/e24fb/2022-01-12-cover.png 800w,\n/static/961adcd01246ac7632dc0738968898db/dbfa5/2022-01-12-cover.png 805w","srcWebp":"/static/961adcd01246ac7632dc0738968898db/b303b/2022-01-12-cover.webp","srcSetWebp":"/static/961adcd01246ac7632dc0738968898db/21c67/2022-01-12-cover.webp 200w,\n/static/961adcd01246ac7632dc0738968898db/4b6b9/2022-01-12-cover.webp 400w,\n/static/961adcd01246ac7632dc0738968898db/b303b/2022-01-12-cover.webp 800w,\n/static/961adcd01246ac7632dc0738968898db/c2764/2022-01-12-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"“No, it can never happen!”. Have you heard this sentence before? For example, a user with the same e-mail address may not register, or the…","fields":{"slug":"/no_it_can_never_happen/","prefix":"2022-01-05","langKey":"en"},"frontmatter":{"title":"No, it can never happen!","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABW0lEQVQoz3WQv07CUByFbwyzMTFx0vgKrk7o4OBiHHwKBx/ARWcnRxdHdTKGOKAJipoU1BD+BGKEgigtFNp6S9t77++2tFwDA0GRs38553yIjUIp58G3Xn6LLzaTiGTQ591sTc5VKtX6R01VFUII+x00BrvgCUO9xylUis3It5FqHMn5E/CE43Q558BgOswIYUIvbHfS86/X0ezF0vvlgvy00dYtGFCUTWQEUwDuOnZbmsOlaCF5mjhafTjeLCb2TFPRdY24DsDUZjqs5lpmzZJQI39YkG6SZzuN8pWi1D0/0Nqabf/lxz8T4CHW82p6xWrGWCByj7v1OOo8L7eyW8pL1DSanPuM0n8/D8fzoGtbpv6laa0urqqlAz23jiVkpSJGM8U9QSmZBg+cc2CUAsZGvx8IITy/h5VzpbhvWx0Ab9wcmnQIjFkWBiBh6PV6JAxBCEHBtx33j7If/1Hbe/py3L8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ccec3d8cf76c30a9b4972ce7ee481efa/e24fb/2022-01-05-cover.png","srcSet":"/static/ccec3d8cf76c30a9b4972ce7ee481efa/6d6b7/2022-01-05-cover.png 200w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/d184d/2022-01-05-cover.png 400w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/e24fb/2022-01-05-cover.png 800w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/dbfa5/2022-01-05-cover.png 805w","srcWebp":"/static/ccec3d8cf76c30a9b4972ce7ee481efa/b303b/2022-01-05-cover.webp","srcSetWebp":"/static/ccec3d8cf76c30a9b4972ce7ee481efa/21c67/2022-01-05-cover.webp 200w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/4b6b9/2022-01-05-cover.webp 400w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/b303b/2022-01-05-cover.webp 800w,\n/static/ccec3d8cf76c30a9b4972ce7ee481efa/c2764/2022-01-05-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In Event Sourcing, events are the source of truth. We save them in the event store to have a permanent history of facts about business…","fields":{"slug":"/integrating_Marten/","prefix":"2021-12-29","langKey":"en"},"frontmatter":{"title":"Integrating Marten with other systems","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACHUlEQVQoz02MX0hTcRzFf9BaEQXVi2jiRoQwkkYwiKKHDQSFUMKiIHoQzV60nG2YRcQofKg2qpXmmK7FXFNfchtCOZiaD2bOtTv31/1xa2ttS+fmard57/19Yzaiz8M5HM7hIAAMgPFfKwcMAPl4bFrc+aylyW1QrxmGMguWpN/H0AzGmGHKikr7nXX54z8+KhWyC82hSUN0XJNf+UzmtwCApmkAYBgGABAADcBQNE3tUCwWS0e41BHGydZTApdJl7G+y67YtovF3PoGRVGZdJqm6XTiOyKzo9s5tdUdNxNRCxHSzzkLZAEAjP75m2Oy9jtX3dNT2VkLGQ+P60ZFPN5dsbj+BL+vs0t4rBZB7ko2dm0isKkPY32QMqyS67ktwNDlUZ3x3RP67g/ZtEmXEwCkUglCiMVioX9QqdZU8LrWFlEvZ1RLKa1j07n0yfVhomP5pWC++6xVLJi5oXk/kpwx9d3q2YVQ1f59h9m7D+1hV+xlo9DXS+5Ay4K3fc7e5h0UfVPXx5WCgIxj91iJdISIul2ZH1/e9MS6D8b7+QFJRfh2TUBa7ZdURXo5yJ+46E+cD6abfGuNhQEOvKiEgUo8yP25uvjrN8WQheRGMWuWgvwAVlSDvAaeHgU5Fx4fgSdc5POeI4hGh6OBsDeEDSeTb/lTw0Kjrvmhsb/N9EA+Zj7doXz1XPG69/LsI1F0uDaiqQuO1HlUPK/6+B+nP3f2YAPQewAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/82a793a558bac66e1404f26e6c5d721d/e24fb/2021-12-29-cover.png","srcSet":"/static/82a793a558bac66e1404f26e6c5d721d/6d6b7/2021-12-29-cover.png 200w,\n/static/82a793a558bac66e1404f26e6c5d721d/d184d/2021-12-29-cover.png 400w,\n/static/82a793a558bac66e1404f26e6c5d721d/e24fb/2021-12-29-cover.png 800w,\n/static/82a793a558bac66e1404f26e6c5d721d/dbfa5/2021-12-29-cover.png 805w","srcWebp":"/static/82a793a558bac66e1404f26e6c5d721d/b303b/2021-12-29-cover.webp","srcSetWebp":"/static/82a793a558bac66e1404f26e6c5d721d/21c67/2021-12-29-cover.webp 200w,\n/static/82a793a558bac66e1404f26e6c5d721d/4b6b9/2021-12-29-cover.webp 400w,\n/static/82a793a558bac66e1404f26e6c5d721d/b303b/2021-12-29-cover.webp 800w,\n/static/82a793a558bac66e1404f26e6c5d721d/c2764/2021-12-29-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Getting the state from events is a basic but controversial topic in Event Sourcing. I wrote on it longer in other article. To recap…","fields":{"slug":"/how_to_do_snapshots_in_Marten/","prefix":"2021-12-22","langKey":"en"},"frontmatter":{"title":"How to do snapshots in Marten?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB0UlEQVQozxXNy2oTURgA4P//z23OZS5nbiYzaWZq2thSGmLTmNpiWqIWSr1gK10URUEQXGhB8R0KLhQXLty4V7w8ovR7gQ+ACSACICAGxKXS68vx44Obf759+nxxcjBtQUmRONABKQZGgGMqIRuhzwiw4CgYAAfiwJWQQd2NnHOLyez1yYOyDMtcB96K1GJqwBBGaD3pgljMAAyHK4QkAFgSu7O7xTUPba99/uRw2Kgy1y5WNmS6K4OUu37gGo4jBRFCmNjQBohXuRBytFq8Pe283IO/l/u/vn/cbFSRauOYCzHNWFlL2Y/ENFF7gRgi5JUvq7yuU5Jydz0dDdL97fzHRfn78s7Pr+9XKqMV9wn3nmJHOkRROtn1vPKYEDCrfM8cLq5PJ/3tQVgUdncUvjrKj+ar/758aHJXJrrMpHNoHTdL6ex4vrmYJ8MWGEDVqN4N9exs4+H91mlmtFrqOCCYrhTvjrcSK4RAbVFyCOpgcj6bnd6LBy0FChhC3hVLa2q8E01ve6nIClEaSTzYaTtPb7WRJ6aIAmYsMxXFYxMPMkACAGQEWWWzvlreMEVDxNGnYdUJx+P6zYvF+aOtdq0ATsAIJSEhAHAvZaaAiEn+HwbsNCdn9vicAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/fb80596d4df90a1b70a30f755f8149d2/e24fb/2021-12-22-cover.png","srcSet":"/static/fb80596d4df90a1b70a30f755f8149d2/6d6b7/2021-12-22-cover.png 200w,\n/static/fb80596d4df90a1b70a30f755f8149d2/d184d/2021-12-22-cover.png 400w,\n/static/fb80596d4df90a1b70a30f755f8149d2/e24fb/2021-12-22-cover.png 800w,\n/static/fb80596d4df90a1b70a30f755f8149d2/dbfa5/2021-12-22-cover.png 805w","srcWebp":"/static/fb80596d4df90a1b70a30f755f8149d2/b303b/2021-12-22-cover.webp","srcSetWebp":"/static/fb80596d4df90a1b70a30f755f8149d2/21c67/2021-12-22-cover.webp 200w,\n/static/fb80596d4df90a1b70a30f755f8149d2/4b6b9/2021-12-22-cover.webp 400w,\n/static/fb80596d4df90a1b70a30f755f8149d2/b303b/2021-12-22-cover.webp 800w,\n/static/fb80596d4df90a1b70a30f755f8149d2/c2764/2021-12-22-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":".NET and CQRS are well known for the high ceremony and enterprise feeling. You should treat that as superstition. Let me tell you why. CQRS…","fields":{"slug":"/cqrs_is_simpler_than_you_think_with_net6/","prefix":"2021-12-15","langKey":"en"},"frontmatter":{"title":"CQRS is simpler than you think with .NET 6 and C# 10","category":"CQRS","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACrUlEQVQozx3HbUzMAQDH8f878ywvjLcZL3ghHGaymYaZhxfZ1JpN2k7dlUjKVfdU3Z3qrnvo6u5qTh1HqisleSjXw5VEoQe1S9KhTcvUopaH+v2MF9999hU2rF/HzZuCsX3bFuzfK8KeXSHYLQrBvr2i/x46GIrjR8MQvDEYS1asxNJVq7FsTRCWB61FyM7tkCXHQ6+RoSg/Ezu2bYVgMWRh8XsAzY8qkZujxpuuRizOjGFh5gPmJv38NTUC/gjgw2AnHDYjzoljIL0gQbm7BJOBN+D8OBZn3pOLXxARfgxCSWEefk+PsqHmJkvsRmq1Ck6M9vDn12HO/2vSz9kvg1yYHiVnP5Jzn8gfAfLnOBem33NuYghTgVf8820YkaeOQyg0atDS6KHVrIO7rAgpqYl4+rASn4df4F2fj6Nvn2FsqIsj/R0Y7GnGC18D+l966X3swUB3M/297XjeWs+xoU6cjQqHYNDJ4XBYuFW0C0dOnmBo2EEaTXk0mnJosehpKdDTZMplTdVN3nIVMzn1Mu12E+MTpdRdy6RGq4JClUZ/XzvE0REQlGmX4G26z1qPCwPdXnS1PWB9bTnVWXIq1XJqtGomXIxnhkJGh8NMhSqdeoOWOXnZzFBcpSozA8XFBRwe6IRUfAZCcuJ59L/28e5tJ1qeVPP+PTe9jbX0tTSwqqKMTqeNNR43bUVGeipddJU5aLeb6Sq1saqilC1NdWhtqoW/r4NJ8TEQLsRFo7e7FcV2M53Xi1Bd6cId93WU3rDBYTfDbjOhsDAfVquBVqsBFeVO6HQqaDRK6K6pIUu7Ar1eA5+3jvIUKYTYmCg8a3uIA0cO87w0Fjm52YxLiGV45GmKJWJKEuKYpVFSlp4CaaKEWp2SKbKkf89srYpp8lRaC/LY5q1jtjwJfwEObu5aOTc8EgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/a04900fddfddf7ddf03fbe189e50701e/e24fb/2021-12-15-cover.png","srcSet":"/static/a04900fddfddf7ddf03fbe189e50701e/6d6b7/2021-12-15-cover.png 200w,\n/static/a04900fddfddf7ddf03fbe189e50701e/d184d/2021-12-15-cover.png 400w,\n/static/a04900fddfddf7ddf03fbe189e50701e/e24fb/2021-12-15-cover.png 800w,\n/static/a04900fddfddf7ddf03fbe189e50701e/dbfa5/2021-12-15-cover.png 805w","srcWebp":"/static/a04900fddfddf7ddf03fbe189e50701e/b303b/2021-12-15-cover.webp","srcSetWebp":"/static/a04900fddfddf7ddf03fbe189e50701e/21c67/2021-12-15-cover.webp 200w,\n/static/a04900fddfddf7ddf03fbe189e50701e/4b6b9/2021-12-15-cover.webp 400w,\n/static/a04900fddfddf7ddf03fbe189e50701e/b303b/2021-12-15-cover.webp 800w,\n/static/a04900fddfddf7ddf03fbe189e50701e/c2764/2021-12-15-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Events (schema) versioning is a boogeyman for people learning Event Sourcing. They’re a spooky tale told at the campfire. There’s a truth in…","fields":{"slug":"/simple_events_versioning_patterns/","prefix":"2021-12-08","langKey":"en"},"frontmatter":{"title":"Simple patterns for events schema versioning","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABc0lEQVQoz22QzUpbURSF0yZnr332+bn3nFzvvZhqTLSJKeIkVLDSW2MpdCRig+AT2FEn4kiEvEHBsa/QB+jEp/ExHJTcWPxBWMP9sb+1GgAB1A9WNKJwbrQiYswD5vGH97vbo2qv2h2PY0gBxcxUIwA1ANIg7yxb2xbOEiEmhlLUajRx9fP4+8dhGpaKrO2dU0qJ6NyJYTzAADFDa1jhJBgyALCx3Bn0utVK+F11vo6Kg+rL3qA/zDyBlqwOwo9wzVMqHJ14x5NBb/pp/Hm4/qPb+TUMN+dn06OTnd7qZh51bfrsM0BEVDq9XToP7JTpZDXxzq/FmCk1O9y/Ovq24Vy3yDJvHWD1CxgUjR6ViRbT92aykrfTpNFU+++S+9vLuz+zqp0EI8zgp4M9aNc+0bkYi35It4rSijRbrUGe/p2dXl9Mi8RqUgvypfYiwjCiU2uMCJGq6yj39o1hIqjFNMxk9Gvw//4K9ek8TNDzR88Oau1/7ZUqU7/uN28AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/6d21a6ae40876678b22c9ed04ab514c7/e24fb/2021-12-08-cover.png","srcSet":"/static/6d21a6ae40876678b22c9ed04ab514c7/6d6b7/2021-12-08-cover.png 200w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/d184d/2021-12-08-cover.png 400w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/e24fb/2021-12-08-cover.png 800w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/dbfa5/2021-12-08-cover.png 805w","srcWebp":"/static/6d21a6ae40876678b22c9ed04ab514c7/b303b/2021-12-08-cover.webp","srcSetWebp":"/static/6d21a6ae40876678b22c9ed04ab514c7/21c67/2021-12-08-cover.webp 200w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/4b6b9/2021-12-08-cover.webp 400w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/b303b/2021-12-08-cover.webp 800w,\n/static/6d21a6ae40876678b22c9ed04ab514c7/c2764/2021-12-08-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I usually don’t try to fight the HackerNews or Reddit opinions. That said, I cannot deny that they’re powerful platforms. The heated rants…","fields":{"slug":"/event_streaming_is_not_event_sourcing/","prefix":"2021-12-01","langKey":"en"},"frontmatter":{"title":"Event Streaming is not Event Sourcing!","category":"CQRS","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACoElEQVQozwXB20+SARgH4O+mm+6btZyWJuoQP1BJ8ECGeQARlDMifIIKiimapgFiKpGUxw64zBDD1MywpbWaaW2e1nJtrYtuuuz/eH89D2NUS1FbLYJMyodDK8NksAmcpRzaGxIYamqQxc+DgE2HuJiHomIBJKVitJrk8HJKejRkI1+bBv2cgupk+RDmpIEJdhsQ6LXA06JARRkPhcJU5GddRGq+FUUFdTifWYXLuQJcl5fC5nAQKxKSxaghT2c7+p0N6DLJyaqSwqqSwFQrBtNhV6CuphCZV1KQlX0BpeJUVFWLkJIpxZmzqZTNVkOlaaL+IR+8fX3UzDkpkVink6NTik2N0oRXj6lBG4V79PC7VGDKxDykXzqHEkkG9I1C6Az5MFtZ3LSWgZeRhkaDnhZiSwhPzJLfN4ZEfBlbG6+xmljBcnSOokNWiodcmA+56XnYDaaqnIXsaiYaFHyYdSy0DXyMuGrxcboDpjoJOds8ODz8Rd/2jrG0GKeN1VV6n9yi70cHtLO5RbO3rfR0pAUvwm5am+wEc02aDWVlLvSaPHD6QjSrCzDdZ0DiXhv5XEqE/LdobyVJ+292cPrjN50c/qS9zwf06cNXSm5uw+s20xMfR28jHUg+cIGx1LNwmopgUQuhKs+FvpLFzIAZU4MWCrjV0FYV0NpCnP7++Uf7u8fYfrdHm+vbFJuPYsTL0XCHDrNjbkSDDlocdYBx6kQwKwTQyvkwV7MYbJEj5rcg0qNF0KUks0IE/0Avfdk9ofjiKwoFR9DfbsTDXg3FRm1IhFppPmjH42E7ngU4MI0VPKhkOTDWCuGxSRDpUiA61IRIdwPd71KizyYnnaIEXocZ4x4dQt31NHfHSrG7diTGOVoKtWAmwOHluANr4Vb8BxYtjKj/MNPRAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/56f85bf712e80a68e0b161404a4f9717/e24fb/2021-12-01-cover.png","srcSet":"/static/56f85bf712e80a68e0b161404a4f9717/6d6b7/2021-12-01-cover.png 200w,\n/static/56f85bf712e80a68e0b161404a4f9717/d184d/2021-12-01-cover.png 400w,\n/static/56f85bf712e80a68e0b161404a4f9717/e24fb/2021-12-01-cover.png 800w,\n/static/56f85bf712e80a68e0b161404a4f9717/dbfa5/2021-12-01-cover.png 805w","srcWebp":"/static/56f85bf712e80a68e0b161404a4f9717/b303b/2021-12-01-cover.webp","srcSetWebp":"/static/56f85bf712e80a68e0b161404a4f9717/21c67/2021-12-01-cover.webp 200w,\n/static/56f85bf712e80a68e0b161404a4f9717/4b6b9/2021-12-01-cover.webp 400w,\n/static/56f85bf712e80a68e0b161404a4f9717/b303b/2021-12-01-cover.webp 800w,\n/static/56f85bf712e80a68e0b161404a4f9717/c2764/2021-12-01-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In CQRS, it’s common to define interfaces for the handlers to enforce the unified code structure. Such an approach is used, e.g. by MediatR…","fields":{"slug":"/how_to_register_all_mediatr_handlers_by_convention/","prefix":"2021-11-24","langKey":"en"},"frontmatter":{"title":"How to register all CQRS handlers by convention","category":"CQRS","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJElEQVQozwXBS2zSYAAA4N49qIRB2//vX1pK+aHUPqC0hQ3KyyGPARtZWNjGnDoCZHHEzHggQQknRT0YH4m7mBg9LJ6MMdGbyS7Og4neNB487uRJj/P7iEgA+XmGJMk7vYZjqu45DwAAAnDOQ64ng98ny5Nly+0lhQCzWdP2tozOSszRsdtLQgQJGbM4iHiOPpx2us3cmbMuCACC4DxJrZnC0TBzsJXyslQ6IdxYj452rGm/JMu8h6QABIShcIbG66rv3ePr75/s24ZM0jRgwBygM9HA7xfjSb/NcG4r6msWw7utaDkXvJTCEZEjaYowNV7X/WEJvXkwOH51u3ExFlP9KRPLmHw5G//9ejzt13pNfbUgxaMoYfGLKXG2mWpnZRdNEUlDUFReUfnWUnx1aV7gQdrEquSrFYx/P7+dfD4aX81sVfXtamzQNEyDUy3x5qaTTWAqAInSQiibDKZtAUsM5AEfZOQLrJtyjQZrp39Ofnz6uN+2c4bIsiBr4MtlLW35WQlykg9hhrhSsypOaNhJz9th5KexBDUNQtbTqTunv74cPn24sSjl40FdhqaCGES1CkotH8GxABtCxEY1/vreYDyo7HWrcZ2La4wVZbAIIQStcsJWhd26Uk/hZIwpp/m7G/lnvZXnw5LthEWZJTKWcDC7tl43Hk23R8N2o6gsWCgiQRoAGlGRkG/SsVYcXFzw1cvyh1vttzuV+92KYYu6zv4Hb8GOA3PlVl4AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/1c8b4d82412ce0658d13380d547a00fd/e24fb/2021-11-24-cover.png","srcSet":"/static/1c8b4d82412ce0658d13380d547a00fd/6d6b7/2021-11-24-cover.png 200w,\n/static/1c8b4d82412ce0658d13380d547a00fd/d184d/2021-11-24-cover.png 400w,\n/static/1c8b4d82412ce0658d13380d547a00fd/e24fb/2021-11-24-cover.png 800w,\n/static/1c8b4d82412ce0658d13380d547a00fd/dbfa5/2021-11-24-cover.png 805w","srcWebp":"/static/1c8b4d82412ce0658d13380d547a00fd/b303b/2021-11-24-cover.webp","srcSetWebp":"/static/1c8b4d82412ce0658d13380d547a00fd/21c67/2021-11-24-cover.webp 200w,\n/static/1c8b4d82412ce0658d13380d547a00fd/4b6b9/2021-11-24-cover.webp 400w,\n/static/1c8b4d82412ce0658d13380d547a00fd/b303b/2021-11-24-cover.webp 800w,\n/static/1c8b4d82412ce0658d13380d547a00fd/c2764/2021-11-24-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’ll continue today a topic of handling eventual consistency that I started in the previous article. This time let’s learn the trick called…","fields":{"slug":"/long_polling_and_eventual_consistency/","prefix":"2021-11-17","langKey":"en"},"frontmatter":{"title":"Long-polling, how to make our async API synchronous","category":"API","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABy0lEQVQoz22SwUsbQRjF/Yd6sFjQS3MQLBSLl6KlaAQRUWnUQqWlYE0Eg8aUtmpSim6MKA1GsEIIyWzsgtpSb4oHMbNxu0Kk2bGYgHocnsxsNkbJ4fFYZr7fvu/t1jGqQsjSiXSmq7AowYXxE0d7cfxYDWJN8SMR+4Sp8SGsRabw/2TLnqEErGpOqM7SbZhFHSc4z2VgHiYwO/0W0fAE1qMBbG2GocyN4c0rN5LxLyieaihk02VoOZAAijcIKKO2i0tFU8OfTBRdHc/Q/LgRIwOd8PS9xNeP7+Ef8yAS8oLlSGWbe0BVxrao7f+O07jK72B9OYD+nnbMTAwj4BtG6xMXGh4+QLOrCavfJmUlAuYAWXXC+8Drsx3EFD8aH9XD/aINT1tceD3YhVGPGwM97Vic86JkCmD6tkcHKHsrF+t0KEo/2d/EYG8H+rqfQ5n/gGT8MzZWggj4RvArpaBU6bA8V0lIVS5k6UQ601VeyBJeNDV++DvGQ8F3fCk0zqNhH4/Me/l2ckGeWdS5fzsnVDMhkx/H/nWKfzUc7H7HbmoR+aMkSqZ2Z83qhJZcmRKjlpiuGoUsMQrZtFE61YzL/LZxnsvIZ3EmVGvuBr0yQCNE4y38AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/e0e58f97a3d42fd97504d5feec903331/e24fb/2021-11-17-cover.png","srcSet":"/static/e0e58f97a3d42fd97504d5feec903331/6d6b7/2021-11-17-cover.png 200w,\n/static/e0e58f97a3d42fd97504d5feec903331/d184d/2021-11-17-cover.png 400w,\n/static/e0e58f97a3d42fd97504d5feec903331/e24fb/2021-11-17-cover.png 800w,\n/static/e0e58f97a3d42fd97504d5feec903331/dbfa5/2021-11-17-cover.png 805w","srcWebp":"/static/e0e58f97a3d42fd97504d5feec903331/b303b/2021-11-17-cover.webp","srcSetWebp":"/static/e0e58f97a3d42fd97504d5feec903331/21c67/2021-11-17-cover.webp 200w,\n/static/e0e58f97a3d42fd97504d5feec903331/4b6b9/2021-11-17-cover.webp 400w,\n/static/e0e58f97a3d42fd97504d5feec903331/b303b/2021-11-17-cover.webp 800w,\n/static/e0e58f97a3d42fd97504d5feec903331/c2764/2021-11-17-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Auditability, diagnostics, time travelling are usually the first mentioned features when speaking about Event Sourcing. All of them are…","fields":{"slug":"/dealing_with_eventual_consistency_and_idempotency_in_mongodb_projections/","prefix":"2021-11-10","langKey":"en"},"frontmatter":{"title":"Dealing with Eventual Consistency and Idempotency in MongoDB projections","category":"API","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJElEQVQozzXO3UtTUQAA8LN7zr3n3HPP/djdbXN36XQ1Pxqb1fzIPajsrixw6LRpuZWUc6EyvzI0gopZWCtRUXMloj0I2kuwR+k1iOhBKKWepf8jfOgP+MEP2GwchDyCmOdFLDKeaIZmPGpvGGoMjkdazpd5sd2UHWep6sbU4CAGgNMNDyYUAAA4DkEoIF7EmBFRoZKGiNIZiUwnE00XL3nNSkkzdZdXd/sEyQiEGpojrZgwiakcRP8xIoLACFFkpiMkbm59PDn5+/Xgy3BblDCH5izXDA+R9HKvv6LCByFhigERBhCi0zYip20sMUlDEK/mn68svPpU3OgMN4iKQ7G7qKzzPHV7qtqjHRARJikA2ACEECFeEAgWKMGUSQqhalewpslXadX4LvuqCNMlZncaZQJP3bpR56827TriBchBoMqySEQqMipKmqwpTKt2m9PRK2PxG+l41+3mcGMg5K+tT8divVHrSSZ7Pz3oUB2U2RXtDLCCtUFv+TmPpy1Q0xqsi0VaZgeS811WayjU151Yzw0XHk7MjTwoTE3e7biaS92JRy0AbKqsOZ0m2N1c393eWnpT2Cm+21ldziV7FjPpAatNNVz5VOK4uHAwM9UXrp+fm118+mxleS3/sjA+OjaSzfYkesHRz8PfR7+2P7xfelvYWX6d6+9+fC81mk5N3Lo5E49tXL/2wn/B1I3B/v79oczn3OTh8Z9v33+USqX9vb1/3RN2HBYFvKMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/fa859cd5928f912b1cbe4691bb92d7b6/e24fb/2021-11-10-cover.png","srcSet":"/static/fa859cd5928f912b1cbe4691bb92d7b6/6d6b7/2021-11-10-cover.png 200w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/d184d/2021-11-10-cover.png 400w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/e24fb/2021-11-10-cover.png 800w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/dbfa5/2021-11-10-cover.png 805w","srcWebp":"/static/fa859cd5928f912b1cbe4691bb92d7b6/b303b/2021-11-10-cover.webp","srcSetWebp":"/static/fa859cd5928f912b1cbe4691bb92d7b6/21c67/2021-11-10-cover.webp 200w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/4b6b9/2021-11-10-cover.webp 400w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/b303b/2021-11-10-cover.webp 800w,\n/static/fa859cd5928f912b1cbe4691bb92d7b6/c2764/2021-11-10-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In my article “Optimistic concurrency for the pesimistic times”, I described the premises for optimistic concurrency handling. As a reminder…","fields":{"slug":"/how_to_use_etag_header_for_optimistic_concurrency/","prefix":"2021-11-03","langKey":"en"},"frontmatter":{"title":"How to use ETag header for optimistic concurrency","category":"API","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AEpHO0I7K2NaRF1RQXBkRJKHbHZ7dURHPycnJR8pKR4lFBIWCxodDBcaDBofDwoQAHBwXM/MwZWcm4+SkQBVWEs2LSBFRTM1MyszIhR4bmNpc3xiREgvNDE9PzssJxksKhUgKxgUEgsNDwoDAwBpY1iUmp19hIKUi4sAgX1fVVwhS1VAKDIqGh8cMzQyWFxXZ1JQQ0A3GxYNIhwVDQ0IQCAZGQ0JDBUMSDQWjnVUiJGMZ15Pg3hoAIZ6Z2hSOUlRQUpWOCUuHiwsK1VQQz0+IUUyICMhF1lTRkQ0ME4TFyISDhwqGUA7IqqrmsHAsW1cQGZXRABxdnePeWpuVE2WT1k8NCs5NSxQVE5VTDJQQDJGKh5sWlB/clddVjV6Wl16Qz9fSDKLhHyZi3xrW02EYlIAo3ZRmWIxjVMfnlMmgk8nbllDb2VYeEo9Y1NFb0o6hlhGhl5Lg2BGmGVbl21loHNWrYFasY1wu495w5N2AGo7JWxIIXlOImlNJ149JIuHZ6eOZMR4WbeGb7WTacaWbsqXererjsKjhbWkiLuihbqll62Vg5+Tg6COgQBfRShiTTZ0U0mDjXGfhWWxqYvFsJnKq4zKsZjIu6HGq5Sxp5OLkn+OiXmIh3iAfW96dmp5d2V4dWR6eGcAsa+FxayGwauhzL2Wz5yJ4XBm4XRbp4R1hoNwfHZqbmlZZmJUWVdIY15PaWJRcG5einVXfmZUamlcXVhLwyPKqu7ZF7IAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/98c41822715f54b5f0c5e04a41bcd708/e24fb/2021-11-03-cover.png","srcSet":"/static/98c41822715f54b5f0c5e04a41bcd708/6d6b7/2021-11-03-cover.png 200w,\n/static/98c41822715f54b5f0c5e04a41bcd708/d184d/2021-11-03-cover.png 400w,\n/static/98c41822715f54b5f0c5e04a41bcd708/e24fb/2021-11-03-cover.png 800w,\n/static/98c41822715f54b5f0c5e04a41bcd708/dbfa5/2021-11-03-cover.png 805w","srcWebp":"/static/98c41822715f54b5f0c5e04a41bcd708/b303b/2021-11-03-cover.webp","srcSetWebp":"/static/98c41822715f54b5f0c5e04a41bcd708/21c67/2021-11-03-cover.webp 200w,\n/static/98c41822715f54b5f0c5e04a41bcd708/4b6b9/2021-11-03-cover.webp 400w,\n/static/98c41822715f54b5f0c5e04a41bcd708/b303b/2021-11-03-cover.webp 800w,\n/static/98c41822715f54b5f0c5e04a41bcd708/c2764/2021-11-03-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I thought about writing a cookbook for guys, a set of essential tips on surviving in the kitchen. I thought of starting with…","fields":{"slug":"/tell_dont_ask_how_to_keep_an_eye_on_boiling_milk/","prefix":"2021-10-27","langKey":"en"},"frontmatter":{"title":"Tell, don't ask! Or, how to keep an eye on boiling milk","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AAcHCCgpLxoZGxEQEykqMjMzOTExOGdncVhXX0I/Q0E8Pjs5O0tLUlRUW2Jja1lZY1FTX2Zoc1NUXFFQVgAgICRCQkk+PkUrKzIlJzAnKDA/P0lkZXJnaHKLi5SnqK6ys7i+wMPCxMm9v8OsrrKMj5lhYm1ERU5SUloAS0tTeHd9cXF3a211a2txUlFWVVVeb3F9ub3H4eXr19re0dPVyMjIxcTEw8LCwcG/zM3OkJGZIh8iOzg8ACMhJTEzPEhLVUxMVUVFSkFCSWtteZWYpsvLytbY29XZ3czO0crMzsDAwL+/vr29vL/AvpaWmiAaGjg2NwAyMDQ2Njw0NkA1N0ItLzkmKTVPVWdqc4eQlJ3DxcrMzdHS1NfU19vIycvAwMC8vsCYlZc8ODkfHB0yMDMAS0tRPj9FFRUZDQwPFxYcPEBPeYOZna3ENUFYprLIjJKfgoCDkY+Nj42PZmFgW1RRQzkzJyQlMjAyNjU4AEE/Pzo5ORIQEgIAABoYHT9DUpaku6291WV1joqcuWd2khsYHywpKFlTVSwiHh4XEhwaFiIgHjQxLjExMwAtLC0rKSgXFhcHBQYNCwxES1uks86tvNSVpL5ugqVOYH8fICQfICA7OzwdIBsICQYKBQUmIyEyLywsLC0ABwYFBgUFDw8PCwoKDAoKHBwiYmuBlKS/b36aipeuOzlLMiAnLR4eLRgbMAkPMgUJCwAAHR4fODY4JycqVW/Gg2jAUqgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/2218a000a4cef83a6845be0b158cc670/e24fb/2021-10-27-cover.png","srcSet":"/static/2218a000a4cef83a6845be0b158cc670/6d6b7/2021-10-27-cover.png 200w,\n/static/2218a000a4cef83a6845be0b158cc670/d184d/2021-10-27-cover.png 400w,\n/static/2218a000a4cef83a6845be0b158cc670/e24fb/2021-10-27-cover.png 800w,\n/static/2218a000a4cef83a6845be0b158cc670/dbfa5/2021-10-27-cover.png 805w","srcWebp":"/static/2218a000a4cef83a6845be0b158cc670/b303b/2021-10-27-cover.webp","srcSetWebp":"/static/2218a000a4cef83a6845be0b158cc670/21c67/2021-10-27-cover.webp 200w,\n/static/2218a000a4cef83a6845be0b158cc670/4b6b9/2021-10-27-cover.webp 400w,\n/static/2218a000a4cef83a6845be0b158cc670/b303b/2021-10-27-cover.webp 800w,\n/static/2218a000a4cef83a6845be0b158cc670/c2764/2021-10-27-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Before reading the article, please watch the video below:  Mr Bean wants to add a new business feature to the project. First, the entity…","fields":{"slug":"/what_does_mr_bean_opening_the_car_have_to_do_with_programming/","prefix":"2021-10-20","langKey":"en"},"frontmatter":{"title":"What does Mr Bean opening the car have to do with programming?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABqklEQVQoz2NgQALMTExcnOxSInzqMoKBruZxftaJvubetrqG6rJSogJuDmZyMuKsLMwMmICFhZmHk11ciEdbUdxWT7YiwkFLQtjNSjs5wEJejF+Al0tJXkJGSpQBK+Dl5pQQ5pOXFLbRlYv2NGqIcE6z1astiIz3MzNQlVSUEmZhZWZmZsSumZWFWYCXS1SAR0tOqDrZvyk77uiuLZf3LrHQV1aWFnYxVmFgZGRmZmRmZkLXycjIKCwsKC7Kr6OlFOnvMqU2vyUlfHJNcXV8oLudnrQUn72BorSkACcnGx8vJxMjqv1MTEyCQgLiIvxRoR6FGbE+TjZifNwpng5FccGb183t6cxXkBJ0c9LT1pTkYGdhYmJC1ywnIxHoaZ8S5e1kZagqKawhLxPi521noqOhLKeiKG2kqaCvJqMkIyYnI6ikIIiimZmZSUlBJibMe/ak5sXT2pwNNfm5ubSUFRry48oLUgozo8ty41Jj/S2NteRlRaQk+NG9LSDAZ2qoXZgV21adoy4rwcjIyMbCvHlR/8WT2/dsmr9sdldjRaaFiQ4zMxMzMzSqAf7NUiQGCDdXAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/174ae04dfcd1cbf24ab692411c7a9ab1/e24fb/2021-10-20-cover.png","srcSet":"/static/174ae04dfcd1cbf24ab692411c7a9ab1/6d6b7/2021-10-20-cover.png 200w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/d184d/2021-10-20-cover.png 400w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/e24fb/2021-10-20-cover.png 800w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/dbfa5/2021-10-20-cover.png 805w","srcWebp":"/static/174ae04dfcd1cbf24ab692411c7a9ab1/b303b/2021-10-20-cover.webp","srcSetWebp":"/static/174ae04dfcd1cbf24ab692411c7a9ab1/21c67/2021-10-20-cover.webp 200w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/4b6b9/2021-10-20-cover.webp 400w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/b303b/2021-10-20-cover.webp 800w,\n/static/174ae04dfcd1cbf24ab692411c7a9ab1/c2764/2021-10-20-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Through my window, I see the result of good plans but poor execution. Opposite my flat, there is a partially completed construction place…","fields":{"slug":"/what_does_a_construction_failure_have_to_do_with_our_authorities/","prefix":"2021-10-13","langKey":"en"},"frontmatter":{"title":"What does a construction failure have to do with our authorities?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6cAAAOnAEHlFPdAAACCElEQVQozyXOT0v6cBwA4I/bvptuzS9uuT/KYjlBhHCFJ0MxKEGEnGKU85h58zD10BTEQ6ewLokJdu3UIcFrl06epIMHQRC89yp+0O95BQ+s1+v393fXdTudjuM47Xa7VCpdXl5eXV11u93pdPr9/b1YLFar1XK5fH19/fn52Ww2X19fHx8fsFqt+v3+cDh8fHzs9Xq3t7e2bT88PLy8vIzH4+fn58/Pz9Fo9PT0VK/XHcd5e3ubzWau697d3cFutyuXyzc3N5PJxLKsi4uLYrE4HA5brVaj0cjlcrZtn5+fV6vVSCSSzWZrtdrp6allWdVqFX5/f03TlCQpmUxijDmOY1m2UCgcHBxUKhWMsWma5XLZMAxBEAAgnU7n83kAODk5ge12e3R0BH9EUdzb29N1PZ/Px2KxcDis6zpN06IoqqrKsmwgEPD5fBRF0TSdSCRgNBopikIQBEVRAMBxHE3TmqYlk0lFUUiS5Hn+8PAQIcRxXCAQEAQBISRJkqIoMJ/PdV3HGGcymf39fY/HEwqFBoNBs9lMpVIAQNN0MBiUZZnneekP8wchBPf39xhjWZYzmYyqqgAQj8d7vV46ndY0DQAYhpFlORQKMQzj9/sxxgRBeL1elmUhEtElKRiNRjHGhmHIssT7+bOzs+PjY4QogiAQQvV6/fr6+v+C53mSJH1er6oq/wCTfofAhcZgpAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/f748655e118b2b9d5ce6b7dd6f9f4f85/e24fb/2021-10-13-cover.png","srcSet":"/static/f748655e118b2b9d5ce6b7dd6f9f4f85/6d6b7/2021-10-13-cover.png 200w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/d184d/2021-10-13-cover.png 400w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/e24fb/2021-10-13-cover.png 800w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/dbfa5/2021-10-13-cover.png 805w","srcWebp":"/static/f748655e118b2b9d5ce6b7dd6f9f4f85/b303b/2021-10-13-cover.webp","srcSetWebp":"/static/f748655e118b2b9d5ce6b7dd6f9f4f85/21c67/2021-10-13-cover.webp 200w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/4b6b9/2021-10-13-cover.webp 400w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/b303b/2021-10-13-cover.webp 800w,\n/static/f748655e118b2b9d5ce6b7dd6f9f4f85/c2764/2021-10-13-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Discussions about positions can be awkward, to say the least… It is also the case with positions in Event Sourcing. Each event store…","fields":{"slug":"/lets_talk_about_positions_in_event_stores/","prefix":"2021-10-06","langKey":"en"},"frontmatter":{"title":"Let's talk about positions in event stores","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6cAAAOnAEHlFPdAAACK0lEQVQozwXBWVMSAQAA4P0DjjPZpKCsigJFQMghgdIOS3IJsiGBgcByyrECG64sLIIcy7VEHkAqWlr01jTO1EM/r+8DiJSg11C3qqpwfFWvf5LBBLensbO649NgD6eJcOX4dowxHXOokKMKG+uyWRmPLeSyZqanFmanAZuVhaf4eFyCpYU2M4vElTVCV8nb280QVU0ekrFmN54nbRCymQqpNEpQKgDDXvM+Aq0sPgXg93D1eG3Sc3XqSoeBE/Qu0yeqs7ph1DedN5Hrvmd8tjVgtj9TGirJh7XgMsjCInbUZ5MIOIBOzwkcuCLRYJbwIRDXbhHG0Jc92njJ7PQrlpMjI1O1MjVrGpOaTHO85+y52Wc87rxU+oK/CgJvlHMqDUcJCZRqkLs4BUOiGKoPoDoyuUMRSDEL1fYk5awpd2T070vUivm3CpDwbb4WL0NqMbChmDfD7FJwncxIYGjGv48wXcIbcMUjjrsr8mF0yBzqmayhgcOlnDbsWSrsSdtxQ9gij7o1QDK6cP/F+m8cvTnXeZwgFnpXK6Il0ja8TEy+lmr0h/sfxOP3RrvobjUtqFN87JSNcDsdMdnVK0CDWnq4lg8a8sv6Wj4hih1s9Zqe39+wv386dLc2usg9/swOx6k287GQ393V8TCL0L+t8m4slq08oFUR3Q2hRPBVwi1zW/hoSN4tex+G+NUgRLcCp1VHt2RrN72ZPJxNG5K7Iiau/dVCJpTupuz6D8ucw+td03LYAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/1414e366b819e8038f08c7fbcbbe8aaf/e24fb/2021-10-06-cover.png","srcSet":"/static/1414e366b819e8038f08c7fbcbbe8aaf/6d6b7/2021-10-06-cover.png 200w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/d184d/2021-10-06-cover.png 400w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/e24fb/2021-10-06-cover.png 800w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/dbfa5/2021-10-06-cover.png 805w","srcWebp":"/static/1414e366b819e8038f08c7fbcbbe8aaf/b303b/2021-10-06-cover.webp","srcSetWebp":"/static/1414e366b819e8038f08c7fbcbbe8aaf/21c67/2021-10-06-cover.webp 200w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/4b6b9/2021-10-06-cover.webp 400w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/b303b/2021-10-06-cover.webp 800w,\n/static/1414e366b819e8038f08c7fbcbbe8aaf/c2764/2021-10-06-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Let’s assume that you’re building an Event-Driven system. You may be using Event Sourcing or microservices integrated with message bus or…","fields":{"slug":"/how_to_do_events_projections_with_entity_framework/","prefix":"2021-09-29","langKey":"en"},"frontmatter":{"title":"How to build event-driven projections with Entity Framework","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6cAAAOnAEHlFPdAAABlElEQVQoz2PgFmAwC2X0LWcKbGCs3stcNpupfxaTtBgjAwMDEzMDAcDIyKBiyhTUyFCxUahrVu70K8aTrnLmdzNxckNlCQABMaagJoaGlVblzfHty3xnbSrpucap68IgIs/IxIJsDQig6OTkY5BQZ8icy18+1yhhKlPNNL+WBQHVe5mTZjDnLGURkmHEZ79jGlNQA2PFGpnKHVxpCxkaV5vV7+XPWMCYNI01upuFix+qj4mJSUlJSVBQEEWzkS9T1gyJhg0aU04adx9TbNwn4lfGpmzCqG7JIKMJcqqgoKCioqKmpiYrK6uCgoK4uDhCs5weY+pkwfIVsg1bFPsO66bNYeXkA4mzMLKxMnCwMbFzMHEyMDCIi4tzcnIyMjJqaWkJCQlBgoCBW4BB1oDB0Ju5bKV0024ZDQeQTjYWZgFWQTE2CTFWCUEWIS5GbiERISkpKU5OThERES0tLWZmSDSCQ4SDh8E2ntHQixkStyyMLDzMvAIsQkIsovwsIH+KioooKiry8/MLCgoaGBgoKioC1QEAr/9I9wO5g/wAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/709338a9ac1ce6db5584f2cc48920479/e24fb/2021-09-29-cover.png","srcSet":"/static/709338a9ac1ce6db5584f2cc48920479/6d6b7/2021-09-29-cover.png 200w,\n/static/709338a9ac1ce6db5584f2cc48920479/d184d/2021-09-29-cover.png 400w,\n/static/709338a9ac1ce6db5584f2cc48920479/e24fb/2021-09-29-cover.png 800w,\n/static/709338a9ac1ce6db5584f2cc48920479/dbfa5/2021-09-29-cover.png 805w","srcWebp":"/static/709338a9ac1ce6db5584f2cc48920479/b303b/2021-09-29-cover.webp","srcSetWebp":"/static/709338a9ac1ce6db5584f2cc48920479/21c67/2021-09-29-cover.webp 200w,\n/static/709338a9ac1ce6db5584f2cc48920479/4b6b9/2021-09-29-cover.webp 400w,\n/static/709338a9ac1ce6db5584f2cc48920479/b303b/2021-09-29-cover.webp 800w,\n/static/709338a9ac1ce6db5584f2cc48920479/c2764/2021-09-29-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Yesterday, precisely ten years passed since I released my first blog post. It’s still available in the original place (in Polish) at…","fields":{"slug":"/thoughts_on_tenth_blogging_anniversary/","prefix":"2021-09-22","langKey":"en"},"frontmatter":{"title":"10 notes on the 10th blogging anniversary","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUBAgME/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQP/2gAMAwEAAhADEAAAAVLHCI15i4n/xAAbEAACAgMBAAAAAAAAAAAAAAAAAgMSARExMv/aAAgBAQABBQJVsJjQ9rQ8n9sf/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAB/9oACAEDAQE/AQxi/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAC/9oACAECAQE/AV0Tf//EABoQAQABBQAAAAAAAAAAAAAAAAEQAAISMXL/2gAIAQEABj8C1TklsvMf/8QAGxABAAICAwAAAAAAAAAAAAAAAQAxESEQcbH/2gAIAQEAAT8hcCUaJTIbZtZcz24Cx0T/2gAMAwEAAgADAAAAEKvv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAh/9oACAEDAQE/EFapN//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQIBAT8Q6hDy/8QAHhAAAgIBBQEAAAAAAAAAAAAAAREAIVEQMWGhwfD/2gAIAQEAAT8QPjfAGPAAamVVbU6uE+BiwcjQdd7PjYn/2Q==","aspectRatio":2.2222222222222223,"src":"/static/71cd4739ce0a16bd0bacf1f4ea170de0/f8504/2021-09-22-cover.jpg","srcSet":"/static/71cd4739ce0a16bd0bacf1f4ea170de0/f137a/2021-09-22-cover.jpg 200w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/8494e/2021-09-22-cover.jpg 400w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/f8504/2021-09-22-cover.jpg 800w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/93f74/2021-09-22-cover.jpg 805w","srcWebp":"/static/71cd4739ce0a16bd0bacf1f4ea170de0/b303b/2021-09-22-cover.webp","srcSetWebp":"/static/71cd4739ce0a16bd0bacf1f4ea170de0/21c67/2021-09-22-cover.webp 200w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/4b6b9/2021-09-22-cover.webp 400w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/b303b/2021-09-22-cover.webp 800w,\n/static/71cd4739ce0a16bd0bacf1f4ea170de0/c2764/2021-09-22-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I tackled the first event modelling anti-pattern: “Property Sourcing”. Today I’d like to tackle the next one: “State…","fields":{"slug":"/state-obsession/","prefix":"2021-09-15","langKey":"en"},"frontmatter":{"title":"Anti-patterns in event modelling - State Obsession","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABjUlEQVQoz2NgAAMmJiYGBgZNTc2Dhw7evHnr6rXrt+/ePXvq+OF92zasXblj26bDB/ecP3uypamagYGBkZGRARlA+Py8fHPayp/du3Dl9LHlU1su7plfkeApwcsRF+Z9/fzmVw+PT+5rwKlZREysrrJs1/r521fMac8NO75pwbE5k0TZ2Pydzb+9PPnv6/X5M7qwaIY4W0Nba93q+YcO7Nm5cNqyzrINE1t2tdWHKis0laT8///q/7e7C+dOwKlZS1Pr3etHP769fH7z+MT8iItLZ12d2D07LrSzLuf//9f/fz9dsmAqbs1aWj9/fH1698rB7StstCTn5aRfamm0VVNtqEz////Fv6+3F83DbbOOtvaHb19u//i2/94lKxvdnLjkCblFTAzM1rbm16/t/vP+/MzpbTg162prHr5zpf/YoRlnTpRM71MPS7fKrFM0thHTM3dMy7p6fsuE7hpsoc0E4surKC7ZsWXmhk2LN2+evHJ1YGXbhPlLp89fPGH2vMnzFq1ctbS+tgRZMwBD+Lu1ILwyMQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/a7fb115c5834839b62fb16743970dc03/e24fb/2021-09-15-cover.png","srcSet":"/static/a7fb115c5834839b62fb16743970dc03/6d6b7/2021-09-15-cover.png 200w,\n/static/a7fb115c5834839b62fb16743970dc03/d184d/2021-09-15-cover.png 400w,\n/static/a7fb115c5834839b62fb16743970dc03/e24fb/2021-09-15-cover.png 800w,\n/static/a7fb115c5834839b62fb16743970dc03/dbfa5/2021-09-15-cover.png 805w","srcWebp":"/static/a7fb115c5834839b62fb16743970dc03/b303b/2021-09-15-cover.webp","srcSetWebp":"/static/a7fb115c5834839b62fb16743970dc03/21c67/2021-09-15-cover.webp 200w,\n/static/a7fb115c5834839b62fb16743970dc03/4b6b9/2021-09-15-cover.webp 400w,\n/static/a7fb115c5834839b62fb16743970dc03/b303b/2021-09-15-cover.webp 800w,\n/static/a7fb115c5834839b62fb16743970dc03/c2764/2021-09-15-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The structure of projects is as sensitive as the discussions of spaces versus tabs or indentation size. When we enter someone’s apartment…","fields":{"slug":"/how_to_slice_the_codebase_effectively/","prefix":"2021-09-08","langKey":"en"},"frontmatter":{"title":"How to slice the codebase effectively?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ACM4LiUqJzo6OE89NFZOTGNcYl9DSUpITmNdYnh0bWReVmliYJygmuDdz/XkxP73yP78zP/tkun6meHrlAAgKiYvLytCPTY2MS1RS0l9ZWeMWmNHRUU0Lik9NjM5MS+olGfgtY3LinDUs4bbwaPfxKHfzqPkyaPg0agAg11Co3VZlWpVUEA2RkA/Z2VqZ293SktPJyclLyopLiwrm4RYuHBApDwcqIdVrI1jrZZxsaN/u6p9y7mVAJ9uTNSYcqFuWD0qJTs4OWFcYGRlbF5kbVZbZVJUXF9oc5qJcM2cY9B2J7WEXbKZd62bfrOth8S4ks++oACOWj2lb1HtvZaTcFQvKidRT1ReYGZiaHFjanNmbndqdYKdjXXEn1uthyGQdlezn3W0ooG5sZK2qo/KuJ0Al1U3ZzEihUsz5al4oYFoS0lMYWNqYWRrXGBoaG11ZGt1kn9nsI9eYWksbmJGsJVuqZpxuaWGua2RxbmcAK5tQ5ZUM0klIrJsQtGHZZR1ZUhITVpbYFRWW1NWXF1ja5KGbq2Xa1WFR2dlQqqOb6uUfbelhMi1ktPBoADLiU68cECubEa5f12YWEO7j31qbm9kbHRye4Nsc3xXVlteXldbWUZTWzt2ZkSQe12PfFOgkG6pmX2kmnYAw4dSxYdbyIZUrnZNmWdOnnhpYlhYRkpNQEBAPT1APTxAOzk6PTo9PTY4NzMxPTcyQDgzQz06Qjw5S0ZMHjvzvf6Ly18AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/9d2c24354312f0bdc8a5b61c91ccb030/e24fb/2021-09-08-cover.png","srcSet":"/static/9d2c24354312f0bdc8a5b61c91ccb030/6d6b7/2021-09-08-cover.png 200w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/d184d/2021-09-08-cover.png 400w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/e24fb/2021-09-08-cover.png 800w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/dbfa5/2021-09-08-cover.png 805w","srcWebp":"/static/9d2c24354312f0bdc8a5b61c91ccb030/b303b/2021-09-08-cover.webp","srcSetWebp":"/static/9d2c24354312f0bdc8a5b61c91ccb030/21c67/2021-09-08-cover.webp 200w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/4b6b9/2021-09-08-cover.webp 400w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/b303b/2021-09-08-cover.webp 800w,\n/static/9d2c24354312f0bdc8a5b61c91ccb030/c2764/2021-09-08-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I wrote that there aren’t many more annoying questions than “…but will this scale?!”. We usually think prematurely about…","fields":{"slug":"/will_it_scale_down/","prefix":"2021-09-01","langKey":"en"},"frontmatter":{"title":"Will it scale... down?","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABdUlEQVQoz2P4OHEuMvowcc7nKfOfdUwKUpNJN1UK15X1U5e919T9dcrCDxPmoClmQOO/6539f+bypXHp9vxMr2eW3J9Wps7OMDEw7P/sFe/6Z+PT/KF/7vtZs/4vXtjo7uEtL7QhzfdwRZyZOH+YrsHf6Yvf47f506R5F1sL7rcXZNsY51tpv5qQ/2lhQ7W3taW41PfJ89F0omme937CrLNN2c8nVEVoqCuyMKwJsD6ZG+ohx28sIv554pyPk+Z9wKr5w8S5nyfMfTZ5zqWje97t21BgZc3AwJCrKDzVTkOajUGPX+B1y4TPk+Z/mDgHu+av/XNuzJ5/8NDe/Vs3aEtLCDAzlrtb9ATbSHCyybKxXO3s/TJjyQfUMEOx+cySJceP7J43oZudgUFPlH/d3Cm71i51MNTmYGDoKcm4e/Dge6yaQfonzTu+af3ZU4cnN1YJMjBYivIe2bTi3IFtbqZ6bAwMXuryezeuejpn6af+2XCfAwDHsTba9TDOkAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/4f3b09de025c7a924acb40522d48d033/e24fb/2021-09-01-cover.png","srcSet":"/static/4f3b09de025c7a924acb40522d48d033/6d6b7/2021-09-01-cover.png 200w,\n/static/4f3b09de025c7a924acb40522d48d033/d184d/2021-09-01-cover.png 400w,\n/static/4f3b09de025c7a924acb40522d48d033/e24fb/2021-09-01-cover.png 800w,\n/static/4f3b09de025c7a924acb40522d48d033/dbfa5/2021-09-01-cover.png 805w","srcWebp":"/static/4f3b09de025c7a924acb40522d48d033/b303b/2021-09-01-cover.webp","srcSetWebp":"/static/4f3b09de025c7a924acb40522d48d033/21c67/2021-09-01-cover.webp 200w,\n/static/4f3b09de025c7a924acb40522d48d033/4b6b9/2021-09-01-cover.webp 400w,\n/static/4f3b09de025c7a924acb40522d48d033/b303b/2021-09-01-cover.webp 800w,\n/static/4f3b09de025c7a924acb40522d48d033/c2764/2021-09-01-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I was doing a pilot project for two well-known American fast-food brands. It was about using image processing and artificial…","fields":{"slug":"/computer_says_no_we_may_have_an_issue_with_ai_soon/","prefix":"2021-08-25","langKey":"en"},"frontmatter":{"title":"Computer says no! Why we might have an issue with Artificial Intelligence soon","category":"Artificial Intelligence","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB9ElEQVQozxXL30uTURjA8Vd9zznPc85zznv2vnPuHfuZbtpSzM39St1ozMjUNWcoMlCIjLowUioKAoMg6KJ/IKgQtIu6qm7rH4hu+39k37vvxcdhLgqGwJFBJNPudR4fL6z3yfM9xj1UGkgiIZJCItSICgCFACGQc3C4C8CHPzF5vbD/6vTf/83vv5v3T1LGBiAjkowkkgTSY8oDZRQSgASQQqADTHBXSNTZXHouP7Oxd/Kw3393/LTbagcjoxOko4oEmYzSpxymlXbJECqptFI0xGzEDaLjlWZrq77yebH9tb7w52j3RXspHHXTpA3pFOkDlGdcHKJKasu1Z7XV2jqCcTbGxq1pluc358o/+oOLaufvsyfPi4UME6GiHMqPjH1zeU+qCya+MJFGAvKsiTiCMe4yEmL2aqGVz26XK4Nq4/z1o+5UKuQwZbz32vyU6hzwJekzqX6R+WD90POl0g4wDlwQQG1+Znn6ykGn8untgzd7KymXxRFr08X9rZ1u5/bN+tLaWnd9dW377k5roZaOJYYYGcfRMeWO5acmS7NzjXrjaLdzeKsUB5WxNheNZlPJdBhPpobFwkSYzGkbkLbGRByrpPaD/Oqd6r3BtdLixo35Xme5GA+inCUQsxGbtDoZ8xOxIBHzJ6K+p40ho8kznn8JJlhMe1hyRRsAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/044098b6bee5ff036d849ce030d60a1f/e24fb/2021-08-25-cover.png","srcSet":"/static/044098b6bee5ff036d849ce030d60a1f/6d6b7/2021-08-25-cover.png 200w,\n/static/044098b6bee5ff036d849ce030d60a1f/d184d/2021-08-25-cover.png 400w,\n/static/044098b6bee5ff036d849ce030d60a1f/e24fb/2021-08-25-cover.png 800w,\n/static/044098b6bee5ff036d849ce030d60a1f/dbfa5/2021-08-25-cover.png 805w","srcWebp":"/static/044098b6bee5ff036d849ce030d60a1f/b303b/2021-08-25-cover.webp","srcSetWebp":"/static/044098b6bee5ff036d849ce030d60a1f/21c67/2021-08-25-cover.webp 200w,\n/static/044098b6bee5ff036d849ce030d60a1f/4b6b9/2021-08-25-cover.webp 400w,\n/static/044098b6bee5ff036d849ce030d60a1f/b303b/2021-08-25-cover.webp 800w,\n/static/044098b6bee5ff036d849ce030d60a1f/c2764/2021-08-25-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The first time I got down to work at Event Sourcing, I was very energized. Book knowledge almost fell out of me. However, when I sat down to…","fields":{"slug":"/property-sourcing/","prefix":"2021-08-18","langKey":"en"},"frontmatter":{"title":"Anti-patterns in event modelling - Property Sourcing","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACCElEQVQozwXB61aaAAAAYJ5kZ6eslmKhpiZGIohcvKGCQqLAmKZ5ySwvgDdW6Jw2O+tU/mqvuu8D3JBTykTVcqGkKfZy/Wv98qBPJ7PFz8XzcvP6vvvXatcf7enuc/f69j6e2b3heGTOJvPH+5EJJKLeSAS6uDyJsXjzWmT4VFHKaZpsGka7c5tOUxgOd0a90WTw8fmx/fv8tPg9mdsDYzaxbIDFTyKo1/FtX+SxRBZDiUs+g2JYQJSycQZD0QCbZZbr9UO/O1lO55be6rYep7q9WZrWExC+8PoDHvcpKFwxBBWMxbF0EkPjSJ5LBcN+OAzlc8nFy2b1tn1aWbZtLbZ/esM7tSEOF1PAEzjF4bMgArMsFTqHmBShKDmWT5ckQa1rolquyIJudrvm4EHvmcbtwDK+a8p19apvGYDvbO/U7yQTCE2HiRhS5EiuwCCxCE3A2s2PsT5rqeX26K5al8fToWn2+8OeInMVKV/rNACXHwT9EMWQLIMg0YBQiOPYGeh1u5x72VSipTcpLsWJ+apU0iS+VpVX9kyrlkoyX1ZLAElRvnNPOkOSJErgYaGY8AUhl/vA7TlWVHU8N25uanq/d9+uN2tys9O4bahahWPoi0yWBg6Pna7DPcR/EPI6fD6QiASPjhxfHV9AcJ8hKU6QYAQmGTzOx+lMUlUEqUCLdCiKh1JJ4j9Ej71Vl9di8wAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/8924b6f6d069fe623500a139b3719833/e24fb/2021-08-18-cover.png","srcSet":"/static/8924b6f6d069fe623500a139b3719833/6d6b7/2021-08-18-cover.png 200w,\n/static/8924b6f6d069fe623500a139b3719833/d184d/2021-08-18-cover.png 400w,\n/static/8924b6f6d069fe623500a139b3719833/e24fb/2021-08-18-cover.png 800w,\n/static/8924b6f6d069fe623500a139b3719833/dbfa5/2021-08-18-cover.png 805w","srcWebp":"/static/8924b6f6d069fe623500a139b3719833/b303b/2021-08-18-cover.webp","srcSetWebp":"/static/8924b6f6d069fe623500a139b3719833/21c67/2021-08-18-cover.webp 200w,\n/static/8924b6f6d069fe623500a139b3719833/4b6b9/2021-08-18-cover.webp 400w,\n/static/8924b6f6d069fe623500a139b3719833/b303b/2021-08-18-cover.webp 800w,\n/static/8924b6f6d069fe623500a139b3719833/c2764/2021-08-18-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the previous post, I explained that with a few simple tricks, you can make your Docker image less cluttered and build faster. I explained…","fields":{"slug":"/how_to_buid_and_push_docker_image_with_github_actions/","prefix":"2021-08-11","langKey":"en"},"frontmatter":{"title":"How to build and push Docker image with GitHub actions?","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACAUlEQVQoz22RXUiTYRSAd1O3Id0IQUZXGXXlTVcRaDWhH6IfShhkUbF+ICgWeBGECCrltFq2toYuk6RJRi3Ln2RtwzWGOW1j1cqmLcqczLa93+cW3xOfuWroC4cXXs55zvOeo5EkiXwIIQpufsn4ppKYR2ewB77wIDJH53CE8IcJcrmskskINVcRQlIWaxRNHpCHZIRgXpaYSUmMxr5zrHeKIvssxdfesvbeNzRHWzF1PUM9P9NpRSzICIQkKWq9ZlmzrITD/44S63vWN/jZZIuyoXWEVdozrKjQ09DxFPdIREnMJpHlBbtCw/8tVTtH8BNl3dOUtsUptcfZ2DHJ6uomVlbo0Ww7SdGu81xo7+e+O0QmnSqQKTSUJM55xtln97KlfYKSq0HWWWJsbotSfMDAmsM1lOkb2Wq4ww6Tk4PPfUwmU+TkP6NaAlQfb4Vj1PS4uWh+TLXNy15jP5VNfWw3+als8aDrDLHHOkZ53ROa33wkkRHIyxmqMLXTYPwHJxwBjtz2oTM6uWTr46z5BZcf+rnS5WG30UV5/QBVdwe54Q6Ry8oFS12c4T9gNJnC4HzNccsrTlncaOt62XkziM7i47TNjbYlQJVliObwZyKJub/fXWKYj6ws44pP0+Ifo/GlH0P3ELWPPNT3+Dh0fYD9Vi+1wyFcXxPMS6LATgX+BuAEV4iG3x7qAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/dc7d71645c27abdf1fb0334e550d2dbd/e24fb/2021-08-11-cover.png","srcSet":"/static/dc7d71645c27abdf1fb0334e550d2dbd/6d6b7/2021-08-11-cover.png 200w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/d184d/2021-08-11-cover.png 400w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/e24fb/2021-08-11-cover.png 800w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/dbfa5/2021-08-11-cover.png 805w","srcWebp":"/static/dc7d71645c27abdf1fb0334e550d2dbd/b303b/2021-08-11-cover.webp","srcSetWebp":"/static/dc7d71645c27abdf1fb0334e550d2dbd/21c67/2021-08-11-cover.webp 200w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/4b6b9/2021-08-11-cover.webp 400w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/b303b/2021-08-11-cover.webp 800w,\n/static/dc7d71645c27abdf1fb0334e550d2dbd/c2764/2021-08-11-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I realised that my posts from 2011 about configuration and operation in SCRUM using TFS are still hanging on the Internet…","fields":{"slug":"/how_to_buid_an_optimal_docker_image_for_your_application/","prefix":"2021-08-04","langKey":"en"},"frontmatter":{"title":"How to build an optimal Docker image for your application?","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABd0lEQVQoz3XQyy4DYRQH8CZewtYD2HkJDyAiliRo0ia9uCQ2wtAdiRJJNQ3KYmpSGiLoQpoQIZQg2gzTUB3GrZ1R331mPsJmUGd3kvPLOf/jQo6CEEGELUYowevZ/PDW6WK+nJFVm1FATbVKAXSOI5ezIRjDdyN9WOCMtk2n6oKLTclC80ruKCffqQ9lgDHGNTCE0DLppXw7GDvvi92Iuyf1vilXu9DgjbRELzsj1/55LX1cogxD+BcjhDHW9YqYUUMp0BM9bQxIraOZoMj6lvlA0vZKPJRQQFXHmNQ4G0JEKTHJWyipeRI8vKbF1i/8y9wvmoEE80lcEJWqUamNv/Zj9G5MJBWPyIOS5R479MaN3jXev8q74mxpW7YpAPCfhwEIbZMenCnds4/CDl8Ip4Y6Jn0z957oqyDe3j9ojFHoCP0Df4dnFO1lrzb2i/uyIcU3BffI3Hi8rBuUEKesgb/D2xZ9fXkq3JSKz/pjuUIIIoT+kp/4AyuFz/Oh5drCAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/389b5a65a50d4ab85d1dbf235c1bc88d/e24fb/2021-08-04-cover.png","srcSet":"/static/389b5a65a50d4ab85d1dbf235c1bc88d/6d6b7/2021-08-04-cover.png 200w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/d184d/2021-08-04-cover.png 400w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/e24fb/2021-08-04-cover.png 800w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/dbfa5/2021-08-04-cover.png 805w","srcWebp":"/static/389b5a65a50d4ab85d1dbf235c1bc88d/b303b/2021-08-04-cover.webp","srcSetWebp":"/static/389b5a65a50d4ab85d1dbf235c1bc88d/21c67/2021-08-04-cover.webp 200w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/4b6b9/2021-08-04-cover.webp 400w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/b303b/2021-08-04-cover.webp 800w,\n/static/389b5a65a50d4ab85d1dbf235c1bc88d/c2764/2021-08-04-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last months, I spent quite some time playing with C# records and Nullable Reference Types. I was hoping that thanks to them, I would…","fields":{"slug":"/notes_about_csharp_records_and_nullable_reference_types/","prefix":"2021-07-28","langKey":"en"},"frontmatter":{"title":"Notes about C# records and Nullable Reference Types","category":"C#","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACAUlEQVQozwXB6WoTQQAA4H0CESoUcpm9z9mdye7smdndZNNk0ySKbUlzqSE1YMTapsYjpSJaalWIRVsQ/eGBD+APX9Dvo5ZDBSm4mNOLGUDTdhPav+ra+0AUcxorIjJtg2qSJtvfLj+lzW4E5T8vlL/P6Qcdy1JDiuNDqAauGas89p16q9PDsg1FO5+H+UzJ5OyO5clSeTF/1u+Orl3nX/al8zGNdQ/xiKqVbANEZSdBWlAJ2wf7+4v5nJCmTAMsiypb+rHFPPZZWiBlEe1JrE5b2RxWeIcuQCo19JJss1moCK4kOICxHFy1DHI2FS4eFXZSeLfsfNgorK0bV5G0IspFpAIj3rKRj0Lqsl0kyJEqvqDgjrp5lsx6+m0T+l8X4vclNx/AQCeRGanG5nEAfibiEwfyQmCJrqnHlFVUrLiWvt0FiCy9ye/J6efWIS2Q0DK3I06TXWRW/WSK/YHCY4/RsusazUGUxorkUixDJN6xh41SM4nV+gx2TS5sacDg8NoNmMTp0cFhHDZkztLMDbh7pKplsxdWn95x7zUoLz3xdagzCn/TVCU7kwdDjb9qJ+8IYlhzdX765tXrk+WxwGKohxA3ZTmOHt6qLXfsXo2C3rhfNwjSjeS+2xgBhawi8G/QXnowk4Wzyd6X1cfRYCyLjqEGGDj9BDp2hOKKJnv/AQsiiAXBXQBGAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/6ea75b2e171f02a9f3032ccb64aafe46/e24fb/2021-07-28-cover.png","srcSet":"/static/6ea75b2e171f02a9f3032ccb64aafe46/6d6b7/2021-07-28-cover.png 200w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/d184d/2021-07-28-cover.png 400w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/e24fb/2021-07-28-cover.png 800w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/dbfa5/2021-07-28-cover.png 805w","srcWebp":"/static/6ea75b2e171f02a9f3032ccb64aafe46/b303b/2021-07-28-cover.webp","srcSetWebp":"/static/6ea75b2e171f02a9f3032ccb64aafe46/21c67/2021-07-28-cover.webp 200w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/4b6b9/2021-07-28-cover.webp 400w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/b303b/2021-07-28-cover.webp 800w,\n/static/6ea75b2e171f02a9f3032ccb64aafe46/c2764/2021-07-28-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Wikipedia states that there are around 700 programming languages. Some are more popular. Some are less. But what language do programmers…","fields":{"slug":"/in_what_language_are_programmers_writing/","prefix":"2021-07-21","langKey":"en"},"frontmatter":{"title":"In what language are programmers writing?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AOjfwvDly/br0eLeytbXyNXWy9vb09bZ0dPXzdbBqMCbd7avoL3GxrW8urG8vKeztZ+vtaKwtaGxtpyrsQDw5svy583u5s2zw7rJz8PU1svZ0LHOv527saHSqn7IlF+hdEyiakm2nIfMzsO/v7a4vrm3wL62wcG0v8IA7eXL8ujR6uTOz9PC5ODN2dTC18CL0LN4m2s/t39Qun1MllMojEcehlE3y8vBwsnDx8m/x8nAxsrCw8fEAPHo0/Tt2vTs2vPr2evo2uDXvtW6hNjAisWjdKtmQKpWLJhWK4lVM4xnQ7Wmkt3c0dPWztXX0NbX0dbW0QDJxrHOzrvNzLvHyLfLz8XOxKLStHfWvobKrHWYaTucYTSeYzaCVi5zYDdjRSXCt6TW2szX18rS1cjPz8EAVGdHWW1LXXFLVmxIW3NXopJjyqlqxq11vKFnwqhto4BKmnI+jWQyiGw7fWMwdWpEkZ14kZx2jJl7hJR+AGhyT3d8UnR8UnV/Vnd9V7aZX76fYr+jab+jaaqOXXJcOpB7U8KkZZJ1PnxgMoBmN1NRL1RWL0hMJ1JVMAB8b0GFfVKHelFoaEN/dUuxj1izmF+zmmG3n2elilekjF+kjF+if0WUeUZ8Yjh2YT5BNh9HOx5LRShcXkQAiXVDgHREgHJDalstmoNJsJNYrpRblXxIi3NBmIBOrI9RgGMwXEYkdFsxcVcuf2Y5al4zUUUoaF1AXmpcE2A4iszurYgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/521b99f26d0c30794beb6c9f8937cb76/e24fb/2021-07-21-cover.png","srcSet":"/static/521b99f26d0c30794beb6c9f8937cb76/6d6b7/2021-07-21-cover.png 200w,\n/static/521b99f26d0c30794beb6c9f8937cb76/d184d/2021-07-21-cover.png 400w,\n/static/521b99f26d0c30794beb6c9f8937cb76/e24fb/2021-07-21-cover.png 800w,\n/static/521b99f26d0c30794beb6c9f8937cb76/dbfa5/2021-07-21-cover.png 805w","srcWebp":"/static/521b99f26d0c30794beb6c9f8937cb76/b303b/2021-07-21-cover.webp","srcSetWebp":"/static/521b99f26d0c30794beb6c9f8937cb76/21c67/2021-07-21-cover.webp 200w,\n/static/521b99f26d0c30794beb6c9f8937cb76/4b6b9/2021-07-21-cover.webp 400w,\n/static/521b99f26d0c30794beb6c9f8937cb76/b303b/2021-07-21-cover.webp 800w,\n/static/521b99f26d0c30794beb6c9f8937cb76/c2764/2021-07-21-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"There were 0.3 seconds left till the end of the NBA match. Detroit Pistons were leading by a single point against San Antonio Spurs. The…","fields":{"slug":"/form_a_wall/","prefix":"2021-07-14","langKey":"en"},"frontmatter":{"title":"Form a wall! And other concerns about security","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACJ0lEQVQozwXB207aYAAA4AZZoihRji0UaGtLS4H+pVSxFCnHAooyOXjoAIG5yRYNLvEALkuWyTCLm4vZbpdlF17syotN4/Yk295m3wdhMF6ISHJIEGhG9IUsMxaHDU2A8JaS1fINhcGSwgqGFePR2ODoeP9Z99PHy7PhaHT+Lsj4obiwqEaksB+Ifq6pFubZIGxHAMg8ffQ6F981GRmKLAP/Q7sV63Z7g/7J3e3dz9vf9/e/CBcKBb0Ag2GPDeEJUpOEipygCVpb1tbiGdEr8lxd4VuUK2GdtiN2B8PQ6xtbYlgKc4GZyQmIcsLmKSNht8levJ2v72kDL06dbNR21Uw5lTvtPK6nS6iJHtMZxsf0VtP01dXniXGzHoIMD3SQzPgoBM6wswWe3d98W8p2WAxvpdKakk4CUIxKpajsQ2cxN2kzmUm387B3QLppt8OFOp1QVlJKCyDt83A4KbK5QrKynCqWootLCzGAu2Xf7IrI5UVhf+9gu7nTbm5v1mrnww83Nz8uLt5D/VJek4shn4q7GQ/CJqTcUmpFkZIEigsElgrQa/P8AsvFZEWnR4yTsE5vqVYao7Ph8M0IUkGHZfvpaC8jpi0zCE0EhMAcz4ZpkvdTjDonrMcTFOxayi8fHb5qNJ5r9W4kJNTKVQHMQwbkSSjYGjVWz3faEYZFYE9EkAN0MMiAVU7sKfLLajyLYscvTv/++ffty9fr6++1Sjmnrk4ZzP8BWlGF3tJ20q8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/b9df152ec1e1d44c2dfc4a79fdfeb878/e24fb/2021-07-14-cover.png","srcSet":"/static/b9df152ec1e1d44c2dfc4a79fdfeb878/6d6b7/2021-07-14-cover.png 200w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/d184d/2021-07-14-cover.png 400w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/e24fb/2021-07-14-cover.png 800w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/dbfa5/2021-07-14-cover.png 805w","srcWebp":"/static/b9df152ec1e1d44c2dfc4a79fdfeb878/b303b/2021-07-14-cover.webp","srcSetWebp":"/static/b9df152ec1e1d44c2dfc4a79fdfeb878/21c67/2021-07-14-cover.webp 200w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/4b6b9/2021-07-14-cover.webp 400w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/b303b/2021-07-14-cover.webp 800w,\n/static/b9df152ec1e1d44c2dfc4a79fdfeb878/c2764/2021-07-14-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"In the last year, the word responsibility is used in all possible ways. Responsibility for us, for others. We can be heroes wearing masks…","fields":{"slug":"/lets_take_care_of_ourselves_thoughts_about_comptibility/","prefix":"2021-07-07","langKey":"en"},"frontmatter":{"title":"Let's take care of ourselves! Thoughts on compatibility","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AKOysz+2zTu3zzy50UK91EXB1kvF2U/I21HK3FPM3G7U4XRkaHScpHF4fmnV4HrU3Z3a4a/e5Y7W34vL0gCbwMI6vNNdwNCc0Nq54OeB1+JIz91V099W095a3+trqLByaW1uusJsiIxx4+x11d1+2OGR2OGH19+XydAAh7W3Sr3Qb6u4pL7D09vev9/jfdXeY9rjadrjcOTtc3F3drO6bquycKesfOXuhdrik9DXxeHlxeDjsc7SAId+j17Q2mXEz3LQ2JDd5K3Z4brX3YzT2qLd5KC6v4RnaIfq832VnH/Ey47n757O1Yqjp7/U1qK+wZy7vwCdSV12c3t9vsJpsLZfiI6Rsbek2+Gl09m02d6QYWC1qquy5OqHiY2j09m23+Oy1NqNr7KdycxgdHdnen4AdC03ej1AclhXWjo4OBQUQiQlcnp9lrC0j5GRgENBtuTpob3ClXx+w93gy9/htMnLeYODX25tQUtJPUxLAJ1ERJxBQ380NmU3NmI6OlkwMFktK181NGYwL1s9PIJ+g4OHiWFVU4SWln5mZWdiYEVMSjM3NykxMDIyMACfOT2SP0GMQUCANjd0NjZtNDRlPDlVLy5lNDJ0PDhtWFhyZmNoSUNqY2NLPTw8MS5IQ0E+PTxKR0VLSUcAijA0l0FCjDM5ijM4dCgtUR0ilXt2cUlIUygpYjU0YjY2c0xLfElHnXZznnx6jHNyfnBwinp5in5+hHl5SkojZ5A4DVkAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/522acaba81dc977bff3d26308592b15c/e24fb/2021-07-07-cover.png","srcSet":"/static/522acaba81dc977bff3d26308592b15c/6d6b7/2021-07-07-cover.png 200w,\n/static/522acaba81dc977bff3d26308592b15c/d184d/2021-07-07-cover.png 400w,\n/static/522acaba81dc977bff3d26308592b15c/e24fb/2021-07-07-cover.png 800w,\n/static/522acaba81dc977bff3d26308592b15c/dbfa5/2021-07-07-cover.png 805w","srcWebp":"/static/522acaba81dc977bff3d26308592b15c/b303b/2021-07-07-cover.webp","srcSetWebp":"/static/522acaba81dc977bff3d26308592b15c/21c67/2021-07-07-cover.webp 200w,\n/static/522acaba81dc977bff3d26308592b15c/4b6b9/2021-07-07-cover.webp 400w,\n/static/522acaba81dc977bff3d26308592b15c/b303b/2021-07-07-cover.webp 800w,\n/static/522acaba81dc977bff3d26308592b15c/c2764/2021-07-07-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today I’d like to go back a bit to the basics of Event Sourcing. I recently realised that I often cover more advanced topics. So sometimes…","fields":{"slug":"/how_to_get_the_current_entity_state_in_event_sourcing/","prefix":"2021-06-30","langKey":"en"},"frontmatter":{"title":"How to get the current entity state from events?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAA2UlEQVQoz2P4jwb+/fv////396/ubF90dnH3zinV21oT3z+5A5b5i6aWAV3vX5CKx5ePr6tPWNuYMjEvaEGh37uH14nTDFbx+vbFff15W1qSF1dGrG+K+/T8PljqHwHNEPDn189zyyfs7c2bm+u9sS3j759fEJMJaQYb/+P9q5vzKq7PrVpcGLCpIeb7q4fE2QxW8evrp5PTSo/1ZW2uDt3XHPvj3XO4FGFn/////+WlIycm5J6cWXFuZf/P71+JczYSeH3txO0D6z68eASJAkyAUzOmDzE1AwBTB/HnaL/rAQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/3dde55ec58dd58211a77b719741770bf/e24fb/2021-06-30-cover.png","srcSet":"/static/3dde55ec58dd58211a77b719741770bf/6d6b7/2021-06-30-cover.png 200w,\n/static/3dde55ec58dd58211a77b719741770bf/d184d/2021-06-30-cover.png 400w,\n/static/3dde55ec58dd58211a77b719741770bf/e24fb/2021-06-30-cover.png 800w,\n/static/3dde55ec58dd58211a77b719741770bf/dbfa5/2021-06-30-cover.png 805w","srcWebp":"/static/3dde55ec58dd58211a77b719741770bf/b303b/2021-06-30-cover.webp","srcSetWebp":"/static/3dde55ec58dd58211a77b719741770bf/21c67/2021-06-30-cover.webp 200w,\n/static/3dde55ec58dd58211a77b719741770bf/4b6b9/2021-06-30-cover.webp 400w,\n/static/3dde55ec58dd58211a77b719741770bf/b303b/2021-06-30-cover.webp 800w,\n/static/3dde55ec58dd58211a77b719741770bf/c2764/2021-06-30-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Event Sourcing is perceived as a complex pattern that’s challenging to learn. Typically it’s matched with the financial industry or big…","fields":{"slug":"/when_not_to_use_event_sourcing/","prefix":"2021-06-23","langKey":"en"},"frontmatter":{"title":"When not to use Event Sourcing?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABVElEQVQoz2NgQAKMjIwMDAxScsod01bKa9n6+tgVFWVp6lowMDAwMTFDZHECiLSolHxcbr2pieqhxboHl7po6hgyMDAwMzODjWAioFlIQk7PLmBVG8u6CVJHV/l4OmsyMDBwcnAICgrC1WDTDDZYRcc8LSXk5mKGM2tMLu0q3r15sYenX19f37nTJ339/MCuwGY/xG1lpZWv7px9c3fH4/uXdh84vnrL1pev3nz8/P3WnXtnzl2Sk1cA24+hH+KlkOS4niUL80uKk6K9/f30zcM8r9++M3nazKUr1+8/dMLC0hqn55kZmYTDPFhdtXVNxRM9ZT2c5QJTAo6dvGjjGuDqF1pSUS8qKobF5xC+oJyMSV6agKWKkaN6hLuyj6OioqbgjEmF7U2lMYnpnr5B+EJLxMqEL8iJV1FY01TO00Ym0ElBQUPMyJjPw1rOylAO5GAkOwEXqmF0QT3YWgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/07df6a29039476333b631db90d492320/e24fb/2021-06-23-cover.png","srcSet":"/static/07df6a29039476333b631db90d492320/6d6b7/2021-06-23-cover.png 200w,\n/static/07df6a29039476333b631db90d492320/d184d/2021-06-23-cover.png 400w,\n/static/07df6a29039476333b631db90d492320/e24fb/2021-06-23-cover.png 800w,\n/static/07df6a29039476333b631db90d492320/dbfa5/2021-06-23-cover.png 805w","srcWebp":"/static/07df6a29039476333b631db90d492320/b303b/2021-06-23-cover.webp","srcSetWebp":"/static/07df6a29039476333b631db90d492320/21c67/2021-06-23-cover.webp 200w,\n/static/07df6a29039476333b631db90d492320/4b6b9/2021-06-23-cover.webp 400w,\n/static/07df6a29039476333b631db90d492320/b303b/2021-06-23-cover.webp 800w,\n/static/07df6a29039476333b631db90d492320/c2764/2021-06-23-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"As you know, I am a fan and practitioner of CQRS.. I believe that it is falsely considered as complicated. In my opinion, it can help even…","fields":{"slug":"/generic_does_not_mean_simple/","prefix":"2021-06-16","langKey":"en"},"frontmatter":{"title":"Generic does not mean Simple","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB6klEQVQoz2MICwuW5WJo89F8tmPSvysr91V6iLEyrF696u/fv9OnT1+9evW8efMWLFjw6tWr//////v37z8SYMhJiI4zFt3ZFHZwduXFReWzMp10xVi3b9/2////zZs3nzp16siRI7t37759+/arV68ePHhw+/btZ8+eff36FaR5z5z+KVEGs3M82iIspqS5hRpI5ARZfvz48d+/f4sWLVyzZs3+/fv37t07f/78DRs27N+/f/bs2WvWrPn48SNI8+Nbl1cVuL3a1HRnXuG2iqCt+ba9eSE/f/9BcySag6HO/v7z986e3BuzUvc1J0yPsu0M0pjf1/j////Pnz9t3rz55MmThw4dOnjw4MWLF/fv33/y5MmtW7euWrXq+PHjIM3////fPrt1YZrRkabQubEWKY6qjx/c+f///4f37/fs2bNhw4ZDhw6dOHFi7dq1GzdufP78+cePH9+/fw919uZNa2aVeJTZiGc7Knlri7ga8M+ZOfH///9///598uTJ7du3X758+fnz53v37t2/f//v378ozpYQYD6yMvrsvIxCe6U5TYEz680FuFnDgv3Wr1315fNnTJ/DAUizk4Xit/t9+9aUBTrpfXk4b1a7NwcrEw8HEycro5G+xoT+7k+fQC788+cPmrVAzQALZINkgwVLCAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/edf98ad5ea70869a387662bc22e479b7/e24fb/2021-06-16-cover.png","srcSet":"/static/edf98ad5ea70869a387662bc22e479b7/6d6b7/2021-06-16-cover.png 200w,\n/static/edf98ad5ea70869a387662bc22e479b7/d184d/2021-06-16-cover.png 400w,\n/static/edf98ad5ea70869a387662bc22e479b7/e24fb/2021-06-16-cover.png 800w,\n/static/edf98ad5ea70869a387662bc22e479b7/dbfa5/2021-06-16-cover.png 805w","srcWebp":"/static/edf98ad5ea70869a387662bc22e479b7/b303b/2021-06-16-cover.webp","srcSetWebp":"/static/edf98ad5ea70869a387662bc22e479b7/21c67/2021-06-16-cover.webp 200w,\n/static/edf98ad5ea70869a387662bc22e479b7/4b6b9/2021-06-16-cover.webp 400w,\n/static/edf98ad5ea70869a387662bc22e479b7/b303b/2021-06-16-cover.webp 800w,\n/static/edf98ad5ea70869a387662bc22e479b7/c2764/2021-06-16-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"When we talk about typing in programming languages, we usually divide it into static and dynamic. Static typing is checked at the compile…","fields":{"slug":"/structural_typing_in_type_script/","prefix":"2021-06-09","langKey":"en"},"frontmatter":{"title":"Structural Typing in TypeScript","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ADEuXiYmWCgnWSkoU6mktoB9oRUVPGJUVl9OPxkRDBMKCDwnHnVSREIoHkMwJE03K6GKeeDNu9C8rNbDswCShJOIgp9TTnt7c4vGxttMTHMTGj0pIScxIhcIBgQcDwtxRjmyenOse3hPMio5JBmDa1vl0cDax7fXw7AAv7W52Nvi4+fo3N/lh4ekGCFPHSA4OCcdIRYOBQQELhoShldHoWlfuYF5kWBWLBQNcFpKzrqo3Mq70L2uAKGWld/g5PHx8KObpEE+VhkeOC0iHz4oGRoRCwQEAkMmG4JQRIZQQohTRZZhU0spHzgkFriikubUxdTBswBJODGYi4SVi4k4MjwkJi4LCQwiFg0+KxwhFg4CAgBVMCSKUEN+SUCubmesb2NVMic3JhuDbV2mkIHItKUATz42UT0wXkg4Wkg6HB4eCAkJDggELBwSMB8UCwgFTSwfckY4dkg+rXBoqGtfVDYtGQ4IMB4UQSwgSjctAE47MEk2KlA8LWdPPEY4Lg0LCAUFBAgFAyUXDyIVDWZMQYNWS39EPJ5nXppwaC0fGxsOCCkZESYZEScZEgAwHhUkFQ4dEQ0tHhYtHRUuHxgvIhsXEAsQCwcbDwhOOjKadG+eaGW+kZB9ZGItGBZpQT+IV1WIWVpQMy8ANSEWKxsSOCUZOyYZJhYNOigbPi0iKxwULx8TGxILHhAKaFFIknRuaFdWHA8PdkdElV5bl2Fcj1dTeEVEyCqojGn1diMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/960ddfe911bf6d4a6ccc9c80aab66134/e24fb/2021-06-09-cover.png","srcSet":"/static/960ddfe911bf6d4a6ccc9c80aab66134/6d6b7/2021-06-09-cover.png 200w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/d184d/2021-06-09-cover.png 400w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/e24fb/2021-06-09-cover.png 800w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/dbfa5/2021-06-09-cover.png 805w","srcWebp":"/static/960ddfe911bf6d4a6ccc9c80aab66134/b303b/2021-06-09-cover.webp","srcSetWebp":"/static/960ddfe911bf6d4a6ccc9c80aab66134/21c67/2021-06-09-cover.webp 200w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/4b6b9/2021-06-09-cover.webp 400w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/b303b/2021-06-09-cover.webp 800w,\n/static/960ddfe911bf6d4a6ccc9c80aab66134/c2764/2021-06-09-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today I want to invert the classical pro-agile drawing. Let’s talk about the devaluation of functionality that occurs in Agile projects. In…","fields":{"slug":"/when_agile_is_not_enough/","prefix":"2021-06-02","langKey":"en"},"frontmatter":{"title":"When Agile is not enough","category":"Agile","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABcklEQVQoz2VRSU/CQBjlR5t4MfGuMZ686B8wJipRjIgaI1IxLpCi0LoUBksLFrrYzc76GTuIGl/m8OZl3re8KUAOSmmS4SjLmBAwgxDAOfwHIVIvyOuHpnUPtn1ND7T7idEBgLcRCuMAABzH9BwTwoj0kXVexmoTEPpj5py99VrC9yL04lxXAfWHld3wRoG+GSknzlkZXI+5k+7DNWFkNsHUTDH2rSFx3ejZGFUV96p+vLxyub5hHx3tzc3XFhZHNcXaKd4trapr64xQuVRBrhipam97J263zeqFraodTTs5LDdaLR2hcqXyouuDh7axXzKLe2hzK200AOOfzlmS+OF7gjMOwITgnOWlBad0SgDE96GMQZ7r99iMx3FKMJaqkMhTEZxLkoZB4k9+518Q+ev4fWz1WlIaGOpXvDnswaPv2pKbqNPrqtMv/G0OvPFTp/lVPk1fu/rIeqVckCA0qqeDuoJdj4Th8PbusXSYmvbM/wnJqPNxE4+APgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/fcb3291965b7753bb77b8916cecf251d/e24fb/2021-06-02-cover.png","srcSet":"/static/fcb3291965b7753bb77b8916cecf251d/6d6b7/2021-06-02-cover.png 200w,\n/static/fcb3291965b7753bb77b8916cecf251d/d184d/2021-06-02-cover.png 400w,\n/static/fcb3291965b7753bb77b8916cecf251d/e24fb/2021-06-02-cover.png 800w,\n/static/fcb3291965b7753bb77b8916cecf251d/dbfa5/2021-06-02-cover.png 805w","srcWebp":"/static/fcb3291965b7753bb77b8916cecf251d/b303b/2021-06-02-cover.webp","srcSetWebp":"/static/fcb3291965b7753bb77b8916cecf251d/21c67/2021-06-02-cover.webp 200w,\n/static/fcb3291965b7753bb77b8916cecf251d/4b6b9/2021-06-02-cover.webp 400w,\n/static/fcb3291965b7753bb77b8916cecf251d/b303b/2021-06-02-cover.webp 800w,\n/static/fcb3291965b7753bb77b8916cecf251d/c2764/2021-06-02-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"People want to scale up everything. In the past, the recipe for everything was to buy a larger server. Today, the answer is to add another…","fields":{"slug":"/how_to_scale_projections_in_the_event_driven_systems/","prefix":"2021-05-26","langKey":"en"},"frontmatter":{"title":"How to scale projections in the event-driven systems?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AJaUlZKQkrCtr5iVlo+MjXBtboyJioaDhIF/f5iVl3Nwco+NjpWSlH56e4yKimxpamViY1tYV5iWlXl3eQCtq6xua2uUkpSDgIKurKyFgoR1c3SqqKl6eHqcmZq7ubqloqKRjo+Ihod3dHV0cnJ4dXWVk5RlY2R1cnMAoJ2eZWFhhYOEcW9wko+QhYKDjYyNpaOlycjIgH5+raurraurhoSFraqriIeHq6mpj4yNa2hqZGFjRkNFAI6Li19bW4+Mj4eFhpSSlPLx8ZGPj4iGh7Ctr6CenoyKirGur6emprSzssXExYyLi4aEhXRxcnh2d0JAQQBqaGp4dnaioKJoZWeMioutqqulo6OioaKOi4vZ2Nj5+PiBfn6Ni4unpaatqqqQjo6in6BdW1yIhYTMyckA8/HwiYaEi4iLj42MhIOFh4SFuLW2xcTFl5OUoqCgqKaml5WUsLCwlpOUuba1lZOUDw4OYV5eaGdoMy8vAD88PS8sLIJ+ga+sr56dnpaRlK6qq7KwsExLSouIimNgYL27uqioqGxqa4yJinh1dpaUk5WUlERBQ0xHSABCPz8yLy+ioaKMiYkrKypJR0heW1zCwMK5uLiTkZN+eXmWk5OXlJUpJiYNCwtAPz+Tj5N8eHpkYWNTTk4APjw+TktNVlNUlZCRMzAvCQcHFRISbGltT01PiYeIi4aImpWWnpeZfHR0W1NVKCUmVFBSRkRFIiEiEA4PUWERb/l3qlkAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/d7d250f5a2ffb2e66bc3732b6307a0e4/e24fb/2020-05-26-cover.png","srcSet":"/static/d7d250f5a2ffb2e66bc3732b6307a0e4/6d6b7/2020-05-26-cover.png 200w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/d184d/2020-05-26-cover.png 400w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/e24fb/2020-05-26-cover.png 800w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/dbfa5/2020-05-26-cover.png 805w","srcWebp":"/static/d7d250f5a2ffb2e66bc3732b6307a0e4/b303b/2020-05-26-cover.webp","srcSetWebp":"/static/d7d250f5a2ffb2e66bc3732b6307a0e4/21c67/2020-05-26-cover.webp 200w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/4b6b9/2020-05-26-cover.webp 400w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/b303b/2020-05-26-cover.webp 800w,\n/static/d7d250f5a2ffb2e66bc3732b6307a0e4/c2764/2020-05-26-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"The job interview is a stressful situation, usually for both parties. Some time ago, I had to recruit senior developers. I had the idea to…","fields":{"slug":"/why_are_senior_devs_afraid_to_code/","prefix":"2021-05-19","langKey":"en"},"frontmatter":{"title":"Why are senior devs afraid to code?","category":"Coding Life","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACFUlEQVQozx3LWW/SAAAA4D4ZF4kIrqBdOcYh91XullJarlIoPYACBVqUOUgBRYaODIjG6JNo4vFg1Dcf9jdN/N4/YNnDjxql1kNowlkm/ATqlcVClavUG/nDgv59qH9a0Uyz0Og16zz5QaPXGvfxuqNOakcuAswl4seSmg9Qt+8sErbiWU8+7RrWYpMOvl3Wdiv6Zk4zzTwtVNpS8fWkuJ4Ln3eDmzX/vRkElnJh/yy/GmWDUYfPBz/xQGTOR+RCMh1TJfxCLY6HZayYoRhS6FY1pfRiJr67Hh13vds+AmwUYtpDL/tZpZVCEAcWs4eD1ioV80W92WyAZVIZNJTFo2Um3+DJYa+y0YT9Vff9pnPbjwMbBVf4ZJNB1E6myyIul6mQ8aSxsMVjtboh0Ga+C+rJhE3j4ySNtaXK4lJ8eyV92Up/u//zVMp0ubTMJ2dyLpJ0Z6LnYhkxexxGi8kIm3Sg3mwD+6h90wiMOsTkgt8tW78O/T9cAHg1whUxtZAxiY0L9fiwjbv9FqfXCjpgPXT60A7dA/Vmx9kDyyMsCO176a2CayPqsBSPtBd4LmEdNj5upWYyWqZCIp+r0SkDbDox6Iyw6dQO3THoyKSHpuJ6OxyIuLds4Osg8lItvin5gXY93eWSIoNsVIKtJaqVxNMhHUa8J8b7kMtqhE2QE7Y7H49LIaGccgTd4Dk0JZw/lcQ3NvgPONmRwjVky8MAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/952288fcb3f5016f80f57231847f4fa6/e24fb/2020-05-19-cover.png","srcSet":"/static/952288fcb3f5016f80f57231847f4fa6/6d6b7/2020-05-19-cover.png 200w,\n/static/952288fcb3f5016f80f57231847f4fa6/d184d/2020-05-19-cover.png 400w,\n/static/952288fcb3f5016f80f57231847f4fa6/e24fb/2020-05-19-cover.png 800w,\n/static/952288fcb3f5016f80f57231847f4fa6/dbfa5/2020-05-19-cover.png 805w","srcWebp":"/static/952288fcb3f5016f80f57231847f4fa6/b303b/2020-05-19-cover.webp","srcSetWebp":"/static/952288fcb3f5016f80f57231847f4fa6/21c67/2020-05-19-cover.webp 200w,\n/static/952288fcb3f5016f80f57231847f4fa6/4b6b9/2020-05-19-cover.webp 400w,\n/static/952288fcb3f5016f80f57231847f4fa6/b303b/2020-05-19-cover.webp 800w,\n/static/952288fcb3f5016f80f57231847f4fa6/c2764/2020-05-19-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"As you may know, I’m a fan of documentation. I wrote a few practical tips on this topic on the blog: “How to create projections of events…","fields":{"slug":"/how_to_create_a_custom_github_action/","prefix":"2021-05-12","langKey":"en"},"frontmatter":{"title":"How to create a custom GitHub Action?","category":"DevOps","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABtklEQVQoz2VRz0vbYBjOPzS0MDwMVmvFw8bmQFaqBy8ehDHKxkAKHnbYZaKwFgu9bBW9aa3DS0HB0aRrSNts0WC//qBpU5c1JqwNJDVtovnySRsYUZ/T++N5ed7nfTHbttEDOMXLS0lVVaciCAIAwDAMp+sAk2X5P9sBhBAhBMpl75Q/ML9w8D0lyxJN0yRJKoriJmP5fN6dO8GgrweCwYmJx6+ez4x5xp94J9c3NjiOa7VaoiiqqtpsNjVNw7LZrGma92TpX78fecZjn1b/ZtPJLx+XFuYKxUK73SZJMpfLMQyTTqd5nsdKpZLbho3QtdHPE0d+v49KbWmnPyF7XP9xeGPdWJYlCH94npckqdFoUBSF0TTtGh7KGv847mAlEt2MrYYqu/HzZBwwNLSHJPdRM5kMBgDQdR1CaJpmr9dDCJ0SePjdm88fQksz3v2vkbYg9q70/qDvmIIQWpaFEKpUKsO1cRynKArHcYIgOp3Ot0Ri+W3o2bRvcfbl4d7OxUlEERt3rI1WqNVqmCRJDMPU6/VqtVosFgEASrfLnp29Xwm/eD2/HV8rR59qYnU0DN0fYVn2Fq8bw0770fT6AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/ec95efcda89d4725162c71dce0c6afd8/e24fb/2020-05-12-cover.png","srcSet":"/static/ec95efcda89d4725162c71dce0c6afd8/6d6b7/2020-05-12-cover.png 200w,\n/static/ec95efcda89d4725162c71dce0c6afd8/d184d/2020-05-12-cover.png 400w,\n/static/ec95efcda89d4725162c71dce0c6afd8/e24fb/2020-05-12-cover.png 800w,\n/static/ec95efcda89d4725162c71dce0c6afd8/dbfa5/2020-05-12-cover.png 805w","srcWebp":"/static/ec95efcda89d4725162c71dce0c6afd8/b303b/2020-05-12-cover.webp","srcSetWebp":"/static/ec95efcda89d4725162c71dce0c6afd8/21c67/2020-05-12-cover.webp 200w,\n/static/ec95efcda89d4725162c71dce0c6afd8/4b6b9/2020-05-12-cover.webp 400w,\n/static/ec95efcda89d4725162c71dce0c6afd8/b303b/2020-05-12-cover.webp 800w,\n/static/ec95efcda89d4725162c71dce0c6afd8/c2764/2020-05-12-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today I would like to show you a simple programming pattern that can be useful for quick code optimization. This pattern is called…","fields":{"slug":"/memoization_a_useful_pattern_for_quick_optimisation/","prefix":"2021-05-05","langKey":"en"},"frontmatter":{"title":"Memoization, a useful pattern for quick optimization","category":"Design Patterns","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AAECAQMFBAcLCh8vJSQ2KwkQCAsSETBYUR01LR4OAjYyJC5KRQ4VFA4aFy5KPSItJCIuIQ8YEwIDAwECAQADBAQCBgQAAQALGxYWKR4xTEZpmpRiZ1XAt6K/q5Whdl5KS0OGwb80UU0kOi4tPTMMEwwFCQcECAcAAQEAAQIBDBMQLj84IS0iDSkho+rpdZuTilo99Mms/e/c6bigWikZWHl4tff3JEQ+IzguJTkyBQwKBAcGAwUEAAIDAyI2LeD37tLRzC9eVITPyk9iXK+AYeO2m/HIssuWgZVcSDVAPZDQzi9eVKmuq+v28RYpIQIEAwQIBgANExAMHRZqdG6AgH0NEQwnLCQeIRzLp4v/6dHerpjjppHZmoAeGBQaIBwYIxpVWlVzdHEWHRUJDgoDBQUAAgUECRANAgsHBhYQBxIPBg8NAwECnV5EyYltmoJ5l15Nlk84CAkJCxsZCRAOCRIQAAAABAgHAgQEBgwJAAYIBQwaFA4WESZEPQcKCg8/ORhkXWpHNsiNc5+JgLB3ZGQvISBrXzeThAcNDSA5NQgLCQ4TDQYIBgQHBQAdIh8mNjIwPjcmS0YDDg0DBQQMTUdCOi3doYD+xq3Qh3IwFQ8OPzgMIR0ACgokWFIXGBYWFxQUFxUQFBAAFR4bHi8rFyYlBxgYED46EhELAAAASSYZpV0/UiwfSiAVOhYQCAYDCwQBEzUwDCEfEx8eFS0qDhUTCw0MQkKCungEPdsAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/f24a359da259301ca1c1885c56f5631c/e24fb/2020-05-05-cover.png","srcSet":"/static/f24a359da259301ca1c1885c56f5631c/6d6b7/2020-05-05-cover.png 200w,\n/static/f24a359da259301ca1c1885c56f5631c/d184d/2020-05-05-cover.png 400w,\n/static/f24a359da259301ca1c1885c56f5631c/e24fb/2020-05-05-cover.png 800w,\n/static/f24a359da259301ca1c1885c56f5631c/dbfa5/2020-05-05-cover.png 805w","srcWebp":"/static/f24a359da259301ca1c1885c56f5631c/b303b/2020-05-05-cover.webp","srcSetWebp":"/static/f24a359da259301ca1c1885c56f5631c/21c67/2020-05-05-cover.webp 200w,\n/static/f24a359da259301ca1c1885c56f5631c/4b6b9/2020-05-05-cover.webp 400w,\n/static/f24a359da259301ca1c1885c56f5631c/b303b/2020-05-05-cover.webp 800w,\n/static/f24a359da259301ca1c1885c56f5631c/c2764/2020-05-05-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Autonomy is the Holy Grail for the management of multiple teams. At least that’s how it’s perceived; it’s not easy to get the right balance…","fields":{"slug":"/how_using_events_help_in_teams_autonomy/","prefix":"2021-04-28","langKey":"en"},"frontmatter":{"title":"How using events helps in a teams' autonomy","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AF2032nB5nvL54HP6YbS7IjJ3JTR44fP55LY6pfNz5HM04e9v2yuu2quvHu7yYjAz3W82Gq612e82mPB3gBRkaFHh5xgmpteintYgHtMfWhPlZZmra5ako5MdVlXdk49Y0Q+XjlFakNChnFKelhhjG18xNJioa1RiqEAMkYxT15EOEkfOFU/WYddO0ofJHBeRWMnU14UPmA2Jlk6R18nT2UnOl0zPXVOVXk6SmQsZIpVZpVgSpaPAFBjRmt1OzxkODK/t0Tq4R2ypSrUzkijfWZ1KTRIIFiKbFh3R1t3Pk9wL0+LR1p5PUh4T1VuJk5eFD10YABHjnU+USRMVhtQfEU0hGYOsbIDvswOy841nX4jgWtK49husXpteTNjcjdOWRZLXRxIXSVNXSBAUyhJWisACYukF4+OJoJvMWtHM04lIXFjFbS5E6KkAJinAaGuAK64KqudMHNSJXhjNZZ6TpVpcplvfZRecbyXZdC0AAZ4lQGAnACGnQKOoAiJlQSElAODmAuEkQmDjwOJlwSNmQGMmgCJmQCPnwGToQShpkXRu3iUVGqgZVPcxgACb4wDc44DdI4CdY0AdY0Ad48AeY8AiJciqJ45xbEW0cQCq6kDfY4Dc4oCdYsBdYsAipg0tp5fejZMgk4AAWiGAWyHAXKJAX2MDZmdIaifJrGmD7SsEa6hEbCpCZudAouUAXeJAm2EAW2HA2+IA3GJAYKWDZKSGYV1ZinlKi7FylkAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/ab4af815bd02d31c469944d7c51db54c/e24fb/2020-04-28-cover.png","srcSet":"/static/ab4af815bd02d31c469944d7c51db54c/6d6b7/2020-04-28-cover.png 200w,\n/static/ab4af815bd02d31c469944d7c51db54c/d184d/2020-04-28-cover.png 400w,\n/static/ab4af815bd02d31c469944d7c51db54c/e24fb/2020-04-28-cover.png 800w,\n/static/ab4af815bd02d31c469944d7c51db54c/dbfa5/2020-04-28-cover.png 805w","srcWebp":"/static/ab4af815bd02d31c469944d7c51db54c/b303b/2020-04-28-cover.webp","srcSetWebp":"/static/ab4af815bd02d31c469944d7c51db54c/21c67/2020-04-28-cover.webp 200w,\n/static/ab4af815bd02d31c469944d7c51db54c/4b6b9/2020-04-28-cover.webp 400w,\n/static/ab4af815bd02d31c469944d7c51db54c/b303b/2020-04-28-cover.webp 800w,\n/static/ab4af815bd02d31c469944d7c51db54c/c2764/2020-04-28-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Some time ago, I wrote on how to create documentation without the pain (read it here). Documentation is something that has been one of the…","fields":{"slug":"/how_to_configure_algolia_for_your_site_search/","prefix":"2021-04-21","langKey":"en"},"frontmatter":{"title":"How to enhance and configure your site search with Algolia?","category":"Tools","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AIl8bYx+ZaGNal9RPYOBecedefq/lsaHYH5oVolyWpyHbq2cjc2ejdaVd+mwi+qyjOmthceTb2hdTmJbSgCwopOsqKOqoY+1rJuuqpvDnXf5wZrdmW+ZcD6BbFB8aViUfWifemjYlXnvspLlqYbioXjIpZS3usCVj4sAZVpHZlpHkol2zsu7p6ef48Sv8beP4Jx5t28ksHMIn3c1dWBDmXVc8LGS7KqM662M4J54mXtnp6Wlu7vBAHxybnNmVL+6q4OBdlZGQPHFpeq1k+Wfd8STdqOIX6xyGaRnEM+OcN6lisuaf8qZfcaTc2pTP3NfSod2YwB0cG+yrJ66s550WCCsiWr1yrHms5XYjWjdrJfc4uzCxMWxim3jmn7LlXXBjnKygmyhe2RbRTJiSzZjTDgAdG1e1NHEl5GCq5FproE/7cWp9sCnx4Rny5uHztHU6+/z5t/k3K2cyaKP0aOHwopZo3AximhNe19RcVk8ALy2qaKej4aCfre4wZSBeph2YNWoj9aXgr9xYK2YnqiyvcnO1NvZ2+fe4N3V1cOynLOGQLJ1FqFvKXxcMQDBv7SNhXWtra6yt72xsrWQiIp7aWahgG/Ch09pTyxVU1WEh5CjrLfAxs3i5uny9f3j5u3MvavQmkOMZy0AmpF7tbKxsa6poqGgqKyyrbC2qKaqioSId2hVl39Pn5WDbl1MbWReh4yWmqCrub3D3t/g7vf/0LyhsKKJlj4/W4Qmkv8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e171972f64c5ee96073d481b0a009ef3/e24fb/2020-04-21-cover.png","srcSet":"/static/e171972f64c5ee96073d481b0a009ef3/6d6b7/2020-04-21-cover.png 200w,\n/static/e171972f64c5ee96073d481b0a009ef3/d184d/2020-04-21-cover.png 400w,\n/static/e171972f64c5ee96073d481b0a009ef3/e24fb/2020-04-21-cover.png 800w,\n/static/e171972f64c5ee96073d481b0a009ef3/dbfa5/2020-04-21-cover.png 805w","srcWebp":"/static/e171972f64c5ee96073d481b0a009ef3/b303b/2020-04-21-cover.webp","srcSetWebp":"/static/e171972f64c5ee96073d481b0a009ef3/21c67/2020-04-21-cover.webp 200w,\n/static/e171972f64c5ee96073d481b0a009ef3/4b6b9/2020-04-21-cover.webp 400w,\n/static/e171972f64c5ee96073d481b0a009ef3/b303b/2020-04-21-cover.webp 800w,\n/static/e171972f64c5ee96073d481b0a009ef3/c2764/2020-04-21-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"TV size? The bigger, the better. Debt amount? Opposite. It’s hard to find the right size that suits all. How big should the event be? What…","fields":{"slug":"/events_should_be_as_small_as_possible/","prefix":"2021-04-14","langKey":"en"},"frontmatter":{"title":"Events should be as small as possible, right?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AJJgRWVDMSETDTAUC6uRhv///+LY1Pz6+f////////7+/v79/f////3//7VLRaowHowzIIw6KrlsTqRZPgBWMCIXCwYAAAAUBQDJvrnv6+rSx8X////+/v7////////////+/Pv////ZoIukHwmFOyRrT0mfYlOjWj4ApHBVgFdDTS4falpR4dPL4NTM2tHN9evo9vDv+vr6+/f3/PX0/f7+z8vJ2LChqzYYrGFIpGNNtWlRu3lcAMCSda98YL2ciPLv6v339Pv39eXb1Mmmm+bQy////9y/ueLNyPT4+J2HgOi3q71QL9B/ZcyJatSXfNidgwCUYUeOaVjYzci9ubWvq6Tr5+Lv6eSOe3JrXlfJycfMxcHIw8DmxcPDf2zVlYLNbU/IXznXmXjXlHTQjGoAVDUrh3JojYF7KSQdR0Q73tnV6ODcZ1ZNDwsGAAAAkJOP//Lx1ZOCzH5pzHpo0H9nz3pZx3NMyn5Zx35ZAGVLQEo2LjQmHzkwKIqBes/Evt/W0pWAdyggFk9QS97f3f/7+cB/aZ5aScd1YK9QNNeQedKEZch9W791VABjNCNYKxpwSjeLZ1WykX+0kn/Ckn/Ouq7g2tf7/Pv////////17evGnpOtYkrAcVvdlYHShmvGf1+5cVEAunVJxIRYwIVenmtOb0o2RS0fsIN5/////v///fz8/f39//7+////+PDtzJB905OB1I94zYJlwXxbs25NpMVNOxmNd+AAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/2065f4f8cb1572fcd7546a1299d0db3d/e24fb/2020-04-14-cover.png","srcSet":"/static/2065f4f8cb1572fcd7546a1299d0db3d/6d6b7/2020-04-14-cover.png 200w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/d184d/2020-04-14-cover.png 400w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/e24fb/2020-04-14-cover.png 800w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/dbfa5/2020-04-14-cover.png 805w","srcWebp":"/static/2065f4f8cb1572fcd7546a1299d0db3d/b303b/2020-04-14-cover.webp","srcSetWebp":"/static/2065f4f8cb1572fcd7546a1299d0db3d/21c67/2020-04-14-cover.webp 200w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/4b6b9/2020-04-14-cover.webp 400w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/b303b/2020-04-14-cover.webp 800w,\n/static/2065f4f8cb1572fcd7546a1299d0db3d/c2764/2020-04-14-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Did you ever feel so encouraged so much that you immediately thought, “This is great, let’s do it!“. I’m sure you did. I’m also sure that…","fields":{"slug":"/how_to_create_projections_of_events_for_nested_object_structures/","prefix":"2021-04-07","langKey":"en"},"frontmatter":{"title":"How to create projections of events for nested object structures?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABeElEQVQoz2P4jwf8+welweSRKf2rWsuR5Rmwafn37+/ff//+/v///+2t87d2Lvjz98+LKR2TdUXT7A1/fngHUYOu+d+/v//+/gVZCJH88eNIQ8zKJPUnB9b3hno0ORkdbk++vmMGRCWmzSAtv759/PzsDojx4v7uwsC9FQ7vTq47NrNrVmbCgf6YU6t74D5C0fzl/tlXeyYd7yvsDbF7srXj17UNl9fN3tud+3TvwlV5kdNTol4+evT7529YIEA1gy38+Oz6/JLH6zp2FCTWOBqd6I/4sK3lzeFZPz69vb9nWaWbRZGd2ZWDB/7////3zx/0APv59PKXKxs/nFn2emfr02Upt+fEn+wOO9kR+fPdi093L53qiZlbnPPq7h14aME0gzl/nzx4Orv9+pTSW72pOxtiN1SFTIqx3t5Z9f/bt7+PD56pDd/QXIUcfwibIYbdO7RrcWrQTh/nKieXigDPDFe3/Qtnfrh95cS6+Tl+TmsndaBFKgAAXbySl1wsKgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/8041984793e3ff13377a1d32fe1aa537/e24fb/2020-04-07-cover.png","srcSet":"/static/8041984793e3ff13377a1d32fe1aa537/6d6b7/2020-04-07-cover.png 200w,\n/static/8041984793e3ff13377a1d32fe1aa537/d184d/2020-04-07-cover.png 400w,\n/static/8041984793e3ff13377a1d32fe1aa537/e24fb/2020-04-07-cover.png 800w,\n/static/8041984793e3ff13377a1d32fe1aa537/dbfa5/2020-04-07-cover.png 805w","srcWebp":"/static/8041984793e3ff13377a1d32fe1aa537/b303b/2020-04-07-cover.webp","srcSetWebp":"/static/8041984793e3ff13377a1d32fe1aa537/21c67/2020-04-07-cover.webp 200w,\n/static/8041984793e3ff13377a1d32fe1aa537/4b6b9/2020-04-07-cover.webp 400w,\n/static/8041984793e3ff13377a1d32fe1aa537/b303b/2020-04-07-cover.webp 800w,\n/static/8041984793e3ff13377a1d32fe1aa537/c2764/2020-04-07-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"As you may know, I’m an active Open Source contributor. Since December 2020, I’m working full-time on the Open Source project EventStoreDB…","fields":{"slug":"/how_to_start_with_open_source/","prefix":"2021-03-31","langKey":"en"},"frontmatter":{"title":"How to get started with Open Source?","category":"Open Source","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABiElEQVQoz3WQy0sCURSH/dPatS4yogfRIogoMjASogcaRCpZZglF9qIpQ1Mqn2VGkpIm9KSEHnPPzJl7RyWDFkERVEwN06Lf5pzF7zt89+oETUREJLcFEAbHrEeZ4waTua+/Z8VotHa3mvRVZ/ksZTIAqH2dMoDwKJXOs94Drjrgdbg2w2t+/8jUYo/NYzLb5lxTy24XiqIGFADgByaEFEtPsW1PzNGy4TYbRheCvuzHref5Lj4x4WjW10Yi0XK5TAjRmuqUG0oQaTQS8XJL9V2T0zP+9/wI3iQtg0OdTXWnpzlKqQor/V9tIMjkq1Ry1j5u6O1dnXdazMPRRPrl9S24G4om90qVotb575sBJEYvT7JzowN9HW0B36ZjqP/iIPTIMJdOhNa5cDiHyAQB1P43rP4ez/PlSuUwlbLa7HeFm3xip/DAXxPqGjO1N9YEtjKSJAMQ0ESn1QBCJETKGIrivSTvX99jqRKPeTnOydg/2soZ1YcQAvC9MAlFAajEinJREdbWvuBPUVKtAacdmbMAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/4434cc66d88ec4254e08391e3e5b015f/e24fb/2020-03-31-cover.png","srcSet":"/static/4434cc66d88ec4254e08391e3e5b015f/6d6b7/2020-03-31-cover.png 200w,\n/static/4434cc66d88ec4254e08391e3e5b015f/d184d/2020-03-31-cover.png 400w,\n/static/4434cc66d88ec4254e08391e3e5b015f/e24fb/2020-03-31-cover.png 800w,\n/static/4434cc66d88ec4254e08391e3e5b015f/dbfa5/2020-03-31-cover.png 805w","srcWebp":"/static/4434cc66d88ec4254e08391e3e5b015f/b303b/2020-03-31-cover.webp","srcSetWebp":"/static/4434cc66d88ec4254e08391e3e5b015f/21c67/2020-03-31-cover.webp 200w,\n/static/4434cc66d88ec4254e08391e3e5b015f/4b6b9/2020-03-31-cover.webp 400w,\n/static/4434cc66d88ec4254e08391e3e5b015f/b303b/2020-03-31-cover.webp 800w,\n/static/4434cc66d88ec4254e08391e3e5b015f/c2764/2020-03-31-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Developers like to complain about the lack of documentation. They complain even more when they have to write it. No programmer wants to do…","fields":{"slug":"/how_to_successfully_do_documentation_without_maintenance_burden/","prefix":"2021-03-24","langKey":"en"},"frontmatter":{"title":"How to successfully do documentation without a maintenance burden?","category":"Documentation","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AO/28sfWxbfDrZqnh7K+n+bl4NXSxrazoYuIdYF8auTTyvLs4ujo2MPEq7q5orOukb28osvIr8XCrpeQegB9gnBmZk95dVmCfmRVWzpXWjphXElZVkBoYUhAOyVhT0eHg3h2e2x5fXVWVktSNhpONyJPOSNSPipDLBsAW0U1mY2BmY+CnZeOZVpTTD0qWko2XUk2e2RUQCskbnFtaGllbWxpgIB8VktDSCoTZE87VUEwUj4tU0AxAKOai5qOfZ2Kd4lyXkEuH2BNQHRaSYJiTnBSPjcZFYpVUZFmYo9gWp1mYn9RSWNVPmNZRYl/cKijmJOOggCWh3WcjHiMfGx1XkozIhUpJRo+MyNIOSk1LyA8IxiVcF6gh3affGuggnhzY1iEgXJ1cmKBfW+ioJRoW0wAVVZGXllLZFxMUko6MikfS0ItYlxKbWdVWldFUEY5dmpfgnhrgnhteHNpODYwPzkxYlI/S0IvWVRITkU3AFlUQV9YTGJbTVZQRD45KmtmU3x6aXVuYGZSRU1HPGtkXXl4cXh3cWpkXTQsJTgzJmljSmpjTFlTP1NKMwCIj3Z3fWiBhXBiaFUoHxxZNTFhNytkPzJcPTNKNy5/dWePeW+Ne2qdkHtwYVFCPTJoZFNhW0xZU0VANScAqbOeoq+bo7CcZmhXNR8dZkVJeVFRcVBRVzg5U0A1jo52iYVrl5N5urqqWVpOY2FUhoN0hn1vgHlrXVVKiMbbfGWm+AwAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/f006e91394254e8f05497ab66646921b/e24fb/2021-03-24-cover.png","srcSet":"/static/f006e91394254e8f05497ab66646921b/6d6b7/2021-03-24-cover.png 200w,\n/static/f006e91394254e8f05497ab66646921b/d184d/2021-03-24-cover.png 400w,\n/static/f006e91394254e8f05497ab66646921b/e24fb/2021-03-24-cover.png 800w,\n/static/f006e91394254e8f05497ab66646921b/dbfa5/2021-03-24-cover.png 805w","srcWebp":"/static/f006e91394254e8f05497ab66646921b/b303b/2021-03-24-cover.webp","srcSetWebp":"/static/f006e91394254e8f05497ab66646921b/21c67/2021-03-24-cover.webp 200w,\n/static/f006e91394254e8f05497ab66646921b/4b6b9/2021-03-24-cover.webp 400w,\n/static/f006e91394254e8f05497ab66646921b/b303b/2021-03-24-cover.webp 800w,\n/static/f006e91394254e8f05497ab66646921b/c2764/2021-03-24-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"It’s intriguing how our perspective on software development changed in the last few years. We transformed from the on-premise age to the…","fields":{"slug":"/how_money_in_cloud_impacts_architectural_decisions/","prefix":"2021-03-17","langKey":"en"},"frontmatter":{"title":"How money in Cloud impacts Architectural decisions?","category":"Cloud","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABEklEQVQoz41QTUsCQRj2T3b2EmRIh051iswiD10KunQwEBSJ1Eug1EZZ+ZE7BYKuo24ii4jjhowRjs7Ozhu4sIdc2p7j8z5fvAFYgZQSAMajcauBm3Wtr/f5goMXAp5sV+t+tHtT+kUn1OgZlccq59zH7HSaI1MtITZjjM0dHjcwGRJX4G22bRsA3irvjDH1Ce2t7xeyBYtbdEJRGbmCv5p1rJMhkUKeRs7Ca1sHoSgqo1pJ9WmG5YnNWPG2ODAGwhImMfPXeeVG6TQ7Ps1u9vSTHsaOX59rmURGubvHWvtf3xa2AID0Q273PJKKp4I7Gxfpy8X3fGWyl9kZ9lKvhmLbwaPNZPYqmjiJK8llrv3L/ANShfLi/X0paAAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/c38c460a45602bcf9ccb70e7c4829cd3/e24fb/2021-03-17-cover.png","srcSet":"/static/c38c460a45602bcf9ccb70e7c4829cd3/6d6b7/2021-03-17-cover.png 200w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/d184d/2021-03-17-cover.png 400w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/e24fb/2021-03-17-cover.png 800w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/dbfa5/2021-03-17-cover.png 805w","srcWebp":"/static/c38c460a45602bcf9ccb70e7c4829cd3/b303b/2021-03-17-cover.webp","srcSetWebp":"/static/c38c460a45602bcf9ccb70e7c4829cd3/21c67/2021-03-17-cover.webp 200w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/4b6b9/2021-03-17-cover.webp 400w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/b303b/2021-03-17-cover.webp 800w,\n/static/c38c460a45602bcf9ccb70e7c4829cd3/c2764/2021-03-17-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week I busted common myths and explained facts about CQRS. Today I’ll continue my effort. I tackle one of the most common questions…","fields":{"slug":"/can_command_return_a_value/","prefix":"2021-03-10","langKey":"en"},"frontmatter":{"title":"Can command return a value?","category":"CQRS","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACAUlEQVQoz2PgERYW11AXkJEWU1VmZWdnYWNl4+Ji5WBnYmZiZGJkYWFhYGCwNjLYPXeirb4mAyOTS3S4e3rKxhdPZpw8xqBuY6nv7WEW5O+amqzjYGcV6K9ta+0UEWbp680jKMjAwMAlJGwdnuDpH5LV0OKalF6cGheel9O4fm33pg0McsaGIipKSnq6OtaWMno66k4OvBLiGrY22s5ObOzsDGwcoU2Ti7aenHnl4byz12ceOxaVl24YE+GdGM0vIc4goqaiZmhg7ORo7e7i7GitY6wvLiGup6Pj7u4qqqaSUVw84fhJu6qMnq0L5u9cPmvdDB13PUcPjZacKHkNNQYmBgZ1DS1jW7PMYl9XT08zdRVTI8OosJCM1PiIttZt8yfHpES3zWnbd3jPs2dP7t17GJOQycbKxsfKzMzIyMDIyKCqrq5vbq6hp62qoQkJIQhgZWZmYWQwMjQ/ePDkl28//v//f+zkZUcbZ2ExcQYGBkaQZiZGBgYGXl4+bm4eiBATMzMzCwsLKysz2CAXQ/UrFy6cOXVm66rl69ZszA5wEOZmg2lmZGTAAZiZmRkYGEK8XH98+3bl6vULFy5fu34z2MmKEawVpIKNm5OVg52dh4udj4eFkwOEuDlZeThZuTnYebkZGBgqa2r/////58+f3//+//79OzkyFKKLhYMNABKLjRztDuR7AAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/8110f47ddc60012d9b9f7186089a8b9e/e24fb/2021-03-10-cover.png","srcSet":"/static/8110f47ddc60012d9b9f7186089a8b9e/6d6b7/2021-03-10-cover.png 200w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/d184d/2021-03-10-cover.png 400w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/e24fb/2021-03-10-cover.png 800w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/dbfa5/2021-03-10-cover.png 805w","srcWebp":"/static/8110f47ddc60012d9b9f7186089a8b9e/b303b/2021-03-10-cover.webp","srcSetWebp":"/static/8110f47ddc60012d9b9f7186089a8b9e/21c67/2021-03-10-cover.webp 200w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/4b6b9/2021-03-10-cover.webp 400w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/b303b/2021-03-10-cover.webp 800w,\n/static/8110f47ddc60012d9b9f7186089a8b9e/c2764/2021-03-10-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"I’m sure that you know a lot of Urban Legends. They usually start with “hey, my friend’s cousin saw that…” or “you know, I’ve read such…","fields":{"slug":"/cqrs_facts_and_myths_explained/","prefix":"2021-03-03","langKey":"en"},"frontmatter":{"title":"CQRS facts and myths explained","category":"CQRS","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AAkKCx4jKIh8fot5YJ6RgIF3X6WKXKaHYF9WPTU0LTg7Om9vZ7WlonpzcXVva0tSRXFzap2QjI6EhXhycQAMDxMtMziml5iJeF19dm2Pf2SLakChgGKfb1d6SztBRDpmaF62o6CLgHaRjHt5eGN6d22NfHatk4uTe3UAGyIoQUZIopacSEU9RkQ7c2NRflc5m3tdgFlBdk43eGNPlH9twaaik4Z1gnpofXdZjoVyemdcqY6Bs42AAB0dHlFUT6ebnWRVTGJMOmpbQ11TQF9KPVU3LGxdSa6GcMSYgLeXiY10Y4p1ZXJSO4p2am1fVK6GdaB7bQBlXlGTiHqbjoaPdGSef2xzWD1dWz1SUD9jWUiTgminiHG7l4Kxl4qxlIa+moamfF21loyhjX+khG+ceWkAZ25ZcHVeaWtSe3BYjH5nZl89gXBUkHxeXlhHlIFyrZGBuJuKrZOEqpCCr4+BoHFRr4VrrpOHq5CAjndqAJ2VlpaSjYF+eIZ+d6KYlZ6ZlLqsraWbnV1YXayfoLGkpMGvrbKfmrCfmb6qp7SYkLqhl6mSirScl5SDgADHt8nKvMm8r7i7sLnHu8PIu8S6sbuTj5aIgoWjmp+3rLGZkZKlm5u+q6mzoZ64qKa2op69qKa2oqKpko0AraazurLAy8LQu7S/tKmvtKmsm5OUlo6OnZGRoZGQo5SRjHx0koB4qpCFp5CGrZ6cyri2uaelp5eXsqKl8XkSPqSgfXcAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/a6cfed9676fe0329352695fe95800967/e24fb/2021-03-03-cover.png","srcSet":"/static/a6cfed9676fe0329352695fe95800967/6d6b7/2021-03-03-cover.png 200w,\n/static/a6cfed9676fe0329352695fe95800967/d184d/2021-03-03-cover.png 400w,\n/static/a6cfed9676fe0329352695fe95800967/e24fb/2021-03-03-cover.png 800w,\n/static/a6cfed9676fe0329352695fe95800967/dbfa5/2021-03-03-cover.png 805w","srcWebp":"/static/a6cfed9676fe0329352695fe95800967/b303b/2021-03-03-cover.webp","srcSetWebp":"/static/a6cfed9676fe0329352695fe95800967/21c67/2021-03-03-cover.webp 200w,\n/static/a6cfed9676fe0329352695fe95800967/4b6b9/2021-03-03-cover.webp 400w,\n/static/a6cfed9676fe0329352695fe95800967/b303b/2021-03-03-cover.webp 800w,\n/static/a6cfed9676fe0329352695fe95800967/c2764/2021-03-03-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"If TypeScript were a friend of mine on Facebook, then I’d mark our relation as complicated. It’s a history of love & hate, or rather hate…","fields":{"slug":"/partial_typescript/","prefix":"2021-02-24","langKey":"en"},"frontmatter":{"title":"Why Partial<Type> is an extremely useful TypeScript feature?","category":"TypeScript","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AC5pfCxeeSNWc5aptIuVpqyywKq3u6/Bv7C6ubS+v8bLya62ssjO0MvS1cvN1Jicr6Cjs2CNmCBWdC1iegAfUm0fU20bT2llc45ea5NVeoyZq2PKwVzPqmrCmnC1inrDnH+6lm7Cs3a0unhMbnddaJVCXXsWRmofUm0AKlNpJ1NpNVF0SVKHMWR2XIFixaM365oa6Jws5LJI4rwS4rYn5ZwZ8qUj6MUfo7k8N1x7Qk1+K1RpKlVqAH6Zhn6Uf3l8hV+CkJa0asKfZsmCOtq0MMTGtbC5w83RnMLJuN7hseS6J+iWJty6KJSwT2t6n4KMi3+bgwCLopiYoFSwrR+Qq2HBpVaxf229tz/i4D24vceYnLTJyt6CiKTv7vjm6D7fuRvMgCjFvkRtlI12eqWQpZcAqb+urLyR088r29QZuahhpLa1y9RZ49kN1dBH49+K2dVo7fDF4Nd23c8a19EkxI4ozJdPobd3jJJWnKR9AHhzVH99aJKMRLu0HZCRbYuPf8PBQe3lFMjDHdDNJeLgHL6mG5lsEeHVGr6yJbuuPsCrU8/DL9HMFLW9dwAlGAgkFgcwIw57dRYwIweamJPW1IDY0Q7e2SikhHjCo5ylUU21kx/f3R+MhiiNgCxrYiXe2RWPhyd0bFQALiMSLSISLyQRkYkXkIkQra2G0MxqpqMh49wZwJgky5xK69UvxsYmsqoez8Vnvb3DUkoukosSKBwQJBcIENAd0L/4V+cAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/de01ccfa64d9196122614ab91aa5a80b/e24fb/2021-02-24-cover.png","srcSet":"/static/de01ccfa64d9196122614ab91aa5a80b/6d6b7/2021-02-24-cover.png 200w,\n/static/de01ccfa64d9196122614ab91aa5a80b/d184d/2021-02-24-cover.png 400w,\n/static/de01ccfa64d9196122614ab91aa5a80b/e24fb/2021-02-24-cover.png 800w,\n/static/de01ccfa64d9196122614ab91aa5a80b/dbfa5/2021-02-24-cover.png 805w","srcWebp":"/static/de01ccfa64d9196122614ab91aa5a80b/b303b/2021-02-24-cover.webp","srcSetWebp":"/static/de01ccfa64d9196122614ab91aa5a80b/21c67/2021-02-24-cover.webp 200w,\n/static/de01ccfa64d9196122614ab91aa5a80b/4b6b9/2021-02-24-cover.webp 400w,\n/static/de01ccfa64d9196122614ab91aa5a80b/b303b/2021-02-24-cover.webp 800w,\n/static/de01ccfa64d9196122614ab91aa5a80b/c2764/2021-02-24-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Each country has the go-to place for hiding from daily struggles. In Poland, we have Bieszczady. It’s a mountain range that’s also the…","fields":{"slug":"/how_to_setup_a_test_matrix_in_xunit/","prefix":"2021-02-21","langKey":"en"},"frontmatter":{"title":"How to set up a test matrix in XUnit?","category":"Tests","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACLklEQVQozwXBWU/aAAAA4O7BLDizB3VohCCXlCsc4RgIwsoNLbRCOayUcpRrqVwKY07rxnSSGTzxQbNImFu2jCxue1myX7fvAwp5c7VsLdD2HO3J5AIkjW510MvbyIczfPsd0WIJpp0q1hL5aipTTtFbxHY3U+9Q9Q7V6FBAMKyBUW1kXU/n9emMOZl2lJkXw09Qu+tiB6GLUbjNBteJYKsTqWxhVAkrMVilFqvWEyUmARhtSrtbY15ThzENnlIHIgY4Zi7VLdWmjT103Iw93ffeaAYii55C2Zct+pNZX5QIxdKhOIkAOotUa5bpLUrID8KYHMZUdp8GwXVkycg0LG/3jK/3jXXWmcyu4hs2GF8LxByeCBROetG4C5CqZuTaeadbaLKDBpssCItRVAr5VYW6gsorN6JcDJ7N5YTJtC5JGksta6VpYl7KirSsubsKSEEOqOAYTE+c0FIoyEcQfiy65PfzqMpyPL7scj5VqKa1Gk4YFYQwkKTEOWIu4Jn2uTk7bQGwuPRIsjLFFzxetU7Z7TMq3ZzGuCBWzHoDXDzEf26aBxVck3kxui52u4Q4tlIkBFFEgCEiOi0Cjl4lWMbVoCw3feqyt3m2n7rrZ+5P87W83wDOH9eg0TFxyyJfPsYn55v/7so/r+nv/eDDKTo5QYFxz/RrqL9482y4p77aFd8diSYDye8r8LzL3yEXPh/w7nuq0a704ZD3d6D4cyL/eiD5dij/0ReNjyT/AdwxrzmQczewAAAAAElFTkSuQmCC","aspectRatio":2.2222222222222223,"src":"/static/da2e5d520fba8a041b8b7dbdef3afff4/e24fb/2021-02-21-cover.png","srcSet":"/static/da2e5d520fba8a041b8b7dbdef3afff4/6d6b7/2021-02-21-cover.png 200w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/d184d/2021-02-21-cover.png 400w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/e24fb/2021-02-21-cover.png 800w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/dbfa5/2021-02-21-cover.png 805w","srcWebp":"/static/da2e5d520fba8a041b8b7dbdef3afff4/b303b/2021-02-21-cover.webp","srcSetWebp":"/static/da2e5d520fba8a041b8b7dbdef3afff4/21c67/2021-02-21-cover.webp 200w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/4b6b9/2021-02-21-cover.webp 400w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/b303b/2021-02-21-cover.webp 800w,\n/static/da2e5d520fba8a041b8b7dbdef3afff4/c2764/2021-02-21-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"What’s the difference between a command and an event? The answer seems apparent, but let’s see if it’s straightforward. The command…","fields":{"slug":"/whats_the_difference_between_event_and_command/","prefix":"2021-02-17","langKey":"en"},"frontmatter":{"title":"What's the difference between a command and an event?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9ADckGm5INkcxJgYDAV05K6JxWYhkUE0tH25BLL6tn///+vrw4tW8qNGrjuG9mamDYsWohv/txfTdseK7hQA+JxxXOCpELiQEBAM3Ihl8VkR/YU9fOymPWDzKtqn////04cV1VkStloCeiHNYOCTOspL98dfv2bPkwYsASS0hVjcqQi0iDwkFLx0WhGNPimVQmWZLxpJzzbyr9OLJ3rydd2BNLyIWKiEYdVU+2qyE8dm4/Pjq9u/fAA4KCAsHBQAAACoPCM2LZaaKbigaFWFFNMaslf//9vz7/P///6mXhlI9K2lQO5Z1WO/dxenMqOjDmfvx3AAHBgYAAAABAQEAAAA+LCAWEg4AAAAAAAANCAWwpJnRysHy7OGCc2VqSzKmh2R7Y07048v7687lxJvot4MACAcGAAAAFg4KPCQaEgcFJRQORSshHRIOAAAAbGVeW0k6UkM3Sjcq4qp27sSPa1VDiXhnaVJAyLee//jbAAcHBgAAAAsHBhsRDCUaFmpGN2NBMR8XEwAAAFBNSUc6MUMzKDgoHoReQoZmSDYnHVhDMj0sIsiohP/jswAFBAMJCQmTk5SJiopydHSfnJqtopu8sKqYgnWFeW5NQTeVioPAu7aXk5CSjYq2rqeYjIKCfnppUUCVbU8ABgYFAgIDNjY1MDAwJSMhNTY1NDQzTEI9XkM1x7ipf3FkaVNIj3pueWZYf21ejXlrd2VZZFVIYVBBj3deJUXes6EKalQAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/77c518b6cddd40c489ead18886a3a877/e24fb/2021-02-17-cover.png","srcSet":"/static/77c518b6cddd40c489ead18886a3a877/6d6b7/2021-02-17-cover.png 200w,\n/static/77c518b6cddd40c489ead18886a3a877/d184d/2021-02-17-cover.png 400w,\n/static/77c518b6cddd40c489ead18886a3a877/e24fb/2021-02-17-cover.png 800w,\n/static/77c518b6cddd40c489ead18886a3a877/dbfa5/2021-02-17-cover.png 805w","srcWebp":"/static/77c518b6cddd40c489ead18886a3a877/b303b/2021-02-17-cover.webp","srcSetWebp":"/static/77c518b6cddd40c489ead18886a3a877/21c67/2021-02-17-cover.webp 200w,\n/static/77c518b6cddd40c489ead18886a3a877/4b6b9/2021-02-17-cover.webp 400w,\n/static/77c518b6cddd40c489ead18886a3a877/b303b/2021-02-17-cover.webp 800w,\n/static/77c518b6cddd40c489ead18886a3a877/c2764/2021-02-17-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"What can go wrong with distributed systems? Everything! I like to compare distributed systems to Rocky Balboa fighting the last round with…","fields":{"slug":"/saga_process_manager_distributed_transactions/","prefix":"2021-02-10","langKey":"en"},"frontmatter":{"title":"Saga and Process Manager - distributed processes in practice","category":"Design Patterns","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AHMLI3sNJnsPKGkOJkEHGTw2PYZkZMB9cNd1Y9ZcVlgnLZN6acqWfaSHd4hjWINZS4FvYMGViINdXFpERwBSMy9BISMuCBZdEyRfFSZEJipRQkFWPzyuV1HBRkl1GSmjaGHQm4TAhGmwdF+WWEpzOzTIgXbMgHbUjoMApnVYUjcvHxsiExQcJSEmlWxgx5WCkWlbYCIpvTxFcjk+YEBAnm1fuHplnltNi09DrXVpu29osWZfy4h9AG5IPo1dSaJrXaVyZUozNJ9xa8uWh9KjjpZdWqUwOywuNQAAC0ElKIlWUXZDPoliVLF3bbNgW6lgWdCMgAB1ST5wQzmqZljgjXluOjmmgHTWnI7Rn4SmYVuIGSojGyNONTaIPz+yaWKYVlGkiHmHT0yPR0aQTEnBd2oARzIwbUc/uGlckkpGURUgl2VbwY96i1lLrVZLxGxmynxtwmJYgSovqlhT0X9ywp6Wrnx0SxkggEVB1K6QAHdMSKx8b5JCQkcfJmVBP8+dicaOdJpUPtGPbdWXgLNjWKBMSYY7PaFJScl6cLh6c7OLgkMYHqd5ZMGSdwBoMTSbXVd8PzutgGjiwabnwKm8gmeoalTgq4zoxq7UppCpdWRfS0yPUE+6YFyvY2GPY2FqOzuaYFG4hnIAQx0jcD44z5t78M2z47WU5cKszZV61qGH7Maw57mb78+37riRRjMvKSIrm1BQslxalVBQjlNRhkBAcD8//pnqPtXKRNgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/07398c056d2d8a5528ebf73b635e9088/e24fb/2021-02-10-cover.png","srcSet":"/static/07398c056d2d8a5528ebf73b635e9088/6d6b7/2021-02-10-cover.png 200w,\n/static/07398c056d2d8a5528ebf73b635e9088/d184d/2021-02-10-cover.png 400w,\n/static/07398c056d2d8a5528ebf73b635e9088/e24fb/2021-02-10-cover.png 800w,\n/static/07398c056d2d8a5528ebf73b635e9088/dbfa5/2021-02-10-cover.png 805w","srcWebp":"/static/07398c056d2d8a5528ebf73b635e9088/b303b/2021-02-10-cover.webp","srcSetWebp":"/static/07398c056d2d8a5528ebf73b635e9088/21c67/2021-02-10-cover.webp 200w,\n/static/07398c056d2d8a5528ebf73b635e9088/4b6b9/2021-02-10-cover.webp 400w,\n/static/07398c056d2d8a5528ebf73b635e9088/b303b/2021-02-10-cover.webp 800w,\n/static/07398c056d2d8a5528ebf73b635e9088/c2764/2021-02-10-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Are you one of those people saying that Event Sourcing is detached from reality? Do you think that you don’t need such extravagance, as you…","fields":{"slug":"/relational_databases_are_event_stores/","prefix":"2021-02-03","langKey":"en"},"frontmatter":{"title":"What if I told you that Relational Databases are in fact Event Stores?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABuklEQVQoz2NgYGBgZGRkYGBg4WRp6Kzdu3fbru1rVi6eNqWvYff2tQf2bDx+YNOJo3vnzexat3pxRVkuJycLWAsDDIBZvAK8NoHWc5dOfv3geH9Tcn1xzOTWvN6GrAmt+Q9vHVu7oKK1LCA2yFSAjx27ZgtfwwUrJz29eUBVRZKDk1VXTZyfh52TgyUpIeD8vkmT6n2rc1yUZIXgjkVo5uTl8gy1Pry6feHkUk5uNk4ejo6qxIIUfxERHh83szMbO+Z1hzQWe6orizMwMDDBNTNCbeb2DLFa3VewdEq5shSvurzYxMqoWfXxYS46eRE2W+cWz5uWWJrtrKYshqYZxBIR5bMNMJs2tfLsznneZvKeNppSItxuVprTG2ILIqw7G2Iza0OLG4I11CVBmplQNfOL8NonOsXWxJ49srw+x9vZRkNPVcrFQrs0xaOryDcp3klcU9rK21BWQRTNzyAWjzCfU66fdYbH0jU9m2eVGmuKK4jzmGnJxProh7qpO9rpREZ5cvKxCQnxoIU2iMklxGOX6V3cXlpZk7tlxeTWhqL4mKCk2ICGyoyK4rT09ISZ0zuU1KR5uBFRBQC+NYcHvdGJcgAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/af61881812c7a3f663e9b569f41a8d6b/e24fb/2021-02-03-cover.png","srcSet":"/static/af61881812c7a3f663e9b569f41a8d6b/6d6b7/2021-02-03-cover.png 200w,\n/static/af61881812c7a3f663e9b569f41a8d6b/d184d/2021-02-03-cover.png 400w,\n/static/af61881812c7a3f663e9b569f41a8d6b/e24fb/2021-02-03-cover.png 800w,\n/static/af61881812c7a3f663e9b569f41a8d6b/dbfa5/2021-02-03-cover.png 805w","srcWebp":"/static/af61881812c7a3f663e9b569f41a8d6b/b303b/2021-02-03-cover.webp","srcSetWebp":"/static/af61881812c7a3f663e9b569f41a8d6b/21c67/2021-02-03-cover.webp 200w,\n/static/af61881812c7a3f663e9b569f41a8d6b/4b6b9/2021-02-03-cover.webp 400w,\n/static/af61881812c7a3f663e9b569f41a8d6b/b303b/2021-02-03-cover.webp 800w,\n/static/af61881812c7a3f663e9b569f41a8d6b/c2764/2021-02-03-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"We sometimes feel melancholic, blue and a bit messy. When we enhance those feelings with “gummy berry juice” then various dubious ideas come…","fields":{"slug":"/what_texting_ex_has_to_do_with_event_driven_design/","prefix":"2021-01-27","langKey":"en"},"frontmatter":{"title":"What texting your Ex has to do with Event-Driven Design?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AGxra2tqamloaGtrayohJCsREGtEPoJUUK1ybqpxbnxXVjoyMyYhHlpZXW9xdWlcWmtcW4GCh4KCgoiJhwBoZ2hpaGdmZWRraGcmIiMgDQtlQj5fQUKLVlKNYF9uUFA/NjkiHRwuKypTUVRnY2NaSFJgXFF9eXZlWmoATU1OQ01QTFRXVlxeSzg5MxgWfVBMhlJQfktHuHh1lWNhWlJUZ2VmRUBEPjxBXlldTUVLQjwzV09MV0hYADk2OA0YIRcnMRcuOEQyM1kwKXNMSYxXV4tWW7h6ea90b2VWXGNjaEtKTTEvLUY5Pj4xNkg9UEc5PWBXUAAhISIiJyk/Rk4/SVQ+RU5NNzZsSUSDVVSYWmC3d3SXaGEqISMpJikWFBUNCQtJQClKQTFWTFheT0ZJQkcAIiYqNzg4RUlOTVdiT15sTElQZEhEd1VUmWhnq3p1eFpWIR8ZOTMuHBcZGRcZODYvUE5BbmVkfXNuZmNgAHx3dsO/v5eXmJWWmsvO0LW2ubm3tpWJiLeoqL62tcK/v7i2tpeUlJmXmb2+v56dnqmlpMfGxc3MzKakoQBnRzx6YFeIeXWmnJvKw8Gik4+giIWcfXqpioa2k4/ArqvIwsK1ray+trTEvry3sK+SiYamoJuwqKd+f38AMwkCZkQ8r52Zxre1va6ssZ6coH55qHx2p313upaQxrOxwbSyva6twLOywrSyxbi2rqKglIN/l4mHWVNUKtfgCdGMCI8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/e25d56648ee9295043c309919e9bc62b/e24fb/2021-01-27-cover.png","srcSet":"/static/e25d56648ee9295043c309919e9bc62b/6d6b7/2021-01-27-cover.png 200w,\n/static/e25d56648ee9295043c309919e9bc62b/d184d/2021-01-27-cover.png 400w,\n/static/e25d56648ee9295043c309919e9bc62b/e24fb/2021-01-27-cover.png 800w,\n/static/e25d56648ee9295043c309919e9bc62b/dbfa5/2021-01-27-cover.png 805w","srcWebp":"/static/e25d56648ee9295043c309919e9bc62b/b303b/2021-01-27-cover.webp","srcSetWebp":"/static/e25d56648ee9295043c309919e9bc62b/21c67/2021-01-27-cover.webp 200w,\n/static/e25d56648ee9295043c309919e9bc62b/4b6b9/2021-01-27-cover.webp 400w,\n/static/e25d56648ee9295043c309919e9bc62b/b303b/2021-01-27-cover.webp 800w,\n/static/e25d56648ee9295043c309919e9bc62b/c2764/2021-01-27-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Last week, I started writing about the topic of cutting systems into microservices (read more here). I was sceptical about the frequent…","fields":{"slug":"/sociological_aspects_of_microservices/","prefix":"2021-01-20","langKey":"en"},"frontmatter":{"title":"Sociological aspects of Microservices","category":"Microservices","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABcklEQVQoz33Py0sCURQGcP+ftq1btJRW7aIQoowoyhb2gIiQAsEWgguRHghJZVOMENjC7KFE5lTiA8uyUrBoxhdjo+N4r/eeGCKYwPp258CP7xwd/IQC3AooWFBuiqgqNQWeB9rCbQIUGkqdrwmEAKUUNNFpcbyM4oJSxyBXylHvEQAgTBCmCKEQuyc3ZfgdnXZQCBBZIRRKL1nX8kY8J/ISBoCPZNqtNwrJe7WDkM6YAEj1evSYSaTTYztXptPKhO+B8d1troe3Bxb4KKdizeVarG5xQ1Ay9hxzsGWwXXOvj/ni4pJ/dMTRo59L5qpqwV8YU2grn+R5lZsyXXaPRxy+GSY2vME5LCuD/YZotqZi0hkDalNZaS1YXbuewIWPcx+mei3+LjNrHJqdn7SGEm//YQAQpYZtKxCMZEsieucl3CaZp2KfmZ22n0g1uYlJ55+/t6XKp9NztuY897KpfEEUyo1sTrTux9hwBgCaLaz9+Qt0nt08TTq8LQAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/2443d84c92f4d1beab0b25daea162439/e24fb/2021-01-20-cover.png","srcSet":"/static/2443d84c92f4d1beab0b25daea162439/6d6b7/2021-01-20-cover.png 200w,\n/static/2443d84c92f4d1beab0b25daea162439/d184d/2021-01-20-cover.png 400w,\n/static/2443d84c92f4d1beab0b25daea162439/e24fb/2021-01-20-cover.png 800w,\n/static/2443d84c92f4d1beab0b25daea162439/dbfa5/2021-01-20-cover.png 805w","srcWebp":"/static/2443d84c92f4d1beab0b25daea162439/b303b/2021-01-20-cover.webp","srcSetWebp":"/static/2443d84c92f4d1beab0b25daea162439/21c67/2021-01-20-cover.webp 200w,\n/static/2443d84c92f4d1beab0b25daea162439/4b6b9/2021-01-20-cover.webp 400w,\n/static/2443d84c92f4d1beab0b25daea162439/b303b/2021-01-20-cover.webp 800w,\n/static/2443d84c92f4d1beab0b25daea162439/c2764/2021-01-20-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Today, I’m holding a keyboard in one hand and scissors in the other. What do I need these scissors for? According to the post title, I would…","fields":{"slug":"/how_to_cut_microservices/","prefix":"2021-01-13","langKey":"en"},"frontmatter":{"title":"How (not) to cut microservices","category":"Microservices","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABPUlEQVQoz42R20sCURDG/auDeqk3ieqhUjLI0qDyFgU9pIIUaSmU2VXd3eNePO6ubDfaCN3Zs3PC1rJ6yXma+eDH981MgI9R6CHz2EmxlM7sZ/MF27YHImLgX9J1Xc55uVxJpDKc88NcfiMW+9SZD6MDAC7j+GU1agYd7ejB+dDCYmQ5FA6FVzStPXLuO46s6URpG90H++0dABDR8zyAgefeQXZqOnh736RUrzcEcOA71DA2ADw9v8qaUb0RL+9aV3XlTqJEVTumsRbfyeULR8fFRDIdXY9HVqPJ1K5pmkPYAbAeX6huiS3aEFRBUmWVml2ra1ktWYlvJWfnliYmZ2q1a0KIKEqnZ5XY5vZYB/PX1g2zWCo3BUmWlfOLar0hjGL7R8KfNQTRQ2SMIfJer69qbUJk/1W/4HH8/4wf+GTwDHD8rZgAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/92be6c1698ca08b79dc8c80989b8c453/e24fb/2021-01-13-cover.png","srcSet":"/static/92be6c1698ca08b79dc8c80989b8c453/6d6b7/2021-01-13-cover.png 200w,\n/static/92be6c1698ca08b79dc8c80989b8c453/d184d/2021-01-13-cover.png 400w,\n/static/92be6c1698ca08b79dc8c80989b8c453/e24fb/2021-01-13-cover.png 800w,\n/static/92be6c1698ca08b79dc8c80989b8c453/dbfa5/2021-01-13-cover.png 805w","srcWebp":"/static/92be6c1698ca08b79dc8c80989b8c453/b303b/2021-01-13-cover.webp","srcSetWebp":"/static/92be6c1698ca08b79dc8c80989b8c453/21c67/2021-01-13-cover.webp 200w,\n/static/92be6c1698ca08b79dc8c80989b8c453/4b6b9/2021-01-13-cover.webp 400w,\n/static/92be6c1698ca08b79dc8c80989b8c453/b303b/2021-01-13-cover.webp 800w,\n/static/92be6c1698ca08b79dc8c80989b8c453/c2764/2021-01-13-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"“Bring me solutions, not problems!” I’ve heard this sentence multiple times from Business and management. You’ve heard it too, haven’t you…","fields":{"slug":"/bring_me_problems_not_solutions/","prefix":"2021-01-06","langKey":"en"},"frontmatter":{"title":"Bring me problems, not solutions!","category":"Agile","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAwX/xAAUAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAGCpcpkyxH/xAAcEAAABgMAAAAAAAAAAAAAAAAAAgMRFDIBBDP/2gAIAQEAAQUCxtKtLVecsCWJ0Nb/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPwFJ/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8BGf/EABoQAAICAwAAAAAAAAAAAAAAAAABAjIQIXH/2gAIAQEABj8CVdlUyscvp//EAB0QAAICAgMBAAAAAAAAAAAAAAABESExcUFhobH/2gAIAQEAAT8hmkdEOhcoOklJFX0MOjDs94//2gAMAwEAAgADAAAAEDff/8QAFhEAAwAAAAAAAAAAAAAAAAAAAAER/9oACAEDAQE/EEqEP//EABYRAQEBAAAAAAAAAAAAAAAAAAABEf/aAAgBAgEBPxCla//EAB0QAQEAAgEFAAAAAAAAAAAAAAERAKEhUWGRsfD/2gAIAQEAAT8QGcrkI7Y0PMgaZ2uUqoMacHzmw9GbLPmdXP/Z","aspectRatio":2.2222222222222223,"src":"/static/52e261c0c74a483c78b361c46f0bf30f/cae78/2021-01-06-cover.jpg","srcSet":"/static/52e261c0c74a483c78b361c46f0bf30f/f137a/2021-01-06-cover.jpg 200w,\n/static/52e261c0c74a483c78b361c46f0bf30f/8494e/2021-01-06-cover.jpg 400w,\n/static/52e261c0c74a483c78b361c46f0bf30f/cae78/2021-01-06-cover.jpg 680w","srcWebp":"/static/52e261c0c74a483c78b361c46f0bf30f/37a0f/2021-01-06-cover.webp","srcSetWebp":"/static/52e261c0c74a483c78b361c46f0bf30f/21c67/2021-01-06-cover.webp 200w,\n/static/52e261c0c74a483c78b361c46f0bf30f/4b6b9/2021-01-06-cover.webp 400w,\n/static/52e261c0c74a483c78b361c46f0bf30f/37a0f/2021-01-06-cover.webp 680w","sizes":"(max-width: 680px) 100vw, 680px"}}]}}}},{"node":{"excerpt":"Yesterday I was asked by Cezary about the transactional outbox pattern sample implementation. My answer was: https://twitter.com/oskar_at…","fields":{"slug":"/outbox_inbox_patterns_and_delivery_guarantees_explained/","prefix":"2020-12-30","langKey":"en"},"frontmatter":{"title":"Outbox, Inbox patterns and delivery guarantees explained","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AEpHSlRPUlBMTlROUVpSV2NeZmlgaXJve3N0hH1/j32BlX2Dl32FmoGHnHFxg1VNUlRNUVBKT0hDSE1JTABHREVRTE5OSkpUT1J8d3+dnKuqrcKwts63zO+xxOWxxuikudmfs9KdsdCdsM50c4NLQ0ZOSE1HQURQS08ASUZFVVBQUk1LW1ldra26rqavwc3ktMHbscHfr7/dr77arLrUpbLLprHJn67IgoidTERIS0VHRkBCT0lLAEhLPVVRSlZQSWBaXcHG18zL1brE2KWwyKu2zaazzai1zqu40aq0ypumu5KcsH1/jEhBREdBRUE8PkxHSgBWT0NQTz9SUEBYU023vtLZ3/K3wdWYoLSfqr+Zn7GcobGotc6osseZoraVobSBgoxCPD5CPUA8NzlJQ0YAVEpBVEtDUUxCT1FDsLXD2uDzvsjbo7DKnqzEl52roqW1mpuwjomafk9amKCzfoCMOjQ1Pjk7OTY2Qz5AAERFOVBNQVhOSVRLRaiqttbX68HH2ai0zKaxyaGuw6izy6SzzIVtfHtLV5mnumdmbTcyMzs2ODo2NkI9QAA3Qi9DRDpIST5NQT6Ph5DX3O7AyN2dq8KUn7OerMals8+aqL+DfotmXWNUVFdAOjo3NTU3NTY5NTQ7ODgAO0QyPEQ0PDwyWU5GVEpEfnh8wMbYnqe7hY2cf4aXY2ZwTEVDREJAR0BARTw8PTg4PDc4MzAwNjIxNTIywa8CyQscNmsAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/4f6ad631d739608c05be378d81f5729e/e24fb/2020-12-30-cover.png","srcSet":"/static/4f6ad631d739608c05be378d81f5729e/6d6b7/2020-12-30-cover.png 200w,\n/static/4f6ad631d739608c05be378d81f5729e/d184d/2020-12-30-cover.png 400w,\n/static/4f6ad631d739608c05be378d81f5729e/e24fb/2020-12-30-cover.png 800w,\n/static/4f6ad631d739608c05be378d81f5729e/dbfa5/2020-12-30-cover.png 805w","srcWebp":"/static/4f6ad631d739608c05be378d81f5729e/b303b/2020-12-30-cover.webp","srcSetWebp":"/static/4f6ad631d739608c05be378d81f5729e/21c67/2020-12-30-cover.webp 200w,\n/static/4f6ad631d739608c05be378d81f5729e/4b6b9/2020-12-30-cover.webp 400w,\n/static/4f6ad631d739608c05be378d81f5729e/b303b/2020-12-30-cover.webp 800w,\n/static/4f6ad631d739608c05be378d81f5729e/c2764/2020-12-30-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Developers that are not running a system in production might call themselves lucky. They can live in their perfect world. It is a world…","fields":{"slug":"/how_to_do_event_versioning/","prefix":"2020-12-23","langKey":"en"},"frontmatter":{"title":"How to (not) do the events versioning?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACBUlEQVQozxXMO2/TQAAAYE8gBkBAATFAJSRWBBJSByZ+A0j8FWArEwNiLI/SAalJHKdxfLYT2+ezfX7UuTu/46hS4qY4fSTphLoAI+L7AR/35+/vxeJ0NqsoDRGChIQHB2VeZEkSRRHN8yxN46LIilEWx8zzXUqHlJI8T8fjkjs+roPARcjE2JZAF2MHQk3T+3tdQVYkWZF6oKsbAyD3ZLWnG4MwDJIkyrJkPB5xZ4uT2axK0jjP02EYsIhSRggJPd+1nf+j6zqu62DXpjSMEhYncRjuRzEtxyPu4uLX2eJkflzPZlUYBoyROGGUDn3f833X9bCDLRaRNIspHbKIDAl5+er1buNHMSq45Wrxsz4alUWaJnHEkoRhbGFsGVCDpjEYKLrRR5aJLFMComXBJs9funxlY+OZBETu/Hy5XJ5W1aQY5ZQQjG1N60OoO9hCFuwP1EZz10QGNHVJEhUVbO/sXL9x6+69222hwa1Wq7o+OjyclmVpO7aiyAhB27J83/UDT+jwnU67KwotvtloNoVO+8u371ev3Vy7s7b5fpObz+fVYcUYAwAoimyahqrKPN9UVRkhJIGeg21d19oC3+JbbYH/8PHT+sNH99cfvH33hqvrejqdTCcTSoae5+4HAYS6LAMgA1VVeqKoqPLeXkfTBhIAYq+79XV74/mLx0+fbH3e+gd19ILGzrX28AAAAABJRU5ErkJggg==","aspectRatio":2.2222222222222223,"src":"/static/3824cfd6f17fe648fc783145a5e8bf8b/e24fb/2020-12-23-cover.png","srcSet":"/static/3824cfd6f17fe648fc783145a5e8bf8b/6d6b7/2020-12-23-cover.png 200w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/d184d/2020-12-23-cover.png 400w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/e24fb/2020-12-23-cover.png 800w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/dbfa5/2020-12-23-cover.png 805w","srcWebp":"/static/3824cfd6f17fe648fc783145a5e8bf8b/b303b/2020-12-23-cover.webp","srcSetWebp":"/static/3824cfd6f17fe648fc783145a5e8bf8b/21c67/2020-12-23-cover.webp 200w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/4b6b9/2020-12-23-cover.webp 400w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/b303b/2020-12-23-cover.webp 800w,\n/static/3824cfd6f17fe648fc783145a5e8bf8b/c2764/2020-12-23-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Apparently, one of the worst things you can wish someone is “may you live in interesting times”. In these interesting times of ours, I…","fields":{"slug":"/optimistic_concurrency_for_pessimistic_times/","prefix":"2020-12-16","langKey":"en"},"frontmatter":{"title":"Optimistic concurrency for pessimistic times","category":"Design Patterns","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AAMBAQ4GBhIJCA8NDQAAAFtbWoqJiXd6eZ6joaaop2FlZAAAAF1eXtHR0RMSEggIBw0NCw4NCxEODBwVFAAWDglyPht8QBtLLBsAAABjYmGpp6eEgoG1s7KuqaiBe3sAAACFhYTJychCQD8EAwEZFBIbFhQqHRs9JCEAFhQTPSgYZzoYRy4aCwsLERIREg8QRjYzSTo4X01LMSAfJRoZNiooKSAgLyYlHRQSJhsbKRwbLRsYNxsXACMYGBAOEA8OECMYGSAWFhALCDgfEi8cGjIcGS8YFTIeHTcfHDogHTwiHy8aFyoeHBgPDTgvLXNtaj06OwBjWVSDgX19fn6EfnlGNDEoGxhSPTVCIBo7JSEtIB8zIiJJOTsoGhcwIiFAPj8XExAeGhl0cXDu7OSzuLoAr66excS4xMS7wsW7f36AdGppkZidV0RJX1BTKyUlOyIkfXOCPy8tVV1mmZ+dXVxbc3p/wMG////37+zmALe2p8nHutPRvqKim4eKj5ymqZuion6Ei5Ofo2hKSncoLcHDzZOKj4iRlqGknZ6lqHuDjp+pu+zs6v778gDCwbHLyrvGxrzCwbGZlo2TnKGUmp6VmZu1v7uOi5SMeIbg5+mboad3e3qysq29ydTJzM2hp7PCw8b///cArqyg0tDCuLu5yMe8raqfkZiZlZ6jrbWztLm1e4efqrzQ8fb0t7q9f4mUwcPF0NrhzNDOxsS98O3i/vv0nwnfk5tmZB8AAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/cca4af5b2b4d996406f3b9a51e0648e1/e24fb/2020-12-16-cover.png","srcSet":"/static/cca4af5b2b4d996406f3b9a51e0648e1/6d6b7/2020-12-16-cover.png 200w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/d184d/2020-12-16-cover.png 400w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/e24fb/2020-12-16-cover.png 800w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/dbfa5/2020-12-16-cover.png 805w","srcWebp":"/static/cca4af5b2b4d996406f3b9a51e0648e1/b303b/2020-12-16-cover.webp","srcSetWebp":"/static/cca4af5b2b4d996406f3b9a51e0648e1/21c67/2020-12-16-cover.webp 200w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/4b6b9/2020-12-16-cover.webp 400w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/b303b/2020-12-16-cover.webp 800w,\n/static/cca4af5b2b4d996406f3b9a51e0648e1/c2764/2020-12-16-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"While explaining the Event Sourcing, bank account balance calculation is a common starting point. I claim that even though it sounds right…","fields":{"slug":"/bank_account_event_sourcing/","prefix":"2020-12-09","langKey":"en"},"frontmatter":{"title":"Why a bank account is not the best example of Event Sourcing?","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAf/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAGjWSVFAsP/xAAZEAADAAMAAAAAAAAAAAAAAAAAAQIDEDH/2gAIAQEAAQUCpk0qoXMWv//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAIDAQAAAAAAAAAAAAAAAAABECFyMf/aAAgBAQAGPwJUNHR5HqP/xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAhMUEQ/9oACAEBAAE/IXsmXY3HlL2PHImgTyn0V5n/2gAMAwEAAgADAAAAEMTf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHhAAAQQCAwEAAAAAAAAAAAAAAQARIUExsVFxgaH/2gAIAQEAAT8QizN3IXE5QMDGAYLINpyWGYPkCsr56x7NKnuyv//Z","aspectRatio":2.2222222222222223,"src":"/static/ae81751d9fe9dfc80addc9dddfbe8667/f8504/2020-12-09-cover.jpg","srcSet":"/static/ae81751d9fe9dfc80addc9dddfbe8667/f137a/2020-12-09-cover.jpg 200w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/8494e/2020-12-09-cover.jpg 400w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/f8504/2020-12-09-cover.jpg 800w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/93f74/2020-12-09-cover.jpg 805w","srcWebp":"/static/ae81751d9fe9dfc80addc9dddfbe8667/b303b/2020-12-09-cover.webp","srcSetWebp":"/static/ae81751d9fe9dfc80addc9dddfbe8667/21c67/2020-12-09-cover.webp 200w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/4b6b9/2020-12-09-cover.webp 400w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/b303b/2020-12-09-cover.webp 800w,\n/static/ae81751d9fe9dfc80addc9dddfbe8667/c2764/2020-12-09-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Did you ever get an offer that someone will pay you for what you are currently doing as a hobby? What would be your decision if that would…","fields":{"slug":"/revolution_now/","prefix":"2020-12-02","langKey":"en"},"frontmatter":{"title":"Revolution now!","category":"Event Sourcing","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAABOklEQVQoz2NgQAXy6io6Vsbh2SkLt07vmVXfP61ixdqp/hFOaroa7JzsDPiBrrFyWJxjYl6MR6hdUlF4cn5AZW2WpYO9qo4aFzdezYyMjCLSUtpm2q5+tnbOqq5+ur6BugV5kSY2Vorqctw8HAQ0q+rImNlrtk1ut7YzEOBnkJZk6WvN3rxusruXNQsLIz7NTMzMAiLcQbHB9d0NJhZaYsKCnEwMFcUJuzdPLStNZGFhIuBnfkmZmNzMmNRgfX0ZEyOlnKyAsvJoM03xSf3VqioKENfh1CwoLVvRURsS5WRnp5ueEZSd65OX49XXWXDi8CoFeWmcmiGiqlo6sxfN2bl34869G6/eODlrXn9BTtysWX0H9q4VFxMioFlTWyczJz0tOyU5MyUo1N/D08XGztbN3dXL25kTI54BSYpVtuW/sfcAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/c29a95cc47e2c1017ed5652a06e4f215/e24fb/2020-12-02-cover.png","srcSet":"/static/c29a95cc47e2c1017ed5652a06e4f215/6d6b7/2020-12-02-cover.png 200w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/d184d/2020-12-02-cover.png 400w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/e24fb/2020-12-02-cover.png 800w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/dbfa5/2020-12-02-cover.png 805w","srcWebp":"/static/c29a95cc47e2c1017ed5652a06e4f215/b303b/2020-12-02-cover.webp","srcSetWebp":"/static/c29a95cc47e2c1017ed5652a06e4f215/21c67/2020-12-02-cover.webp 200w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/4b6b9/2020-12-02-cover.webp 400w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/b303b/2020-12-02-cover.webp 800w,\n/static/c29a95cc47e2c1017ed5652a06e4f215/c2764/2020-12-02-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"“Architects are not needed anymore. Those days are gone!” “We’re agile - we’re not doing waterfall, so we’re not designing upfront.” “We…","fields":{"slug":"/architect_manifesto/","prefix":"2020-11-29","langKey":"en"},"frontmatter":{"title":"Architect Manifesto","category":"Architecture","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAAB/UlEQVQoz4XIS0zTcACA8X/b3b1INBw0ikvEODeawLj4OBhNjGfPGGOMxsREnQkmEgx0rnsIblMZY2NrFmHrHn0O2Nq9uo6tqwtOwG4wAwoefJw4m5j4OOjF3+VLPnBn6LZz2Ibde/zk/pjNMm63WL12t3dsErdgroe4axjHH2CeR65RzH7T679mm7yKOYcw53WH55Z7Gvisz/kglfJFuQCVmIqWYzl5oaSml9NBaiHEsDOJeU9EpcqLouxT13FWsHPiRLb8LF8NNTcB4Q40MrUaX6mnZSmVq3KyQC1WeIkO0cmZaCoQYwlK4SSGF8i1Dvl2g+vshuXXbjYTLFZBioh/bX3URHqn2WlXVxIvn8r55VYp1+an3xSUXJIVyPim8i4jFsXONq2orNqYK5QD/FKq1gAcyXzb2pVmR3a09ytL8ab/hpDObijZrbzjy/ZnLUcV/Hc/tT8wNBt+Rb7wTjmwcX8gQsTipeYasFpHV5NMolsv8UKdJ9Ijl1vtdisSKV46q1XqGu1SJq5839uTihKbINnkfNjvzvLMHDEriALY37UPPdpzAsAmg8FoNHYfPHD+wsWBQ4d7ATh5TD9oOIL2dJ07c9psNptMxoH+fuMpA4qivcf1aF8f+A0Cf4EAgMH/QRCEwDACAPITDEO/8ufACAzpdDrkXzCCID8AWdn92J1pG1kAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/45837c7711a82aa2ac96bb60814dc8fb/e24fb/2020-11-29-cover.png","srcSet":"/static/45837c7711a82aa2ac96bb60814dc8fb/6d6b7/2020-11-29-cover.png 200w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/d184d/2020-11-29-cover.png 400w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/e24fb/2020-11-29-cover.png 800w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/dbfa5/2020-11-29-cover.png 805w","srcWebp":"/static/45837c7711a82aa2ac96bb60814dc8fb/b303b/2020-11-29-cover.webp","srcSetWebp":"/static/45837c7711a82aa2ac96bb60814dc8fb/21c67/2020-11-29-cover.webp 200w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/4b6b9/2020-11-29-cover.webp 400w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/b303b/2020-11-29-cover.webp 800w,\n/static/45837c7711a82aa2ac96bb60814dc8fb/c2764/2020-11-29-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}},{"node":{"excerpt":"Borys had the best dribbling, Cybor bent it like Beckham, there were a few little kids who could pull off 200 keepie-uppies. My class 5B…","fields":{"slug":"/borys_najlepiej_dryblowal/","prefix":"2015-01-31","langKey":"en"},"frontmatter":{"title":"Borys had the best dribbling","category":"Agile","author":"oskar dudycz","cover":{"children":[{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA6/AAAOvwE4BVMkAAACMElEQVQozwElAtr9AIqHi0Y2O08/Q1I+QlxISl1IS3RfW4lwYa2Yjunq6uXl5MrExK6mo3xpYaSalLOurMHCvd7q69fk59Pi6AB3cHM9LDFINjpIMzVQOz1ROTpyW1WGa1yumZDy8/Th4eF8a2FnU0RtVUh1XlBxWkyZiXrl6Off5eXZ4+YARD09OCcqQzE0Qy8xRjIyRzExcVlRhWZZn4t7paibk5KGamFFWE84Yko5bE09a08/n5CB7+/y6+7u4+ruAC8lJjYmKUAvMUAqKkUxL0YwMGpSSoBlV3toUV9cS1xXRlZONkM6LVFAL2VGM2hKN418ZL/Bsrq7sbu4nwArICE2Jic7KSo1KCMwJyA6JihiTUZ1XFFnVURXVzZnZztBNSkyJyQ+LSdVPDBaPjBhSzFDQCduZEKJeEYAPTc6W1NVTjs8LiAfGhQXKB0gSjk1WkJBXUg9bWlAdWxARjcoRzkpSz4uTUIzalVDbltIU0k3d2xCalw8ADw3MTs2MkI2L1BBMUs9MEtBNFhLN09ELF5VNGRXOIR8Q31qQHxpQZp7UJNxTJyJVqGWWpiHU4l9VZGGUwBNSzNOSzJGQSpHRSpRSi9gVjhoVkB4aEqQgFmMeFaaiGGki2qTfFOMbUyScUiTf0Z8a0R0Z05oX0iFf0QASEMqT0ktT0otTkgqUkwqWFIuXFMubGI4dmw/gnZCfnBFj4BMk4RIkYNIj39GmIdIiXxHiIBKhn5DkYdGxSLRQdRt7poAAAAASUVORK5CYII=","aspectRatio":2.2222222222222223,"src":"/static/6e21a74de4be1445cbf4b3b799ab6684/e24fb/2015-01-31-cover.png","srcSet":"/static/6e21a74de4be1445cbf4b3b799ab6684/6d6b7/2015-01-31-cover.png 200w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/d184d/2015-01-31-cover.png 400w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/e24fb/2015-01-31-cover.png 800w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/dbfa5/2015-01-31-cover.png 805w","srcWebp":"/static/6e21a74de4be1445cbf4b3b799ab6684/b303b/2015-01-31-cover.webp","srcSetWebp":"/static/6e21a74de4be1445cbf4b3b799ab6684/21c67/2015-01-31-cover.webp 200w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/4b6b9/2015-01-31-cover.webp 400w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/b303b/2015-01-31-cover.webp 800w,\n/static/6e21a74de4be1445cbf4b3b799ab6684/c2764/2015-01-31-cover.webp 805w","sizes":"(max-width: 800px) 100vw, 800px"}}]}}}}]},"site":{"siteMetadata":{"facebook":{"appId":""}}}},"pageContext":{"slug":"/category/","langKey":"en","originalPath":"/category/","lang":"en"}},
    "staticQueryHashes": ["2742854296"]}