<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title></title>
    <link rel="self" type="application/atom+xml" href="https://urmaul.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://urmaul.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-15T00:00:00+00:00</updated>
    <id>https://urmaul.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Linkdump #4</title>
        <published>2026-04-15T00:00:00+00:00</published>
        <updated>2026-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/linkdump-4/"/>
        <id>https://urmaul.com/blog/linkdump-4/</id>
        
        <summary type="html">&lt;p&gt;Fourth set of links. This one took some time to collect and some links date quickly but I think they&#x27;re still nice.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Can we have &quot;Public Money, Public Code&quot;?</title>
        <published>2026-03-13T00:00:00+00:00</published>
        <updated>2026-03-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/public-money-public-code/"/>
        <id>https://urmaul.com/blog/public-money-public-code/</id>
        
        <summary type="html">&lt;p&gt;Free Software Foundation Europe is promoting the idea of “&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;publiccode.eu&#x2F;en&#x2F;&quot;&gt;Public Money, Public Code&lt;&#x2F;a&gt;”. It is simple: if everyone paid for the software, it should benefit everyone. To enforce it, we need a law that allows spending the taxpayers’ money only on the open-source software.&lt;&#x2F;p&gt;
&lt;p&gt;This post is me trying to understand, how realistic it is to have this law.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Linkdump #3</title>
        <published>2026-02-03T00:00:00+00:00</published>
        <updated>2026-02-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/linkdump-3/"/>
        <id>https://urmaul.com/blog/linkdump-3/</id>
        
        <summary type="html">&lt;p&gt;A third collection of interesting links. This one has a big share of posts on how to work as a Software Engineer.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Generating Short URLs One Character at a Time</title>
        <published>2025-12-24T00:00:00+00:00</published>
        <updated>2025-12-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/url-shortener/"/>
        <id>https://urmaul.com/blog/url-shortener/</id>
        
        <summary type="html">&lt;p&gt;I came up with a non-bad approach for making URL shorteners.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Linkdump #2</title>
        <published>2025-12-16T00:00:00+00:00</published>
        <updated>2025-12-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/linkdump-2/"/>
        <id>https://urmaul.com/blog/linkdump-2/</id>
        
        <summary type="html">&lt;p&gt;A second collection of links I found interesting recently. Many of these are stories on how AI can fail, how humans can fail, and how organizations can fail.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Where to Get Custom Emojis for Slack</title>
        <published>2025-12-12T00:00:00+00:00</published>
        <updated>2025-12-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/custom-emojis/"/>
        <id>https://urmaul.com/blog/custom-emojis/</id>
        
        <summary type="html">&lt;p&gt;Want to pimp up your Slack with custom emojis? Check out these services.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Blog Updates and Dirty Tricks</title>
        <published>2025-12-06T00:00:00+00:00</published>
        <updated>2025-12-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/blog-updates-and-dirty-tricks/"/>
        <id>https://urmaul.com/blog/blog-updates-and-dirty-tricks/</id>
        
        <summary type="html">&lt;p&gt;In this post you’ll find some recent blog updates (boring), dirty tricks to achieve them (interesting), and unreasonable amounts of praise to &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; (deserved). It might be useful if you’re hosting a blog too.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>AI Augmented Scala, my Takeaways</title>
        <published>2025-12-01T00:00:00+00:00</published>
        <updated>2025-12-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/ai-augmented-scala/"/>
        <id>https://urmaul.com/blog/ai-augmented-scala/</id>
        
        <summary type="html">&lt;p&gt;I have recently attended the “AI Augmented Scala” workshop from &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;virtuslab.com&#x2F;&quot;&gt;VirtusLab&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Short review: great. I was skeptical at first, expecting it to be another evangelism from the church of AI overlords. But, no, they started the talks with pointing out what AI cannot do. This way, they gained my trust and made an impression it&#x27;s gonna be a no-bullshit workshop. It was indeed.&lt;&#x2F;p&gt;
&lt;p&gt;And they shared ways to make AI more useful.&lt;&#x2F;p&gt;
&lt;p&gt;My takeaways:&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Here’s Why You Should Be Blogging</title>
        <published>2025-11-21T00:00:00+00:00</published>
        <updated>2025-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/why-blogging/"/>
        <id>https://urmaul.com/blog/why-blogging/</id>
        
        <summary type="html">&lt;p&gt;If you searched for motivation to start a blog, this post is for you.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Linkdump #1</title>
        <published>2025-11-05T00:00:00+00:00</published>
        <updated>2025-11-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/linkdump-1/"/>
        <id>https://urmaul.com/blog/linkdump-1/</id>
        
        <summary type="html">&lt;p&gt;My first attempt to dump many links on you with short comments about why I consider them interesting. This one is mostly about free software and independence from Big Tech.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>What to Expect From Linux</title>
        <published>2025-10-15T00:00:00+00:00</published>
        <updated>2025-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/what-to-expect-from-linux/"/>
        <id>https://urmaul.com/blog/what-to-expect-from-linux/</id>
        
        <summary type="html">&lt;p&gt;So, you&#x27;re considering to start using Linux? Great! Here&#x27;s what you need to know to understand what&#x27;s going on.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Migrating to Scala 3</title>
        <published>2025-09-26T00:00:00+00:00</published>
        <updated>2025-09-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/migrating-to-scala3/"/>
        <id>https://urmaul.com/blog/migrating-to-scala3/</id>
        
        <summary type="html">&lt;p&gt;Recently I migrated three old services to Scala 3. This post contains many overly specific notes on problems I faced and how to solve them.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Replacing Mocks with In-Memory Implementations in Scala Tests</title>
        <published>2025-09-06T00:00:00+00:00</published>
        <updated>2025-09-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/in-memory-implementations/"/>
        <id>https://urmaul.com/blog/in-memory-implementations/</id>
        
        <summary type="html">&lt;p&gt;Recently I worked on migrating a service to Scala3 and one of the major blockers for this was the test code using &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mockito&#x2F;mockito-scala&quot;&gt;mockito-scala&lt;&#x2F;a&gt; that works only on Scala2. It was possible to use another mocking library but I used this opportunity to replace mocks with in-memory implementations. This post contains notes on how to do that.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Pull Request Self-Evaluation Checklist</title>
        <published>2025-09-01T00:00:00+00:00</published>
        <updated>2025-09-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/pr-checklist/"/>
        <id>https://urmaul.com/blog/pr-checklist/</id>
        
        <summary type="html">&lt;p&gt;Here’s a little self-evaluation checklist to add to the pull request template for internal repositories. This way, when you create a pull request, it reminds you about important stuff you might forget.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How To Structure Generators in Scala Property-based Tests</title>
        <published>2025-08-05T00:00:00+00:00</published>
        <updated>2025-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/scala-generators/"/>
        <id>https://urmaul.com/blog/scala-generators/</id>
        
        <summary type="html">&lt;p&gt;With property-based tests, you end up writing many generators for random data. I saw people coming up with different patterns for defining generators and some of them worked better than others. In this post I&#x27;ll describe what worked best.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How Not to Resize EFI Partition</title>
        <published>2025-06-13T00:00:00+00:00</published>
        <updated>2025-06-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/resize-efi-partition/"/>
        <id>https://urmaul.com/blog/resize-efi-partition/</id>
        
        <summary type="html">&lt;p&gt;I have a &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;frame.work&#x2F;&quot;&gt;Framework laptop&lt;&#x2F;a&gt; with &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fedoraproject.org&#x2F;&quot;&gt;Fedora Linux&lt;&#x2F;a&gt; and at some point I couldn’t install firmware updates. The error was not enough free space in my 100MB &lt;code&gt;&#x2F;boot&#x2F;efi&lt;&#x2F;code&gt; partition so I had to resize it somehow. None of the guides I could find helped me completely so here’s another one. I also wrote down what didn’t work because those parts of existing forum discussions turned out to be most useful for me.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Android Apps I Use</title>
        <published>2025-05-07T00:00:00+00:00</published>
        <updated>2025-05-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/android-apps-i-use/"/>
        <id>https://urmaul.com/blog/android-apps-i-use/</id>
        
        <summary type="html">&lt;p&gt;Over time, I’ve replaced most my Android utilities with FOSS alternatives. Usually this involved installing several apps that do the same thing and using them in parallel until it’s obvious which one is the best. Here’s the list of such apps so you and future me can benefit from this effort.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Deno is Fine</title>
        <published>2025-03-13T00:00:00+00:00</published>
        <updated>2025-03-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/deno-is-fine/"/>
        <id>https://urmaul.com/blog/deno-is-fine/</id>
        
        <summary type="html">&lt;p&gt;I have migrated one TypeScript application to &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;deno.com&#x2F;&quot;&gt;Deno&lt;&#x2F;a&gt; and I think it is fine. Probably, it doesn’t make much sense to migrate existing applications, but give it a shot when making one from scratch.&lt;&#x2F;p&gt;
&lt;p&gt;More detailed impressions inside.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Computational Optimization at Work 2024</title>
        <published>2024-10-09T00:00:00+00:00</published>
        <updated>2024-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/co-at-work-2024/"/>
        <id>https://urmaul.com/blog/co-at-work-2024/</id>
        
        <summary type="html">&lt;p&gt;I have attended &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;co-at-work.zib.de&#x2F;&quot;&gt;CO@Work 2024&lt;&#x2F;a&gt; at Zuse Institute Berlin. It is a summer school about computational optimization algorithms.&lt;&#x2F;p&gt;
&lt;p&gt;Nearly everyone I met at CO@Work were Masters and PhD students proficient in optimization. However, they were curious about the experience of working in a company. This is weird. There should be more software engineers there because usually it’s them who have to solve optimization problems in practice. Yet, most are unaware of operations research’s existence.&lt;&#x2F;p&gt;
&lt;p&gt;But there are good news! Almost every talk from CO@Work is now on YouTube. They can serve as a good crash course into operations research. In this post, you&#x27;ll find links to every recording with my personal impressions of the talks.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Software Engineering At Google Book, my Takeaways</title>
        <published>2024-07-01T00:00:00+00:00</published>
        <updated>2024-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/software-engineering-at-google/"/>
        <id>https://urmaul.com/blog/software-engineering-at-google/</id>
        
        <summary type="html">&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;abseil.io&#x2F;resources&#x2F;swe-book&#x2F;html&#x2F;toc.html&quot;&gt;&quot;Software Engineering At Google&quot;&lt;&#x2F;a&gt; is a long and uneven book. Every chapter is written by a different person and covers a different topic. Some sections are too basic and boring. Some things are too Google-specific, like bragging on how they solve problems they invented for themselves. But also there are things that should be basics but for some reason I haven&#x27;t seen them anywhere else. In this blog post I list these things.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Delete Your Agenda Slide</title>
        <published>2024-06-14T00:00:00+00:00</published>
        <updated>2024-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/delete-your-agenda-slide/"/>
        <id>https://urmaul.com/blog/delete-your-agenda-slide/</id>
        
        <summary type="html">&lt;p&gt;An easy way to improve your presentation is to delete your “Agenda” slide. You don’t need it. Seriously.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>You Should Own a Domain Name</title>
        <published>2024-05-13T00:00:00+00:00</published>
        <updated>2024-05-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/you-should-own-a-domain-name/"/>
        <id>https://urmaul.com/blog/you-should-own-a-domain-name/</id>
        
        <summary type="html">&lt;p&gt;Imagine not owning the key to your home. Every time you want to get inside, you ask some other person to unlock the door for you. They do it for free but at any point, they can change their mind and lock you out. Sounds weird, right? Well, with IoT &quot;smart&quot; locks it’s not unrealistic but still weird. And yet we have the same situation on the Internet.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Yes, You Can Use Different Types With the Same Structure</title>
        <published>2024-04-17T00:00:00+00:00</published>
        <updated>2024-04-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/different-types-same-structure/"/>
        <id>https://urmaul.com/blog/different-types-same-structure/</id>
        
        <summary type="html">&lt;p&gt;This is a story of how we fixed multiple bugs by typing our array indexes.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Finally a Good Feed Reader</title>
        <published>2024-04-02T00:00:00+00:00</published>
        <updated>2024-04-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/good-feed-reader/"/>
        <id>https://urmaul.com/blog/good-feed-reader/</id>
        
        <summary type="html">&lt;p&gt;After the closure of Google Reader, I have spent years searching for a good RSS feed reader. It seems like I’ve found it.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Don&#x27;t Start With a Skateboard</title>
        <published>2024-03-07T00:00:00+00:00</published>
        <updated>2024-03-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/dont-start-with-a-skateboard/"/>
        <id>https://urmaul.com/blog/dont-start-with-a-skateboard/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;m arguing with metaphors again. Do you remember the famous metaphor that when you need a car, instead of building one, you should build a skateboard, then a scooter, a bike, a motorcycle, and only then a car?&lt;&#x2F;p&gt;
&lt;p&gt;This metaphor shows a good idea of getting feedback earlier. It says, don&#x27;t make all the work with a big-bang release in the end. Instead, start with something simple, a minimum viable product like a skateboard, and release it immediately. Collect feedback and adjust your work accordingly.&lt;&#x2F;p&gt;
&lt;p&gt;There is one flaw, though. Building skateboards is not easy.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Good GRPC GUI Clients</title>
        <published>2023-09-24T00:00:00+00:00</published>
        <updated>2023-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/good-grpc-gui-clients/"/>
        <id>https://urmaul.com/blog/good-grpc-gui-clients/</id>
        
        <summary type="html">&lt;p&gt;Looking for good GUI clients for debugging GRPC endpoints turned out to be surprisingly hard. It took several attempts and many apps checked. But I found some.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>ZIO Log Annotations Are Confusing</title>
        <published>2023-02-13T00:00:00+00:00</published>
        <updated>2023-02-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/zio-annotations-confusion/"/>
        <id>https://urmaul.com/blog/zio-annotations-confusion/</id>
        
        <summary type="html">&lt;p&gt;I was working on a logger that writes metrics every time a warning or an error is logged. I tried to provide additional metric tags depending on the log annotations. And it didn&#x27;t work. I was adding an annotation and I could see its value somewhere deep in the stack trace but the &lt;code&gt;annotations&lt;&#x2F;code&gt; value was empty.&lt;&#x2F;p&gt;
&lt;p&gt;Turned out that ZIO has two log annotation mechanisms that work in parallel.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Tech Stack of the urmaul.com Blog</title>
        <published>2022-11-29T00:00:00+00:00</published>
        <updated>2022-11-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/blog-infrastructure/"/>
        <id>https://urmaul.com/blog/blog-infrastructure/</id>
        
        <summary type="html">&lt;p&gt;At the time of writing this, urmaul.com is a static blog with privacy-friendly dynamic elements. Everything runs self-hosted on a single virtual server with an automatically updated Linux.&lt;&#x2F;p&gt;
&lt;p&gt;This is a description of every layer with some reasoning and configuration details.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>4 Ways to Fail at Measuring Durations</title>
        <published>2022-11-18T00:00:00+00:00</published>
        <updated>2022-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/duration-measurement-errors/"/>
        <id>https://urmaul.com/blog/duration-measurement-errors/</id>
        
        <summary type="html">&lt;p&gt;This post is a confession about multiple overlapping mistakes we made when trying to measure API request times. These errors went unnoticed for months because wrong statistics still look realistic. Hopefully, this post will help you avoid such fails.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>5 Systematic Ways of Coming up With Property-Based Tests</title>
        <published>2021-02-10T00:00:00+00:00</published>
        <updated>2021-02-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/property-based-tests-cheat-sheet/"/>
        <id>https://urmaul.com/blog/property-based-tests-cheat-sheet/</id>
        
        <summary type="html">&lt;p&gt;This is a cheat sheet based on a great talk &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;G0NUOst-53U&quot;&gt;&quot;How to specify it! A guide to writing properties of pure functions&quot; by John Hughes&lt;&#x2F;a&gt;. This talk has a lot of information easy to forget so a cheat sheet may help you refreshing memories without watching the whole talk again.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Solution for Hackerrank Problem: Basic Cryptanalysis</title>
        <published>2021-01-29T00:00:00+00:00</published>
        <updated>2021-01-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/solution-for-hackerrank-problem-cryptanalysis/"/>
        <id>https://urmaul.com/blog/solution-for-hackerrank-problem-cryptanalysis/</id>
        
        <summary type="html">&lt;p&gt;There&#x27;s one programming puzzle I solved many years ago but I still remember it because of the unusual solution.
Problem: You have a text encrypted with a simple monoalphabetic substitution cipher. You don&#x27;t have the key but you have a dictionary. Every word in a text can be found in this dictionary. Find the original text.
It can be solved by dynamically generating regular expressions.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Solution for Project Euler Problem #700: Eulercoin</title>
        <published>2021-01-15T00:00:00+00:00</published>
        <updated>2021-01-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/solution-for-project-euler-problem-700/"/>
        <id>https://urmaul.com/blog/solution-for-project-euler-problem-700/</id>
        
        <summary type="html">&lt;p&gt;Problem: Imagine a sequence &lt;code&gt;1504170715041707*n mod 4503599627370517&lt;&#x2F;code&gt; where &lt;code&gt;n&lt;&#x2F;code&gt; is an integer increasing from 1. Find the subsequence of this sequence where every next element is smaller than the previous one.&lt;&#x2F;p&gt;
&lt;p&gt;All the solutions I&#x27;ve read about include brute force calculations. I found a better one, and I can&#x27;t stop myself from posting it.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Generating CI&#x2F;CD Pipelines for Microservices With Yeoman</title>
        <published>2020-12-17T00:00:00+00:00</published>
        <updated>2020-12-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/generating-cicd-pipelines-for-microservices-with-yeoman/"/>
        <id>https://urmaul.com/blog/generating-cicd-pipelines-for-microservices-with-yeoman/</id>
        
        <summary type="html">&lt;p&gt;&lt;strong&gt;TL;DR:&lt;&#x2F;strong&gt; You can create a Yeoman generator for your CI&#x2F;CD pipelines. It&#x27;s good, I tried.&lt;&#x2F;p&gt;
&lt;p&gt;Once you start multiplying services, you hit a problem of increased effort spent on non-business logic. With every new application you need to setup all the boilerplate: initial project, dependencies, running tests, building and deploying everything. Most of this things are very similar from project to project but they differ in details so you can copypaste a lot but you need to do it carefully so you don&#x27;t break a lot of stuff by forgetting to update one line in a copypasted file. This needs a better solution.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A Good Way How to Validate Types in TypeScript</title>
        <published>2020-11-18T00:00:00+00:00</published>
        <updated>2020-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/fp-ts-type-check/"/>
        <id>https://urmaul.com/blog/fp-ts-type-check/</id>
        
        <summary type="html">&lt;p&gt;&lt;strong&gt;TL;DR:&lt;&#x2F;strong&gt; &lt;em&gt;I&#x27;ve created a typescript library &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flix-tech&#x2F;fp-ts-type-check&quot;&gt;fp-ts-type-check&lt;&#x2F;a&gt;. You can use it to validate the structure of data you get from outside of your application.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the situation: your typescript application needs to retrieve some object via some API. You make an API request and you get a successful response with some json. Probably it&#x27;s the data you expect but you can&#x27;t say for sure. Your actions?&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A Story About Rubber Ducks and Functional Programming</title>
        <published>2020-07-31T00:00:00+00:00</published>
        <updated>2020-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/a-story-about-rubber-ducks/"/>
        <id>https://urmaul.com/blog/a-story-about-rubber-ducks/</id>
        
        <summary type="html">&lt;p&gt;Once upon a time, I wanted to get a rubber duck. One rubber duck. I spent a lot of time looking for a perfect yellow rubber duck not representing any character and finally, I have found and bought it.&lt;&#x2F;p&gt;
&lt;p&gt;Later I accidentally found a much better rubber duck. I bought it also. That&#x27;s one more rubber duck than I but I wasn&#x27;t cruel enough to throw first one away. A big mistake.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Sudoku Solver in Scala Part 3: Generating Cross-Dependent Test Data</title>
        <published>2020-04-28T00:00:00+00:00</published>
        <updated>2020-04-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/sudoku-part3-property-based-tests/"/>
        <id>https://urmaul.com/blog/sudoku-part3-property-based-tests/</id>
        
        <summary type="html">&lt;p&gt;This is the last part of my learnings during writing &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;urmaul&#x2F;sudoku-solver-scala&quot;&gt;a sudoku solver&lt;&#x2F;a&gt;. It&#x27;s about several iterations of a property-based test refactoring in an attempt to find the best way to generate input data.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Sudoku Solver in Scala Part 2: Functions Compose, Methods Don’t</title>
        <published>2020-04-17T00:00:00+00:00</published>
        <updated>2020-04-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/sudoku-part2-functions-compose/"/>
        <id>https://urmaul.com/blog/sudoku-part2-functions-compose/</id>
        
        <summary type="html">&lt;p&gt;I keep writing about my learnings during writing &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;urmaul&#x2F;sudoku-solver-scala&quot;&gt;a sudoku solver&lt;&#x2F;a&gt;. This time we touch solver&#x27;s logic and I have something to share about making the big functions out of the small ones.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Sudoku Solver in Scala Part 1: Validated Types</title>
        <published>2020-04-09T00:00:00+00:00</published>
        <updated>2020-04-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/sudoku-part1-validated-types/"/>
        <id>https://urmaul.com/blog/sudoku-part1-validated-types/</id>
        
        <summary type="html">&lt;p&gt;Sometimes you&#x27;re trying to solve a puzzle so hard so you have to write a program to solve it. That happened to me with one specific sudoku so I wrote &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;urmaul&#x2F;sudoku-solver-scala&quot;&gt;a sudoku solver&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I did some learning during this and I want to share them here. This part is about injecting validation into the type system.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>PHP Doesn’t Want You to Do Microservices</title>
        <published>2019-09-09T00:00:00+00:00</published>
        <updated>2019-09-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/php-does-not-want-you-to-do-microservices/"/>
        <id>https://urmaul.com/blog/php-does-not-want-you-to-do-microservices/</id>
        
        <summary type="html">&lt;p&gt;As a PHP developer, I should probably rejoice when someone&#x27;s saying &quot;we do microservices in PHP&quot;. I don&#x27;t. I&#x27;m fine with PHP and I like microservices but the combination is just bad. PHP is a tool for solving a narrow range of tasks (i.e. making websites) and if you&#x27;re trying to do something out of this range (i.e. making microservices) — you&#x27;re gonna have a bad time.&lt;&#x2F;p&gt;
&lt;p&gt;In this post, I tried to collect all microservice-related PHP problems I saw over the years.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Functional FizzBuzz in Scala With Streams and Higher Order Functions</title>
        <published>2019-05-09T00:00:00+00:00</published>
        <updated>2019-05-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/functional-fizzbuzz/"/>
        <id>https://urmaul.com/blog/functional-fizzbuzz/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;m currently learning functional programming with scala and as a practice I&#x27;ve implemented FizzBuzz. To be honest, I made three different implementations of FizzBuzz but only the third one is good.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #D4D4D4; background-color: #1E1E1E;&quot;&gt;&lt;code data-lang=&quot;scala&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt;Stream&lt;&#x2F;span&gt;&lt;span&gt;.from(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Create&lt;&#x2F;span&gt;&lt;span&gt; infinite &lt;&#x2F;span&gt;&lt;span style=&quot;color: #569CD6;&quot;&gt;lazy&lt;&#x2F;span&gt;&lt;span&gt; stream from &lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .map { (_, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) } # convert it to (number, word) tuple&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .map { x =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; (x._1 %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;) (x._1, x._2 +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Fizz&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; x } #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Fizz&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; to each 3rd word&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .map { x =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; (x._1 %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;) (x._1, x._2 +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Buzz&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; x } #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Buzz&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; to each 5th word&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .map { x =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; (x._2 !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) x._2 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #C586C0;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt; x._1.toString } #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Take&lt;&#x2F;span&gt;&lt;span&gt; word or number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .take(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;) #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Limit&lt;&#x2F;span&gt;&lt;span&gt; stream length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .foreach(println) #&lt;&#x2F;span&gt;&lt;span style=&quot;color: #4EC9B0;&quot;&gt; Run&lt;&#x2F;span&gt;&lt;span&gt; everything and print results&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s even much better than usual imperative implementation and here&#x27;s why.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>React Styleguidist Usage Examples in Typescript Files</title>
        <published>2019-03-27T00:00:00+00:00</published>
        <updated>2019-03-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/react-styleguidist/"/>
        <id>https://urmaul.com/blog/react-styleguidist/</id>
        
        <summary type="html">&lt;p&gt;React Styleguidist uses external Markdown files to store usage examples. We wanted to use TypeScript for examples because reasons and we managed to do this with horrible solution. It includes custom webpack loader that parses TypeScript file with regular expressions and converts it to markdown. You could find parts of our code below.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Finding Overlap Among Groups of Date Ranges</title>
        <published>2018-01-23T00:00:00+00:00</published>
        <updated>2018-01-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/date-range-groups-overlap/"/>
        <id>https://urmaul.com/blog/date-range-groups-overlap/</id>
        
        <summary type="html">&lt;p&gt;Imagine you have two groups of date ranges and you want to determine whether they overlap.&lt;&#x2F;p&gt;
&lt;p&gt;Nah, let&#x27;s make it harder. Imagine you have two groups of include date ranges and two groups of exclude date ranges. Your task is to determine, whether there&#x27;s a date that is present in both include groups and not present in exclude groups. How to do that?&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Running Bash Commands in Parallel</title>
        <published>2017-12-05T00:00:00+00:00</published>
        <updated>2017-12-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/running-bash-commands-in-parallel/"/>
        <id>https://urmaul.com/blog/running-bash-commands-in-parallel/</id>
        
        <summary type="html">&lt;p&gt;Let&#x27;s imagine you have a script like below and you want to make it faster.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #D4D4D4; background-color: #1E1E1E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A9955;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Started at `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; +%Y-%m-%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D7BA7D;&quot;&gt;\ &lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt;%H:%M:%S`&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Starting job 1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;sleep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Starting job 2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;sleep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B5CEA8;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; &amp;quot;Finished at `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DCDCAA;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt; +%Y-%m-%d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D7BA7D;&quot;&gt;\ &lt;&#x2F;span&gt;&lt;span style=&quot;color: #CE9178;&quot;&gt;%H:%M:%S`&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If it&#x27;s ok to run jobs in parallel, you can easily do it with bash background jobs.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Difference Between Entities and Value Objects From Philosophy Perspective</title>
        <published>2017-11-10T00:00:00+00:00</published>
        <updated>2017-11-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/entities-value-objects-and-philosophy/"/>
        <id>https://urmaul.com/blog/entities-value-objects-and-philosophy/</id>
        
        <summary type="html">&lt;p&gt;Imagine a wooden ship. It&#x27;s a quite famous ship - Theseus himself used it to return to Athens from Crete. After that Athenians tried to preserve it by replacing decayed planks with new ones. Many years passed and now we can say for sure that every part of the ship was replaced at least once. Is it still the same ship?&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>3 Ways to Make Your API Slow</title>
        <published>2017-10-11T00:00:00+00:00</published>
        <updated>2017-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/3-ways-to-make-your-api-slow/"/>
        <id>https://urmaul.com/blog/3-ways-to-make-your-api-slow/</id>
        
        <summary type="html">&lt;p&gt;I had to fix performance issues of one API endpoint. A pretty Symfony endpoint that gathers some data from database, assembling it to some structure and returns it as json.&lt;&#x2F;p&gt;
&lt;p&gt;Performance started being an issue when major part of that &quot;some data&quot; started to be 60000 entities. In worst case response time was almost 20 seconds. &quot;Ok&quot;, I thought, &quot;60k is a big enough number to make it slow&quot;. But trace showed that retrieving data from DB isn&#x27;t a slowest part. There were things taking almost 1&#x2F;3 of request time each. And these things were easy to fix.&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Make Aliases for Symfony Form Fields</title>
        <published>2017-10-02T00:00:00+00:00</published>
        <updated>2017-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/how-to-make-aliases-for-symfony-form-fields/"/>
        <id>https://urmaul.com/blog/how-to-make-aliases-for-symfony-form-fields/</id>
        
        <summary type="html">&lt;p&gt;Imagine you want to rename form parameter but you also want it to accept old parameter name in requests to preserve backwards compatibility. Here&#x27;s how you do it.&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Harmful Technical Interview Questions</title>
        <published>2016-06-14T00:00:00+00:00</published>
        <updated>2016-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/harmful-technical-interview-questions/"/>
        <id>https://urmaul.com/blog/harmful-technical-interview-questions/</id>
        
        <summary type="html">&lt;p&gt;Junior dev&#x27;s life is hard an full of dangers. You come to technical interview and think &quot;at least I&#x27;ll learn something new from guys that know it better than me&quot;. Well, not really. Threre are some things that are ok in interviews and are totally wrong in real life. Here are some examples.&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Imagick Resize Filters Comparison</title>
        <published>2015-09-11T00:00:00+00:00</published>
        <updated>2015-09-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/imagick-filters-comparison/"/>
        <id>https://urmaul.com/blog/imagick-filters-comparison/</id>
        
        <summary type="html">&lt;p&gt;So you want to shrink images with PHP and ImageMagick. Here are samples of all filters so you can select the one you like most.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Nicolas Cage as Default Avatar</title>
        <published>2015-04-01T00:00:00+00:00</published>
        <updated>2015-04-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/gravacage/"/>
        <id>https://urmaul.com/blog/gravacage/</id>
        
        <summary type="html">&lt;p&gt;No one asked me about this for months. And now it&#x27;s done. Gravacage has it&#x27;s own &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;urmaul&#x2F;gravacage&quot;&gt;documented php library&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gravacage.urmaul.com&#x2F;&quot;&gt;site&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Attach Composer to Yii Project</title>
        <published>2014-09-29T00:00:00+00:00</published>
        <updated>2014-09-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/how-to-attach-composer-to-yii-project/"/>
        <id>https://urmaul.com/blog/how-to-attach-composer-to-yii-project/</id>
        
        <summary type="html">&lt;p&gt;Sometimes I&#x27;m asked how to do this. It&#x27;s boring to tell that again and again so here&#x27;s the instruction.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why Composer Matters</title>
        <published>2014-08-26T00:00:00+00:00</published>
        <updated>2014-08-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/why-composer-matters/"/>
        <id>https://urmaul.com/blog/why-composer-matters/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;ve heard about composer long before I started using it. I couldn&#x27;t understand why it&#x27;s so much cooler than downloading dependencies manually. I couldn&#x27;t understand why it&#x27;s worth running &lt;code&gt;composer install&lt;&#x2F;code&gt; after every code fetch.&lt;&#x2F;p&gt;
&lt;p&gt;This article is for guys like me in the past. If you&#x27;re already using composer you can stop reading.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Font Awesome Icons for Common Buttons</title>
        <published>2014-07-07T00:00:00+00:00</published>
        <updated>2014-07-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/fontawesome-icons-for-common-buttons/"/>
        <id>https://urmaul.com/blog/fontawesome-icons-for-common-buttons/</id>
        
        <summary type="html">&lt;p&gt;Font Awesone is cool but it is sometomes hard to find the icon you really need because you forgot how it&#x27;s called. And you have to look at every icon to find something you need.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the names of icons for common buttons and operations.&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Yii 1.1 Does Not Support Object Cloning</title>
        <published>2014-06-26T00:00:00+00:00</published>
        <updated>2014-06-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/yii-1-does-not-support-object-cloning/"/>
        <id>https://urmaul.com/blog/yii-1-does-not-support-object-cloning/</id>
        
        <summary type="html">&lt;p&gt;You better watch out&lt;br &#x2F;&gt;
You better not cry&lt;br &#x2F;&gt;
You better not clone Yii objects&lt;br &#x2F;&gt;
I&#x27;m telling you why&lt;br &#x2F;&gt;
Object cloning is &lt;s&gt;coming to town&lt;&#x2F;s&gt; &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yiisoft&#x2F;yii&#x2F;issues&#x2F;598#issuecomment-14471813&quot;&gt;not supported in Yii 1.1&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>urmaul&#x2F;url to Make Urls Absolute and Stuff</title>
        <published>2014-06-04T00:00:00+00:00</published>
        <updated>2014-06-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/package-urmaul-url/"/>
        <id>https://urmaul.com/blog/package-urmaul-url/</id>
        
        <summary type="html">&lt;p&gt;Copy-pasting two functions between projects is boring so I&#x27;ve created a &lt;strong&gt;GIANT COMPOSER PACKAGE&lt;&#x2F;strong&gt; with class with these two functions. It can convert relative urls to absolute and to add get parameters to urls. It&#x27;s called &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;urmaul&#x2F;url&quot;&gt;urmaul&#x2F;url&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating an API Documentation in Swagger Using YAML</title>
        <published>2014-06-02T00:00:00+00:00</published>
        <updated>2014-06-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/api-documentation-swagger-yaml/"/>
        <id>https://urmaul.com/blog/api-documentation-swagger-yaml/</id>
        
        <summary type="html">&lt;p&gt;&lt;strong&gt;UPD:&lt;&#x2F;strong&gt; I wrote this for swagger v1.2. Stuff has changed since then. Now swagger supports single-file YAML specifications, so making them is easier now. What a time to be alive!&lt;&#x2F;p&gt;
&lt;p&gt;A few days ago was the first time I created a REST API documentation. This is the report on how I did it.&amp;hellip;
&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>MySQL Formats for Some Data Types</title>
        <published>2014-05-23T00:00:00+00:00</published>
        <updated>2014-05-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/mysql-formats/"/>
        <id>https://urmaul.com/blog/mysql-formats/</id>
        
        <summary type="html">&lt;p&gt;Proper mysql column types for things like emails, coorditates, password hashes and stuff like that.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Free Bootstrap Admin Themes</title>
        <published>2014-05-22T00:00:00+00:00</published>
        <updated>2014-05-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/free-bootstrap-admin-themes/"/>
        <id>https://urmaul.com/blog/free-bootstrap-admin-themes/</id>
        
        <summary type="html">&lt;p&gt;You don&#x27;t really care how admin panel looks like, yeah?&lt;&#x2F;p&gt;
&lt;p&gt;Bootstrap allows you to create not-so-ugly UI elements but you still have to assemble them into templates.&lt;&#x2F;p&gt;
&lt;p&gt;But there&#x27;s some free admin themes for bootstrap that are already designed.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Inline PDF in HTML Page</title>
        <published>2014-05-21T00:00:00+00:00</published>
        <updated>2014-05-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/inline-pdf/"/>
        <id>https://urmaul.com/blog/inline-pdf/</id>
        
        <summary type="html">&lt;p&gt;A piece of PHP code for inserting PDF files into HTML pages.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Cartograpther - a PHP Component to Generate Sitemaps</title>
        <published>2014-05-15T00:00:00+00:00</published>
        <updated>2014-05-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/cartographer/"/>
        <id>https://urmaul.com/blog/cartographer/</id>
        
        <summary type="html">&lt;p&gt;Some info about a good tool for creating sitemap.xml files and some tips about how to use it.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Disabling Autocomplete in HTML Forms</title>
        <published>2014-05-13T00:00:00+00:00</published>
        <updated>2014-05-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Bogdan Kolbik
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://urmaul.com/blog/disabling-autocomplete/"/>
        <id>https://urmaul.com/blog/disabling-autocomplete/</id>
        
        <summary type="html">&lt;p&gt;Browsers are so smart they are trying to fill forms for you. And sometimes this is bad.&lt;&#x2F;p&gt;</summary>
        
    </entry>
</feed>
