PageSourceSearch

https://arkadiuszchmura.com/

html arkadiuszchmura.com collected 2026-10-08 10:30:25 UTC 41,653 bytes, 81 lines download raw bytes

1<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.135.0"><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Arkadiusz Chmura</title>
2<meta name=description content><meta name=author content><link rel=canonical href=https://arkadiuszchmura.com/><link crossorigin=anonymous href=/assets/css/stylesheet.min.e3c510e7f6e31768ab67de3a6e99624800311d1e456b449249b149b07d3f1d65.css integrity="sha256-48UQ5/bjF2irZ946bpliSAAxHR5Fa0SSSbFJsH0/HWU=" rel="preload stylesheet" as=style><link rel=icon href=https://arkadiuszchmura.com/favicon.ico><link rel=apple-touch-icon href=https://arkadiuszchmura.com/apple-touch-icon.png><link rel=alternate type=application/rss+xml href=https://arkadiuszchmura.com/index.xml><link rel=alternate type=application/json href=https://arkadiuszchmura.com/index.json><link rel=alternate hreflang=en href=https://arkadiuszchmura.com/>
vendor: 63 bytes, line 2
2<script async src="https://www.googletagmanager.com/gtag/js?id=
2G-9BS720SLJB
vendor: 11 bytes, line 2
2"></script>
2<script>var dnt,doNotTrack=!1;if(!1&&(dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack,doNotTrack=dnt=="1"||dnt=="yes"),!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-9BS720SLJB")}</script>
2<meta name=twitter:title content="Arkadiusz Chmura"><meta name=twitter:description content><meta property="og:title" content="Arkadiusz Chmura"><meta property="og:description" content><meta property="og:type" content="website"><meta property="og:url" content="https://arkadiuszchmura.com/"><meta property="og:site_name" content="Arkadiusz Chmura">
2<script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"Arkadiusz Chmura","url":"https://arkadiuszchmura.com/","description":"","thumbnailUrl":"https://arkadiuszchmura.com/favicon.ico","sameAs":["https://github.com/ClouddJR/","https://twitter.com/ClouddJR/","https://arkadiuszchmura.com/index.xml"]}</script>
2<link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel=stylesheet><noscript><style>#theme-toggle,.top-link{display:none}</style></noscript></head><body class="list-page type-page kind-home layout-" id=top>
2<script data-no-instant>function switchTheme(e){switch(e){case"light":document.body.classList.remove("dark");break;case"dark":document.body.classList.add("dark");break;default:window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")}}function isDarkTheme(){return document.body.className.includes("dark")}function getPrefTheme(){return localStorage.getItem("pref-theme")}function setPrefTheme(e){switchTheme(e),localStorage.setItem("pref-theme",e)}const toggleThemeCallbacks={};toggleThemeCallbacks.main=e=>{setPrefTheme(e?"light":"dark")},window.addEventListener("toggle-theme",function(){const e=isDarkTheme();for(const t in toggleThemeCallbacks)toggleThemeCallbacks[t](e)});function toggleThemeListener(){window.dispatchEvent(new CustomEvent("toggle-theme"))}</script>
2<script>(function(){const t="light",e=getPrefTheme(),n=e||t;switchTheme(n)})()</script>
2<header class=header><nav class=nav><div class=logo><a href=https://arkadiuszchmura.com/ accesskey=h title="Arkadiusz Chmura (Alt + H)">Arkadiusz Chmura</a>
3<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://arkadiuszchmura.com/archive/ title=Archive>Archive</a></li><li><a href=https://arkadiuszchmura.com/search/ title="Search (Alt + /)" data-no-instant accesskey=/>Search</a></li></ul></nav></header><main class=main><article class="first-entry home-info"><header class=entry-header><h1>Hi! 👋</h1></header><section class=entry-content><p>I&rsquo;m Arkadiusz, a Software Engineer from Poland.</p><p>This blog will serve as my <em><a href=https://www.oreilly.com/library/view/the-pragmatic-programmer/9780135956977/f_0041.xhtml>engineering daybook</a>.</em></p><p>I will be sharing my thoughts and things I learn along the way.</p></section><footer class=entry-footer><div class=social-icons><a href=https://github.com/ClouddJR/ target=_blank rel="noopener noreferrer me" title=Github><svg viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37.0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg>
4</a><a href=https://twitter.com/ClouddJR/ target=_blank rel="noopener noreferrer me" title=Twitter><svg viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9.0 01-3.14 1.53 4.48 4.48.0 00-7.86 3v1A10.66 10.66.0 013 4s-4 9 5 13a11.64 11.64.0 01-7 2c9 5 20 0 20-11.5a4.5 4.5.0 00-.08-.83A7.72 7.72.0 0023 3z"/></svg>
5</a><a href=https://arkadiuszchmura.com/index.xml target=_blank rel="noopener noreferrer me" title=Rss><svg viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg></a></div></footer></article><article class=post-entry><header class=entry-header><h2>Things I learned while building a yt-dlp wrapper</h2></header><section class=entry-content><p>An opportunity to learn new things is a great reason to pursue side project.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
6<span>October 10, 2024</span></span><span class=meta-item>
7<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
8<span>5 min</span></span></footer><a class=entry-link aria-label="post link to Things I learned while building a yt-dlp wrapper" href=https://arkadiuszchmura.com/posts/things-i-learned-while-building-a-yt-dlp-wrapper/></a></article>
8<article class=post-entry><header class=entry-header><h2>Optimizing your workflow does matter in the long run</h2></header><section class=entry-content><p>Having your environment tailored to you and the way you work can save you from context switching, losing focus, reaching for your mouse, or simply wasting time.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
9<span>November 5, 2023</span></span><span class=meta-item>
10<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
11<span>6 min</span></span></footer><a class=entry-link aria-label="post link to Optimizing your workflow does matter in the long run" href=https://arkadiuszchmura.com/posts/optimizing-your-workflow-does-matter-in-the-long-run/></a></article><article class=post-entry><header class=entry-header><h2>Accessing cheatsheets from the command line</h2></header><section class=entry-content><p>The cheat.sh utility allows you to access a lot of comprehensive, community-driven cheatsheets for many popular tools.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
12<span>October 8, 2023</span></span><span class=meta-item>
13<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
14<span>2 min</span></span></footer><a class=entry-link aria-label="post link to Accessing cheatsheets from the command line" href=https://arkadiuszchmura.com/posts/accessing-cheatsheets-from-the-command-line/></a></article><article class=post-entry><header class=entry-header><h2>Making the most of GitHub Code Search</h2></header><section class=entry-content><p>The new search engine offers powerful code searching mechanisms we can leverage for quickly finding the code we need, as well as for exploration and learning.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
15<span>September 30, 2023</span></span><span class=meta-item>
16<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
17<span>6 min</span></span></footer><a class=entry-link aria-label="post link to Making the most of GitHub Code Search" href=https://arkadiuszchmura.com/posts/making-the-most-of-github-code-search/></a></article>
17<article class=post-entry><header class=entry-header><h2>Switching between apps using shortcuts on macOS</h2></header><section class=entry-content><p>This is one of the most common activities when working on a computer. To make it as seamless as possible, I assigned a custom shortcut for every app I commonly use.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
18<span>August 22, 2023</span></span><span class=meta-item>
19<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
20<span>4 min</span></span></footer><a class=entry-link aria-label="post link to Switching between apps using shortcuts on macOS" href=https://arkadiuszchmura.com/posts/switching-between-apps-using-shortcuts-on-macos/></a></article><article class=post-entry><header class=entry-header><h2>Stop perfecting your config</h2></header><section class=entry-content><p>It’s never going to be perfect anyway. Learn to accept the “good enough” and move on to more meaningful things.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
21<span>July 21, 2023</span></span><span class=meta-item>
22<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
23<span>7 min</span></span></footer><a class=entry-link aria-label="post link to Stop perfecting your config" href=https://arkadiuszchmura.com/posts/stop-perfecting-your-config/></a></article><article class=post-entry><header class=entry-header><h2>How to dynamically change UIStackView axis</h2></header><section class=entry-content><p>Let’s see how we can change the axis from horizontal to vertical once the elements no longer fit the screen properly.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
24<span>June 30, 2023</span></span><span class=meta-item>
25<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
26<span>4 min</span></span></footer><a class=entry-link aria-label="post link to How to dynamically change UIStackView axis" href=https://arkadiuszchmura.com/posts/how-to-dynamically-change-uistackview-axis/></a></article><article class=post-entry><header class=entry-header><h2>How to setup comments on your static blog</h2></header><section class=entry-content><p>With a tool called utterances, it’s very easy to add comments to your website with minimal code and n
26o need for a database.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
27<span>May 30, 2023</span></span><span class=meta-item>
28<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
29<span>4 min</span></span></footer><a class=entry-link aria-label="post link to How to setup comments on your static blog" href=https://arkadiuszchmura.com/posts/how-to-setup-comments-on-your-static-blog/></a></article><article class=post-entry><header class=entry-header><h2>How to make expandable text with a button in Jetpack Compose</h2></header><section class=entry-content><p>In this post I will show you how to make an expandable text controlled by a button using Jetpack Compose.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
30<span>April 28, 2023</span></span><span class=meta-item>
31<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
32<span>5 min</span></span></footer><a class=entry-link aria-label="post link to How to make expandable text with a button in Jetpack Compose" href=https://arkadiuszchmura.com/posts/how-to-make-expandable-text-with-a-button-in-jetpack-compose/></a></article><article class=post-entry><header class=entry-header><h2>How to create factories for models with polymorphic relationships in Laravel</h2></header><section class=entry-content><p>Factories for these models are a bit trickier to implement than the standard ones.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
33<span>March 29, 2023</span></span><span class=meta-item>
34<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
35<span>3 min</span></span></footer><a class=entry-link aria-label="post link to How to create factories for models with polymorphic relationships in Laravel" href=https://arkadiuszchmura.com/posts/how-to-create-factories-for-models-with-polymorphic-relationships-in-laravel/></a></article><article class=post-entry><header class=entry-header><h2>Inline functions in Kotlin</h2></header><section class=entry-content><p>A comprehensive guide to inline functions, covering their purpose, practical examples, and tips for when to use or avoid them.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
36<span>February 23, 2023</span></span><span class=meta-item>
37<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
38<span>11 min</span></span></footer><a class=entry-link aria-label="post link to Inline functions in Kotlin" href=https://arkadiuszchmura.com/posts/inline-functions-in-kotlin/></a></article>
38<article class=post-entry><header class=entry-header><h2>How to fix the invalid JDK problem on Electric Eel</h2></header><section class=entry-content><p>When updating Android Studio to Electric Eel, the location of the embedded JDK is changing.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
39<span>January 20, 2023</span></span><span class=meta-item>
40<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
41<span>2 min</span></span></footer><a class=entry-link aria-label="post link to How to fix the invalid JDK problem on Electric Eel" href=https://arkadiuszchmura.com/posts/how-to-fix-the-invalid-jdk-problem-on-electric-eel/></a></article><article class=post-entry><header class=entry-header><h2>Be careful when converting Flow to LiveData</h2></header><section class=entry-content><p>LiveData created this way will only emit data when it has active observers.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
42<span>December 31, 2022</span></span><span class=meta-item>
43<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
44<span>5 min</span></span></footer><a class=entry-link aria-label="post link to Be careful when converting Flow to LiveData" href=https://arkadiuszchmura.com/posts/be-careful-when-converting-flow-to-livedata/></a></article><article class=post-entry><header class=entry-header><h2>Managing dotfiles with GitHub</h2></header><section class=entry-content><p>This post will describe how I store and manage my dotfiles in a repository on GitHub.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
45<span>November 30, 2022</span></span><span class=meta-item>
46<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
47<span>4 min</span></span></footer><a class=entry-link aria-label="post link to Managing dotfiles with GitHub" href=https://arkadiuszchmura.com/posts/managing-dotfiles-with-github/></a></article><article class=post-entry><header class=entry-header><h2>How to draw content behind system bars in Jetpack Compose</h2></header><section class=entry-content><p>It’s a typical use case, but it’s hard to find a concrete example in the documentation.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
48<span>October 31, 2022</span></span><span class=meta-item>
49<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
50<span>5 min</span></span></footer><a class=entry-link aria-label="post link to How to draw content behind system bars in Jetpack Compose" href=https://arkadiuszchmura.com/posts/how-to-draw-content-behind-system-bars-in-jetpack-compose/></a></article>
50<article class=post-entry><header class=entry-header><h2>How to test intermediate steps in suspending functions</h2></header><section class=entry-content><p>Testing the final result of a suspending function is easy, but what about verifying what happens inside it during the execution?</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
51<span>September 30, 2022</span></span><span class=meta-item>
52<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
53<span>6 min</span></span></footer><a class=entry-link aria-label="post link to How to test intermediate steps in suspending functions" href=https://arkadiuszchmura.com/posts/how-to-test-intermediate-steps-in-suspending-functions/></a></article><article class=post-entry><header class=entry-header><h2>What is the difference between size and viewport size in vector drawables?</h2></header><section class=entry-content><p>It always puzzled me so I decided to find out how are these things different.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
54<span>August 31, 2022</span></span><span class=meta-item>
55<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
56<span>4 min</span></span></footer><a class=entry-link aria-label="post link to What is the difference between size and viewport size in vector drawables?" href=https://arkadiuszchmura.com/posts/what-is-the-difference-between-size-and-viewport-size-in-vector-drawables/></a></article><article class=post-entry><header class=entry-header><h2>How to change system bar colors using Jetpack Compose</h2></header><section class=entry-content><p>System bar colors can be changed directly with Compose, without a need to modify any XML files.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
57<span>July 20, 2022</span></span><span class=meta-item>
58<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
59<span>4 min</span></span></footer><a class=entry-link aria-label="post link to How to change system bar colors using Jetpack Compose" href=https://arkadiuszchmura.com/posts/how-to-change-system-bar-colors-in-compose/></a></article>
59<article class=post-entry><header class=entry-header><h2>How Twitter handled personalized timelines for their users</h2></header><section class=entry-content><p>The approach described here might be useful to you if your application has some sort of a personalized feed for each user.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
60<span>June 28, 2022</span></span><span class=meta-item>
61<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
62<span>5 min</span></span></footer><a class=entry-link aria-label="post link to How Twitter handled personalized timelines for their users" href=https://arkadiuszchmura.com/posts/how-twitter-handled-personalized-timelines-for-their-users/></a></article><article class=post-entry><header class=entry-header><h2>How to display responsive images from Laravel-medialibrary in Vue.js</h2></header><section class=entry-content><p>It’s easy to do in a Blade file, but what about a Vue component?</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
63<span>May 29, 2022</span></span><span class=meta-item>
64<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
65<span>3 min</span></span></footer><a class=entry-link aria-label="post link to How to display responsive images from Laravel-medialibrary in Vue.js" href=https://arkadiuszchmura.com/posts/how-to-display-responsive-image-from-laravel-medialibrary-in-vue-js/></a></article><article class=post-entry><header class=entry-header><h2>How ViewModels survive configuration changes</h2></header><section class=entry-content><p>Let’s explore their implementation details to see how they achieve this.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
66<span>April 26, 2022</span></span><span class=meta-item>
67<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
68<span>11 min</span></span></footer><a class=entry-link aria-label="post link to How ViewModels survive configuration changes" href=https://arkadiuszchmura.com/posts/how-viewmodels-survive-configuration-changes/></a></article>
68<article class=post-entry><header class=entry-header><h2>My key takeaways from The Pragmatic Programmer</h2></header><section class=entry-content><p>In this blog post, I list things that resonate with me most after reading this book.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
69<span>March 20, 2022</span></span><span class=meta-item>
70<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
71<span>20 min</span></span></footer><a class=entry-link aria-label="post link to My key takeaways from The Pragmatic Programmer" href=https://arkadiuszchmura.com/posts/my-key-takeaways-from-the-pragmatic-programmer/></a></article><article class=post-entry><header class=entry-header><h2>Do not change the package name or class name of your AppWidgetProvider</h2></header><section class=entry-content><p>If you do this, widgets that were placed on the home screen by your users will simply disappear.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
72<span>February 22, 2022</span></span><span class=meta-item>
73<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
74<span>5 min</span></span></footer><a class=entry-link aria-label="post link to Do not change the package name or class name of your AppWidgetProvider" href=https://arkadiuszchmura.com/posts/do-not-change-the-package-name-or-class-name-of-your-app-widget-provider/></a></article><article class=post-entry><header class=entry-header><h2>How to reliably update widgets on Android</h2></header><section class=entry-content><p>The default solution with android:updatePeriodMillis doesn’t always work.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
75<span>February 12, 2022</span></span><span class=meta-item>
76<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
77<span>4 min</span></span></footer><a class=entry-link aria-label="post link to How to reliably update widgets on Android" href=https://arkadiuszchmura.com/posts/how-to-reliably-update-widgets-on-android/></a></article><article class=post-entry><header class=entry-header><h2>Beware of the order of operands in some Kotlin Collection operations</h2></header><section class=entry-content><p>The order of operands can drastically affect the performance of your co
77de.</p></section><footer class=entry-footer><span class=meta-item><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar" style="user-select:text"><rect x="3" y="4" width="18" height="18" rx="2" ry="2" style="user-select:text"/><line x1="16" y1="2" x2="16" y2="6" style="user-select:text"/><line x1="8" y1="2" x2="8" y2="6" style="user-select:text"/><line x1="3" y1="10" x2="21" y2="10" style="user-select:text"/></svg>
78<span>February 1, 2022</span></span><span class=meta-item>
79<svg width="24" height="24" viewBox="0 0 24 24" stroke="currentcolor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><circle cx="12" cy="12" r="9"/><polyline points="12 7 12 12 15 15"/></svg>
80<span>6 min</span></span></footer><a class=entry-link aria-label="post link to Beware of the order of operands in some Kotlin Collection operations" href=https://arkadiuszchmura.com/posts/beware-of-the-order-of-operands-in-some-kotlin-collection-operations/></a></article></main><footer class=footer><span></span>
81<span>&copy; 2024 <a href=https://arkadiuszchmura.com/>Arkadiusz Chmura</a></span></footer>
81<script>(function(){const t=""=="1";if(t)return;let e=document.getElementById("theme-toggle");e.removeEventListener("click",toggleThemeListener),e.addEventListener("click",toggleThemeListener)})()</script>
81<script>(function(){let e=document.getElementById("menu");e&&(e.scrollLeft=localStorage.getItem("menu-scroll-position"),e.onscroll=function(){localStorage.setItem("menu-scroll-position",e.scrollLeft)});const t=""=="1",n=""=="1";if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||t||n)return;document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})})()</script>
81<script>if(window.scrollListeners)for(const e of scrollListeners)window.removeEventListener("scroll",e);window.scrollListeners=[]</script>
81<script src=/js/medium-zoom.min.js data-no-instant></script>
81</body></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.