PageSourceSearch

https://urzenia.net/about/

html urzenia.net collected 2026-09-25 20:42:26 UTC 22,554 bytes, 488 lines download raw bytes

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&#39;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&rsquo;s dedicated for developers, however it&rsquo;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&hellip;
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&#39;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&#39;s my world! (Alt + H)">It&#39;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>&nbsp;·&nbsp;<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&rsquo;s dedicated for developers, however it&rsquo;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>&hellip;</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&#160;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>&copy; 2026 <a href="https://urzenia.net/">It&#39;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.