<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Patryk&#39;s blog</title>
    <link>https://prezu.ca/</link>
    <description>Recent content on Patryk&#39;s blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 02 Feb 2026 13:00:00 -0800</lastBuildDate>
    <atom:link href="https://prezu.ca/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Bitwarden Secrets Manager With Ansible</title>
      <link>https://prezu.ca/post/2026-02-05-bws-with-ansible/</link>
      <pubDate>Mon, 02 Feb 2026 13:00:00 -0800</pubDate>
      <guid>https://prezu.ca/post/2026-02-05-bws-with-ansible/</guid>
      <description>&lt;p&gt;If you’d like to have a simple solution for managing all the secrets you’re&#xA;using in your Ansible Playbooks, keep reading on. Bitwarden’s Secrets Manager&#xA;&lt;a href=&#34;https://bitwarden.com/help/ansible-integration/&#34;&gt;provides an Ansible collection&lt;/a&gt;, which makes it very easy&#xA;to use this particular Secrets Manager in Ansible Playbooks. I’ll show you how&#xA;to set up a free Secrets Manager account in Bitwarden. Then I’ll walk you&#xA;through the setup in an example Ansible Playbook.&lt;/p&gt;&#xA;&lt;h1 id=&#34;youtube-video-versionbws_video&#34;&gt;&lt;a href=&#34;https://youtu.be/Hbehj2zpD4w&#34;&gt;YouTube Video version&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also recorded a video version of this article. If you prefer a video, you&#xA;can find it &lt;a href=&#34;https://youtu.be/Hbehj2zpD4w&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing Secrets Manager for Homelab</title>
      <link>https://prezu.ca/post/2026-01-11-secrets-manager-for-homelab/</link>
      <pubDate>Sun, 11 Jan 2026 15:57:23 -0800</pubDate>
      <guid>https://prezu.ca/post/2026-01-11-secrets-manager-for-homelab/</guid>
      <description>&lt;h1 id=&#34;secrets-manager-for-homelab&#34;&gt;Secrets Manager for Homelab&lt;/h1&gt;&#xA;&lt;p&gt;For a few years, I’ve been managing the configuration of a bunch of self-hosted&#xA;services using Ansible Playbooks. Each playbook needed at least one secret —&#xA;the sudo password. Many of them needed to manage more (e.g. SMTP credentials&#xA;for email notifications). Because I’ve always been paranoid about security, I&#xA;stored most of those secrets in Ansible Vault, the password for which is stored&#xA;in only one location — my memory. Therefore, each time I ran any of those&#xA;playbooks, I’d have to enter two passwords interactively: the sudo password and&#xA;the Ansible Vault password.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sanoid on TrueNAS</title>
      <link>https://prezu.ca/post/sanoid_on_truenas/</link>
      <pubDate>Thu, 28 Mar 2024 18:18:47 -0700</pubDate>
      <guid>https://prezu.ca/post/sanoid_on_truenas/</guid>
      <description>&lt;h1 id=&#34;syncoid-to-truenas&#34;&gt;syncoid to TrueNAS&lt;/h1&gt;&#xA;&lt;p&gt;In my homelab, I have 2 NAS systems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Linux (Debian)&lt;/li&gt;&#xA;&lt;li&gt;TrueNAS Core (based on FreeBSD)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On my Linux box, I use Jim Salter&amp;rsquo;s &lt;a href=&#34;https://github.com/jimsalterjrs/sanoid&#34;&gt;sanoid&lt;/a&gt; to periodically take&#xA;snapshots of my ZFS pool. I also want to have a proper backup of the whole&#xA;pool, so I use &lt;a href=&#34;https://github.com/jimsalterjrs/sanoid?tab=readme-ov-file#syncoid&#34;&gt;syncoid&lt;/a&gt; to transfer those snapshots to&#xA;another machine. &lt;code&gt;Sanoid&lt;/code&gt; itself is responsible only&#xA;for taking new snapshots and pruning old ones you no longer care about. For&#xA;example, you might set up a policy in &lt;code&gt;sanoid&lt;/code&gt; to take a day&amp;rsquo;s worth of hourly&#xA;snapshots and a year&amp;rsquo;s worth of monthly snapshots. That means, that &lt;code&gt;sanoid&lt;/code&gt;&#xA;will take a snapshot every hour, but &amp;ndash; if executed with &lt;code&gt;--prune-snapshots&lt;/code&gt;&#xA;will delete all the hourlies (hourly snapshots in &lt;code&gt;sanoid&lt;/code&gt;&amp;rsquo;s lingo) that are&#xA;older than a day, monthlies that are older than a year and so on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenPGP Paper Backup</title>
      <link>https://prezu.ca/post/openpgp-paper-backup/</link>
      <pubDate>Fri, 15 Mar 2024 14:42:39 -0700</pubDate>
      <guid>https://prezu.ca/post/openpgp-paper-backup/</guid>
      <description>&lt;h1 id=&#34;openpgp-paper-backup&#34;&gt;openpgp-paper-backup&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using OpenPGP through &lt;a href=&#34;gpg_home&#34;&gt;GnuPG&lt;/a&gt; since early 2000&amp;rsquo;. It&amp;rsquo;s an&#xA;essential part of &lt;a href=&#34;https://www.debian.org/doc/manuals/developers-reference/&#34;&gt;Debian Developer&lt;/a&gt;&amp;rsquo;s workflow. We use it regularly to&#xA;authenticate package uploads and votes. Proper backups of that key are&#xA;really important.&lt;/p&gt;&#xA;&lt;p&gt;Up until recently, the only reliable option for me was backing up a tarball of&#xA;my &lt;code&gt;~/.gnupg&lt;/code&gt; offline on a set few flash drives. This approach is better than&#xA;nothing, but it&amp;rsquo;s not nearly as reliable as I&amp;rsquo;d like it to be. The main reason&#xA;is that data on a flash drive degrades over time. You have to remember to&#xA;periodically plug the flash drive into your computer&amp;rsquo;s USB port because the&#xA;electric charge that represents your data wears off with time. I always wanted&#xA;a more durable medium that I could store both, at home and in a safety deposit&#xA;box.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t store TOTP in Bitwarden for your online accounts!</title>
      <link>https://prezu.ca/post/dont-use-totp-in-bitwarden/</link>
      <pubDate>Fri, 18 Nov 2022 15:45:28 -0800</pubDate>
      <guid>https://prezu.ca/post/dont-use-totp-in-bitwarden/</guid>
      <description>&lt;p&gt;Since I&amp;rsquo;ve started working in Information Security space, I&amp;rsquo;ve been talking to&#xA;a lot of people&#xA;about the topics related to protecting ones&amp;rsquo; identity online. Basically, trying&#xA;to answer the question: &lt;em&gt;What does it take to sufficiently secure my online&#xA;accounts?&lt;/em&gt; Of course, the meaning of &lt;em&gt;sufficiently&lt;/em&gt; is very subjective here,&#xA;but I&amp;rsquo;ve always kept it vague to gauge what it means to them specifically.&lt;/p&gt;&#xA;&lt;p&gt;I did make sure to talk people of various backgrounds &amp;ndash; from deeply technical&#xA;all the way to not technical at all. Surprisingly, many of them, even among the&#xA;quite technical crowd, turned out to be lacking the understanding of some&#xA;important fundamentals. In particular, it&amp;rsquo;s not always clear to them, what&#xA;problems &lt;strong&gt;M&lt;/strong&gt;ulti-&lt;strong&gt;F&lt;/strong&gt;actor &lt;strong&gt;A&lt;/strong&gt;uthentication (&lt;strong&gt;MFA&lt;/strong&gt;) is targeting and&#xA;solving. What threats do Password Managers are targeting and solving.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unattended Upgrades Debian</title>
      <link>https://prezu.ca/post/unattended-upgrades-debian/</link>
      <pubDate>Sun, 13 Nov 2022 06:40:39 -0800</pubDate>
      <guid>https://prezu.ca/post/unattended-upgrades-debian/</guid>
      <description>&lt;h1 id=&#34;unattended-upgradesunat-upg-pkg-in-debian&#34;&gt;&lt;a href=&#34;https://tracker.debian.org/pkg/unattended-upgrades&#34;&gt;Unattended Upgrades&lt;/a&gt; in Debian&lt;/h1&gt;&#xA;&lt;p&gt;Feels like since forever have I been using&#xA;&lt;a href=&#34;https://tracker.debian.org/pkg/unattended-upgrades&#34;&gt;unattended-upgrades&lt;/a&gt; package to automate the Security&#xA;upgrades on my various Debian Stable based machines.&lt;/p&gt;&#xA;&lt;h2 id=&#34;default-settings&#34;&gt;Default Settings&lt;/h2&gt;&#xA;&lt;p&gt;By default &lt;code&gt;unattended-upgrades&lt;/code&gt; will install only Security updates. It also&#xA;will not send any email reports. That is not surprising &amp;ndash; well, you have&#xA;to have email delivery configured and &lt;code&gt;unattended-upgrades&lt;/code&gt; needs to know, what&#xA;email address to send those reports to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tweaking-the-config&#34;&gt;Tweaking the Config&lt;/h2&gt;&#xA;&lt;p&gt;If you need more than what the defaults give you, it&amp;rsquo;s easy to modify the&#xA;config as described in the &lt;a href=&#34;https://wiki.debian.org/UnattendedUpgrades&#34;&gt;Debian Wiki&lt;/a&gt;. I think the most&#xA;elegant way of customizing the configuration is described in the&#xA;&lt;a href=&#34;https://github.com/mvo5/unattended-upgrades/blob/master/README.md#setup&#34;&gt;README.md&lt;/a&gt; of the Debian package source. You basically create&#xA;&lt;code&gt;/etc/apt/apt.conf.d/52unattended-upgrades-local&lt;/code&gt; and put any overrides to the&#xA;default config you need.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with NitroKey 3 -- PC runner using USBIP</title>
      <link>https://prezu.ca/post/2022-07-13-nk3-pc-usbip-1/</link>
      <pubDate>Thu, 14 Jul 2022 16:01:56 -0700</pubDate>
      <guid>https://prezu.ca/post/2022-07-13-nk3-pc-usbip-1/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been wanting to use my brand new&#xA;&lt;a href=&#34;https://shop.nitrokey.com/shop/product/nk3cn-nitrokey-3c-nfc-148&#34;&gt;NitroKey 3&lt;/a&gt;, but TOTP is not&#xA;supported yet. So, I&amp;rsquo;m looking to implement it myself, since firmware and tooling are&#xA;open-source.&lt;/p&gt;&#xA;&lt;p&gt;NitroKey 3&amp;rsquo;s firmware is based on &lt;a href=&#34;https://trussed.dev/&#34;&gt;Trussed&lt;/a&gt; framework. In essence, it&amp;rsquo;s&#xA;been designed so that anyone can implement an independent Trussed application. Each such&#xA;application is like a module that can be added to Trussed-based product. So if I write a Trussed&#xA;app, I&amp;rsquo;d be able to add it to NK3&amp;rsquo;s &lt;a href=&#34;https://github.com/Nitrokey/nitrokey-3-firmware&#34;&gt;firmware&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Let&#39;s Encrypt certificates with Gandi LiveDNS</title>
      <link>https://prezu.ca/post/2022-02-10-certbot-gandi/</link>
      <pubDate>Thu, 10 Feb 2022 14:43:30 -0800</pubDate>
      <guid>https://prezu.ca/post/2022-02-10-certbot-gandi/</guid>
      <description>&lt;p&gt;As a Debian Developer I have a &lt;a href=&#34;https://wiki.debian.org/MemberBenefits&#34;&gt;discount&lt;/a&gt; on using&#xA;&lt;a href=&#34;https://gandi.net&#34;&gt;Gandi&lt;/a&gt; and I&amp;rsquo;ve been using it for quite a long time and have been very happy&#xA;with it. I&amp;rsquo;ve been using it for registering domains. For example this blog&amp;rsquo;s domain is managed by&#xA;my Gandi account.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-publicly-registered-domain-in-private-only-setup&#34;&gt;Using publicly registered domain in private-only setup&lt;/h2&gt;&#xA;&lt;p&gt;In addition to using this DNS registrar for public stuff, like a blog, one can also use it for a&#xA;domain accessible only within a private network. For example companies, large and small, use this&#xA;technique &amp;ndash; they have a set of subdomains of the domain they normally use, but those are accessible&#xA;only when an employee is in the office (connected directly to the company&amp;rsquo;s network) or connected&#xA;through a corporate VPN.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How does Google Authenticator work? (Part 3)</title>
      <link>https://prezu.ca/post/2021-08-16-totp-3/</link>
      <pubDate>Fri, 13 Aug 2021 08:30:00 -0700</pubDate>
      <guid>https://prezu.ca/post/2021-08-16-totp-3/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is the third in a three-part series. The remaining two:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-07-30-totp-1&#34;&gt;How does Google Authenticator work? (Part 1)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-08-12-totp-2&#34;&gt;How does Google Authenticator work? (Part 2)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Part 3 is the last part in this short cycle. Here I&amp;rsquo;ll explain all the details around&#xA;&lt;em&gt;&lt;strong&gt;T&lt;/strong&gt;ime-based &lt;strong&gt;O&lt;/strong&gt;ne-&lt;strong&gt;T&lt;/strong&gt;ime &lt;strong&gt;P&lt;/strong&gt;assword&lt;/em&gt; algorithm. I&amp;rsquo;ll finish up by also elaborating&#xA;on things common to both, &lt;em&gt;&lt;strong&gt;H&lt;/strong&gt;MAC-Based &lt;strong&gt;O&lt;/strong&gt;ne-&lt;strong&gt;T&lt;/strong&gt;ime &lt;strong&gt;P&lt;/strong&gt;assword&lt;/em&gt; algorithm:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;QR Codes used to easily transfer secrets from the server to the Authenticator app&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Base32&lt;/em&gt; algorithm &amp;ndash; used to store non-printable secret in a URI (effectively stored&#xA;by the QR Codes mentioned above).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;totp&#34;&gt;TOTP&lt;/h1&gt;&#xA;&lt;p&gt;One way to avoid the problems with lack of feedback between server and the app would be to shift&#xA;from using a counter that is increasing with every authentication attempt to a counter based&#xA;on, for example, a time stamp. This is what &lt;em&gt;TOTP&lt;/em&gt; is actually doing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How does Google Authenticator work? (Part 2)</title>
      <link>https://prezu.ca/post/2021-08-12-totp-2/</link>
      <pubDate>Thu, 12 Aug 2021 07:10:00 -0700</pubDate>
      <guid>https://prezu.ca/post/2021-08-12-totp-2/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is the the second in a three-part series. The remaining two:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-07-30-totp-1&#34;&gt;How does Google Authenticator work? (Part 1)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-08-16-totp-3&#34;&gt;How does Google Authenticator work? (Part 3)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Authenticator apps like &lt;em&gt;Google Authenticator&lt;/em&gt; use 2 authenticaion protocol centered around &lt;em&gt;What you have&lt;/em&gt;&#xA;paradigm. Those algorithms are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;HOTP&lt;/em&gt; (&lt;strong&gt;H&lt;/strong&gt;MAC-based &lt;strong&gt;O&lt;/strong&gt;ne &lt;strong&gt;T&lt;/strong&gt;ime &lt;strong&gt;P&lt;/strong&gt;assword), and&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;TOTP&lt;/em&gt; (&lt;strong&gt;T&lt;/strong&gt;ime-based &lt;strong&gt;O&lt;/strong&gt;ne &lt;strong&gt;T&lt;/strong&gt;ime &lt;strong&gt;P&lt;/strong&gt;assword).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They obviously are different, but both are centered around the same basic idea: using a rolling hash value,&#xA;that is predictable only to the server and the authenticator app. Additionally, both are using &lt;em&gt;HMAC-SHA-1&lt;/em&gt;&#xA;for generating those hash values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How does Google Authenticator work? (Part 1)</title>
      <link>https://prezu.ca/post/2021-07-30-totp-1/</link>
      <pubDate>Tue, 10 Aug 2021 12:20:27 -0700</pubDate>
      <guid>https://prezu.ca/post/2021-07-30-totp-1/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is the first in a three-part series. The remaining two:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-08-12-totp-2&#34;&gt;How does Google Authenticator work? (Part 2)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&#34;https://prezu.ca/post/2021-08-16-totp-3&#34;&gt;How does Google Authenticator work? (Part 3)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When you&amp;rsquo;re accessing services over the WEB &amp;ndash; let&amp;rsquo;s pick &lt;em&gt;GMail&lt;/em&gt; as an example &amp;ndash; a couple of&#xA;things have to happen upfront:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The server you&amp;rsquo;re connecting to (&lt;em&gt;GMail&lt;/em&gt; in our example) has to get to know who you are.&lt;/li&gt;&#xA;&lt;li&gt;Only after getting to know who you are it&amp;rsquo;s able to decide what resources you are allowed to&#xA;access (e.g. your own email inbox, your &lt;em&gt;Calendar&lt;/em&gt;, &lt;em&gt;Drive&lt;/em&gt; etc.).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Step 1 above is called &lt;em&gt;authentication&lt;/em&gt;. Step 2 is &lt;em&gt;authorization&lt;/em&gt; (server can authorize only&#xA;after successful authentication).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian on TrueNAS Core under bhyve</title>
      <link>https://prezu.ca/post/2021-07-28-debian-on-truenas/</link>
      <pubDate>Wed, 28 Jul 2021 15:45:59 -0700</pubDate>
      <guid>https://prezu.ca/post/2021-07-28-debian-on-truenas/</guid>
      <description>&lt;h1 id=&#34;installing-debiangnu-linux-under-bhyve-on-truenas-core&#34;&gt;Installing Debian/GNU Linux under bhyve on TrueNAS Core&lt;/h1&gt;&#xA;&lt;p&gt;I got myself a &lt;a href=&#34;https://www.truenas.com/truenas-mini/&#34;&gt;TrueNAS Mini X+&lt;/a&gt; couple of months ago. I have it running&#xA;TrueNAS Core based on FreeBSD. In that system you can run VMs under FreeBSD&amp;rsquo;s native hypervisor,&#xA;&lt;a href=&#34;https://bhyve.org/&#34;&gt;bhyve&lt;/a&gt;. Since there are a couple of quirks around running Debian specifically, I decided to&#xA;write up a quick article about setting up Debian-based VM there.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-quirks&#34;&gt;The quirks&lt;/h1&gt;&#xA;&lt;p&gt;The ones I&amp;rsquo;ve stumbled upon were:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Authentication in an Enterprise</title>
      <link>https://prezu.ca/post/2021-01-20-authentication-at-enterprise/</link>
      <pubDate>Tue, 20 Jul 2021 09:47:48 -0700</pubDate>
      <guid>https://prezu.ca/post/2021-01-20-authentication-at-enterprise/</guid>
      <description>&lt;p&gt;I&amp;rsquo;d like to shed some light at the process of &lt;code&gt;Authentication&lt;/code&gt; since it&amp;rsquo;s a fundamental building block in creating&#xA;secure tools that need to communicate with other actors over the network. When tools and/or users interact with one&#xA;another &amp;ndash; e.g., through a web browser &amp;ndash; both ends of the interactions  need a way to make sure,&#xA;they&amp;rsquo;re communicating with the right party. Some bad actor might for example create a web page that looks like your&#xA;bank&amp;rsquo;s online banking portal. With additional DNS spoofing you might be connecting to the wrong website. When you&amp;rsquo;d be&#xA;trying to log in you&amp;rsquo;d be prompted for username and password. If you entered them on that phony web page, you&amp;rsquo;d provide&#xA;them to the attacker. It&amp;rsquo;s imperative for your browser to be able to make sure, that this is not the case here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact me</title>
      <link>https://prezu.ca/page/contact/</link>
      <pubDate>Wed, 18 Nov 2020 11:41:24 -0800</pubDate>
      <guid>https://prezu.ca/page/contact/</guid>
      <description>&lt;div class=&#34;container&#34;&gt;&#xA;&lt;div class=&#34;col-xs-8 col-sm-8 col-md-8 col-lg-8&#34;&gt;&#xA;&lt;form&#xA;  action=&#34;https://formspree.io/f/mjvzzkpa&#34;&#xA;  method=&#34;POST&#34;&gt;&#xA;  &lt;div class=&#34;row&#34;&gt;&#xA;    &lt;label class=&#34;form-label&#34; for=&#34;name&#34;&gt;&#xA;      Your Name (Optional)&#xA;    &lt;/label&gt;&#xA;    &lt;input class=&#34;form-control&#34; type=&#34;text&#34; name=&#34;name&#34; id=&#34;name&#34;&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;row&#34;&gt;&#xA;    &lt;label class=&#34;form-label&#34; for=&#34;email&#34;&gt;&#xA;      Your email:&#xA;    &lt;/label&gt;&#xA;    &lt;input class=&#34;form-control&#34; type=&#34;email&#34; name=&#34;email&#34; id=&#34;email&#34;&#xA;           aria-describedby=&#34;emailHelp&#34;&gt;&#xA;    &lt;div id=&#34;emailHelp&#34; class=&#34;help-block&#34;&gt;&#xA;      I&#39;m using &lt;a href=&#34;https://formspree.io&#34;&gt;Formspree&lt;/a&gt; for delivering&#xA;      emails this from this form. If you don&#39;t want to share your email with&#xA;      them, better shoot me an email directly.&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;row&#34;&gt;&#xA;    &lt;label class=&#34;form-label&#34; for=&#34;message&#34;&gt;&#xA;      Your message:&#xA;    &lt;/label&gt;&#xA;    &lt;textarea class=&#34;form-control &#34; name=&#34;message&#34; id=&#34;message&#34;&gt;&lt;/textarea&gt;&#xA;  &lt;/div&gt;&lt;br&gt;&#xA;&#xA;  &lt;div class=&#34;row&#34;&gt;&#xA;    &lt;button class=&#34;btn btn-primary&#34; type=&#34;submit&#34;&gt;Send&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>About me</title>
      <link>https://prezu.ca/page/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://prezu.ca/page/about/</guid>
      <description>&lt;p&gt;My name&amp;rsquo;s Patryk Cisek and I&amp;rsquo;m a long time software engineer working in&#xA;Cybersecurity space. After hours I&amp;rsquo;m also a member of Debian project.&lt;/p&gt;&#xA;&lt;p&gt;Some of my Open-Source projects:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/prezu-debian/nitrokeyauthenticator&#34;&gt;Nitrokey Authenticator&lt;/a&gt; - A TOTP Authenticator app for&#xA;&lt;a href=&#34;https://shop.nitrokey.com/shop/product/nkpr2-nitrokey-pro-2-3&#34;&gt;Nitrokey Pro3&lt;/a&gt; / &lt;a href=&#34;https://puri.sm/products/librem-key/&#34;&gt;LibremKey&lt;/a&gt; USB Security Keys.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://openpgp-paper-backup.org&#34;&gt;openpgp-paper-backup&lt;/a&gt; - CLI tool for backing up and&#xA;restoring OpenPGP Secret Keys in a paper form (printed out backups).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/prezu-debian/unattended-upgrades-debian&#34;&gt;unattended-upgrades-debian&lt;/a&gt; - An Ansible Role for enabling&#xA;automatic upgrades in Debian.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/prezu-debian/certbot-gandi&#34;&gt;certbot-gandi&lt;/a&gt; - An Ansible Role for setting up Let&amp;rsquo;s&#xA;Encrypt via &lt;a href=&#34;https://gandi.net&#34;&gt;Gandi&amp;rsquo;s&lt;/a&gt; LiveDNS API.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/prezu-debian/nginx_rev_proxy&#34;&gt;nginx-rev-proxy&lt;/a&gt; - Simple Ansible role for setting up Reverse&#xA;Proxy using certificates provided by &lt;a href=&#34;https://gitlab.com/prezu-debian/certbot-gandi&#34;&gt;certbot-gandi&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
