<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled Publication]]></title><description><![CDATA[Untitled Publication]]></description><link>https://blog.robertdiebels.com</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 02:49:31 GMT</lastBuildDate><atom:link href="https://blog.robertdiebels.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Software Developer visits: “Pre-Fosdem: Open Source Policy in the EU”]]></title><description><![CDATA[Last January I visited a pre-Fosdem meeting on Open Source policy in the European Union (EU). I was invited because I had signed several petitions to adjust Art. 13 of the The EU Copyright Directive so that it would exclude Open Source Software. I fi...]]></description><link>https://blog.robertdiebels.com/a-software-developer-visits-pre-fosdem-open-source-policy-in-the-eu-73ec1c2921cd</link><guid isPermaLink="true">https://blog.robertdiebels.com/a-software-developer-visits-pre-fosdem-open-source-policy-in-the-eu-73ec1c2921cd</guid><dc:creator><![CDATA[Robert Diebels]]></dc:creator><pubDate>Thu, 04 Jun 2020 22:35:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650647060212/KSgJ1HJii.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last January I visited a pre-Fosdem meeting on Open Source policy in the European Union (EU). I was invited because I had signed several petitions to adjust Art. 13 of the The EU Copyright Directive so that it would exclude Open Source Software. I figured I would attend the conference because I highly value Open Source Software (OSS) and I wanted to explore what it felt like being a fish out of water in a room of policy makers. Furthermore, it’s in my nature to scrutinize authority. So I thought I would visit the conference and see what kind of policy the EU has in store for OSS.</p>
<p>As for the structure of this article. First, I will discuss each talk in order of appearance. Second, to determine what’s on the mind of policy-makers, I will list a series of terms that were emphasized across multiple talks. Take their emphasis as you will. Third, I will make some remarks of my own about what I thought might have been interesting to discuss during this meeting. I did not put forward my remarks during the conference due to the time-crunch most speakers and attendees were under. Instead I delve into them here. Finally, I list my key takeaways of the meeting.</p>
<h3 id="heading-talks">Talks</h3>
<h4 id="heading-european-commission-opening-statement">European Commission Opening Statement</h4>
<p>Speaker: Pearse O’Donohue, Director for Future Networks, European Commission.</p>
<p>Pearse’s opening statement mainly revolved around the importance to put OSS on the forefront of EU Policy where possible. He stated that the OSS community should challenge the European Commission (EC) and a focus should be put on how OSS plays a role in the EU. Specifically he mentioned that OSS plays a role economically, as evidenced by the market study discussed later during the meeting.</p>
<p>He stated that the position of the EC on OSS implies that it should be citizen-first, embrace AI, recognize digital transformation’s impact on climate change as OSS intersects with both subjects, digital skills should be prioritized by policy-makers and finally that OSS removes dependency on the supply chain. A worthy mention made by Pearse was one regarding Open Source Hardware (OSH). Which Pearse stated was: ”Certainly on his mind.”. It would have been interesting to see his thoughts on that subject. However, as the subject of the meeting was OSS not OSH it seemed natural to leave it at a mention.</p>
<p>I have no particular additions to make to his opening statement save for the fact that I see no reason for OSS and climate change to be mentioned in the same sentence. Unless you specifically wish to target climate change with OSS I see no reason to tie the policies to each-other.</p>
<h4 id="heading-the-european-commissions-open-source-study-engaging-the-community-to-measure-impact">The European Commission’s Open Source Study: Engaging the Community to Measure Impact</h4>
<p>Speaker: Mirko Boehm, TU Berlin; Paula Grzegorzewska, Open Forum Europe (OFE).</p>
<p>This talk was split into two parts. During the first part Mirko Boehm spoke about his own views on OSS and OSS’s impact on society viewed from 3 perspectives; public, scientific and business. During the second part of the talk Paula Grzegorzewska spoke about a study yet to be conducted that would measure OSS’s actual impact.</p>
<p>During Mirko’s part in which he shared his views, one statement he made stuck with me. In the statement he paraphrased someone he knew as saying:</p>
<blockquote>
<p>Open Source projects are incubators for technology and people.</p>
</blockquote>
<p>He built upon that paraphrase by mentioning that many people he knew that were involved with OSS projects at some point, now held positions of high importance. Although clearly anecdotal, the statement stuck with me as I get the same feeling about OSS.</p>
<p>The remainder of his talk centred around OSS’s impact. In it he described 3 perspectives on OSS. 1) The public’s perspective, concerning the idea that protecting OSS should be a public interest since, in essence, OSS is a public good. Furthermore, it positively contributes to society implying common interest between OSS and society. Which should warrant protection of OSS as part of EU Policy.<br />2) The scientific perspective on OSS. Where OSS could aid towards Open Science, which is part of EU Policy. His view is that the scientific world struggles with openness and OSS could aid in achieving it. A statement with which I could not agree more.<br />3) The business perspective on OSS, where there is a conflict according to Mirko. As he stated that the central ideas of OSS; Openness and Fairness, do not mesh well with most business goals. As it requires sharing of one’s own technological advancements, potentially giving away a competitive advantage.</p>
<p>During Paula’s part of the talk she discussed that these perspectives required verification. As such, the EC had requested a study be done to measure the impact of OSS. Paula discussed the need for community contributions to adequately measure impact and a potential structure of the study as the study would most likely be used to inform EU Policy towards OSS.</p>
<p>I expected this talk to contain results of a study that had already taken please. Primarily because I had read a different title for this talk in a programme for this meeting that was published online. As such I’ve neglected to jot down much of the study’s structure. For those interested I suggest contacting OFE for Paula’s details and inquiring about the study.</p>
<h4 id="heading-digital-sovereignty-as-openness-gaia-x-and-open-source">Digital Sovereignty as Openness: Gaia-X and Open Source</h4>
<p>Speaker: Peter Ganten, CEO, Open Source Business Alliance (OSB-A).</p>
<p>Peter spoke about a project called <a target="_blank" href="https://www.bmwi.de/Redaktion/EN/Publikationen/Digitale-Welt/das-projekt-gaia-x-executive-summary.pdf?__blob=publicationFile&amp;v=6">GAIA-X</a>. An attempt of the German Federal Government, business and science communities, to bring digital sovereignty back into the cloud.</p>
<p>According to Peter one of the prime motivators behind this project is the influence the US has on EU policy, mentioning US sanctions on Russia in an attempt to force Europe to acquire American gas [ <a target="_blank" href="https://www.rt.com/op-ed/487469-us-russia-europe-gas/">full story</a> ] as an example. Undue influence of this kind can be seen in the cloud market, where US-based cloud-providers have a market-share of over 50%. US cloud-providers however, are subject to American regulation such as the Cloud Act, impinging on European data-protection laws such as the GDPR. The German Federal Government intends to mitigate this US influence with the creation of GAIA-X. Aiming to create a European-based cloud-infrastructure which would be subject to European regulations.</p>
<p>Furthermore, Peter went on to state that: “Proprietary software endangers digital sovereignty.”. Which is true to a certain degree. However, in the case of cloud-providers proprietary software is not the issue, the issue is the lack of influence over the providers through regulation. Peter proposed that GAIA-X could resolve this lack of influence by creating a federated and decentralized data-infrastructure in Europe. As for the use of OSS by GAIA-X, he mentioned that the use of CloudStack as one of the sub-systems in GAIA-X had been considered. By Q2 of 2021 we’ll see if this will be the case, as implementation of GAIA-X prototypes is scheduled for Q4 of 2020.</p>
<p>Considering the topic of the meeting I found that the talk was lacking in the specifics of the usage of OSS within the infrastructure. I can imagine this was due to the project only being recently announced (Q4 2019), however this should not have prohibited some brain-storming or further thoughts on possible use of OSS within the infrastructure.</p>
<h4 id="heading-results-of-open-market-study-dyanamic-market-fueled-by-digital-transformation-and-innovation">Results of Open Market Study: Dyanamic Market Fueled by Digital Transformation and Innovation</h4>
<p>Speaker: Stéfane Fermigier, President, French National Council for Free and Open Source Software (CNLL).</p>
<p>Stéfane’s talk was split into 3 sections, addressing 1) The size of the European Open Source market, 2) the results of a survey among 117 organizations concerning; how OSS is used, which OSS partners are contracted, how digital transformation impacted their OSS use and, 3) some specific information about the policies regarding OSS of 7 European nations.</p>
<p>As Stéfane made only a few remarks about OSS policy, and to avoid being long-winded, I’m not going to address all the growth numbers here. I’ve added the slides of the talk [ <a target="_blank" href="http://www.openforumeurope.org/wp-content/uploads/2020/02/CNLL-study.pdf">source</a> ] and I’ll only discuss 6 major take-aways. 1) The use of open-source in the IT Service market is growing by an average of about 8% annually, with a projected market-value of 30 billion €,<br />2) both CEO’s and IT departments promote the use of OSS in their company, 3) the main motivations for using OSS are; provides solutions aligned with company needs, no dependency on external suppliers, cost-reduction, 4) the key factors for success of open source projects within surveyed companies are; security by design, compliance with regulations, availability of internal skills, 5) the lack of OSS skills hinders adption, 6) over 40% of the surveyed companies stated that for both digital transformation and innovation OSS plays a very important role.</p>
<p>Most of the results presented in this talk were not very surprising to me. However, what did surprise me was the market-value and the apparent gap in skills. For a market that has such value I would expect there to be more investment in closing the skill-gap.</p>
<h4 id="heading-delivering-an-open-digital-approach-to-healthcare-how-open-source-is-changing-digital-health">Delivering an Open Digital Approach to Healthcare: How Open Source is Changing Digital Health</h4>
<p>Speakers: Dr. Axel K. Braun, Coordinator Europe, GNU Health;<br />Stuart Mackintosh, CEO OpusVL, presenting the Dito Project.</p>
<p>Dr. Braum toke point on this talk stating it was was geared towards providing an overview of the state of OSS in healthcare. He led with some insights in the nature of “Free” vs. “Free of charge” applications. Stating that in choosing for these apps you need to be able to trust them.</p>
<p>He then gave 3 examples of apps and companies related to proprietary software usage in health-care related context. First, stating that health-care apps such as Vivy suffer from severe <a target="_blank" href="https://www.tellerreport.com/tech/--new-health-app-vivy--%22i-can-only-advise-against-using-it%22-.ryx-QklF7.html">security and privacy issues</a>. In the case of Vivy there were 2 glaring issues, 1) the app shared private date with 3rd parties and 2) the way public/private key sharing worked was misunderstood leading to severe gaps in security. Whereas the Ada Health App “merely” shared data of their users.<br />Second, on Dr. Braum’s list was Google. Where he stated that Google shares data with insurance companies, which may or may not, lead to a denial of insurance. Concluding with the fact that Google was in the process of <a target="_blank" href="https://www.eff.org/deeplinks/2020/05/stopping-google-fitbit-merger-your-stories-needed">acquiring FitBit</a> and could potentially possess data related to their users health. Clearly putting their data up for grabs for insurance-companies.<br />Lastly, he mentioned the fact that Windows 10, was reported by DPO’s as in no-way legally operable under the constraints of GDPR.</p>
<p>Having outlined some of the faults of proprietary software Dr. Braum continued with the potential benefits of Free Open Source Software (FOSS) compared to proprietary software. Stating that for digital transformation to succeed you need control over the entire stack, both hardware and software. To illustrate this he mentioned GNU Health as a “prime example”. Written mostly in Python, open and free to use whilst using GNUPg for signing data. Covering most of the issues that proprietary software brings with it (no control, bad security).</p>
<p>So, “If the benefits of FOSS over proprietary software are so clear-cut, then why are are we not using it en masse?” was the follow-up question Dr. Braum posed. Taking a software developers perspective he listed 3 possible reasons, 1) the software quality is bad, 2) you won’t get fired for using proprietary software, 3) FOSS requires looking for the right software, whereas proprietary software is often presented to you by those who created it (FOSS is pull not push). Even-though there are downsides to using FOSS there are also chances according to Dr. Braum. For instances Open Standards can promote competition and possibly promote local economies by no longer having to use proprietary software.</p>
<p>In summary, Dr. Braum states that OSS can delivery on high security standards whereas proprietary software may not be trustworthy due to a lack of transparency.</p>
<p>Next, Stuart Mackintosh presented the <a target="_blank" href="https://dito.tech/">DITO project</a>, an effort to develop and share the best practices of health-care software. With the final goal of producing an application that proved that these best practices where indeed best practices. To demonstrate the methodology for gathering the best practices Stuart presented the case of a NHS application where health-care personnel stated that as part of the requirements of an application it should be as easy to use as a piece of paper. He then proceeded to explain how the Dutch Indicator of Worry archetype (DENWIS) provided a ready to use best practice that adhered to the health-care personnel’s requirements. As for the rest of the talk, Stuart was cut short due to some of the panel members at the end of the meeting having a strict deadline. However, he made it clear that the intent was the Open Source all of the code produced in the attempt to create an application that used the gathered best practices.</p>
<p>Now, in all fairness, both Dr. Braum and Stuart Mackintosh presented reasonable arguments for the use of OSS. However, neither of the presentations really grabbed my attention. Clearly Dr. Braum gave more of an opinionated talk whilst show-casing only high-profile cases. Which may or may not represent issues faced by most proprietary software. Whereas, Stuart’s talk illustrated how OSS can be a result of policy, by open sourcing all code produced for a government funded project. The reason they failed to grab my attention was due to OSS being either a conceptual alternative to proprietary software or a by-product of policy. OSS did not really take centre-stage, nor did they provide any comments about how they would make it so. Regardless, I enjoyed their talks for show-casing potential uses, benefits, and limitations of applying OSS in a health-care setting.</p>
<h4 id="heading-a-european-digital-transformation-in-the-open-open-source-in-the-manufacturing-industry-panel">A European Digital Transformation in the Open: Open Source in the Manufacturing Industry (Panel)</h4>
<p>Keynote: MEP Marcel Kolaja, Vice-President of the European Parliament.<br />Panelists: Helio Chissini Castro, Senior Software Engineer, BMW;<br />Lars Geyer- Blaumeiser, Senior Expert Open Source Software, Bosh;<br />Mike Linksvayer, Director of Policy, GitHub;<br />Deb Bryant, Senior Director, Red Hat;<br />Mike Milinkovic, Executive Director, Eclipse Foundation.</p>
<p>Marcel Kolaja started the panel with an introductory statement about how OSS changes the competitive landscape. For many OSS projects the companies working on a particular project are also competitors. Marcel likened this to the manner in which politics function in a democratic system. Delving deeper into the subject of the panel, he went on to explore how OSS relates the manufacturing industry.</p>
<p>For one, Marcel believes that OSS should be integrated in the Open Data policies and strategies of the EU. To illustrate his point he demonstrated the importance of OSS using Linux as an example. Stating that Linux is a pillar of the web due to its wide-spread adoption in web-servers. Showing that Linux is indeed a huge success. Having shown some the benefits of OSS he pointed out the shortcomings of proprietary software in the manufacturing industry. To do so he made the case that the Volkswagen emission scandal could have been prevented had the software in the cars been OSS instead of proprietary. Which may well have been the case, after all the scandal revolved around software alterations to reduce emissions when being tested. Unfortunately Marcel had to leave early due to other engagements. Unfortunate as I would have loved to know about any concrete plans he had to introduce OSS in such a preventative capacity.</p>
<p>The remainder of the panel-session entailed the usage of OSS by some major players in the OSS and automotive industry. For instance, Mrs. Bryant remarked that for Red Hat it was natural to give back to the OSS communities because it had benefited immensely from it. Furthermore, to her: “It [OSS] would be a form of R&amp;D.”, when she mentioned her company’s funding of OSS projects. She went on to say that: “OSS in the automotive industry is going to be exciting!” since “Safety concerns are a top priority with many challenges.”.</p>
<p>Panel-member Lars Geyer- Blaumeiser spoke about the difficulties employees of Bosch had when they tried to convince upper-management to adopt OSS. However, after 2 long years of being faced with: “A management-wall”, Bosch had adopted OSS, started frequently pushing <a target="_blank" href="https://github.com/boschresearch">research to GitHub</a> and, became a member of the <a target="_blank" href="https://www.linuxfoundation.org/membership/members/">Linux Foundation</a>.</p>
<p>Next-up was Mike Milinkovic who gave a brief introduction for the Eclipse in Motion project, made up of roughly 5 working groups. 1) <a target="_blank" href="https://projects.eclipse.org/working-group/openmdm">OpenMDM</a>, a working-group developing a set of components used for composing measured data-management systems. With members such as <a target="_blank" href="https://www.openmdm.org/members">Audi, BMW and, Daimler</a>. 2) OpenPass, a working group dedicated to sharing methods for the evaluation of driver assistance systems and partially automated driving functions. With members such as the <a target="_blank" href="https://openpass.eclipse.org/members">TÜV and Volkswagen</a>. 3) OpenADX, a working-group aiming to deliver software tools and open source software for the development of autonomous driving. With members such as <a target="_blank" href="https://openadx.eclipse.org/members/">IBM, Red Hat, Microsoft, Bosch and Siemens</a>. 4) OpenMobility, a working-group that has the purpose of advancing simulation environments for transport applications. With members such as; <a target="_blank" href="https://wiki.eclipse.org/OpenMobility#Members">Bosch and the German Aerospace Center</a>. 5) OpenGenesis, a working-group with a mission to provide knowledge, methods and tools for the assessment of artificial intelligence (AI). With members such as; <a target="_blank" href="https://wiki.eclipse.org/OpenGENESIS_WG#Members">TÜV SÜD, Mathworks, Intel and Bosch</a>.</p>
<p>At this point the conversation among panel-members and the audience started revolving around why working-groups like these are necessary. As mentioned earlier by Deb Bryant, safety concerns within the automotive industry are a priority. AI in particular provides a challenge for the automotive industry. As currently most systems are deterministic, making them audit-able and demonstrable that they comply with regulations. AI systems however, are: “Non-deterministic and untraceable.” according to Helio Chissini Castro continuing with:“How would you verify regulations?”. Working-groups like those mentioned by Mike help to facilitate solutions for complex problems like these.</p>
<p>As the panel was nearing its peak-discussion an interruption was made indicating time was essentially up. Prompting a return to how the EU could take the lead concerning these type of developments. Panel-member stated that “It should engage more with OSS” and “Use OSS as a business driver”. Leading to a final remark by Helio illustrating the usefulness of OSS. He stated that BMW had open-sourced the complete code-base for the BMW i3, which in turn lead to the location of bugs and subsequent fixes. Which finished the morning the way I like it, with some bug-fixes.</p>
<h3 id="heading-emphasized-terms">Emphasized terms</h3>
<p>For your consideration, I provide a list of terms I noticed being emphasized during the talks. Note that these terms were emphasized during <em>multiple</em> talks. I left out terms that were emphasized during one talk only.</p>
<ul>
<li>Policy (Obviously), OSS and the need for it to be at the forefront of EU Policies.</li>
<li>Privacy, the impact of OSS on Privacy as OSS can be verified independently.</li>
<li>Economy, economical impact of OSS, not just concerning cost-reductions in development.</li>
<li>AI, in relation to OSS AI, policy towards it, its importance in the automotive industry and EU Policy to embrace it.</li>
<li>Blockchain, in relation to decentralized OSS systems and as a solution for privacy, data-sovereignty and E-Idenities.</li>
<li>Education, OSS, it’s usage in Education or lack thereof and the lack of skills concerning OSS.</li>
<li>EU lead, OSS and how the EU could take the lead concerning policy towards it, as it did with the GDPR.</li>
<li>Data-sovereignty, related to Privacy and OSS’s capacity to resolve issues where proprietary software shared data with 3rd parties unknown to its users.</li>
<li>Open Hardware, put forward multiple times, not specifically addressed during any talks.</li>
</ul>
<h3 id="heading-remarks">Remarks</h3>
<h4 id="heading-ownership">Ownership</h4>
<p>During the panel the impact and possibilities of OSS in the automotive industry were discussed. The subjects touched upon by the panel-members and the subjects of some questions towards them were geared towards safety concerns if the public had access to the software in <em>their cars</em>. To emphasize I’ve put “their cars” in italic, why? Because to me, this discussion was lacking a key element. Sovereignty and ownership. Whilst privacy and data-sovereignty seem to be at the fore-front of the minds of policy-makers, actual ownership and control over an object you have bought seems not to be.</p>
<p>For example, currently most cars on the market have some sort of on-board computer. This computer is loaded with software which, in some cases, controls hardware-components of your car. Say you’ve found an issue with that software due to some noticeable hardware malfunction. You, as the owner of that vehicle, cannot repair it. For one, it is copyrighted. Meaning that if you adjust it and publish how you did so, you will have infringed on said copyright and you are now a criminal. The best-case scenario would be that you might have voided any sort of warranty. Let that sink in. If you attempt to fix a problem with a car you own, paid tens of thousands of euros for you may either criminalized or your right to have it repaired may be retracted.</p>
<p>To me that’s unacceptable. How is it that I can fix hardware issues but not software issues? There is a flourishing market surrounding car-repair why shouldn’t it grow in size by allowing software alterations? After all, the car is mine, I didn’t rent it.</p>
<h3 id="heading-takeaways">Takeaways</h3>
<p>Note that these takeaways are the ones I find most important. I’m most certain that there are many others to be found in the wall-of-text above.</p>
<ul>
<li>OSS is most definitely on the mind of policy-makers in the EU.</li>
<li>OSS is a major driving force of innovation.</li>
<li>OSS is, in many cases, preferable over proprietary software, especially when regulations are involved.</li>
<li>OSS has a growing market-share within the EU software industry.</li>
<li>OSS may suffer from a gap in skills and education.</li>
<li>OSS may suffer from a lack of adoption due to perceived flaws, such as stability and reliability issues.</li>
</ul>
<p>All in all, as a software-developer, it was an interesting experience to sit in a room filled with policy-makers. The high-level problems discussed at events like these are rarely, if ever, similar to those that emerge in day-to-day software development and I must say it definitely piqued my interest. So, if you ever get invited to a policy meeting like this one, I can recommend attending it whole-heartedly!</p>
]]></content:encoded></item><item><title><![CDATA[[GUIDE] Running MicroK8s   & Nginx-ingress on CentOS 7]]></title><description><![CDATA[The goal of this guide is to help you get a single-machine Kubernetes cluster up and running. The cluster will be exposed to outside connections through Nginx-ingress. An Ingress and a Service will be created to send traffic to a Deployment running a...]]></description><link>https://blog.robertdiebels.com/guide-running-microk8s-nginx-ingress-on-centos-7-18d767e6472a</link><guid isPermaLink="true">https://blog.robertdiebels.com/guide-running-microk8s-nginx-ingress-on-centos-7-18d767e6472a</guid><dc:creator><![CDATA[Robert Diebels]]></dc:creator><pubDate>Mon, 02 Dec 2019 21:33:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650647049653/W-ozq9MDf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The goal of this guide is to help you get a single-machine Kubernetes cluster up and running. The cluster will be exposed to outside connections through Nginx-ingress. An Ingress and a Service will be created to send traffic to a Deployment running a Hello World NodeJS application. So, if you ever wanted to run your personal website on k8s without a hitch this guide is your go-to.</p>
<p>The guide is meant to be hands-on and no-nonsense. I won’t go into too much, if any, detail about individual components and I will assume you’re familiar with the following:</p>
<ul>
<li><a target="_blank" href="https://www.centos.org/">CentOS 7</a></li>
<li><a target="_blank" href="https://snapcraft.io">Snap</a></li>
<li><a target="_blank" href="https://www.docker.com/">Docker</a></li>
<li><a target="_blank" href="https://kubernetes.io/">Kubernetes</a></li>
<li><a target="_blank" href="https://microk8s.io/">MicroK8s</a></li>
<li><a target="_blank" href="https://www.nginx.com/">Nginx</a></li>
<li><a target="_blank" href="https://kubernetes.github.io/ingress-nginx/">Nginx-ingress</a></li>
<li><a target="_blank" href="https://nodejs.org/">NodeJS</a></li>
<li><a target="_blank" href="https://en.wikipedia.org/wiki/List_of_DNS_record_types">DNS</a></li>
</ul>
<p>NOTE: You can follow along on a different Linux distro or even Windows. I‘ve added references to installation guides at the bottom of each section where applicable. Windows users should skip to the Kubernetes section. I have not attempted installation on a OS other than CentOS 7 &amp; 8. The attempt on CentOS 8 was unsuccessful due to a failure to install <code>snap</code> .</p>
<h3 id="heading-pre-requistes">Pre-requistes</h3>
<p>You have:</p>
<ul>
<li>Access to a machine running CentOS 7.</li>
<li>Root access to that machine.</li>
<li>A Fully Qualified Domain Name at your disposal.</li>
</ul>
<h3 id="heading-centos-7">CentOS 7</h3>
<h4 id="heading-snap">Snap</h4>
<p>We’ll need snap to install MicroK8s. So lets install it.</p>
<ul>
<li>Login to your CentOS machine as <code>root</code></li>
<li>Run these commands to install snap and enable backwards compatibility with classic snaps:</li>
</ul>
<p>yum install snapd<br />systemctl enable --now snapd.socket<br />ln -s /var/lib/snapd/snap /snap</p>
<ul>
<li>Restart your CentOS instance or start a new terminal session. This allows the <code>snapd</code> binaries to be loaded.</li>
<li>IMPORTANT: Do not prepend <code>sudo</code> to the <code>snapd</code>installation commands. Follow <a target="_blank" href="https://forum.snapcraft.io/t/how-to-fix-snap-binaries-not-found/9469/43?u=robertdiebels">this link</a> to find out why.</li>
</ul>
<p>Linux distros: Follow the instructions on <a target="_blank" href="https://snapcraft.io/docs/installing-snapd">this page</a> to install snap for your specific distro.</p>
<h3 id="heading-kubernetes">Kubernetes</h3>
<h4 id="heading-microk8s">MicroK8s</h4>
<p>We’ll need MicroK8s so we can run your personal website.</p>
<ul>
<li>Run these commands to install MicroK8s:</li>
</ul>
<p>snap install microk8s --classic --channel=1.16/stable<br />microk8s.status --wait-ready</p>
<p>Windows: You will need <code>multipass</code> to install MicroK8s. Go to <a target="_blank" href="https://multipass.run/#install">this page</a>, follow the instructions and install <code>multipass</code> on Windows. When you’re done installing <code>multipass</code>, go to <a target="_blank" href="https://microk8s.io/">this page</a>, scroll down until you see the Windows logo, click the logo and follow the instructions.</p>
<h4 id="heading-nginx-ingress">Nginx Ingress</h4>
<p>To expose your Kubernetes cluster to the big, bad outside world we’ll need another piece of software. Kubernetes has a concept called an <a target="_blank" href="https://kubernetes.io/docs/concepts/services-networking/ingress/index.html">Ingress</a> to do this. A standalone installation of <a target="_blank" href="https://www.nginx.com/">Nginx</a> could perform the same job in a non-Kubernetes system. So, lets have a divine union and use <a target="_blank" href="https://github.com/kubernetes/ingress-nginx">Nginx-ingress</a> in your cluster.</p>
<ul>
<li>Run these commands to, alias microk8s.kubectl, enable install Nginx-ingress</li>
</ul>
<p>sudo snap alias microk8s.kubectl kubectl<br />microk8s.enable ingress<br />kubectl apply -f <a target="_blank" href="https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml">https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml</a></p>
<p>Windows: If-and-only-if you’ve installed <code>multipass</code> you can follow the commands above.</p>
<h4 id="heading-creating-the-necessary-objects">Creating the necessary objects</h4>
<p>Now that your Kubernetes cluster is ready, lets deploy your personal website. First we’ll deploy the NodeJS server hosting the website.</p>
<p>IMPORTANT: All of the files below contain a <code>example.com</code> string-value. Replace that string with the actual domain-name of your own <code>personal-website.com</code>. You should also replace the image <code>heroku/nodejs-hello-world</code> with an image containing your web-application.</p>
<ul>
<li>Create a file named <code>deployment.yml</code> and edit its content to equal the following:</li>
</ul>
<p>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: personal-website-deployment<br />  labels:<br />    uri: example.com<br />spec:<br />  selector:<br />    matchLabels:<br />      uri: example.com<br />  template:<br />    metadata:<br />      labels:<br />        uri: example.com<br />    spec:<br />      containers:  </p>
<pre><code>    <span class="hljs-operator">-</span> name: personal<span class="hljs-operator">-</span>website  
      image: heroku<span class="hljs-operator">/</span>nodejs<span class="hljs-operator">-</span>hello<span class="hljs-operator">-</span>world  
      ports:  
        <span class="hljs-operator">-</span> containerPort: <span class="hljs-number">5000</span>
</code></pre><ul>
<li>Create a file named service.yml and edit its content to equal the following:</li>
</ul>
<p>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: personal-website-service<br />spec:<br />  selector:<br />    uri: example.com<br />  type: ClusterIP<br />  ports:  </p>
<pre><code><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">http</span>  
  <span class="hljs-attr">protocol:</span> <span class="hljs-string">TCP</span>  
  <span class="hljs-attr">port:</span> <span class="hljs-number">80</span>  
  <span class="hljs-attr">targetPort:</span> <span class="hljs-number">5000</span>
</code></pre><ul>
<li>Create a file named ingress.yml and edit its content to equal the following:</li>
</ul>
<p>apiVersion: networking.k8s.io/v1beta1<br />kind: Ingress<br />metadata:<br />  name: personal-website-ingress<br />  annotations:<br />    nginx.ingress.kubernetes.io/rewrite-target: /<br />spec:<br />  rules:  </p>
<pre><code><span class="hljs-bullet">-</span> <span class="hljs-attr">host:</span> <span class="hljs-string">example.com</span>  
  <span class="hljs-attr">http:</span>  
    <span class="hljs-attr">paths:</span>  
      <span class="hljs-bullet">-</span> <span class="hljs-attr">backend:</span>  
          <span class="hljs-attr">serviceName:</span> <span class="hljs-string">personal-website-service</span>  
          <span class="hljs-attr">servicePort:</span> <span class="hljs-number">80</span>
</code></pre><ul>
<li>Now run the following command to create the Kubernetes Objects necessary for your application.</li>
</ul>
<p>kubectl create -f deployment.yml -f service.yml -f ingress.yml</p>
<h3 id="heading-networking">Networking</h3>
<h4 id="heading-dns">DNS</h4>
<p>This guide assumes following DNS prerequisites.</p>
<ul>
<li>You own a domain-name.</li>
<li>You’ve setup an A- or AAAA-record that refers to the IP-adress of your CentOS-machine.</li>
</ul>
<h4 id="heading-localhost">Localhost</h4>
<p>If you do not want to proxy traffic from <code>example.com</code> and you just want to fiddle around locally. Removing the <code>host</code>key from the <code>rules</code> map in the <code>ingress.yml</code> file should do the trick. I’ve only tested the DNS settings mentioned above so I cannot ensure it will.</p>
<p>Aaaaand boom goes the dynamite! Liked this post? Clap. Disliked this post? Comment. Have something interesting to add or have I missed something? Comment! I’ll always consider any of your suggestions and/or improvements.</p>
]]></content:encoded></item><item><title><![CDATA[Are you using the latest-tag? Well.. Stop it.]]></title><description><![CDATA[For the longest time I’ve been fervently against the use of any sort of “implicit versioning” in dependency-management. Today it occurred to me I have never clearly outlined to myself “why” I’m so fervently against its use. Of course I have my intuit...]]></description><link>https://blog.robertdiebels.com/are-you-using-the-latest-tag-well-stop-it-6d6390f9623a</link><guid isPermaLink="true">https://blog.robertdiebels.com/are-you-using-the-latest-tag-well-stop-it-6d6390f9623a</guid><dc:creator><![CDATA[Robert Diebels]]></dc:creator><pubDate>Sun, 10 Nov 2019 13:14:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650647055072/Jdfho6_C9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the longest time I’ve been fervently against the use of any sort of “implicit versioning” in dependency-management. Today it occurred to me I have never clearly outlined to myself “why” I’m so fervently against its use. Of course I have my intuitions and a range of experiences surrounding implicit versioning. Suffice to say that intuitions are hardly relevant when your intent is to develop software that’s (mostly) free of bugs. I realize that many others have written on the subject. Yet, I felt like most were lacking a general view and substantial reasoning behind avoiding implicit versioning.</p>
<p>In this article I outline my thoughts on implicit-versioning, specifically version-tags and version-ranges. In doing so I first give a general description of tags and their use for either <strong>identification</strong> or <strong>categorization</strong>, I describe what version-tags are not and what they are concretely. Second, I describe why you should avoid using version-tags for categorization. Third, I describe version-ranges and why you should avoid them as well. Last, I dig a bit deeper for those who remain unconvinced.</p>
<p>TL:DR?; Check out the summary at the bottom of the article.</p>
<h3 id="heading-tags-versions">Tags? Versions?</h3>
<p>For those who are unfamiliar with the concept of version-tags consider this real-world analogue. Imagine going to an English auction with a “not-so-sophisticated” auctioning method, wanting to buy that amazing mint-condition star wars collectible you’ve had your eye on for years.<br />Before the auction starts all potential bidder signs up and is given a sign with a <strong>unique number</strong> on it.</p>
<p>The bidding commences and you hold up your sign at an amount you’re willing to pay. Other bidders out-bid you and you out-bid them. At a certain point no other bidders are out-bidding you. The auction is over and you go to the auctioneer to take home your coveted collectible. They check if the <strong>unique number</strong> on <strong>your sign</strong> matches the one they jotted down when the auction ended and tell you were you can retrieve the collectible.</p>
<p>The only reason this auctioning-system is working properly is due to the relation between the unique number, the sign and your ownership of said sign. The three together provide a means of <strong>identification</strong> through <strong>association</strong>.</p>
<ul>
<li>If some-how the unique number changed after your successful bid, and before retrieval of your collectible, you can say good-bye to Mr. Solo due to incorrect <strong>identification</strong>.</li>
<li>If you lose the sign, someone else can pick it up and retrieve the collectible. Because he/she is now <strong>associated</strong> with the sign and the unique number.</li>
</ul>
<p>In version-control systems version-tags are similar to the signs used in this auctioning example. As they:</p>
<ul>
<li>Can, but are not required to, be used as a means of <strong>identification through association</strong> for an object, e.g. a bidder with a sign, or a historic state of your source-code with a version-tag.</li>
<li>Mean something in one and one context only, e.g. the auction you attended, or the source-code you’re working on.</li>
</ul>
<p>Based on this example I define tags as: A means to identify or categorize an object, as does Miriam-Webster [ <a target="_blank" href="https://www.merriam-webster.com/dictionary/tag">1</a>, See: 5a, 5b].<br />There is an important distinction to make between identification and categorization. When using a tag as a means of <strong>identification</strong> it should <strong>never</strong> be used in the same context again. When using a tag for <strong>categorization</strong> the tag <strong>may</strong> be used for many objects in the same context.</p>
<h4 id="heading-version-tags-are-not">Version-tags are not..</h4>
<p>Let clarify a distinction between a “version” and a “tag”. In most version-control systems <strong>a version IS-NOT a tag</strong>. A version is the historic state of your source-code. A tag is any sign that is associated with a historic state of your source-code.<br />For instance, in git a historic state of your source-code is always associated with one-and-only-one unique SHA-hash. This hash can only represent a historic-state because of its uniqueness, as this allows for identification by association. Unfortunately, as with most unique-identifiers, a hash doesn’t provide any meaningful information to a human-being. So git allows developers to add meaningful tags that refer to a hash. This gives tags their real strength. The capacity to give a clear meaning to an otherwise, for humans, meaningless identifier.<br />So when I use the term “version-tag” I mean the tag used to identify or categorize a “version”. The two are not to be interpreted as interchangeable.</p>
<blockquote>
<p>This gives tags their real strength. The capacity to give a clear meaning to an otherwise, for humans, meaningless identifier.</p>
</blockquote>
<h4 id="heading-version-tags-are">Version-tags are..</h4>
<p>So what are version-tags? Consider some version-tag examples of the two types of tags I discussed earlier. In the examples I use SemVer [<a target="_blank" href="https://semver.org/">4</a>] as the versioning-schema. The following version-tags are what I consider to be <strong>identification-tags</strong>:</p>
<ul>
<li>Tags strictly following the <code>X.Y.Z</code> form, where <code>X</code>, <code>Y</code>, and <code>Z</code> are non-negative integers, i.e. <code>0.2.3</code> , <code>1.3.5</code>, <code>6.3.6</code> etc.</li>
<li>Tags that, SHOULD always resolve to the same version. Here I state “SHOULD” instead of “MUST” because some version-control systems allow developers to add a tag more than once.</li>
</ul>
<p>Whereas the following version-tags are <strong>categorization-tags</strong>:</p>
<ul>
<li>Pre-release versions of the form <code>X.Y.Z-abc</code> form, where <code>X</code>, <code>Y</code>, and <code>Z</code> are non-negative integers with a hyphen and an alphabetic <code>[A-Za-z]</code> post-fix, e.g.: <code>1.0.0-alpha</code>, <code>1.0.0-beta</code>, <code>2.3.4-omega</code>. Since some dependencies stay on the <code>1.0.0-alpha</code>-tag for ages, even-though lots of code might have changed.</li>
<li>Alphanumeric tags of the form <code>[:.-A-Za-z0-9]</code>e.g.: <code>latest</code>, <code>default</code>, <code>node:8</code>, <code>wheezy</code>, <code>lts</code>, <code>latest-beta</code>, etc.</li>
<li>Tags that MAY NOT always resolve to the same version.</li>
</ul>
<h3 id="heading-why-you-should-avoid-categorization-tags">Why you should avoid categorization-tags</h3>
<p>Imagine that you’re attending an auction where the auctioneer messed up. The auctioneer gave another bidder a sign with a “<strong>unique number</strong>” identical to yours! The auction might end up billing you for items you never even bid on! In this case we’re using the sign <strong>more than once</strong> in the same context when our intent is to use the sign for <strong>identification</strong>. This means that we ended up using the sign for <strong>categorization</strong> instead!</p>
<p>Unfortunately, there seems to be a rampant use of version-tags that are used for <strong>categorization</strong> in Software Engineering. Whereas these version-tags end up being interpreted as tags meant for <strong>identification</strong>.</p>
<h4 id="heading-the-latest-catastrophe">The <code>latest</code> catastrophe</h4>
<p>One example to illustrate why you should avoid categorization-tags in your dependencies is the use of the <code>latest</code>-tag. This tag is used in the dependency-management systems of Maven [<a target="_blank" href="https://support.sonatype.com/hc/en-us/articles/213464638-Why-are-the-latest-and-release-tags-in-maven-metadata-xml-not-being-updated-after-deploying-artifacts-">2</a>], NPM [<a target="_blank" href="https://docs.npmjs.com/files/package.json#dependencies">6</a>] and Docker [<a target="_blank" href="https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-from-docker-hub">3</a>]. The <code>latest</code>-tag is one particular seed of evil that can cause grievance to many a developer.<br />When someone uses the <code>latest</code>-tag what is expected is the latest version of some dependency. What often ends up happening is they get a version of the dependency that “just so happens to be tagged with <code>latest</code>” without any guarantees it actually is the “latest” version. This especially applies to Docker, where the <code>latest</code>-tag has become part of “standard” procedures and you can end up with <strong>implicit</strong> usage of the tag. Consider the following quote from the Docker Command Line Interface documentation:</p>
<blockquote>
<p>To download a particular image, or set of images (i.e., a repository), use <code>docker pull</code>. If no tag is provided, Docker Engine uses the <code>:latest</code> tag as a default. [<a target="_blank" href="https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-from-docker-hub">3</a>]</p>
</blockquote>
<p>If you forget to supply a tag, Docker simply assumes you require a version with the <code>latest</code>-tag. In this case you have no clue whether or not this “latest version” will break your system. In effect the dependency-management system has taken away control from developers assuming that they want to use the <code>latest</code>-tag. Even-though it has no reason to assume this! You might just have forgotten to supply a desired tag!<br />What’s even worse however, is that the <code>latest</code>-tag can be moved to a different version and it is not limited to any specific type of version. It could be any version, even a completely new major-version. This means you could now be facing breaking changes or bugs since you’ve last had to download a dependency using that ow-so-useful <code>latest</code>-tag. The <code>latest</code>-tag is a prime example of a version-tag used for <strong>categorization</strong> which is prone to be interpreted as a means of <strong>identification</strong>.<br />Obviously this is not a problem when you’re pulling an image for the first time in a fresh project. It is however problematic when you’re working within a larger project and you don’t add a version or fix the version with the latest tag. Most likely this issue will only be caught after you’ve created a new release for your project. If you’re lucky, if you’re not you’ll find out when it’s already in production.</p>
<blockquote>
<p>Surprise! Since your last download <code>latest</code>-tag has been moved from version-tag 2.10.3 to version-tag 4.3.1! — Dependency developer</p>
</blockquote>
<p>The <code>latest</code>-tag illustrates that using <strong>categorization-tags</strong> can negatively impact your applications. As it increases the potential for incorrect outcomes of your source-code without your knowledge.</p>
<p>Using <strong>categorization</strong>-<strong>tags</strong> for your dependencies implies you’re no longer in control of the correctness of your code. Instead you’re hoping that, god-be-willing, your dependencies haven’t introduced bugs in the version your dependency-management system has selected.. This in itself should be enough of a reason to <strong>avoid categorization-tags</strong> and <strong>use identification-tags</strong> as much as possible!</p>
<h3 id="heading-version-ranges-are-almost-always-just-as-evil">Version-ranges are (almost always) just as evil!</h3>
<p>Dependency-management systems often allow you to specify “version-ranges”. For example, Maven allows the usage of <code>[1.2, 1.3]</code> which is equivalent to SemVer syntax <code>1.2.0 &lt;= x &lt;= 1.3.0</code>[<a target="_blank" href="https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html">5</a>] whereas NPM supports syntax such as <code>2.x</code> [<a target="_blank" href="https://docs.npmjs.com/files/package.json#dependencies">6</a>] which is equivalent to <code>2.0.0 &lt;= x &lt;= 3.0.0</code> . Both of these version-ranges are prone to incorrect outcomes across builds because like categorization-tags, the dependency-management MAY NOT always resolve to the <strong>same version</strong>.<br />For this very reason NPM even has a <code>package-lock.json</code> which they recommend you commit to your version-control system. This file contains all the information needed to ensure that anyone pulling a version from your version-control system will have the exact same versions of its dependencies. In essence they’ve added a new file to solve a problem that would never have existed if they didn’t allow version-tags or version-ranges.<br />Now, version-ranges are not as “bad” as using the <code>latest</code>-tag because in most cases they don’t allow major version changes. However, unless you’ve specified a version-range for a very , very, very good reason, they can be just as evil. Most of the time there is no good reason to use a version-range for a dependency and you should just use a fixed version. Version-ranges should be an exception, not a rule.</p>
<h3 id="heading-please-just-avoid-categorization-tags-andamp-version-ranges">Please, just avoid categorization-tags &amp; version-ranges</h3>
<h4 id="heading-hoare-logic-applies">Hoare logic applies</h4>
<p>In Hoare logic so-called Hoare-triples are used to reason about the correctness of a computer program. A Hoare-triple is constructed as <code>{P}C{Q}</code>where <code>P</code> and <code>Q</code> are assertions and <code>C</code>is a command. Command <code>C</code> is executed when precondition <code>P</code> is met. When we use Hoare-triples in determining the correctness of a program we want to examine whether post-condition <code>Q</code> holds after executing command <code>C</code> for precondition <code>P</code>.<br />Without going into to much detail, assume we have a desired post-condition <code>Q</code> and we want to ensure that precondition <code>P</code> is met. For this to occur we need to ensure that command <code>C</code> is known. Assume that command <code>C</code> is a method from a dependency where, the dependency-version has been specified using a version-range or a categorization-tag of the form <code>&gt;= 1.x</code>. This means we can not be sure of the program’s correctness as time proceeds. As we cannot guarantee the program will use command <code>C1.1.2</code> , <code>C1.34.1</code> or <code>C1.5.3</code>! This situation should be avoided at all times!</p>
<h4 id="heading-version-tags-convey-meaning">Version-tags convey meaning</h4>
<p>Version-tags do more than just point to a historic state of a dependency. Often they convey a very specific meaning. Assuming your dependencies adhere to a versioning-schema like SemVer [<a target="_blank" href="https://semver.org/">4</a>], version-tags allow any developer to identify whether there are any breaking changes, added features, etc. in this version of the dependency. This information no longer available at first glance when you’re using <strong>categorization-tags</strong> like the <code>latest</code>-tag.<br />Instead you’re now required to go to check all the versions of a dependency to find the <code>latest</code>-tag and the version it is associated with. As a Software Engineer you should prevent yourself and your users from getting into situations where you are uncertain about the correctness of your source-code. Especially if no conscious preceding change was made by you or them!</p>
<h4 id="heading-your-team-mates-will-thank-you-for-it">Your team-mates will thank you for it!</h4>
<p>If you’re using <strong>categorization-tags</strong> or version-ranges in your dependencies you will eventually get incorrectness among your team-mates without having made any changes to the underlying code at all! Imagine helping a newly recruited team-mate to get started with your development environment. You’ve cloned the repository you need, your build-tooling has just finished, you run it.. Everything is running! Nice! Your new team-mate starts getting familiar with your application. Then after trying it out for a bit, suddenly, it crashes! <strong>POOF</strong>! Magical isn’t it? Now you’re stuck trying to find-out what happened for 10–20 minutes. Eventually realizing the version of a dependency got changed to a new minor-version during the build. A version which, unfortunately, introduced a bug. All because your dependency-management system had <strong>your permission</strong> to retrieve the version it felt like!</p>
<h3 id="heading-to-summarize">To summarize</h3>
<p>When specifying the version-tags of your dependencies (and, where possible, when versioning your own source-code) you should:</p>
<h4 id="heading-avoid">Avoid</h4>
<ul>
<li>Any type of versioning that, over time, MAY NOT resolve to the same version. This can lead to an incorrect application due to changes in its dependencies.</li>
<li>Categorization-tags, as over time they MAY NOT resolve to same version.</li>
<li>Version-ranges, as over time they MAY NOT resolve to same version. Unless you’re really, really sure they won’t, in which case — use the fixed version they’re resolving to.</li>
<li>I use, MAY NOT, because version-tags and -ranges can but don’t have to refer to the same version over time.</li>
<li>The <code>latest</code>-tag. For the love of all that is sacred, don’t use it!</li>
</ul>
<h4 id="heading-use">Use</h4>
<ul>
<li>Any type of versioning that, regardless of point-in-time, SHOULD resolve to the same version. This ensures your application stays correct, unless altered by you.</li>
<li>Identification-tags, as they SHOULD resolve to the same version, regardless of point-in-time.</li>
<li>Explicit versions, as they SHOULD, resolve to the same version regardless of point-in-time.</li>
<li>I use, SHOULD, because humans make mistakes and version-control systems are way to flexible concerning version-tags.</li>
</ul>
<p>Agree? Disagree? Let me know and leave a comment!</p>
]]></content:encoded></item></channel></rss>