<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Opinion on inherent site</title>
		<link>https://inherently.xyz/tags/opinion/</link>
		<description>Recent content in Opinion on inherent site</description>
		<generator>Hugo</generator>
		<language>en-us</language>
			<lastBuildDate>Sat, 04 Sep 2021 14:49:11 +0300</lastBuildDate>
			<atom:link href="https://inherently.xyz/tags/opinion/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>GK61 Review</title>
				<link>https://inherently.xyz/blog/gk61-review/</link>
				<pubDate>Sat, 04 Sep 2021 14:49:11 +0300</pubDate>
				<guid>https://inherently.xyz/blog/gk61-review/</guid>
				<description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;A little less than a month ago I bought a new keyboard, the HK Gaming GK61.&#xA;It&amp;rsquo;s a 60% mechanical keyboard with RGB backlighting and a few different switch options.&#xA;I&amp;rsquo;ve been using full-size membrane keyboards up until now so this was quite a bit different.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;The GK61 comes in black, white, red or pink colors.&#xA;It can be outfitted with gateron optical black, blue, brown, red, silver or yellow switches.&#xA;As denoted by the name, its 60% size is a noteworthy selling point.&#xA;Of course you can&amp;rsquo;t buy anything without RGB nowadays so it has that too.&#xA;There is also a piece of software for configuring keyboard settings and saves them on the keyboard itself.&#xA;I paid 70 euros for it in greece and I bought the black model with blue switches.&#xA;With the big picture view out of the way, let&amp;rsquo;s get a bit more into the specifics.&lt;/p&gt;&#xA;&lt;h2 id=&#34;switches&#34;&gt;Switches&lt;/h2&gt;&#xA;&lt;p&gt;As previously mentioned, I went with the gateron optical blue switches.&#xA;This was mostly done because I like the noise and tactile feedback.&#xA;I have a habit of bottoming out the keys so blues being a little slower for people that only barely activate the switch is not an issue.&#xA;One potential drawback I was made aware of is that optical switches are not as common so replacing them is potentially more difficult.&#xA;All the keys work fine, the sound is enjoyable, the physical feedback is good so no real complaints here.&lt;/p&gt;&#xA;&lt;h2 id=&#34;60-layout&#34;&gt;60% layout&lt;/h2&gt;&#xA;&lt;p&gt;The size of the keyboard was a big change for me but also one of the big reasons I chose it.&#xA;The unfortunate part is that it was only available in ANSI and not ISO locally but I&amp;rsquo;m aware that an ISO version exists.&#xA;So what&amp;rsquo;s the deal with the 60% size? What does that mean exactly?&#xA;There is no numpad, no F1 to F12, no end, home, pgup, pgdown, insert, delete or arrow keys.&#xA;What does exist however, is an Function (Fn) key that acts as a modifier.&#xA;This means that you can press Fn and something else to access the alternative function of a key.&#xA;It saves size but can also be a bit annoying when you can&amp;rsquo;t access some keys directly.&#xA;My personal changes were that I remapped caps lock to escape, right alt to left arrow, right ctrl to right arrow and escape to backtick.&#xA;I&amp;rsquo;m slowly finding out that I&amp;rsquo;d prefer it if there were arrow keys that are just arrow keys on the main layer.&#xA;Overall I like the small size but I think a 65% size with an ISO layout would be a better option for me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;&#xA;&lt;p&gt;This is where things get a bit more gloomy.&#xA;There exists software for the GK61 but not all software utilities are the same.&#xA;In specific, I got a GK61v2 which has a serial number that starts with &lt;code&gt;GK61US&lt;/code&gt; and things get interesting.&#xA;The earlier versions of this keyboard use seemingly different firmware and different software utilities.&#xA;Additionally, the alternative key functions are different for the GK61v2 so the M1, M2, M3 mode keys don&amp;rsquo;t work.&#xA;At any rate, the software works fine.&#xA;It allows remapping keys as well as customizing the lighting mode.&#xA;Well&amp;hellip;about that lightning customization&amp;hellip;&#xA;One would think that customizing one of the custom lighting modes would allow it to be permanently saved but no.&#xA;If you make a custom one and then hit Fn and \ to cycle all of them, your custom mode will be nowhere to be found.&#xA;This is unfortunate but I don&amp;rsquo;t mind since I just wanted to have a solid color and move on however it&amp;rsquo;s a downside worth mentioning.&#xA;In totality the software side of the keyboard is a downside but it isn&amp;rsquo;t completely unusable I guess.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;After almost a month of use, I&amp;rsquo;m overall pretty happy with the GK61.&#xA;For 70 euros it was a fairly big investment, it was my first mechanical keyboard as well as my first 60% keyboard.&#xA;Ideally I would like to have an ISO layout and separate arrow keys so when I upgrade in the future I&amp;rsquo;ll look at getting a 65% one with the appropriate key layout or possibly build a custom one.&#xA;Overall I&amp;rsquo;d recommend it just be aware that it&amp;rsquo;s a lot smaller than what you might be used to.&#xA;Thank you for reading, I hope you got something out of this.&lt;/p&gt;&#xA;</description>
			</item>
			<item>
				<title>The Power of the Library Example</title>
				<link>https://inherently.xyz/blog/the-power-of-the-library-example/</link>
				<pubDate>Thu, 06 May 2021 14:25:41 +0300</pubDate>
				<guid>https://inherently.xyz/blog/the-power-of-the-library-example/</guid>
				<description>&lt;p&gt;While considering what kind of example I could use for a service that was supposed to be a tech demo, I settled on a catalog/library of books.&#xA;I think it&amp;rsquo;s a powerful example because it includes the basic CRUD operations and also allows for a lot of flexibility and detail of implementation.&#xA;Below I&amp;rsquo;ll try to explain the most important ones and maybe help convince you to rethink about it and maybe use it as the next step after the usual todo list one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-library-example&#34;&gt;The Library example&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start with an explanation of what this example actually is before going into its advantages.&#xA;It&amp;rsquo;s pretty simple, you have a library of books and want to perform operations associated with managing a library.&#xA;Simple concept, simple to implement and uses real-life things that people have experience with and can reason about.&#xA;Is it really this simple though?&#xA;In the intro I said it&amp;rsquo;s supposed to be a step-up from the usual todo list example but so far it doesn&amp;rsquo;t seem different other than being another object in the place of a todo item.&#xA;Well, let&amp;rsquo;s dive a little deeper.&lt;/p&gt;&#xA;&lt;h2 id=&#34;data-structures&#34;&gt;Data Structures&lt;/h2&gt;&#xA;&lt;p&gt;When you start, there is the dilemma of what fields/attributes to give the book.&#xA;The ISBN stands out as a convenient unique identifier which is great, then there is the title, the number of pages, year of release, format as in hard cover or soft cover or pdf or epub or mobi, edition, categor(y/ies), author, publisher, subtitle, cover art, bookmark for reading progress, description in the back cover, if you own it or not, did you lend it to someone or not, are you lending it from someone or not, if it&amp;rsquo;s a physical copy where is it located and so on and so forth.&#xA;I think you get my point, you can get really deep into it if you want or pick some of the basics and go from there.&#xA;Are they really basics though?&#xA;Specifically when it comes to who wrote the book, it could be one person or it could be more than one.&#xA;Especially in technical books it&amp;rsquo;s not unusual to have 2 or 3 authors so you&amp;rsquo;re getting into a situation where you have something like the following (silly example but please stay with me):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;books&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;ISBN&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0189219181&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hey&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Author&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;authors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;AuthorID&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;FirstName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;anguish&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;MiddleName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;LastName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mental&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;YearBorn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;YearDied&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;201&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;BooksWritten&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;AuthorID&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;FirstName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;big&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;MiddleName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;boo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;LastName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ba&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;BooksWritten&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9543&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;AuthorID&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;FirstName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;me&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;MiddleName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;notme&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;LastName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;notyou&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;YearBorn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1999&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;BooksWritten&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Year&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1999&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Edition&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Publisher&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;PublisherID&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;Name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;urmom&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;YearStarted&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1237&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;YearEnded&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2077&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;BooksPublished&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9001&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Pages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tech&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;PDF&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Owned&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Lended&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Here we see that each author is inside an array which is the value of a key called &lt;code&gt;authors&lt;/code&gt; which is the value of a key called &lt;code&gt;Author&lt;/code&gt; which is a part of one of the objects in the array called &lt;code&gt;books&lt;/code&gt; which is inside the outer JSON object.&#xA;Fairly complex, right?&#xA;Additionally, you have to pay attention to this throughout the entire application including saving it and retrieving it from a database, when passing it to other services that might use this data for example a cover art finder or a media aggregator service and when those services process it.&#xA;Following that, there are logistical considerations about storing an author or publisher twice since the client shouldn&amp;rsquo;t have to deal with sending the right ID for the publisher or the author(s), checking if a book with the same ISBN exists, potentially handling cases where you bought it again cause the person you gave it to never gave it back and so on.&#xA;The main takeaway is that you can decide how real-world you want to make the example, add complexity at will and introduce edge cases that defy previously established preconditions such as the ISBN being a unique identifier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;functions&#34;&gt;Functions&lt;/h2&gt;&#xA;&lt;p&gt;I touched on this before I believe it warrants repeating.&#xA;Similar to the data structure you go with, there several functions of differing depth you can implement.&#xA;The simple CRUD operations might be taken as a baseline but what even if that rule was able to be defied?&#xA;Do you want to delete the book or simply set a hidden state because you want the library to act as an archive?&#xA;Should the cases of the author&amp;rsquo;s year of birth and death be allowed to be set incorrectly (like in the example above with author 1), partially (author 2) or not at all (author 3)?&#xA;Should the person that the library belongs to be able to mark the books as lended but not necessarily to who or should they be able to record who they lended the books to?&#xA;Are the books editable after being added or not?&#xA;Should there be a url for the digital edition visible to anyone or only a signed-in and authenticated person?&#xA;Do we even want to support multiple people using the same instance of this library service?&#xA;So many different things to consider and this can be a perfect opportunity to learn to use data while also being the one that defines what that data should look like.&#xA;You get be the one producing and consuming the data which is not the case with 3rd-party APIs thus giving you the opportunity to figure things out on the way there.&#xA;And speaking of accessing the data&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;interfacing&#34;&gt;Interfacing&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve only spoken about server-side stuff this far (unless you count the output of &lt;code&gt;jq -M&lt;/code&gt; as a frontend) but let&amp;rsquo;s round this out with the client-side.&#xA;I showed some example JSON previously but in the intro there was a mention of a tech demo and you can bet I&amp;rsquo;m &lt;a href=&#34;https://inherently.xyz/blog/rest-is-over/&#34;&gt;not writing REST&lt;/a&gt; for this.&#xA;The main definition in my case is a &lt;a href=&#34;https://gitlab.com/insanitywholesale/bookdir/-/blob/master/proto/v1/bookdir.proto&#34;&gt;protobuf file&lt;/a&gt; so I get control of the struct only as far as the proto v3 syntax allows.&#xA;This presents an interesting challenge where there is limited or no option for annotations so no ORM (&lt;a href=&#34;https://gorm.io/&#34;&gt;gorm&lt;/a&gt; for golang) can be used.&#xA;Since I&amp;rsquo;m using gRPC with that and also want JSON to be able to be returned, a translation layer was used, &lt;a href=&#34;https://github.com/grpc-ecosystem/grpc-gateway&#34;&gt;grpc-gateway&lt;/a&gt; to be specific.&#xA;With the ability to use JSON to communicate, a cli, desktop, mobile or web client can be made in a variety of languages while not losing the great service-to-service communication that gRPC provides.&#xA;After having mostly nailed down the data structures I wanted to use and most of the entity-related functions I wanted to implement I decided to take a look at reactjs again.&#xA;A post about it will come later after I&amp;rsquo;m done with this project but the example is given to demonstrate that you can pick something that can make an http request and process JSON then run off with it and build something.&#xA;The way you choose access the library is noteworthy and can become another important part of using this concept as the example in a tutorial.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;I believe the book/library example to be a very good one as a second step after a todo list one due to the complexity that it allows to be introduced in the data structures, the functions, the interfaces and APIs as well as the possibilities it opens up.&#xA;Thank you for reading, I hope you enjoyed it and maybe learned something.&lt;/p&gt;&#xA;</description>
			</item>
			<item>
				<title>REST Is Over</title>
				<link>https://inherently.xyz/blog/rest-is-over/</link>
				<pubDate>Sun, 04 Apr 2021 17:33:02 +0300</pubDate>
				<guid>https://inherently.xyz/blog/rest-is-over/</guid>
				<description>&lt;h2 id=&#34;web-apis-are-terrible&#34;&gt;Web APIs are terrible&lt;/h2&gt;&#xA;&lt;p&gt;After watching a talk a few months back about REST vs GraphQL and the history of APIs, I agreed with the speaker that the API is supposed to be a way of communication, a language of sorts.&#xA;In programming languages this codified way of communication is enforced by the compiler or the interpreter or the runtime.&#xA;If you write invalid code in the programming language of your choosing, it won&amp;rsquo;t work.&#xA;Something or other will complain or break and prevent you from miscommunicating.&#xA;This got me wondering APIs especially web ones are so bad.&lt;/p&gt;&#xA;&lt;h2 id=&#34;resting-comfortably&#34;&gt;RESTing comfortably&lt;/h2&gt;&#xA;&lt;p&gt;With the introduction of what we call REST nowadays, basically JSON over HTTP, it&amp;rsquo;s all too common for application to use this mode of communication.&#xA;How this is enforced in practice is very variable though.&#xA;From different path schemes, to the same HTTP verbs used for different purposes, to (invariably bad) ways to communicate from machine to machine what the API is, it&amp;rsquo;s all up in the air.&#xA;Most fairly complex things that have a REST API, don&amp;rsquo;t even expect you to use them by directly interacting with it but instead use client libraries.&#xA;This has been going on for about a decade or two and it seems things are changing.&#xA;Some thought that GraphQL would be the end of that and it&amp;rsquo;s a pretty good step up but adoption is nowhere near as high.&#xA;In general REST is the assumed default way to interact with something programmatically.&#xA;Should it be though? Is GraphQL the best replacement we&amp;rsquo;ve got? I don&amp;rsquo;t think so.&lt;/p&gt;&#xA;&lt;h2 id=&#34;grpcee-what-i-did-there&#34;&gt;gRPCee what I did there&lt;/h2&gt;&#xA;&lt;p&gt;A somewhat recent thing called gRPC started picking up steam.&#xA;Talks about it, articles about it, large software projects using it but not really prominent on the web.&#xA;With this nifty little thing after writing a file that describes what your program does, you can generate some ready to use code, write the logic and &lt;code&gt;grpc.Serve()&lt;/code&gt; to the moon.&#xA;Even better, anyone wanting to write a client in any of the many supported languages can generate the boilerplate for a client from the same definition file and start calling the functions of the server really easily.&#xA;I&amp;rsquo;m being a bit simplistic for the sake of brevity but it&amp;rsquo;s really cool, trust me. It&amp;rsquo;s also really fast.&#xA;Alright, it&amp;rsquo;s better than freshly baked bread apparently so why is it not used on the web?&#xA;Cause it&amp;rsquo;s only HTTP/2 and the support for that is pretty limited.&#xA;Fear not though, we&amp;rsquo;re going to circle back to our crusty old frenemy, REST.&lt;/p&gt;&#xA;&lt;p&gt;Support for REST is widespread and there is a webdev in every city block ready to POST some JSON to your endpoint.&#xA;So we can&amp;rsquo;t immediately get rid of the kludgy wart but what about giving pixel pushers some REST while service to service communication is improved?&#xA;You see, since definitions exist for what the service sends and receives, the types of all the things being passed around, it&amp;rsquo;s quite easy to use some simple annotations to auto-generate a REST API.&#xA;This doesn&amp;rsquo;t 100% fix the problems that exist but it does smooth over some parts of it.&#xA;Okay so that&amp;rsquo;s it? Not just that, since the API is standardized we can even auto-generate documentation for it!&#xA;OpenAPI (formerly Swagger) docs can be easily generated and served to potential downstream users of the API.&#xA;Brilliant I think.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusions&#34;&gt;Conclusions&lt;/h2&gt;&#xA;&lt;p&gt;Over the past few months I&amp;rsquo;ve been reading a lot about gRPC, grpc-gateway, different ideas and implementations, trying out quite a few of them but I&amp;rsquo;ve yet to see one that makes me super excited and go &amp;ldquo;Aha! this is The One&amp;rdquo; or whatever.&#xA;I could do a link dump of about 100-150 tabs that I have open but that would be tiring and essentially do nothing to help.&#xA;Currently I&amp;rsquo;ve been trying to decide among 2-3 options for how a service should be structured and such but I&amp;rsquo;m still testing out prototypes, haven&amp;rsquo;t reached any conclusions.&#xA;However, I hope this was a semi-educational read and got you a bit interested in the ecosystem.&#xA;That&amp;rsquo;s all for now, I hope you enjoyed reading.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pardon-me&#34;&gt;pardon me&lt;/h3&gt;&#xA;&lt;p&gt;&lt;del&gt;check out the &lt;a href=&#34;https://inherently.xyz/tutorials/&#34;&gt;tutorials&lt;/a&gt; section for my Go REST API Part 2 coming soon&lt;/del&gt;&#xA;sorry, I had to :^)&lt;/p&gt;&#xA;</description>
			</item>
			<item>
				<title>Golang Is Fucking Rad</title>
				<link>https://inherently.xyz/blog/golang-is-fucking-rad/</link>
				<pubDate>Thu, 18 Mar 2021 21:21:15 +0200</pubDate>
				<guid>https://inherently.xyz/blog/golang-is-fucking-rad/</guid>
				<description>&lt;h2 id=&#34;radical-gopherism&#34;&gt;Radical Gopherism&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using Go for the better part of a year at this point and I&amp;rsquo;m loving most things about it.&#xA;You know the typical stuff, types, compiled, fast, portable, easy to cross-compile and the rest of the goodness.&#xA;However that&amp;rsquo;s not what made me stick with it although those things helped.&#xA;The main things I liked were mostly that it was in many ways not like Java.&#xA;There is no need for an IDE, the language is not endlessly complex, I can read other people&amp;rsquo;s code right away.&#xA;Don&amp;rsquo;t forget the compiler-enforced formatting, easy static compilation allowing for tiny container images.&#xA;The standard library is also phenomenal if frameworks are not your cup of tea it&amp;rsquo;s very possible to avoid them in a lot of cases.&#xA;And the new file embedding functionality? Amazing, my site is now a portable self-contained binary.&#xA;And the adoption? Practically any project I&amp;rsquo;m interested in just so happens to be written in it!&#xA;Most things I use, kubernetes, docker, terraform, vault, gitea, droneci, fluxcd, minio and more I&amp;rsquo;m probably forgetting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reality&#34;&gt;Reality&lt;/h2&gt;&#xA;&lt;p&gt;Time to stop drooling though.&#xA;While I wasn&amp;rsquo;t inaccurate or misrepresentative above, I want to look at pros-cons for a moment.&lt;/p&gt;&#xA;&lt;h3 id=&#34;dank-reality&#34;&gt;Dank Reality&lt;/h3&gt;&#xA;&lt;p&gt;The main thing I do is write backend web microservices and small operating system utilities.&#xA;As mentioned previously, the stdlib is amazing and quite a few things I&amp;rsquo;ve written use that almost exclusively.&#xA;If web frameworks are needed, there are plenty from piece-by-piece like gorilla, go-kit(depends if you count it) or go-chi, to all-encompassing gargantuan ones like go-micro (ironic name, I know) to middleground solutions like gin-gonic.&#xA;I can find client libraries for everything I want be it any sort of api, databases, application messaging systems and recently I found out I can even run ML models generated by keras in python from go.&#xA;I didn&amp;rsquo;t harp too much on this before but the static compilation is sweet.&#xA;Using docker multi-stage builds and starting from the 150MB fat &lt;code&gt;golang&lt;/code&gt; image with devtools in it but then being able to run the resulting binary in a run stage based on &lt;code&gt;scratch&lt;/code&gt; and have a 3MB production image is incredible.&#xA;I use it more and more every day and basically haven&amp;rsquo;t looked to shell scripting for anything except heavy string manipulation but even there I&amp;rsquo;m starting to move as see in &lt;a href=&#34;https://git.inherently.xyz/inherently/gopasswd&#34;&gt;gopasswd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sad-reality&#34;&gt;Sad Reality&lt;/h3&gt;&#xA;&lt;p&gt;This site is my doomer cabin in the woods so the fun stops here.&#xA;Also lists are scary so let&amp;rsquo;s &lt;em&gt;go&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;language package manager: having maintained gentoo ebuilds, I&amp;rsquo;ll never not hate language package managers&lt;/li&gt;&#xA;&lt;li&gt;not very competitive alternative compiler: gcc-go produces slower artifacts and I don&amp;rsquo;t want a dotnet situation&lt;/li&gt;&#xA;&lt;li&gt;google is very heavily involved: the pkg.go.dev shit just showcased it but I&amp;rsquo;m not comfortable with google being involved and yes this goes for k8s as well&lt;/li&gt;&#xA;&lt;li&gt;grpc support: google came up with grpc and is too involved in go but you need a 3rd party plugin for &lt;code&gt;protoc&lt;/code&gt; to output go which is stupid&lt;/li&gt;&#xA;&lt;li&gt;dev2prod: translating from local to remote dependencies and vice versa is handled poorly&lt;/li&gt;&#xA;&lt;li&gt;modules: kinda weird, I&amp;rsquo;ve come across too many cases where &lt;code&gt;rm go.mod go.sum &amp;amp;&amp;amp; go mod init &amp;amp;&amp;amp; go mod tidy&lt;/code&gt; was needed&lt;/li&gt;&#xA;&lt;li&gt;generics: don&amp;rsquo;t want generics but everyone is begging and the advantage of small and understandable might be lost in the future&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;Good language, fits what I do, like using it, will continue using it, wish some stuff was improved or fixed.&#xA;That was all for this post, I hope you enjoyed.&lt;/p&gt;&#xA;</description>
			</item>
			<item>
				<title>Computers Were Faster</title>
				<link>https://inherently.xyz/blog/computers-were-faster/</link>
				<pubDate>Tue, 29 Dec 2020 17:10:41 +0200</pubDate>
				<guid>https://inherently.xyz/blog/computers-were-faster/</guid>
				<description>&lt;p&gt;I own 3 operational 32-bit computers and I find them fun to play with and useful for software projects.&#xA;Two of them are socket 475 and one of them is for slot form factor intel cpus.&#xA;For the slot form factor one, I have a Celeron, a Pentium II and a Pentium III.&#xA;The socket 478 based ones are much closer to usable for most of my use cases and the other one is fun to tinker with.&#xA;How can that &amp;ldquo;&amp;ldquo;obsolete trash&amp;rdquo;&amp;rdquo; be useful, one might rightfully wonder.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-use-cases&#34;&gt;My Use Cases&lt;/h2&gt;&#xA;&lt;h3 id=&#34;development-use-case&#34;&gt;Development use case&lt;/h3&gt;&#xA;&lt;p&gt;Computers with less than 4GB of RAM and 2 cores are completely unusable and nobody should ever touch them, a &amp;ldquo;muh modern&amp;rdquo; advocate might cry.&#xA;However I use those computers at least once a week for various tasks.&#xA;First off, as a 32-bit docker registry. They don&amp;rsquo;t need to mix with the rest of the environment since there is no actual dependency between the 32bit and 64bit infrastructure.&#xA;In addition, I can see how long it takes to build a certain image based on my software, test its performance and experiment with multi-architecture images.&#xA;I would do the same thing for the raspberry pi but I only have one and that is not enough to warrant the effort.&#xA;If the above wasn&amp;rsquo;t enough, they are very useful for testing things such as bare metal provisioning with a mostly DIY setup, how to configure new things I&amp;rsquo;m interested in such as the aforementioned DIY bare metal provisioning solution as well as new software stacks like ELK or TIG.&#xA;They are also useful for API load testing and discovering where the bottlenecks are in a piece of software.&#xA;On a newer multi-core cpu with loads of RAM and fast storage the bottleneck only shows up when the workload origanically overwhelms the software.&#xA;However on a more limited system it becomes apparent very quickly where the bottleneck could be.&#xA;For example, if the hard drive access is more than it should be, you hear the damn thing click every time so you know where to look.&lt;/p&gt;&#xA;&lt;h3 id=&#34;networking-use-case&#34;&gt;Networking Use Case&lt;/h3&gt;&#xA;&lt;p&gt;In addition, old computers make great routers. Routers? They&amp;rsquo;re old and weak computers you might think.&#xA;Well, that anemic MIPS or ARM based all-in-one network box that many ISPs provide you with has a CPU that is orders of magnitude slower than either of my 32bit boxes. For the router use case the same thing applies to the amount as well as speed of RAM.&#xA;In fact, that&amp;rsquo;s how I originally got into DIY and selfhosting.&#xA;The case that used to hold my server had one of the 32-bit motherboards and cpu and ram as well as a hard drive.&#xA;After finding about pfsense and having that computer as a spare, naturally, I gave it a try.&#xA;A quick install of pfsense later and I was learning about DNS, DHCP, ARP requests, MAC addresses, gateways, how to set up an access point and started my journey into learning about networking.&#xA;Another use that requires a somewhat low-cost investment is getting a picoPSU or microPSU or something to that extent to power one of those 32-bit machines, connect it to a TV and use it as a dashboard display for monitoring software.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s not the end and imagination is the main limit into making this sort of hardware perform a useful task.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;Before you go around calling older computers obsolete, check if PEBCAK is the bottleneck.&#xA;Thank you for reading, if you have a cool project using older hardware, feel free to let me know.&lt;/p&gt;&#xA;</description>
			</item>
	</channel>
</rss>
