<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
    <channel>
        <title>Martin Heinz's Blog</title>
        <link>https://martinheinz.dev/rss</link>
        <description>Blog Posts from Martin Heinz</description>
        <atom:link href="https://martinheinz.dev/rss" rel="self"/>
        <docs>http://www.rssboard.org/rss-specification</docs>
        <generator>python-feedgen</generator>
        <image>
            <url>https://i.imgur.com/IUf6PIg.png</url>
            <title>Martin Heinz's Blog</title>
            <link>https://martinheinz.dev/rss</link>
        </image>
        <language>en</language>
        <lastBuildDate>Thu, 01 Aug 2024 15:13:57 +0000</lastBuildDate>
        <item>
            <title>10 Examples Why cURL is an Awesome CLI Tool</title>
            <link>https://martinheinz.dev/blog/113</link>
            <description>Whether you're developer, DevOps engineer, SysAdmin, QA or in any other technical role, you're surely familiar with
                cURL - _the command line tool and library for transferring data with URLs_ (as described in docs).
                Most of the time however, we all really only use `curl` for simple tasks, such downloading a file or checking if website is
                accessible, yet there's some much more `curl` can do!
                And in this article we will go through exactly those cool examples and tricks to showcase why `curl` is awesome and
                underappreciated tool...
            </description>
            <content:encoded><![CDATA[<p>Whether you're developer, DevOps engineer, SysAdmin, QA or in any other technical role, you're surely familiar with cURL - <i>the command line tool and library for transferring data with URLs</i> (as described in docs).
Most of the time however, we all really only use <code>curl</code> for simple tasks, such downloading a file or checking if website is accessible, yet there's some much more <code>curl</code> can do!
And in this article we will go through exactly those cool examples and tricks to showcase why <code>curl</code> is awesome and underappreciated tool...</p> <p><a href="https://martinheinz.dev/blog/113" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/113</guid>
            <pubDate>Tue, 25 Jun 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>A Guide to Python's Weak References Using weakref Module</title>
            <link>https://martinheinz.dev/blog/112</link>
            <description>Chances are that you never touched and maybe haven't even heard about Python's `weakref` module. While it might not
                be commonly used in your code, it's fundamental to inner workings of many libraries, frameworks and even Python itself. So,
                in this article we will explore what it is, how is it helpful, and how you could incorporate it into your code as well.
            </description>
            <content:encoded>
                <![CDATA[<p>Chances are that you never touched and maybe haven't even heard about Python's <code>weakref</code> module. While it might not be commonly used in your code, it's fundamental to inner workings of many libraries, frameworks and even Python itself. So, in this article we will explore what it is, how is it helpful, and how you could incorporate it into your code as well.</p> <p><a href="https://martinheinz.dev/blog/112" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/112</guid>
            <pubDate>Tue, 25 Jun 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Recent Docker BuildKit Features You're Missing Out On</title>
            <link>https://martinheinz.dev/blog/111</link>
            <description>Learn how to use BuildKit - the improved builder backend for Docker - that adds many new features to Docker,
                including new Dockerfile syntax, built-in debugger and more...
            </description>
            <content:encoded>
                <![CDATA[<p>Learn how to use BuildKit - the improved builder backend for Docker - that adds many new features to Docker, including new Dockerfile syntax, built-in debugger and more...</p> <p><a href="https://martinheinz.dev/blog/111" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/111</guid>
            <pubDate>Mon, 13 May 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Shell History Is Your Best Productivity Tool</title>
            <link>https://martinheinz.dev/blog/110</link>
            <description>If you work in shell/terminal often enough, then over time the history will become your personal knowledge vault,
                documentation and command reference. Being able to use this personal documentation efficiently can hugely boost your
                productivity. So, here are a couple of tips on how to optimize your shell history configuration and usage to get the most
                out of it.
            </description>
            <content:encoded>
                <![CDATA[<p>If you work in shell/terminal often enough, then over time the history will become your personal knowledge vault, documentation and command reference. Being able to use this personal documentation efficiently can hugely boost your productivity. So, here are a couple of tips on how to optimize your shell history configuration and usage to get the most out of it.</p> <p><a href="https://martinheinz.dev/blog/110" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/110</guid>
            <pubDate>Tue, 09 Apr 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Modern Git Commands and Features You Should Be Using</title>
            <link>https://martinheinz.dev/blog/109</link>
            <description>All of us - software engineers - use git every day, however most people only ever touch the most basic of commands,
                such as "add", "commit", "push" or "pull", like it's still 2005. Git however, introduced many features since then, and using
                them can make your life so much easier, so let's explore some of the recently added, modern "git" commands, that you should
                know about.
            </description>
            <content:encoded>
                <![CDATA[<p>All of us - software engineers - use <code>git</code> every day, however most people only ever touch the most basic of commands, such as <code>add</code>, <code>commit</code>, <code>push</code> or <code>pull</code>, like it's still 2005. Git however, introduced many features since then, and using them can make your life so much easier, so let's explore some of the recently added, modern <code>git</code> commands, that you should know about.</p> <p><a href="https://martinheinz.dev/blog/109" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/109</guid>
            <pubDate>Mon, 04 Mar 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Everything You Can Do with Python's textwrap Module</title>
            <link>https://martinheinz.dev/blog/108</link>
            <description>Python has many options for formatting strings and text, including f-strings, `format()` function, templates and
                more. There's however one module that few people know about and it's called `textwrap`. This module is specifically built to
                help you with line-wrapping, indentation, trimming and more, and in this article we will look at all the things you can use
                it for.
            </description>
            <content:encoded>
                <![CDATA[<p>Python has many options for formatting strings and text, including f-strings, <code>format()</code> function, templates and more. There's however one module that few people know about and it's called <code>textwrap</code>. This module is specifically built to help you with line-wrapping, indentation, trimming and more, and in this article we will look at all the things you can use it for.</p> <p><a href="https://martinheinz.dev/blog/108" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/108</guid>
            <pubDate>Wed, 07 Feb 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Monitoring Indoor Air Quality with Prometheus, Grafana and a CO2 Sensor</title>
            <link>https://martinheinz.dev/blog/107</link>
            <description>Low indoor air quality - or high CO2 - negatively impacts cognitive performance, causes headaches, drowsiness and
                more. It's easy to fix though, just use a CO2 sensor and open a window from time-to-time. But why stop there, when you can
                set up complete air quality monitoring solution using CO2 sensor, Prometheus, Grafana dashboards and alerts?
            </description>
            <content:encoded>
                <![CDATA[<p>Low indoor air quality - or high CO2 - negatively impacts cognitive performance, causes headaches, drowsiness and more. It's easy to fix though, just use a CO2 sensor and open a window from time-to-time. But why stop there, when you can set up complete air quality monitoring solution using CO2 sensor, Prometheus, Grafana dashboards and alerts?</p> <p><a href="https://martinheinz.dev/blog/107" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/107</guid>
            <pubDate>Tue, 02 Jan 2024 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Everything You Can Do with Python's bisect Module</title>
            <link>https://martinheinz.dev/blog/106</link>
            <description>While Python's `bisect` module is very simple - containing really just 2 functions - there's a lot one can do with
                it, including searching data efficiently, keeping any data sorted, and much more - and in this article we will explore all
                of it!
            </description>
            <content:encoded>
                <![CDATA[<p>While Python's bisect module is very simple - containing really just 2 functions - there's a lot one can do with it, including searching data efficiently, keeping any data sorted, and much more - and in this article we will explore all of it!</p> <p><a href="https://martinheinz.dev/blog/106" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/106</guid>
            <pubDate>Wed, 08 Nov 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>You Don't Need a Dedicated Cache Service - PostgreSQL as a Cache</title>
            <link>https://martinheinz.dev/blog/105</link>
            <description>PostgreSQL can be more than just an SQL database. Why maintain a Redis or Memcached instance when you can just use
                PostgreSQL as a cache instead?
            </description>
            <content:encoded>
                <![CDATA[<p>PostgreSQL can be more than just an SQL database. Why maintain a Redis or Memcached instance when you can just use PostgreSQL as a cache instead?</p> <p><a href="https://martinheinz.dev/blog/105" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/105</guid>
            <pubDate>Mon, 02 Oct 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>A Collection of Docker Images To Solve All Your Debugging Needs</title>
            <link>https://martinheinz.dev/blog/104</link>
            <description>Whenever I troubleshoot anything container-related, I look for a good container image that contains all the right
                tools to troubleshoot and/or solve the problem. However, finding such an image, or assembling my own is time-consuming and
                honestly just way too much effort. So, to save both you and me the hassle of finding or building such image(s), here's a
                list of container images that will satisfy all the troubleshooting needs.
            </description>
            <content:encoded>
                <![CDATA[<p>Whenever I troubleshoot anything container-related, I look for a good container image that contains all the right tools to troubleshoot and/or solve the problem. However, finding such an image, or assembling my own is time-consuming and honestly just way too much effort. So, to save both you and me the hassle of finding or building such image(s), here's a list of container images that will satisfy all the troubleshooting needs.</p> <p><a href="https://martinheinz.dev/blog/104" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/104</guid>
            <pubDate>Mon, 04 Sep 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Weird Python "Features" That Might Catch You By Surprise</title>
            <link>https://martinheinz.dev/blog/103</link>
            <description>From time to time, when coding, we all run into weird behaviours of the programming language. Sometimes it's a
                "feature" we weren't aware of, sometimes it's just quirky behaviour of the language, and sometimes it's borderline bug.
                Python - as any other programming language - has these eyebrows-raising quirks, so here's a list of weird Python "features"
                that might catch you off-guard.
            </description>
            <content:encoded>
                <![CDATA[<p>From time to time, when coding, we all run into weird behaviours of the programming language. Sometimes it's a <i>"feature"</i> we weren't aware of, sometimes it's just quirky behaviour of the language, and sometimes it's borderline bug. Python - as any other programming language - has these eyebrows-raising quirks, so here's a list of weird Python <i>"features"</i> that might catch you off-guard.</p> <p><a href="https://martinheinz.dev/blog/103" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/103</guid>
            <pubDate>Mon, 14 Aug 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Lessons Learned From Writing 100 Articles</title>
            <link>https://martinheinz.dev/blog/102</link>
            <description>Couple days ago, I published my 100th article, so I feel like it’s time for reflections — looking at how I got
                there, what I learned along the way and whether it was actually worth the time and effort. As well as some thoughts on
                whether you should try writing too.
            </description>
            <content:encoded>
                <![CDATA[<p>Couple days ago, I published my 100th article, so I feel like it’s time for reflections — looking at how I got there, what I learned along the way and whether it was actually worth the time and effort. As well as some thoughts on whether you should try writing too.</p> <p><a href="https://martinheinz.dev/blog/102" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/102</guid>
            <pubDate>Tue, 01 Aug 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Debugging Crashes and Deadlocks in Python using PyStack</title>
            <link>https://martinheinz.dev/blog/101</link>
            <description>There are certain bugs and issues that are very hard to troubleshoot. Just ask yourself, _"How would I debug
                deadlock, segmentation fault, crashing application, or a hanging process?"
                _ Now there's a tool to help you will all of that - _PyStack_ is a powerful new debugger that - according to docs - _"uses
                forbidden magic to let you inspect the stack frames of a running Python process or a Python core dump."
                _ So, let's put that statement to a test and explore how to use PyStack to track down and troubleshoot all the
                above-mentioned issues and bugs
            </description>
            <content:encoded>
                <![CDATA[<p>There are certain bugs and issues that are very hard to troubleshoot. Just ask yourself, <i>"How would I debug deadlock, segmentation fault, crashing application, or a hanging process?"</i> Now there's a tool to help you will all of that - <i>PyStack</i> is a powerful new debugger that - according to docs - <i>"uses forbidden magic to let you inspect the stack frames of a running Python process or a Python core dump."</i> So, let's put that statement to a test and explore how to use PyStack to track down and troubleshoot all the above-mentioned issues and bugs</p> <p><a href="https://martinheinz.dev/blog/101" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/101</guid>
            <pubDate>Mon, 17 Jul 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Goodbye etcd, Hello PostgreSQL: Running Kubernetes with an SQL Database</title>
            <link>https://martinheinz.dev/blog/100</link>
            <description>etcd is the brain of every Kubernetes cluster, the key-value storage keeping track of all the objects in a cluster.
                It's intertwined and tightly coupled with Kubernetes, and it might seem like an inseparable part of a cluster, or is it?
                In this article we will explore how we could replace etcd with PostgreSQL database, as well as why and when it might make
                sense to do so.
            </description>
            <content:encoded>
                <![CDATA[<p><i>etcd</i> is the brain of every Kubernetes cluster, the key-value storage keeping track of all the objects in a cluster. It's intertwined and tightly coupled with Kubernetes, and it might seem like an inseparable part of a cluster, or is it?</p> <p>In this article we will explore how we could replace etcd with PostgreSQL database, as well as why and when it might make sense to do so.</p> <p><a href="https://martinheinz.dev/blog/100" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/100</guid>
            <pubDate>Mon, 03 Jul 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Remote Interactive Debugging of Python Applications Running in Kubernetes</title>
            <link>https://martinheinz.dev/blog/99</link>
            <description>Let's imagine a situation - you have multiple Python applications running on Kubernetes that interact with each
                other. There's bug that you can't reproduce locally, but it surfaces everytime you hit a particular API endpoint. If only
                you could attach to the remote running application processes, set breakpoints and debug them live... how easy it would be to
                troubleshoot the bug...
                But you can! In this tutorial we will create a setup for remote debugging of Python applications running in Kubernetes,
                which will allow you to set breakpoints, step through code, and interactively debug you applications without any change to
                your code or deployment.
            </description>
            <content:encoded><![CDATA[<p>Let's imagine a situation - you have multiple Python applications running on Kubernetes that interact with each other. There's bug that you can't reproduce locally, but it surfaces everytime you hit a particular API endpoint. If only you could attach to the remote running application processes, set breakpoints and debug them live... how easy it would be to troubleshoot the bug...
But you can! In this tutorial we will create a setup for remote debugging of Python applications running in Kubernetes, which will allow you to set breakpoints, step through code, and interactively debug you applications without any change to your code or deployment.</p> <p><a href="https://martinheinz.dev/blog/99" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/99</guid>
            <pubDate>Mon, 19 Jun 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>The Right Way to Run Shell Commands From Python</title>
            <link>https://martinheinz.dev/blog/98</link>
            <description>Python is a popular choice for automating anything and everything, that includes automating system administration
                tasks or tasks that require running other programs or interacting with operating system. There are however, many ways to
                achieve this in Python, most of which are arguably bad, though. So, lets take a look at all the options you have in Python
                for running other processes - the bad; the good; and most importantly, _the right way_ to do it.
            </description>
            <content:encoded>
                <![CDATA[<p>Python is a popular choice for automating anything and everything, that includes automating system administration tasks or tasks that require running other programs or interacting with operating system. There are however, many ways to achieve this in Python, most of which are arguably bad, though. So, lets take a look at all the options you have in Python for running other processes - the bad; the good; and most importantly, <i>the right way</i> to do it.</p> <p><a href="https://martinheinz.dev/blog/98" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/98</guid>
            <pubDate>Mon, 05 Jun 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Real Multithreading is Coming to Python - Learn How You Can Use It Now</title>
            <link>https://martinheinz.dev/blog/97</link>
            <description>Python is 32 years old language, yet it still doesn't have proper, true parallelism/concurrency. This is going to
                change soon, thanks to introduction of a "Per-Interpreter GIL" (Global Interpreter Lock) which will land in Python 3.12.
                While release of Python 3.12 is some months away, the code is already there, so let's take an early peek at how we can use
                it to write truly concurrent Python code using sub-interpreters API.
            </description>
            <content:encoded>
                <![CDATA[<p>Python is 32 years old language, yet it still doesn't have proper, true parallelism/concurrency. This is going to change soon, thanks to introduction of a <i>"Per-Interpreter GIL"</i> (Global Interpreter Lock) which will land in Python 3.12. While release of Python 3.12 is some months away, the code is already there, so let's take an early peek at how we can use it to write truly concurrent Python code using sub-interpreters API.</p> <p><a href="https://martinheinz.dev/blog/97" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/97</guid>
            <pubDate>Sun, 14 May 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Python's Missing Batteries: Essential Libraries You're Missing Out On</title>
            <link>https://martinheinz.dev/blog/96</link>
            <description>Python is known to come with "batteries included", thanks to its very extensive standard library, which includes
                many modules and functions that you would not expect to be there. However, there are many more "essential" Python libraries
                out there that you should know about and be using in all of your Python projects, and here's the list.
            </description>
            <content:encoded>
                <![CDATA[<p>Python is known to come with <i>"batteries included"</i>, thanks to its very extensive standard library, which includes many modules and functions that you would not expect to be there. However, there are many more <i>"essential"</i> Python libraries out there that you should know about and be using in all of your Python projects, and here's the list.</p> <p><a href="https://martinheinz.dev/blog/96" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/96</guid>
            <pubDate>Mon, 01 May 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Kubernetes-Native Synthetic Monitoring with Kuberhealthy</title>
            <link>https://martinheinz.dev/blog/95</link>
            <description>When it comes to synthetic testing, engineers often rely on 3rd party platforms such as Datadog or New Relic that
                provide this type of monitoring. If you're running your applications and services on Kubernetes though, you can spin up
                synthetic monitoring platform yourself using Kuberhealthy, and in this article we will take a look at how to deploy it,
                configure it, create synthetic checks and set up monitoring and alerting, all inside your own cluster.
            </description>
            <content:encoded>
                <![CDATA[<p>When it comes to synthetic testing, engineers often rely on 3rd party platforms such as <i>Datadog</i> or <i>New Relic</i> that provide this type of monitoring. If you're running your applications and services on Kubernetes though, you can spin up synthetic monitoring platform yourself using <i>Kuberhealthy</i>, and in this article we will take a look at how to deploy it, configure it, create synthetic checks and set up monitoring and alerting, all inside your own cluster.</p> <p><a href="https://martinheinz.dev/blog/95" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/95</guid>
            <pubDate>Mon, 17 Apr 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Make Your CLI Demos a Breeze with Zero Stress and Zero Mistakes</title>
            <link>https://martinheinz.dev/blog/94</link>
            <description>Running live demos can be stressful. You know what you want to say and show. You prepare the CLI commands you want
                to run to best showcase what you've built, but then you waste time typing long commands; you make typos; the commands fail
                or take way too long to complete. Maybe they depend on external system (network, APIs, ...) and of course it's not
                cooperating while you're running your live demo. Here's how you can avoid all of the above by scripting, automating and
                recording your demos, so that you never have to stress about showcasing ever again...
            </description>
            <content:encoded>
                <![CDATA[<p>Running live demos can be stressful. You know what you want to say and show. You prepare the CLI commands you want to run to best showcase what you've built, but then you waste time typing long commands; you make typos; the commands fail or take way too long to complete. Maybe they depend on external system (network, APIs, ...) and <i>of course</i> it's not cooperating while you're running your live demo. Here's how you can avoid all of the above by scripting, automating and recording your demos, so that you never have to stress about showcasing ever again...</p> <p><a href="https://martinheinz.dev/blog/94" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/94</guid>
            <pubDate>Mon, 03 Apr 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Reduce - The Power of a Single Python Function</title>
            <link>https://martinheinz.dev/blog/93</link>
            <description>While Python is not a pure functional programming language, you still can do a lot of functional programming in it.
                In fact, just one function - `reduce` - can do most of it and in this article I will show you all the things one can do just
                with `reduce`.
            </description>
            <content:encoded>
                <![CDATA[<p>While Python is not a pure functional programming language, you still can do a lot of functional programming in it. In fact, just one function - <code>reduce</code> - can do most of it and in this article I will show you all the things one can do just with <code>reduce</code>.</p> <p><a href="https://martinheinz.dev/blog/93" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/93</guid>
            <pubDate>Mon, 20 Mar 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Why I Will Never Use Alpine Linux Ever Again</title>
            <link>https://martinheinz.dev/blog/92</link>
            <description>Nowadays, Alpine Linux is one of the most popular options for container base images. Many people (maybe including
                you) use it for anything and everything. Some people use it because of its small size, some because of habit and some, just
                because they copy-pasted a Dockefile from some tutorial. Yet, there are plenty of reasons why you **should not** use Alpine
                for your container images, some of which can cause you great amount of grief...
            </description>
            <content:encoded>
                <![CDATA[<p>Nowadays, Alpine Linux is one of the most popular options for container base images. Many people (maybe including you) use it for anything and everything. Some people use it because of its small size, some because of habit and some, just because they copy-pasted a <code>Dockefile</code> from some tutorial. Yet, there are plenty of reasons why you <b>should not</b> use Alpine for your container images, some of which can cause you great amount of grief...</p> <p><a href="https://martinheinz.dev/blog/92" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/92</guid>
            <pubDate>Mon, 06 Mar 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Cgroups - Deep Dive into Resource Management in Kubernetes</title>
            <link>https://martinheinz.dev/blog/91</link>
            <description>There's a lot of "magic" that happens behind the scenes to make whole Kubernetes work. One of those is resource
                management and resource allocation done by Linux cgroups.
                In this article we will take a deep dive into what cgroups are, how Kubernetes uses them to manage Node resources, and how
                we can take advantage of them beyond setting resource requests and limits on Pods.
            </description>
            <content:encoded><![CDATA[<p>There's a lot of <i>"magic"</i> that happens behind the scenes to make whole Kubernetes work. One of those is resource management and resource allocation done by Linux cgroups.
In this article we will take a deep dive into what cgroups are, how Kubernetes uses them to manage Node resources, and how we can take advantage of them beyond setting resource requests and limits on Pods.</p> <p><a href="https://martinheinz.dev/blog/91" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/91</guid>
            <pubDate>Mon, 20 Feb 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Dictionary Dispatch Pattern in Python</title>
            <link>https://martinheinz.dev/blog/90</link>
            <description>Have you ever written a long chain of if/else statements or a huge match/case block, with all statements just
                matching against a list of values, and wondered how could you make it more concise and readable?
                If so, then _dictionary dispatch_ pattern might be a tool for you. With dictionary dispatch we can replace any block of
                conditionals with a simple lookup into Python's dict and in this article we will explore how it works.
            </description>
            <content:encoded><![CDATA[<p>Have you ever written a long chain of <code>if</code>/<code>else</code> statements or a huge <code>match</code>/<code>case</code> block, with all statements just matching against a list of values, and wondered how could you make it more concise and readable?
If so, then <i>dictionary dispatch</i> pattern might be a tool for you. With dictionary dispatch we can replace any block of conditionals with a simple lookup into Python's <code>dict</code> and in this article we will explore how it works.</p> <p><a href="https://martinheinz.dev/blog/90" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/90</guid>
            <pubDate>Wed, 01 Feb 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Boost Your Python Application Performance using Continuous Profiling</title>
            <link>https://martinheinz.dev/blog/89</link>
            <description>Continuous profiling is a great tool for optimizing the performance of applications. It allows us to continuously
                monitor and analyze application's resource usage, identify bottlenecks, and use resources more efficiently. In this article,
                we will take a look at how to set up and use _Grafana Phlare_, a powerful new open-source tool by _Grafana Labs_, to perform
                continuous profiling of Python applications running on Kubernetes.
            </description>
            <content:encoded>
                <![CDATA[<p>Continuous profiling is a great tool for optimizing the performance of applications. It allows us to continuously monitor and analyze application's resource usage, identify bottlenecks, and use resources more efficiently. In this article, we will take a look at how to set up and use <i>Grafana Phlare</i>, a powerful new open-source tool by <i>Grafana Labs</i>, to perform continuous profiling of Python applications running on Kubernetes.</p> <p><a href="https://martinheinz.dev/blog/89" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/89</guid>
            <pubDate>Tue, 17 Jan 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Lazy Evaluation Using Recursive Python Generators</title>
            <link>https://martinheinz.dev/blog/88</link>
            <description>We all are familiar with Python's generators and all their benefits. But, what if I told you that we can make them
                even better by combining them with recursion? So, let's see how we can use them to implement _"lazy recursion"_ and
                supercharge what we already do with generators in Python!
            </description>
            <content:encoded>
                <![CDATA[<p>We all are familiar with Python's generators and all their benefits. But, what if I told you that we can make them even better by combining them with recursion? So, let's see how we can use them to implement _"lazy recursion"_ and supercharge what we already do with generators in Python!</p> <p><a href="https://martinheinz.dev/blog/88" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/88</guid>
            <pubDate>Wed, 04 Jan 2023 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Python Magic Methods You Haven't Heard About</title>
            <link>https://martinheinz.dev/blog/87</link>
            <description>Python's magic methods - also known as _dunder_ (double underscore) methods - can be used to implement a lot of
                cool things. Most of the time we use them for simple stuff, such as constructors (`__init__`), string representation
                (`__str__`, `__repr__`) or arithmetic operators (`__add__`/`__mul__`). There are however many more magic methods which you
                probably haven't heard about and in this article we will explore all of them (even the hidden and undocumented)!
            </description>
            <content:encoded>
                <![CDATA[<p>Python's magic methods - also known as <i>dunder</i> (double underscore) methods - can be used to implement a lot of cool things. Most of the time we use them for simple stuff, such as constructors (<code>__init__</code>), string representation (<code>__str__</code>, <code>__repr__</code>) or arithmetic operators (<code>__add__</code>/<code>__mul__</code>). There are however many more magic methods which you probably haven't heard about and in this article we will explore all of them (even the hidden and undocumented)!</p> <p><a href="https://martinheinz.dev/blog/87" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/87</guid>
            <pubDate>Wed, 14 Dec 2022 16:00:00 +0000</pubDate>
            <dc:creator>Martin Heinz</dc:creator>
        </item>
        <item>
            <title>Getting Started with Mastodon API in Python</title>
            <link>https://martinheinz.dev/blog/86</link>
            <description>With what's happening at Twitter, many people are considering moving to Mastodon. Like Twitter, Mastodon also
                offers an API that can be used to create many useful application, bots, to analyze data, respond to notification or simply
                post some statuses, and in this crash course you will learn how to do all of the above using Python.
            </description>
            <content:encoded>
                <![CDATA[<p>With what's happening at Twitter, many people are considering moving to Mastodon. Like Twitter, Mastodon also offers an API that can be used to create many useful application, bots, to analyze data, respond to notification or simply post some statuses, and in this crash course you will learn how to do all of the above using Python.</p> <p><a href="https://martinheinz.dev/blog/86" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/86</guid>
            <pubDate>Tue, 29 Nov 2022 16:00:00 +0000</pubDate>
            <dc:creator>Martin Heinz</dc:creator>
        </item>
        <item>
            <title>Backup-and-Restore of Containers with Kubernetes Checkpointing API</title>
            <link>https://martinheinz.dev/blog/85</link>
            <description>Kubernetes v1.25 introduced Container Checkpointing API as an alpha feature. This provides a way to
                backup-and-restore containers running in Pods, without ever stopping them.
                This feature is primarily aimed at forensic analysis, but general backup-and-restore is something any Kubernetes user can
                take advantage of.
                So, let's take a look at this brand-new feature and see how we can enable it in our clusters and leverage it for
                backup-and-restore or forensic analysis.
            </description>
            <content:encoded>
                <![CDATA[<p>Kubernetes v1.25 introduced Container Checkpointing API as an alpha feature. This provides a way to backup-and-restore containers running in Pods, without ever stopping them.</p><p>This feature is primarily aimed at forensic analysis, but general backup-and-restore is something any Kubernetes user can take advantage of.</p><p>So, let's take a look at this brand-new feature and see how we can enable it in our clusters and leverage it for backup-and-restore or forensic analysis.</p> <p><a href="https://martinheinz.dev/blog/85" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/85</guid>
            <pubDate>Tue, 15 Nov 2022 16:00:00 +0000</pubDate>
            <dc:creator>Martin Heinz</dc:creator>
        </item>
        <item>
            <title>Getting Started with Google APIs in Python</title>
            <link>https://martinheinz.dev/blog/84</link>
            <description>Google has literally hundreds of APIs, including ones for Gmail, Drive, Maps, Translation, Analytics and more. All
                of these share the same concepts like authorization, pagination or media uploads/downloads. In this article we will explore
                all of these concepts and also get our hands dirty with some of the above-mentioned APIs to learn about all the cool things
                you can do with any and all of Google's APIs.
            </description>
            <content:encoded>
                <![CDATA[<p>Google has literally hundreds of APIs, including ones for Gmail, Drive, Maps, Translation, Analytics and more. All of these share the same concepts like authorization, pagination or media uploads/downloads. In this article we will explore all of these concepts and also get our hands dirty with some of the above-mentioned APIs to learn about all the cool things you can do with any and all of Google's APIs.</p> <p><a href="https://martinheinz.dev/blog/84" rel="nofollow">Source</a></p>]]></content:encoded>
            <guid isPermaLink="false">https://martinheinz.dev/blog/84</guid>
            <pubDate>Tue, 01 Nov 2022 16:00:00 +0000</pubDate>
            <dc:creator>Martin Heinz</dc:creator>
        </item>
        <item>
            <title>Python CLI Tricks That Don't Require Any Code Whatsoever</title>
            <link>https://martinheinz.dev/blog/83</link>
            <description>Out-of-the-box, Python standard library ships with many great libraries some of which provide commandline interface
                (CLI), allowing us to do many cool things directly from terminal without needing to even open a `.py` file.
                This includes things like starting a webserver, opening a browser, parsing JSON files, benchmarking programs and many more,
                all of which we will explore in this article.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/83</guid>
            <pubDate>Mon, 17 Oct 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>All The Ways To Introspect Python Objects at Runtime</title>
            <link>https://martinheinz.dev/blog/82</link>
            <description>Python provides a lot of ways to ask questions about your code. Whether it's basic things like `help()` function,
                builtin functions like `dir()` or more advanced methods in `inspect` module - the tools are there to help you find the
                answers to your questions.
                Let's find out what kinds of questions about our own code can Python answer for us and how it can help us during debugging
                sessions, dealing with type annotations, validating inputs and much more.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/82</guid>
            <pubDate>Tue, 04 Oct 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>What is Python's "self" Argument, Anyway?</title>
            <link>https://martinheinz.dev/blog/81</link>
            <description>Every Python developer is familiar with the `self` argument, which is present in every* method signature of every
                class. We all know how to use it, but do you _really_ know what it is, why it's there and how it works under the hood?
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/81</guid>
            <pubDate>Mon, 19 Sep 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Python List Comprehensions Are More Powerful Than You Might Think</title>
            <link>https://martinheinz.dev/blog/80</link>
            <description>Python's list comprehensions (and generators) are an awesome feature that can greatly simplify your code. Most of
                the time however, we only use them to write a single `for` loop, maybe with addition of one `if` conditional and that's it.
                If you start poking around a bit though, you will find out that there are many more features of Python's comprehensions that
                you don't know about, but can learn a lot from...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/80</guid>
            <pubDate>Mon, 05 Sep 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>You Should Be Using Python's Walrus Operator - Here's Why</title>
            <link>https://martinheinz.dev/blog/79</link>
            <description>The assignment operator - or "walrus operator" as we all know it - is a feature that's been in Python for a while
                now (since 3.8), yet it's still somewhat controversial and many people have unfounded hate for it.
                In this article I will try to convince you that the walrus operator really is a good addition to the language and that if
                you use it properly, then it can help you make your code more concise and readable.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/79</guid>
            <pubDate>Mon, 15 Aug 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Recipes and Tricks for Effective Structural Pattern Matching in Python</title>
            <link>https://martinheinz.dev/blog/78</link>
            <description>The `match`/`case` syntax that got introduced to Python in 3.10 looks like basic `switch` statement which we all
                know from other languages - in Python however - it's much more than just an alternative `if` syntax. So, let's explore
                advanced features of `match`/`case` syntax - or as it's properly called - _structural pattern matching_. As well as tips and
                tricks for using it effectively, including recipes that will help you use it to it's full potential.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/78</guid>
            <pubDate>Tue, 02 Aug 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>It's Time to Say Goodbye to These Python Libraries</title>
            <link>https://martinheinz.dev/blog/77</link>
            <description>With every Python release, there are new modules being added and new and better ways of doing things get
                introduced. We all get used to using the good old Python libraries, but it's time say goodbye to `os.path`, `random`,
                `pytz`, `namedtuple` and many more obsolete Python libraries and start using the latest and greatest ones instead.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/77</guid>
            <pubDate>Wed, 20 Jul 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Advanced Features of Kubernetes' Horizontal Pod Autoscaler</title>
            <link>https://martinheinz.dev/blog/76</link>
            <description>Scaling application on Kubernetes using _Horizontal Pod Autoscaler (HPA)_ based on their CPU or memory usage is
                pretty simple. There are however many more features of HPA that you can use to customize scaling behaviour of your
                applications using external/custom metrics or alpha/beta features like _"scaling to zero"_ or container metrics scaling. So,
                let's explore all of these options so that we can take full advantage of all available features of HPA and to get a head
                start on the features that are coming in future Kubernetes releases.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/76</guid>
            <pubDate>Mon, 04 Jul 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Data and System Visualization Tools That Will Boost Your Productivity</title>
            <link>https://martinheinz.dev/blog/75</link>
            <description>As files, datasets and configurations grow, it gets increasingly difficult to navigate them. There are however many
                tools out there, that can help you to be more productive when dealing with large JSON and YAML files, complicated regular
                expressions, confusing SQL database relationships, complex development environments and many others. So, let's take a look
                at some of those!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/75</guid>
            <pubDate>Mon, 13 Jun 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Stop Messing with Kubernetes Finalizers</title>
            <link>https://martinheinz.dev/blog/74</link>
            <description>We've all been there - it's frustrating seeing deletion of Kubernetes resource getting stuck, hang or take a very
                long time. You might have _"solved"_ this using the terrible advice of removing finalizers or running `kubectl delete ...
                --force --grace-period=0` to force immediate deletion. 99% of the time this is a horrible idea and in this article I will
                show you why.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/74</guid>
            <pubDate>Wed, 01 Jun 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Automate All the Boring Kubernetes Operations with Python</title>
            <link>https://martinheinz.dev/blog/73</link>
            <description>In this article we take look at how you can leverage Kubernetes Python Client library to automate whatever annoying
                Kubernetes task you might be dealing with, whether it's creating/patching resources, watching events, accessing containers
                or anything else.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/73</guid>
            <pubDate>Tue, 17 May 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>End-to-End Monitoring with Grafana Cloud with Minimal Effort</title>
            <link>https://martinheinz.dev/blog/72</link>
            <description>Monitoring is usually at the end of a checklist when building an application, yet it's crucial for making sure that
                it's running smoothly and that any problems are found and resolved quickly.
                Building complete monitoring - including aggregated logging, metrics, tracing, alerting or synthetic probes - requires a lot
                of effort and time though, not to mention building and managing the infrastructure needed for it. So, in this article we
                will look at how we can set all of this up quickly and with little effort with no infrastructure needed using Grafana Cloud,
                all for free.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/72</guid>
            <pubDate>Mon, 02 May 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Goodbye, Google Analytics - Why and How You Should Leave The Platform</title>
            <link>https://bit.ly/3JLmSgA</link>
            <description>With the recent events relating to _Google Analytics_ platform, it's becoming very clear that the time has come for
                many of us to migrate from Google Analytics to different platforms.
                In this article we will go over both the _"Why?"_, so that you can make an informed decision whether you need to migrate of
                not, as well as the _"How?"_ of migrating from Google Analytics - that is quickly and easily taking your data and moving to
                different analytics platform without too much hassle.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/71</guid>
            <pubDate>Tue, 19 Apr 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Python f-strings Are More Powerful Than You Might Think</title>
            <link>https://bit.ly/3uETfbi</link>
            <description>Formatted string literals - also called _f-strings_ - have been around since Python 3.6, so we all know what they
                are and how to use them. There are however some facts and handy features of f-string that you might not know about. So,
                let's take a tour of some awesome f-string features that you'll want to use in your everyday coding.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/70</guid>
            <pubDate>Mon, 04 Apr 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Ultimate CI Pipeline for All of Your Python Projects</title>
            <link>https://bit.ly/3MI4Iz0</link>
            <description>Every project can benefit from a robust continuous integration pipeline that builds your application, runs tests,
                lints code, verifies code quality, runs vulnerability analysis and more. However, building such pipeline takes a significant
                amount of time, which doesn't really provide any benefit on its own. So, if you want a fully featured, customizable CI
                pipeline for your Python project based on _GitHub Actions_ with all the tools and integrations you could think of, ready in
                about 5 minutes, then this article has you covered!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/69</guid>
            <pubDate>Tue, 15 Mar 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Optimizing Memory Usage in Python Applications</title>
            <link>https://bit.ly/3M30D82</link>
            <description>When it comes to performance optimization, people usually focus only on speed and CPU usage. Rarely is anyone
                concerned with memory consumption, well, until they run out of RAM. There are many reasons to try to limit memory usage, not
                just avoiding having your application crash because of out-of-memory errors.
                In this article we will explore techniques for finding which parts of your Python applications are consuming too much
                memory, analyze the reasons for it and finally reduce the memory consumption and footprint using simple tricks and memory
                efficient data structures.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/68</guid>
            <pubDate>Mon, 28 Feb 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Upcoming Python Features Brought to You by Python Enhancement Proposals</title>
            <link>https://bit.ly/3oMJ6qR</link>
            <description>Before any new feature, change or improvement makes it into Python, there needs to be a _Python Enhancement
                Proposal_, also knows as PEP, outlining the proposed change. These PEPs are a great way of getting the freshest info about
                what might be included in the upcoming Python releases. So, in this article we will go over all the proposals that are going
                to bring some exciting new Python features in a near future!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/67</guid>
            <pubDate>Mon, 14 Feb 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Creating Beautiful Tracebacks with Python's Exception Hooks</title>
            <link>https://bit.ly/3IRD7IK</link>
            <description>We all spend a good chuck of our time debugging, sifting through logs or reading tracebacks. Each of these can be
                difficult and time-consuming and in this article we will focus on making the last one - dealing with tracebacks and
                exceptions - as easy and efficient as possible.
                To achieve this we will learn how to implement and use custom _Exception Hooks_ that will remove all the noise from
                tracebacks, make them more readable and display just the information we need to troubleshoot our code and exceptions in
                Python...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/66</guid>
            <pubDate>Tue, 01 Feb 2022 16:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Building GitHub Apps with Golang</title>
            <link>https://bit.ly/3A3B69t</link>
            <description>If you're using GitHub as your version control system of choice then GitHub Apps can be incredibly useful for many
                tasks including building CI/CD, managing repositories, querying statistical data and much more. In this article we will walk
                through the process of building such an app in Go including setting up the GitHub integration, authenticating with GitHub,
                listening to webhooks, querying GitHub API and more.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/65</guid>
            <pubDate>Tue, 18 Jan 2022 14:00:00 +0000</pubDate>
        </item>
        <item>
            <title>Profiling and Analyzing Performance of Python Programs</title>
            <link>https://bit.ly/31lKCYA</link>
            <description>Profiling is integral to any code and performance optimization. Any experience and skill in performance
                optimization that you might already have will not be very useful if you don't know where to apply it. So, in this article we
                will look at the tools and techniques that can help us narrow down our focus and find bottlenecks both for CPU and memory
                consumption, as well as how to implement easy (almost zero-effort) solutions to performance issues in cases where even well
                targeted code changes won't help anymore.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/64</guid>
            <pubDate>Tue, 04 Jan 2022 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Improving Application Availability with Pod Readiness Gates</title>
            <link>https://bit.ly/30uviIM</link>
            <description>Making sure your application running in Kubernetes is available and ready to serve traffic can be very easy with
                _Pod_ liveness and readiness probes. However, not all application are built to be able to use probes or in some cases
                require more complex readiness checks which these probes simply cannot perform. Is there however any other solution, if Pod
                probes just aren't good enough? Yes, and it's called Readiness Gates!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/63</guid>
            <pubDate>Tue, 14 Dec 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Exploring Google Analytics Realtime Data with Python</title>
            <link>https://bit.ly/3E1X2mw</link>
            <description>Google Analytics can provide a lot of insight into traffic and about users visiting your website. A lot of this
                data is available in nice format in web console, but what if you wanted to build your own diagrams and visualizations,
                process the data further or just generally work with it programmatically? That's where Google Analytics API can help you,
                and in this article we will look at how you can use it to query and process realtime analytics data with Python.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/62</guid>
            <pubDate>Mon, 29 Nov 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Speeding Up Container Image Builds with Remote Cache</title>
            <link>https://bit.ly/3Dv7JxP</link>
            <description>Building images in CI/CD pipeline can be quite different from builds on local machine. One major difference is
                availability of cache. In the local environment you most likely have all the resources, dependencies and image layers cached
                from previous builds and therefore your builds might take just a few seconds. In the CI pipeline on the other hand, there's
                no local cache, which can cause the builds to take several minutes. There's solution to this though, and in this article we
                will look at how we can solve it both with and without Docker and for any CI/CD platform you might be using.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/61</guid>
            <pubDate>Mon, 15 Nov 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Keeping Kubernetes Clusters Clean and Tidy</title>
            <link>https://bit.ly/3GG1BEz</link>
            <description>As your cluster grows, so does the number of resources, volumes or other API objects and sooner or later you will
                reach the limits somewhere. Whether its `etcd`, volumes, memory or CPU. Why subject yourself to unnecessary pain and trouble
                when you can setup simple, yet sophisticated rules, automation and monitoring that can keep you cluster tidy and clean
                without rogue workloads eating your resources or stale objects lying around?
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/60</guid>
            <pubDate>Mon, 01 Nov 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Secure Password Handling in Python</title>
            <link>https://bit.ly/3lLavs4</link>
            <description>Almost every application requires some form of authentication, password handling or use of secure credentials such
                as API keys. You might not be security expert, but you should know how to deal with all of these securely to keep your
                application users' credentials and data protected as well as your own API keys and various token. Keeping these security
                elements safe includes, generating them, verifying them, storing them securely and protecting them from adversaries. So, in
                this article we will explore Python libraries, tools and concepts that will help as with exactly that!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/59</guid>
            <pubDate>Sun, 17 Oct 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Making Kubernetes Operations Easy with kubectl Plugins</title>
            <link>https://bit.ly/39TqP3m</link>
            <description>kubectl is powerful tool that allows you to perform literally any and all Kubernetes-related tasks. Some of these
                common tasks however, can be quite clunky or might include many steps that might take considerable time to perform. In other
                cases the output of kubectl might not be exactly readable or might include a lot of noise. So, why waste time on repetitive,
                common, time-consuming tasks when we can avoid it. Asking how? Well, let me introduce you to kubectl plugins!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/58</guid>
            <pubDate>Fri, 01 Oct 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>All The Ways to Compress and Archive Files in Python</title>
            <link>https://bit.ly/3A5Mpx8</link>
            <description>Whether it's basics like `tar` and `zip`, specific tools or formats such as `gzip` and `bz2` or even more exotic
                formats like `lzma`, Python standard library has it all. With all these modules and options, deciding what might be the
                right tool for the task at hand might not be so obvious, though. So, to help you navigate through all the available options,
                we will in this article explore all of these modules and learn how to compress, decompress, verify, test and secure our
                archives of all kinds of formats with help of Python's standard library.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/57</guid>
            <pubDate>Mon, 13 Sep 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Signing Software The Easy Way with Sigstore and Cosign</title>
            <link>https://bit.ly/3kGwPl4</link>
            <description>A hands-on, practical guide to signing software artifacts the easy way with sigstore project and cosign CLI
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/56</guid>
            <pubDate>Wed, 01 Sep 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Sigstore: A Solution to Software Supply Chain Security</title>
            <link>https://bit.ly/3iHtulU</link>
            <description>Everything you need to know about sigstore project and its role in software supply chain security</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/55</guid>
            <pubDate>Mon, 16 Aug 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Could Kubernetes Pods Ever Become Deprecated?</title>
            <link>https://bit.ly/3xGjtKS</link>
            <description>Could resources such as Pods, Services or Deployments ever become deprecated and be removed from Kubernetes and how
                would that happen?
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/53</guid>
            <pubDate>Thu, 15 Jul 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Functools - The Power of Higher-Order Functions in Python</title>
            <link>https://bit.ly/3h8DZg0</link>
            <description>Take a tour of Python's functools module and learn how to use its higher-order functions to implement caching,
                overloading and much more
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/52</guid>
            <pubDate>Mon, 28 Jun 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>yq: Mastering YAML Processing in Command Line</title>
            <link>https://bit.ly/2RQn1dG</link>
            <description>Learn to parse and manipulate YAML files more efficiently using yq command-line utility and this simple cheat
                sheet
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/51</guid>
            <pubDate>Tue, 15 Jun 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>The Correct Way to Overload Functions in Python</title>
            <link>https://bit.ly/3p2B5wW</link>
            <description>Were you taught that function overloading isn’t possible in Python? Here’s how you can do it with generic functions
                and multiple dispatch!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/50</guid>
            <pubDate>Mon, 31 May 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>The Easiest Way to Debug Kubernetes Workloads</title>
            <link>https://bit.ly/3tULpb0</link>
            <description>The fastest and easiest way to debug and troubleshoot any application running on Kubernetes...</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/49</guid>
            <pubDate>Mon, 17 May 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>The Simple Tricks to Make Your Website Blazing Fast</title>
            <link>https://bit.ly/2PHVudx</link>
            <description>Use these quick and easy tricks to optimize your web application's size and performance to make it as fast as
                possible!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/48</guid>
            <pubDate>Mon, 03 May 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Cloud Native CI/CD with Tekton - Building Custom Tasks</title>
            <link>https://bit.ly/3uPtnb0</link>
            <description>Learn how to use, build and deploy custom Tasks for Cloud-Native CI/CD on Kubernetes with Tekton Pipelines...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/47</guid>
            <pubDate>Wed, 14 Apr 2021 14:30:00 +0000</pubDate>
        </item>
        <item>
            <title>All The Important Features and Changes in Python 3.10</title>
            <link>https://bit.ly/3dg3QR9</link>
            <description>The release of Python 3.10 is getting closer, so it's time to take a look at most important new features and
                changes it's going to bring
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/46</guid>
            <pubDate>Tue, 30 Mar 2021 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Cloud Native CI/CD with Tekton - Laying The Foundation</title>
            <link>https://bit.ly/3qHtSkZ</link>
            <description>The easiest way to kick-start your journey to cloud-native CI/CD on Kubernetes with Tekton Pipelines...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/45</guid>
            <pubDate>Mon, 15 Mar 2021 11:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Deep Dive into Docker Internals - Union Filesystem</title>
            <link>https://bit.ly/3kIkTPr</link>
            <description>Explore the inner workings of OverlayFS, the filesystem behind layered architecture of Docker images and
                containers
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/44</guid>
            <pubDate>Mon, 01 Mar 2021 10:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Advanced Git Features You Didn’t Know You Needed</title>
            <link>https://bit.ly/3qlRAUN</link>
            <description>You’re missing out on some great git features, such as word diff, auto-correct, plugins or commit signing and it’s
                time to change it...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/43</guid>
            <pubDate>Mon, 15 Feb 2021 10:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Building Docker Images The Proper Way</title>
            <link>https://bit.ly/3pCUJ26</link>
            <description>Let’s optimize Docker builds to create much smaller and more secure Docker images in a fraction of the usual build
                time...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/42</guid>
            <pubDate>Mon, 01 Feb 2021 10:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Hardening Docker and Kubernetes with seccomp</title>
            <link>https://bit.ly/3ifZxYr</link>
            <description>Your containers might not be as secure as you'd think, but seccomp profiles can help you fix that…</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/41</guid>
            <pubDate>Fri, 15 Jan 2021 10:30:00 +0000</pubDate>
        </item>
        <item>
            <title>The Simple Ways to Refactor Terrible Code</title>
            <link>https://bit.ly/34ZhIMt</link>
            <description>It’s time to overcome the fear of messy legacy code and make it cleaner, simpler and more readable with a few
                simple refactoring tips...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/40</guid>
            <pubDate>Sat, 02 Jan 2021 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Scheduling All Kinds of Recurring Jobs with Python</title>
            <link>https://bit.ly/3qSO7h0</link>
            <description>Let's explore all the libraries for running cron jobs, deferred tasks, recurring tasks or any other scheduled jobs
                in Python
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/39</guid>
            <pubDate>Tue, 15 Dec 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Networking Tools Every Developer Needs to Know</title>
            <link>https://bit.ly/3muGLOk</link>
            <description>Let’s learn the overlooked networking skills like inspecting DNS records, scanning ports, troubleshooting
                connections or firewalls and much more...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/38</guid>
            <pubDate>Tue, 01 Dec 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Python Pitfalls - Expecting The Unexpected</title>
            <link>https://bit.ly/35xN79v</link>
            <description>Save yourself hours of debugging by avoiding these common gotchas and pitfalls in your Python code</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/37</guid>
            <pubDate>Mon, 16 Nov 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Build Your Next Project with Wolfram Alpha API and Python</title>
            <link>https://bit.ly/3mLGshK</link>
            <description>Let’s get curated data, natural language processing, text-to-speech, plot rendering and more from Wolfram Alpha
                into your next project!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/36</guid>
            <pubDate>Sun, 01 Nov 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>It’s Time to Say Goodbye to Docker</title>
            <link>https://bit.ly/2IvkGQl</link>
            <description>Docker is not the only containerization tool out there and there might just be better alternatives...</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/35</guid>
            <pubDate>Thu, 15 Oct 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>The Magic of Python Context Managers</title>
            <link>https://bit.ly/2Sk1KFK</link>
            <description>Recipes for using and creating awesome Python context managers, that will make your code more readable, reliable
                and less error prone...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/34</guid>
            <pubDate>Thu, 01 Oct 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Hidden Features of Chrome DevTools</title>
            <link>https://bit.ly/3iCNIL6</link>
            <description>Be a more productive web developer with these few Chrome DevTools tips and tricks.</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/33</guid>
            <pubDate>Tue, 15 Sep 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Writing More Idiomatic and Pythonic Code</title>
            <link>https://bit.ly/3beQPpy</link>
            <description>Idioms and conventions that will make your Python code readable, effective, concise and reliable.</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/32</guid>
            <pubDate>Tue, 01 Sep 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Scraping News and Articles From Public APIs with Python</title>
            <link>https://bit.ly/2YjCPFO</link>
            <description>Let’s explore New York Times, The Guardian, HackerNews and other APIs and gather some news data for your next
                project!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/31</guid>
            <pubDate>Thu, 20 Aug 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>History of Epidemics in Single Chart</title>
            <link>https://bit.ly/33LK6St</link>
            <description>Epidemics and Pandemics are still a hot topic so let’s visualize their history using interactive horizontal bar
                chart and D3.js!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/30</guid>
            <pubDate>Fri, 14 Aug 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Build a Stunning README For Your GitHub Profile</title>
            <link>https://bit.ly/30Wrkok</link>
            <description>Show off your projects and skills on GitHub with its hidden new feature - GitHub Profile READMEs!</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/29</guid>
            <pubDate>Thu, 30 Jul 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Advanced SQLAlchemy Features You Need To Start Using</title>
            <link>https://bit.ly/3eKpRXc</link>
            <description>Working with SQL in Python can be easy with SQLAlchemy and its hybrid properties, nested queries, table metadata,
                dialects and more!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/28</guid>
            <pubDate>Mon, 20 Jul 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Better Data Visualization Using Beeswarm Chart</title>
            <link>https://bit.ly/2ZdIGxj</link>
            <description>Let’s create an interactive Beeswarm chart using D3.js to better visualize your data.</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/27</guid>
            <pubDate>Fri, 10 Jul 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Troubleshooting OpenShift Clusters and Workloads</title>
            <link>https://bit.ly/2YMlfLg</link>
            <description>There's a lot of things that can go wrong with your OpenShift cluster and this collection of troubleshooting
                commands might help you deal with them.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/26</guid>
            <pubDate>Wed, 01 Jul 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>All the Things You Can Do With GitHub API and Python</title>
            <link>https://bit.ly/3d11CD1</link>
            <description>GitHub REST API allows you to manage issues, branches, repos, commits and more, so let's see how you can do that
                using Python!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/25</guid>
            <pubDate>Mon, 15 Jun 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Ultimate Guide to Python Debugging</title>
            <link>https://bit.ly/2XMG33L</link>
            <description>Let’s explore the Art of debugging using Python logging, tracebacks, decorators and more...</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/24</guid>
            <pubDate>Mon, 01 Jun 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Implementing gRPC server using Python</title>
            <link>https://bit.ly/367OYQX</link>
            <description>Your next API doesn't need to be built with REST and JSON. How about gRPC and Protocol Buffers for better
                performance and structure?
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/23</guid>
            <pubDate>Fri, 15 May 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Saving Your Linux Machine from Certain Death</title>
            <link>https://martinheinz.dev/blog/22</link>
            <description>There's a lot things that can go terribly wrong with your Linux machine and you can solve them with these few
                techniques and tricks
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/22</guid>
            <pubDate>Fri, 01 May 2020 08:00:00 +0000</pubDate>
        </item>
        <item>
            <title>New Features in Python 3.9 You Should Know About</title>
            <link>https://martinheinz.dev/blog/21</link>
            <description>Python 3.9 Beta is coming soon, so it's time to explore some of it's upcoming features, like new dict operators,
                new functools and more...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/21</guid>
            <pubDate>Sat, 25 Apr 2020 17:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Deploy Any Python Project to Kubernetes</title>
            <link>https://martinheinz.dev/blog/20</link>
            <description>It’s time to dive into Kubernetes and bring your Python project to Cloud with this fully-fledged project
                template!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/20</guid>
            <pubDate>Wed, 15 Apr 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Analyzing Docker Image Security</title>
            <link>https://martinheinz.dev/blog/19</link>
            <description>Docker containers are not inherently secure as many people think. So, it's crucial use tools and scanners like
                Anchore or Clair to rid your containers of vulnerabilities.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/19</guid>
            <pubDate>Wed, 01 Apr 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Recursive SQL Queries with PostgreSQL</title>
            <link>https://martinheinz.dev/blog/18</link>
            <description>Common Table Expression is lesser-known feature of SQL, that makes it possible to write recursive queries. Let's
                explore it with PostgreSQL!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/18</guid>
            <pubDate>Sun, 15 Mar 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Automating Every Aspect of Your Python Project</title>
            <link>https://martinheinz.dev/blog/17</link>
            <description>Every Python project can benefit from automation using Makefile, optimized Docker images, well configured CI/CD,
                Code Quality Tools and more…
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/17</guid>
            <pubDate>Sun, 01 Mar 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Tour of Python Itertools</title>
            <link>https://martinheinz.dev/blog/16</link>
            <description>Let's explore two great Python libraries - itertools and more_itertools and see how to leverage them for data
                processing...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/16</guid>
            <pubDate>Sat, 15 Feb 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Implementing 2D Physics in Javascript</title>
            <link>https://martinheinz.dev/blog/15</link>
            <description>Let’s have some fun with JavaScript while implementing 2D physics algorithms for realistic simulations and
                visualization!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/15</guid>
            <pubDate>Sat, 01 Feb 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Ultimate Setup for Your Next Python Project</title>
            <link>https://martinheinz.dev/blog/14</link>
            <description>Whether you are working on some machine learning/AI stuff, building web apps in Flask or just writing some quick
                Python script, it's always useful to have some template for your project that satisfies all your needs, namely: predefined
                directory structure, all necessary config files like pytest.ini or requirements.txt, Testing, linting and static code
                analysis setup, CI/CD tooling, Dockerization of your app and on top of that automation with Makefile. So, here I bring you
                exactly that in this "Ultimate" all-purpose setup for your Python projects.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/14</guid>
            <pubDate>Wed, 15 Jan 2020 16:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Making Python Programs Blazingly Fast</title>
            <link>https://martinheinz.dev/blog/13</link>
            <description>Let's look at performance of our Python programs and see how to make them up to 30% faster!</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/13</guid>
            <pubDate>Wed, 01 Jan 2020 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Security and Cryptography Mistakes You Are Probably Doing All The Time</title>
            <link>https://martinheinz.dev/blog/12</link>
            <description>There are a lot of myths and wrong assumptions about cryptography and security which people blindly follow. So,
                let's clear things up a bit...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/12</guid>
            <pubDate>Fri, 13 Dec 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Going Serverless with OpenFaaS and Golang - Building Optimized Templates</title>
            <link>https://martinheinz.dev/blog/11</link>
            <description>OpenFaaS provides quite a few templates for your Serverless functions. But what if you need custom ones? Let's see
                how to build them!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/11</guid>
            <pubDate>Fri, 29 Nov 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Going Serverless with OpenFaaS and Golang - The Ultimate Setup and Workflow</title>
            <link>https://martinheinz.dev/blog/10</link>
            <description>Serverless applications are becoming the next big thing in software development, so let's see how to build some
                with OpenFaaS and Golang...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/10</guid>
            <pubDate>Sat, 16 Nov 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Setting Up Swagger Docs for Golang API</title>
            <link>https://martinheinz.dev/blog/9</link>
            <description>Without good documentation, no one will use your RESTful API. So, let's see how to generate some Swagger Docs for
                your Golang project!
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/9</guid>
            <pubDate>Fri, 01 Nov 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Building RESTful APIs in Golang</title>
            <link>https://martinheinz.dev/blog/8</link>
            <description>Let’s see how to setup project for Golang RESTful API the right way, with everything you will ever need in such a
                project.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/8</guid>
            <pubDate>Tue, 22 Oct 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Pytest Features, That You Need in Your (Testing) Life</title>
            <link>https://martinheinz.dev/blog/7</link>
            <description>Quality tests are integral part of development process. These Pytest features will make that part of development
                much easier for you...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/7</guid>
            <pubDate>Tue, 15 Oct 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Setting up GitHub Package Registry with Docker and Golang</title>
            <link>https://martinheinz.dev/blog/6</link>
            <description>GitHub package registry has been in beta for while now, so it seems like it's time to explore its features and do a
                quick tutorial...
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/6</guid>
            <pubDate>Sat, 05 Oct 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Ultimate Setup for Your Next Golang Project</title>
            <link>https://martinheinz.dev/blog/5</link>
            <description>Finding the perfect setup for software project is always a struggle. So, here is a ultimate template for your next
                Golang project.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/5</guid>
            <pubDate>Sat, 28 Sep 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Python Tips and Tricks, You Haven’t Already Seen, Part 2.</title>
            <link>https://martinheinz.dev/blog/4</link>
            <description>Here comes another round of Python features that you hopefully haven’t seen yet...</description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/4</guid>
            <pubDate>Sat, 14 Sep 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Tricks for Postgres and Docker that will make your life easier</title>
            <link>https://martinheinz.dev/blog/3</link>
            <description>Working with containers can be hard, that includes databases like PostgreSQL. So, here is a list of tips, that
                might make your life easier.
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/3</guid>
            <pubDate>Mon, 02 Sep 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Getting The Most Out of Reading Books — Reading The “Professional Way”</title>
            <link>https://martinheinz.dev/blog/2</link>
            <description>People often run through books quickly, are not concentrated and don’t remember much of what they just learned. But
                there’s a better way…
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/2</guid>
            <pubDate>Sun, 18 Aug 2019 12:30:00 +0000</pubDate>
        </item>
        <item>
            <title>Python Tips and Trick, You Haven’t Already Seen</title>
            <link>https://martinheinz.dev/blog/1</link>
            <description>There are plenty of articles written about lots of cool features in Python, but there is much more to talk about…
            </description>
            <guid isPermaLink="false">https://martinheinz.dev/blog/1</guid>
            <pubDate>Mon, 05 Aug 2019 12:30:00 +0000</pubDate>
        </item>
    </channel>
</rss>