<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>IceShard Blog</title>
        <link>https://iceshard.net/blog</link>
        <description>IceShard Blog</description>
        <lastBuildDate>Fri, 24 Jul 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Conan Package Manager Recipes]]></title>
            <link>https://iceshard.net/blog/2026-07-24/conan-recipes</link>
            <guid>https://iceshard.net/blog/2026-07-24/conan-recipes</guid>
            <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Working with dependencies in any environment is often a pain. This is true for any language or tool that is used to do so.]]></description>
            <content:encoded><![CDATA[<p>Working with dependencies in any environment is often a pain. This is true for any language or tool that is used to do so.</p>
<p>Because C++ does not have a standarized package manager it resulted in multiple tools being created in parallel.</p>
<p>One of these tools is <a href="https://conan.io/" target="_blank" rel="noopener noreferrer" class="">Conan</a> which I've decided to use for all my projects starting around 2018. <em>(if not earlier)</em></p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="quick-history-lesson">Quick History Lesson<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#quick-history-lesson" class="hash-link" aria-label="Direct link to Quick History Lesson" title="Direct link to Quick History Lesson" translate="no">​</a></h2>
<blockquote>
<p>This part is entirely my own experience, it might not fully reflect the history of the tool ;p</p>
</blockquote>
<p>Initially when conan was released to the public <em>(and was already stable enough for usage)</em> it was one of the first solutions that provided a flexible and powerful enough definitions to handle C++'es various build tools, toolchains, platorms, standards and anything else that might introduce ABI incompatibilities.</p>
<p>While version 1.0 of Conan did allow features like multi-config packages <em>(which was a feature mainly for Visual Studio projects)</em>, creating the packages themselfs was much more complex than nowadays.</p>
<p>Not only does Conan v2 support many more tools like <strong>CMake</strong> or <strong>Premake</strong>, it also provides a lot of utilities to build your own recipe / generator extensions.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="public-recipes">Public recipes<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#public-recipes" class="hash-link" aria-label="Direct link to Public recipes" title="Direct link to Public recipes" translate="no">​</a></h2>
<p>Now getting to the crux of this post, the state of public available recipes found on <a href="https://conan.io/center" target="_blank" rel="noopener noreferrer" class="">Conan Center</a>.</p>
<p>Unless the recipe is header-only, almost none of them work out of the box.</p>
<ul>
<li class="">You either need to install yet another build tool on your os.</li>
<li class="">Change direct dependency versions to a value that another dependency requests indirectly.</li>
<li class="">The recipe itself does some weird logic instead of just running the build tool.</li>
</ul>
<p>Whi is this happening, what's the reason you ask?</p>
<p>It's the <strong>CRIMINAL</strong> underutilization of the <strong>version ranges</strong> and <strong>tool_requires</strong> features and sometimes misunderstanding of the build tools.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="versioning-done-better">Versioning done better<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#versioning-done-better" class="hash-link" aria-label="Direct link to Versioning done better" title="Direct link to Versioning done better" translate="no">​</a></h2>
<p>While I admit, resolving versions between multiple recipes may even become impossible depending on the complexity at least a few general approaches should be considered.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="version-conflicts">Version Conflicts<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#version-conflicts" class="hash-link" aria-label="Direct link to Version Conflicts" title="Direct link to Version Conflicts" translate="no">​</a></h3>
<p>While it is a bad idea to have your final project use version ranges, I would argue that any dependency inside a <code>conanfile.py</code> should almost always use version ranges.</p>
<p>With a requirement on <strong>tool_requires</strong> dependencies, but more on that in a moment.</p>
<p>Imagine we have a dependency on <strong>LibraryA</strong> version <strong>1.12.13</strong>.
Because we provided the version value directly, it will always resolve the package to that specific version. No other versions will be accepted.</p>
<p>While this does not create an issue in isolation, it can become a problem if two or more packages use different versions of the same dependency.<br>
<strong>Project</strong> -&gt; <code>LibraryA/1.2.13</code><br>
<strong>Project</strong> -&gt; <code>LibraryB/0.2.3</code> -&gt; <em>(intermediate)</em> -&gt; <code>LibraryA/1.2.15</code></p>
<p>Now Conan run into an issue, because <strong>LibraryB</strong> specified its dependency on <strong>LibraryA</strong> with a specific version, we have a conflict. Which version should we use?</p>
<p>While Conan provides a way to force a specific library version we are not looking into this approach today.</p>
<p>What we want is for libraries to select a version range on their dependencies.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="version-ranges">Version ranges<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#version-ranges" class="hash-link" aria-label="Direct link to Version ranges" title="Direct link to Version ranges" translate="no">​</a></h3>
<p>Conan alows us to specific a range of compatible versions for a dependency, this uses square brackets <code>[...]</code> notation to do this. For example <code>LibraryA/[&gt;=1.2.0]</code> will accept any version of <strong>LibraryA</strong> if it's higher or equal to <strong>1.2.0</strong>.</p>
<p>The requested version stings are reported by <strong>Conan</strong> during dependency gathering, giving the consumer valuable information about two things:</p>
<ol>
<li class="">The library with this dependency is aware of upcoming versions and is probably prepared to deal with that fact.</li>
<li class="">If a version conflict actually occurs on a version range, the probablility the packages are actually incompatible is high.</li>
</ol>
<p>Lets check out usage with ranges:
<strong>Project</strong> -&gt; <code>LibraryA/1.2.13</code><br>
<strong>Project</strong> -&gt; <code>LibraryB/0.2.3</code> -&gt; <em>(intermediate)</em> -&gt; <code>LibraryA/[&lt;2.0 &gt;=1.2]</code></p>
<p>Here <strong>LibraryB</strong> has a version range on dependency <strong>LibraryA</strong>, it will accept any version above <strong>1.2.0</strong> and reject everything from <strong>2.0.0</strong> and higher.<br>
This does assume <strong>LibraryA</strong> follows semantic versioning to the letter, but it's still better than brute-forcing your desired version and hope for the best that <strong>LibraryB</strong> will accept your version as is.</p>
<p>However, as mentioned previously, using version ranges on your final project does not make sense, as you should target a single version. Ranges should be used only by packages that are expected to be consumed as dependencies themselves.</p>
<p>If you specify a version range on an actual final project, now you lost all control or reasoning about what your program may do, since the version is not directly set and may change any time.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="do-not-assume-my-environment">Do not assume my Environment!<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#do-not-assume-my-environment" class="hash-link" aria-label="Direct link to Do not assume my Environment!" title="Direct link to Do not assume my Environment!" translate="no">​</a></h2>
<p>I think the worst part of public dependencies is, that they assume I have every single build tool installed on my workspace.</p>
<p>With just a few popular dependencies, you will be expected to have installed the following: <strong>CMake</strong>, <strong>Autotools</strong>, <strong>Make</strong>, <strong>Ninja</strong>, <strong>Premake</strong>, <strong>Mason</strong> and probably something else...</p>
<p>Not only do I not want to deal with installing any of these tools locally, I don't even want them to show up in my terminals autocomplete...</p>
<p>So how do we build without having the tools? Well, <strong>Conan</strong> provides a pretty good feature for this, which is called <strong>tool_requires</strong>.<br>
This simple property allows you to specify dependencies required <strong>ONLY</strong> during building of your library. So if you are only downloading the ready binaries and <strong>Conan</strong> is generating the compiler arguments for your own project, these dependencies will not be part of that.</p>
<p>In addition, <strong>Conan</strong> allows packages to export executables, so when we put both together, it's easy to understand that we can request the desired tools like <strong>CMake</strong> or <strong>Ninja</strong> during package builds, and not deal with them if everything is already available.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="quick-how-to">Quick How-To<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#quick-how-to" class="hash-link" aria-label="Direct link to Quick How-To" title="Direct link to Quick How-To" translate="no">​</a></h3>
<p>Lets circle back to our example from above. Lets say we have the following setup</p>
<blockquote>
<p><strong>Project</strong></p>
<ul>
<li class="">Requires: <strong>LibraryA</strong>, <strong>LibraryB</strong></li>
<li class="">We use <strong>CMake</strong> locally to build our project</li>
</ul>
<p><strong>LibraryA</strong></p>
<ul>
<li class="">Requires: <strong>nothing</strong></li>
<li class="">Uses: <strong>CMake</strong></li>
</ul>
<p><strong>LibraryB</strong></p>
<ul>
<li class="">Requires: <strong>LibraryA</strong></li>
<li class="">Uses <strong>Premake5</strong></li>
</ul>
</blockquote>
<p>Now if we do <strong>NOT</strong> use the <strong>tool_requires</strong> feature and <strong>LibraryB</strong> does not provide a ABI compatible binary, we now are forced to install <strong>Premake5</strong> on our system, setup paths to be discoverable by <strong>Conan</strong> and hope that the version of Premake we use is compatible with the script the dependency expects...</p>
<p>I say <strong>"No! Thank you..."</strong> to this, it's pain in the ass and I don't want to understand your tool.</p>
<p>Now lets say the package has properly set up it's <strong>tool_requires</strong> property:</p>
<blockquote>
<p><strong>LibraryA</strong></p>
<ul>
<li class="">Requires: <strong>nothing</strong></li>
<li class="">ToolRequires: <strong>CMake/[&lt;4.0 &gt;=3.20.0]</strong></li>
</ul>
<p><strong>LibraryB</strong></p>
<ul>
<li class="">Requires: <strong>LibraryA</strong></li>
<li class="">ToolRequires: <strong>Premake/[&lt;6.0 &gt;=5.0.0]</strong></li>
</ul>
</blockquote>
<p>Now if we lack the build binaries, <strong>Conan</strong> will download the expected tools within their expected version ranges and build them for us.</p>
<p>As long as the tool is avilable as a <strong>Conan</strong> package <em>(in most cases they are)</em> this makes dependency management much smoother.<br>Especially if a library provides version ranges for the tools it uses, now multiple packages can very probably decide on a single necessary CMake version reducing storage usage but also ensuring correctness.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>The fact that, to this day almost a decade of <strong>Conan</strong> being accessible, I still see recipes not using <strong>tool_requires</strong> is astounding...</p>
<p>It makes it almost impossible to rely on public recipes, because to use them I need to spend half a day installing the desired tool.</p>
<p>Maybe once someone actually starts reading my blog posts, this will change, but until then, I'm stuck with making my own recipes for all the dependencies I want or need to use.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="links">Links<a href="https://iceshard.net/blog/2026-07-24/conan-recipes#links" class="hash-link" aria-label="Direct link to Links" title="Direct link to Links" translate="no">​</a></h2>
<ul>
<li class="">Conan (<a href="https://www.conan.io/" target="_blank" rel="noopener noreferrer" class="">Website</a>)</li>
<li class="">Conan Center (<a href="https://www.conan.io/center" target="_blank" rel="noopener noreferrer" class="">Packages</a>)</li>
<li class="">Conan Docs (<a href="https://docs.conan.io/2/" target="_blank" rel="noopener noreferrer" class="">Website</a>) - <a href="https://docs.conan.io/2/tutorial/versioning/versions.html" target="_blank" rel="noopener noreferrer" class="">versions</a>, <a href="https://docs.conan.io/2/reference/conanfile/methods/build_requirements.html" target="_blank" rel="noopener noreferrer" class="">build_requirements / tool_requires</a></li>
</ul>]]></content:encoded>
            <category>Conan</category>
            <category>Dependency Management</category>
            <category>Tools</category>
        </item>
        <item>
            <title><![CDATA[Working with Docker]]></title>
            <link>https://iceshard.net/blog/2026-07-15/working-with-docker</link>
            <guid>https://iceshard.net/blog/2026-07-15/working-with-docker</guid>
            <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Since long I've tried multiple times to understand docker, but up until my third or fourth time I've had quite the strugle to fully graps the concepts.]]></description>
            <content:encoded><![CDATA[<p>Since long I've tried multiple times to understand docker, but up until my third or fourth time I've had quite the strugle to fully graps the concepts.</p>
<p>And yet, there are topics I've not even started looking into...</p>
<!-- -->
<p>While I've had multiple attempts at running my personal NAS / VPS setups, hoping to host a cloud storage, mailbox, website or block. It always ended up tragically.</p>
<p>Not only because I've had lack of understanding why secured connections are a must, or how to setup a firewall.</p>
<p>A lot of problems came from the fact I've had little to no understanding how applications actually bind to networks, how ports are used and how to even make it possible for multiple services to be hosted from a single machine. <em>(network*)</em></p>
<p>My first exposure to docker was due the <a href="https://github.com/nginx-proxy/nginx-proxy" target="_blank" rel="noopener noreferrer" class="">Nginx-Proxy</a> project. I've been researching <em>(probably a third time)</em> how to setup multiple services on multiple sub-domains. This project also introduced me to the concept of <a href="https://letsencrypt.org/" target="_blank" rel="noopener noreferrer" class="">Let's Encrypt Certificates</a></p>
<p><strong>And thus I've installed docker for the first time on my VPS.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="first-steps">First steps<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#first-steps" class="hash-link" aria-label="Direct link to First steps" title="Direct link to First steps" translate="no">​</a></h2>
<p>In short, I found docker <strong>complicated</strong>...</p>
<p>The example command lines looked scary, the parameters short and not really self-explanatory, especially when I understood the <code>-v</code> parameter be a short form of <code>--verbose</code>, which often is the case, right?</p>
<p>Without really udnerstanding what a container is <em>(since I had no particular interest in HOW it works, but IF it works)</em>, I've started testing... A lot of testing...</p>
<p>Shortly after I found people using yaml files, called <code>docker-compose.yml</code>, this peaked my intetest... It looked, <strong>clean</strong>.</p>
<p>Docker compose removed the cryptic parameters of the <strong>Docker CLI</strong> and gave structure to something I've not undersood much yet. It was some kind of savior, from actually reading the nitty-gritty details in the Docker documentation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="volumes-environments-networks-and-more">Volumes, Environments, Networks, and more...<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#volumes-environments-networks-and-more" class="hash-link" aria-label="Direct link to Volumes, Environments, Networks, and more..." title="Direct link to Volumes, Environments, Networks, and more..." translate="no">​</a></h2>
<p>While I was able to setup a few services with just docker compose, some pre-shared configuration files and following basic steps telling me to set <code>THIS_ENV_VAR=I'm your father!</code> it was far from good.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment-variables">Environment Variables<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#environment-variables" class="hash-link" aria-label="Direct link to Environment Variables" title="Direct link to Environment Variables" translate="no">​</a></h3>
<p>The bread and butter of <strong>Docker</strong> and even more <strong>Docker Compose</strong>. Variables are used to control various aspects of a container, starting from setup values down to controlling behavior betwen restarts or upgrades.</p>
<p>Value can be specified directly on the CLI / docker compose file, or can be indirected with values from a <code>.env</code> file.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>I've had no idea what <code>.env</code> files where up until recently. Since I'm working in game-dev with almost always pre-configured* environments for <strong>Visual Studio</strong> the usage of these files is non-existent.</p><sub>* I've seen things...</sub></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="volumes">Volumes<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#volumes" class="hash-link" aria-label="Direct link to Volumes" title="Direct link to Volumes" translate="no">​</a></h3>
<p>On the surface, simple, easy to understand, nothing complex going. You take a part on your host and map it to a path on the container. Why do we do this? Just to access files?</p>
<p>Well, yes, BUT<sup>t</sup> volumes are also used to preserver state between container upgrades.
They can also server the purpose of sharing files between containers by mapping the same <em>(external)</em> volume on multiple containers.</p>
<p>While in most cases <em>(let me ballpark a value of 90%)</em> you don't need more than mapping a few volumes to a single container, the feature allows for far more configurations.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>My second most used feature is mapping of subdirectories from a volume. A basic explanation can be found [here].(<a href="https://docs.docker.com/engine/storage/volumes/#mount-a-volume-subdirectory" target="_blank" rel="noopener noreferrer" class="">https://docs.docker.com/engine/storage/volumes/#mount-a-volume-subdirectory</a>).</p></div></div>
<p>mostly because I've had no idea of actual web-security, why it matters to have your site served with a secured connection, how to properly host multiple services from a single network</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="networks">Networks<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#networks" class="hash-link" aria-label="Direct link to Networks" title="Direct link to Networks" translate="no">​</a></h3>
<p>Oh boy... Is this a rabbit hole on it's own, and not just because of Docker, but in generall how networks are designed, how information is passed between connected clients and how easy it is to get lost.</p>
<p>One of the most underdocumented or rather, under-advertised features in my opinion is the possibility to assign subnets directly and mark them as <strong>internal</strong>.</p>
<p>With just this you can make a lot of containers much safer, by closing them off from the world but also be able to assign IP's to some expected values.</p>
<p>I might go over this topic based on my personal setups in the future.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="others">Others<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others" translate="no">​</a></h3>
<p>I've so far just scratched the surface, there are many other configuration surfaces that docker exposes.</p>
<p>And this does not include the features that connected containers can provide...</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nowadays">Nowadays<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#nowadays" class="hash-link" aria-label="Direct link to Nowadays" title="Direct link to Nowadays" translate="no">​</a></h2>
<p>At this point I've fully embraced the usage of <strong>Docker</strong>, not only for hosting a website or service, but also to run various CLI tools.</p>
<p>The ability to simply attach parts of workspace to a container, and execute the a tool installed inside it is something truly amazing.</p>
<p>Right now I'm generating doxygen files and this website using this approach.
The repository contains only the content, while the container keeps all node dependencies and scripts.</p>
<p>Since both <strong>Doxygen</strong> and and <strong>Docusaurus</strong> produce static files that can be hosted without all the source content and node scripts, that's what I'm doing.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="links">Links<a href="https://iceshard.net/blog/2026-07-15/working-with-docker#links" class="hash-link" aria-label="Direct link to Links" title="Direct link to Links" translate="no">​</a></h2>
<ul>
<li class="">Docker (<a href="https://www.docker.com/" target="_blank" rel="noopener noreferrer" class="">Website</a>) - <a href="https://docs.docker.com/compose/how-tos/environment-variables/set-environment-variables/" target="_blank" rel="noopener noreferrer" class="">Envrionment Variables (Compose)</a>, <a href="https://docs.docker.com/compose/how-tos/networking/" target="_blank" rel="noopener noreferrer" class="">Networking (Compose)</a>, <a href="https://docs.docker.com/engine/storage/" target="_blank" rel="noopener noreferrer" class="">Storage</a></li>
<li class="">Doxygen (<a href="https://www.doxygen.nl/" target="_blank" rel="noopener noreferrer" class="">Website</a>)</li>
<li class="">Docusaurus (<a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer" class="">Website</a>)</li>
<li class="">Let's Encrypt (<a href="https://letsencrypt.org/" target="_blank" rel="noopener noreferrer" class="">Website</a>)</li>
<li class="">NGinx Proxy (<a href="https://github.com/nginx-proxy/nginx-proxy" target="_blank" rel="noopener noreferrer" class="">GitHub</a>)</li>
</ul>]]></content:encoded>
            <category>Rambling</category>
            <category>Behind The Scenes</category>
            <category>Docker</category>
        </item>
        <item>
            <title><![CDATA[Revival]]></title>
            <link>https://iceshard.net/blog/2026-06-14/revival</link>
            <guid>https://iceshard.net/blog/2026-06-14/revival</guid>
            <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[It has been a long time since I've written my first and only blog post. Time for a second one?]]></description>
            <content:encoded><![CDATA[<p>It has been a long time since I've written my first and only blog post. Time for a second one?</p>
<!-- -->
<p>Back then I've just played with the idea of anoying the general public with some of my views and opinions.</p>
<p>Recently I've started working on moving the whole project to a self-hosted ecosystem, this includes:</p>
<ul>
<li class="">A git repository with interface (ForgeJo)</li>
<li class="">A CI/DC server (TeamCity)</li>
<li class="">A project system for issue tracking, documentation, etc... (YouTrack, currently hosted on JetBrains)</li>
<li class="">A OCID provider (KeyCloak)</li>
<li class="">A translation service (Accent)</li>
<li class="">And more...</li>
</ul>
<p>With this endavor slowly taking it's final form, since most of these are already configured, secured and already running for the past few months, I'll now share what I've learned.</p>
<p>Don't expect any regualr schedule on these blog posts but I should be more often that 2-3years. At least until I'll get busy again with real-life issues.</p>
<p>Stay safe, and don't get consumed by the AI craze. Knowing is king!</p>]]></content:encoded>
            <category>Rambling</category>
            <category>Behind The Scenes</category>
        </item>
    </channel>
</rss>