1<!DOCTYPE html> 2<html lang="en" dir="auto" data-theme="auto"> 3 4<head><meta charset="utf-8"> 5<meta http-equiv="X-UA-Compatible" content="IE=edge"> 6<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7<meta name="robots" content="index, follow"> 8<title>Marcin Sztolcman | It's my world!</title> 9<meta name="keywords" content=""> 10<meta name="description" content="Team leader, software architect and developer, sometimes devop. 1136monkeys and Partiklo owner. 12Toys 13 14Sendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world. 15SMTPc is simple SMTP client for easy mail sending using CLI. It’s dedicated for developers, however it’s easy to use and every CLI user will be satisfied using this. 16subst - simple utility to replace one string into another in given list of files. 17versionner - helps manipulating version strings in the project. 18ff - Easily search and process files. 19integresql-client-python - Python client for IntegreSQL 20irename allows to easy rename many files using Your favorite editor. 21hashfile - calculate hash or checksum in many formats. 22more… 23 24More on web"> 25<meta name="author" content="Marcin Sztolcman"> 26<link rel="canonical" href="https://urzenia.net/about/"> 27<link crossorigin="anonymous" href="/assets/css/stylesheet.6ff46447b1fa3f8a5cc0bcae48088decc3ae37f5fbc99406a3aefc3bf0e6044a.css" integrity="sha256-b/RkR7H6P4pcwLyuSAiN7MOuN/X7yZQGo678O/DmBEo=" rel="preload stylesheet" as="style"> 28<link rel="icon" href="https://urzenia.net/favicon.ico"> 29<link rel="icon" type="image/png" sizes="16x16" href="https://urzenia.net/favicon-16x16.png"> 30<link rel="icon" type="image/png" sizes="32x32" href="https://urzenia.net/favicon-32x32.png"> 31<link rel="apple-touch-icon" href="https://urzenia.net/apple-touch-icon.png"> 32<link rel="mask-icon" href="https://urzenia.net/safari-pinned-tab.svg"> 33<meta name="theme-color" content="#2e2e33"> 34<meta name="msapplication-TileColor" content="#2e2e33"> 35<link rel="alternate" hreflang="en" href="https://urzenia.net/about/"> 36<noscript> 37 <style> 38 #theme-toggle, 39 .top-link { 40 display: none; 41 } 42 43 </style> 44 <style> 45 @media (prefers-color-scheme: dark) { 46 :root { 47 --theme: rgb(29, 30, 32); 48 --entry: rgb(46, 46, 51); 49 --primary: rgb(218, 218, 219); 50 --secondary: rgb(155, 156, 157); 51 --tertiary: rgb(65, 66, 68); 52 --content: rgb(196, 196, 197); 53 --code-block-bg: rgb(46, 46, 51); 54 --code-bg: rgb(55, 56, 62); 55 --border: rgb(51, 51, 51); 56 color-scheme: dark; 57 } 58 59 .list { 60 background: var(--theme); 61 } 62 63 .toc { 64 background: var(--entry); 65 } 66 } 67 68 </style> 69</noscript>
70<script> 71 if (localStorage.getItem("pref-theme") === "dark") { 72 document.querySelector("html").dataset.theme = 'dark'; 73 } else if (localStorage.getItem("pref-theme") === "light") { 74 document.querySelector("html").dataset.theme = 'light'; 75 } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { 76 document.querySelector("html").dataset.theme = 'dark'; 77 } else { 78 document.querySelector("html").dataset.theme = 'light'; 79 } 80 81</script>
81<meta name="google-site-verification" content="yOVB8-ZNJLmLSploaFftAqs8MymW8YFeBmYufDy-c_M" /> 82<meta name="p:domain_verify" content="888fe7e3c88e4bac8233ed5653c4c1ce"/> 83<link rel="me" href="https://101010.pl/@msztolcman" /> 84<link rel="me" href="https://pol.social/@msztolcman" /> 85<meta property="og:url" content="https://urzenia.net/about/"> 86 <meta property="og:site_name" content="It's my world!"> 87 <meta property="og:title" content="Marcin Sztolcman"> 88 <meta property="og:description" content="Team leader, software architect and developer, sometimes devop. 8936monkeys and Partiklo owner. 90Toys 91Sendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world. SMTPc is simple SMTP client for easy mail sending using CLI. Itâs dedicated for developers, however itâs easy to use and every CLI user will be satisfied using this. subst - simple utility to replace one string into another in given list of files. versionner - helps manipulating version strings in the project. ff - Easily search and process files. integresql-client-python - Python client for IntegreSQL irename allows to easy rename many files using Your favorite editor. hashfile - calculate hash or checksum in many formats. more⦠More on web"> 92 <meta property="og:locale" content="pl_pl"> 93 <meta property="og:type" content="article"> 94 95 <meta name="twitter:card" content="summary"> 96 <meta name="twitter:title" content="Marcin Sztolcman"> 97 <meta name="twitter:description" content="Team leader, software architect and developer, sometimes devop. 9836monkeys and Partiklo owner. 99Toys 100Sendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world. SMTPc is simple SMTP client for easy mail sending using CLI. Itâs dedicated for developers, however itâs easy to use and every CLI user will be satisfied using this. subst - simple utility to replace one string into another in given list of files. versionner - helps manipulating version strings in the project. ff - Easily search and process files. integresql-client-python - Python client for IntegreSQL irename allows to easy rename many files using Your favorite editor. hashfile - calculate hash or checksum in many formats. more⦠More on web"> 101 102
103<script type="application/ld+json"> 104{ 105 "@context": "https://schema.org", 106 "@type": "BreadcrumbList", 107 "itemListElement": [ 108 { 109 "@type": "ListItem", 110 "position": 1 , 111 "name": "Marcin Sztolcman", 112 "item": "https://urzenia.net/about/" 113 } 114 ] 115} 116</script>
vendor: 1 bytes, line 116
116
117<script type="application/ld+json"> 118{ 119 "@context": "https://schema.org", 120 "@type": "BlogPosting", 121 "headline": "Marcin Sztolcman", 122 "name": "Marcin Sztolcman", 123 "description": "Team leader, software architect and developer, sometimes devop.\n36monkeys and Partiklo owner.\nToys\nSendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world. SMTPc is simple SMTP client for easy mail sending using CLI. It\u0026rsquo;s dedicated for developers, however it\u0026rsquo;s easy to use and every CLI user will be satisfied using this. subst - simple utility to replace one string into another in given list of files. versionner - helps manipulating version strings in the project. ff - Easily search and process files. integresql-client-python - Python client for IntegreSQL irename allows to easy rename many files using Your favorite editor. hashfile - calculate hash or checksum in many formats. more\u0026hellip; More on web\n", 124 "keywords": [ 125 126 ], 127 "articleBody": "Team leader, software architect and developer, sometimes devop.\n36monkeys and Partiklo owner.\nToys\nSendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world. SMTPc is simple SMTP client for easy mail sending using CLI. Itâs dedicated for developers, however itâs easy to use and every CLI user will be satisfied using this. subst - simple utility to replace one string into another in given list of files. versionner - helps manipulating version strings in the project. ff - Easily search and process files. integresql-client-python - Python client for IntegreSQL irename allows to easy rename many files using Your favorite editor. hashfile - calculate hash or checksum in many formats. more⦠More on web\n36monkeys Partiklo Mastodon: @[email protected] PixelFed: pixel.pol.social/msztolcman Photo Stream LinkedIn ", 128 "wordCount" : "152", 129 "inLanguage": "en", 130 "datePublished": "0001-01-01T00:00:00Z", 131 "dateModified": "0001-01-01T00:00:00Z", 132 "author":{ 133 "@type": "Person", 134 "name": "Marcin Sztolcman" 135 }, 136 "mainEntityOfPage": { 137 "@type": "WebPage", 138 "@id": "https://urzenia.net/about/" 139 }, 140 "publisher": { 141 "@type": "Organization", 142 "name": "It's my world!", 143 "logo": { 144 "@type": "ImageObject", 145 "url": "https://urzenia.net/favicon.ico" 146 } 147 } 148} 149</script>
149 150</head> 151<body id="top"> 152 <header class="header"> 153 <nav class="header-nav"> 154 <div class="logo"> 155 <a href="https://urzenia.net/" accesskey="h" title="It's my world! (Alt + H)">It's my world!</a> 156 <div class="logo-switches"> 157 <button id="theme-toggle" class="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme"> 158 <svg class="moon" xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" 159 fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" 160 stroke-linejoin="round"> 161 <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path> 162 </svg> 163 <svg class="sun" xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" 164 fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" 165 stroke-linejoin="round"> 166 <circle cx="12" cy="12" r="5"></circle> 167 <line x1="12" y1="1" x2="12" y2="3"></line> 168 <line x1="12" y1="21" x2="12" y2="23"></line> 169 <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> 170 <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> 171 <line x1="1" y1="12" x2="3" y2="12"></line> 172 <line x1="21" y1="12" x2="23" y2="12"></line> 173 <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> 174 <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> 175 </svg> 176 </button> 177 </div> 178 </div> 179 <ul id="menu" class="menu"> 180 <li> 181 <a href="https://urzenia.net/" title="Home"> 182 <span>Home</span> 183 </a> 184 </li> 185 <li> 186 <a href="https://urzenia.net/tags/" title="Tags"> 187 <span>Tags</span> 188 </a> 189 </li> 190 <li> 191 <a href="https://urzenia.net/about/" title="About"> 192 <span class="active">About</span> 193 </a> 194 </li> 195 </ul> 196 </nav> 197</header> 198<main class="main"> 199 200<article class="post-single"> 201 <header class="post-header"> 202 203 <h1 class="post-title entry-hint-parent"> 204 Marcin Sztolcman 205 </h1> 206 <div class="post-meta"> 207 208<span>1 min</span> · <span>Marcin Sztolcman</span> 209 210</div> 211 </header> 212 <div class="post-content md-content"><p>Team leader, software architect and developer, sometimes devop.</p> 213<p><a href="https://36monkeys.com/">36monkeys</a> and <a href="https://partiklo.eu">Partiklo</a> owner.</p> 214<p>Toys</p> 215<ul> 216<li><a href="https://github.com/msztolcman/sendria">Sendria</a> (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world.</li> 217<li><a href="https://github.com/msztolcman/smtpc/">SMTPc</a> is simple SMTP client for easy mail sending using CLI. It’s dedicated for developers, however it’s easy to use and every CLI user will be satisfied using this.</li> 218<li><a href="https://msztolcman.github.io/subst/">subst</a> - simple utility to replace one string into another in given list of files.</li> 219<li><a href="https://msztolcman.github.io/versionner/">versionner</a> - helps manipulating version strings in the project.</li> 220<li><a href="https://msztolcman.github.io/ff/">ff</a> - Easily search and process files.</li> 221<li><a href="https://github.com/msztolcman/integresql-client-python/">integresql-client-python</a> - Python client for <a href="https://github.com/allaboutapps/integresql">IntegreSQL</a></li> 222<li><a href="https://msztolcman.github.io/irename/">irename</a> allows to easy rename many files using Your favorite editor.</li> 223<li><a href="https://msztolcman.github.io/hashfile/">hashfile</a> - calculate hash or checksum in many formats.</li> 224<li><a href="https://github.com/msztolcman">more</a>…</li> 225</ul> 226<p>More on web</p> 227<ul> 228<li><a href="https://36monkeys.com/">36monkeys</a></li> 229<li><a href="https://partiklo.eu/">Partiklo</a></li> 230<li>Mastodon: <a href="https://pol.social/@msztolcman/">@<span class="__cf_email__" data-cfemail="cfa2bcb5bba0a3aca2aea18fbfa0a3e1bca0aca6aea3">[email protected]</span></a></li> 231<li>PixelFed: <a href="https://pixel.pol.social/msztolcman">pixel.pol.social/msztolcman</a></li> 232<li><a href="https://sztolcman.eu/">Photo Stream</a></li> 233<li><a href="https://www.linkedin.com/in/sztolcman">LinkedIn</a></li> 234</ul> 235 236 237 </div> 238 239 <footer class="post-footer"> 240 <ul class="post-tags"> 241 </ul> 242 </footer><div id="cusdis_thread"
243 data-host="https://cusdis.com" 244 data-app-id="eabf43fe-cca0-4282-a43e-3cf52d269d62" 245 data-page-id="https://urzenia.net/about/" 246 data-page-url="https://urzenia.net/about/" 247 data-page-title="Marcin Sztolcman" 248 data-theme="dark" 249></div>
vendor: 109 bytes, lines 249-250
249 250<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
250<script async defer src="https://cusdis.com/js/cusdis.es.js"></script>
250 251 252<div id="cusdis_thread" 253 data-host="https://cusdis.com" 254 data-app-id="eabf43fe-cca0-4282-a43e-3cf52d269d62" 255 data-page-id="https://urzenia.net/about/" 256 data-page-url="https://urzenia.net/about/" 257 data-page-title="Marcin Sztolcman" 258 data-theme="dark" 259></div>
260<script async defer src="https://cusdis.com/js/cusdis.es.js"></script>
260 261
262<script> 263 const cusdisObserver = new MutationObserver((mutations) => { 264 mutations.forEach((mutation) => { 265 if (mutation.addedNodes.length === 0) return; 266 const iframe = mutation.addedNodes[0]; 267 if (!iframe || iframe.tagName !== 'IFRAME') return; 268 269 const customCSS = ` 270 /* TÅo dopasowane do PaperMod dark */ 271 .dark { background: #1d1e20 !important; } 272 #cusdis .dark { background: #1d1e20 !important; } 273 274 /* Teksty */ 275 .dark, .dark p, .dark span, .dark label { 276 color: #d4d4d4 !important; 277 } 278 279 /* Pole tekstowe */ 280 .dark textarea, .dark input[type="text"], .dark input[type="email"] { 281 background: #2a2b2d !important; 282 border-color: #444 !important; 283 color: #d4d4d4 !important; 284 border-radius: 4px !important; 285 } 286 .dark textarea:focus, .dark input:focus { 287 border-color: #888 !important; 288 outline: none !important; 289 } 290 291 /* Przycisk Send */ 292 .dark button[type="submit"] { 293 background: #555 !important; 294 color: #fff !important; 295 border: none !important; 296 border-radius: 4px !important; 297 cursor: pointer !important; 298 } 299 .dark button[type="submit"]:hover { 300 background: #777 !important; 301 } 302 303 /* Pojedynczy komentarz */ 304 .dark .comment-container { 305 border-color: #333 !important; 306 } 307 308 /* Nazwa autora */ 309 .dark .by-line { 310 color: #aaa !important; 311 } 312 `; 313
314 iframe.srcdoc = iframe.srcdoc.replace('</style>', customCSS + '</style>'); 315 }); 316 }); 317 318 cusdisObserver.observe(document.getElementById('cusdis_thread'), { 319 childList: true, 320 subtree: true 321 }); 322 323 document.addEventListener('DOMContentLoaded', function() { 324 var frameObserver = new MutationObserver(function() { 325 var iframe = document.querySelector('#cusdis_thread iframe'); 326 if (!iframe) return; 327 frameObserver.disconnect(); 328 iframe.setAttribute('scrolling', 'no'); 329 iframe.style.overflow = 'hidden'; 330 iframe.style.width = '100%'; 331 332 function resizeIframe() { 333 try { 334 var height = iframe.contentWindow.document.body.scrollHeight; 335 if (height && height > 50) iframe.style.height = height + 'px'; 336 } catch(e) {} 337 } 338 setInterval(resizeIframe, 300); 339 340 iframe.addEventListener('load', function() { 341 iframe.setAttribute('scrolling', 'no'); 342 iframe.style.overflow = 'hidden'; 343 setTimeout(resizeIframe, 200); 344 }); 345 346 window.addEventListener('message', function(e) { 347 if (e.origin !== 'https://cusdis.com') return; 348 var h = e.data && (e.data.height || e.data.scrollHeight || e.data); 349 if (typeof h === 'number' && h > 50) iframe.style.height = h + 'px'; 350 }); 351 }); 352 frameObserver.observe(document.getElementById('cusdis_thread'), { childList: true, subtree: true }); 353 }); 354</script>
354 355 356 357</article> 358 </main> 359 360<footer class="footer"> 361 <span>© 2026 <a href="https://urzenia.net/">It's my world!</a></span> · 362 363 364 365 <span> 366 Powered by 367 <a href="https://gohugo.io/?utm_source=papermod" rel="noopener" target="_blank">Hugo</a> & 368 <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a> 369 </span> 370</footer> 371<a href="#top" id="top-link" class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey="g"> 372 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 373 stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"> 374 <polyline points="17 11 12 6 7 11"></polyline> 375 <polyline points="17 18 12 13 7 18"></polyline> 376 </svg> 377</a> 378
379<script> 380 let menu = document.getElementById('menu'); 381 if (menu) { 382 383 const scrollPosition = localStorage.getItem("menu-scroll-position"); 384 if (scrollPosition) { 385 menu.scrollLeft = parseInt(scrollPosition, 10); 386 } 387 388 menu.onscroll = function () { 389 localStorage.setItem("menu-scroll-position", menu.scrollLeft); 390 } 391 } 392 393 document.querySelectorAll('a[href^="#"]').forEach(anchor => { 394 anchor.addEventListener("click", function (e) { 395 e.preventDefault(); 396 var id = this.getAttribute("href").substr(1); 397 if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) { 398 document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({ 399 behavior: "smooth" 400 }); 401 } else { 402 document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView(); 403 } 404 if (id === "top") { 405 history.replaceState(null, null, " "); 406 } else { 407 history.pushState(null, null, `#${id}`); 408 } 409 }); 410 }); 411 412</script>
vendor: 1 bytes, line 412
412
413<script> 414 var toplink = document.getElementById("top-link"); 415 window.onscroll = function () { 416 const scrollThreshold = window.innerHeight; 417 if (document.body.scrollTop > scrollThreshold || document.documentElement.scrollTop > scrollThreshold) { 418 toplink.classList.remove("hidden"); 419 } else { 420 toplink.classList.add("hidden"); 421 } 422 }; 423 424</script>
vendor: 1 bytes, line 424
424
425<script> 426 document.getElementById("theme-toggle").addEventListener("click", () => { 427 const html = document.querySelector("html"); 428 if (html.dataset.theme === "dark") { 429 html.dataset.theme = 'light'; 430 localStorage.setItem("pref-theme", 'light'); 431 } else { 432 html.dataset.theme = 'dark'; 433 localStorage.setItem("pref-theme", 'dark'); 434 } 435 }) 436 437</script>
vendor: 1 bytes, line 437
437
438<script> 439 document.querySelectorAll('pre > code').forEach((codeblock) => { 440 const container = codeblock.parentNode.parentNode; 441 442 const copybutton = document.createElement('button'); 443 copybutton.classList.add('copy-code'); 444 copybutton.innerHTML = 'copy'; 445 446 function copyingDone() { 447 copybutton.innerHTML = 'copied!'; 448 setTimeout(() => { 449 copybutton.innerHTML = 'copy'; 450 }, 2000); 451 } 452 453 copybutton.addEventListener('click', (cb) => { 454 if ('clipboard' in navigator) { 455 navigator.clipboard.writeText(codeblock.textContent); 456 copyingDone(); 457 return; 458 } 459 460 const range = document.createRange(); 461 range.selectNodeContents(codeblock); 462 const selection = window.getSelection(); 463 selection.removeAllRanges(); 464 selection.addRange(range); 465 try { 466 document.execCommand('copy'); 467 copyingDone(); 468 } catch (e) { }; 469 selection.removeRange(range); 470 }); 471 472 if (container.classList.contains("highlight")) { 473 container.appendChild(copybutton); 474 } else if (container.parentNode.firstChild == container) { 475 476 } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") { 477 478 codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton); 479 } else { 480 481 codeblock.parentNode.appendChild(copybutton); 482 } 483 }); 484</script>
vendor: 1 bytes, line 484
484
485<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"f532191458864c8084dae4127f6323d4","r":1,"spa":2}' crossorigin="anonymous"></script>
485 486</body> 487 488</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.