<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ilai Fallach</title>
    <description>The latest articles on Forem by Ilai Fallach (@ilaif).</description>
    <link>https://forem.com/ilaif</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F908395%2F5da7fbc0-1c54-4643-a4c8-7d98686397bc.jpg</url>
      <title>Forem: Ilai Fallach</title>
      <link>https://forem.com/ilaif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ilaif"/>
    <language>en</language>
    <item>
      <title>A 60% keyboard is good for you</title>
      <dc:creator>Ilai Fallach</dc:creator>
      <pubDate>Wed, 28 Sep 2022 12:14:50 +0000</pubDate>
      <link>https://forem.com/ilaif/a-60-keyboard-is-good-for-you-2d4k</link>
      <guid>https://forem.com/ilaif/a-60-keyboard-is-good-for-you-2d4k</guid>
      <description>&lt;p&gt;&lt;em&gt;(The cover photo was generated using &lt;a href="https://www.midjourney.com" rel="noopener noreferrer"&gt;MidJourney&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A few years ago, at one of the companies I've worked for, I came across a proliferation of mechanical keyboards and in particular, 60% keyboards, and I bought one for myself.&lt;/p&gt;

&lt;p&gt;Since then, I've used that 60% mechanical keyboard, and I can't go back. However, I've noticed that like many other practices in software development, it's easy to stay in the comfort zone of what we already know, since there are so many things to learn.&lt;/p&gt;

&lt;p&gt;As I wrote in my &lt;a href="https://buildstupidstuff.com/building-stupid-stuff#heading-why-write-a-blog-at-all" rel="noopener noreferrer"&gt;introductory blog post&lt;/a&gt;, developers are lifelong learners. Therefore, I hope that sharing my own experience will encourage you to try something completely different. This might seem difficult at first but will improve your typing experience and productivity over time.&lt;/p&gt;

&lt;p&gt;Let's start with the basics.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's a mechanical keyboard?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A physical keyboard that uses an individual spring and switch for each key (&lt;a href="https://www.pcmag.com/encyclopedia/term/mechanical-keyboard" rel="noopener noreferrer"&gt;PCMac&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wait, so what &lt;strong&gt;isn't&lt;/strong&gt; a mechanical keyboard?&lt;/p&gt;

&lt;p&gt;The most widely produced keyboard type is called &lt;a href="https://en.wikipedia.org/wiki/Membrane_keyboard" rel="noopener noreferrer"&gt;Membrane&lt;/a&gt; (although there are other types as well):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A physical keyboard whose "keys" are not separate, but rather are pressure pads that have only outlines and symbols printed on a flat, flexible surface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Some history
&lt;/h3&gt;

&lt;p&gt;Initially, when keyboards were first produced, they were mechanical. As computers began getting cheaper, manufacturers looked for ways to make keyboards cheaper as well, and thus the membrane keyboard was created.&lt;/p&gt;

&lt;p&gt;However, membrane keyboards have downsides to mechanical keyboards, and so in recent years, users with high requirements from keyboards (Gamers, Typers, Programmers, etc..) began using them again.&lt;/p&gt;

&lt;p&gt;Here's a comparison by &lt;a href="https://www.wepc.com/tips/what-is-a-mechanical-keyboard/" rel="noopener noreferrer"&gt;wepc.com&lt;/a&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vgmcftk3c5h0m74b3qt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vgmcftk3c5h0m74b3qt.png" alt="chanical vs Membrane"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Back to mechanical keyboards
&lt;/h2&gt;

&lt;p&gt;The most important part of a mechanical keyboard is the switch type. There are 3 types: &lt;strong&gt;linear&lt;/strong&gt;, &lt;strong&gt;tactile&lt;/strong&gt; and &lt;strong&gt;clicky&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linear (red, yellow, black) - are the quietest of all and the fastest to click on which makes them popular among gamers. &lt;/li&gt;
&lt;li&gt;Tactile (brown, orange) - have a tactile bump that is felt on each key press. &lt;/li&gt;
&lt;li&gt;Clicky (blue, green) - are the noisiest and produce a clicky sound when actuated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqqbc7v34yw22jtwrqnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqqbc7v34yw22jtwrqnh.png" alt="switch-types.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Source: &lt;a href="https://steelseries.com/blog/gaming-keyboard-mechanical-switches-44" rel="noopener noreferrer"&gt;steelseries.com&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Keycaps (the actual plastic above the switch), board type, and form (size) are also important factors of mechanical keyboards.&lt;/p&gt;

&lt;p&gt;Let's talk about the form, then.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's a 60% keyboard?
&lt;/h2&gt;

&lt;p&gt;Keyboards have many custom forms as can be seen in the following graphic that shows some of them:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2k52xx7dp4oq67ln4ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2k52xx7dp4oq67ln4ir.png" alt="full-size-keyboard.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwnpsei3y2qckz1y9akh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwnpsei3y2qckz1y9akh8.png" alt="tenkeyless-keyboard.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoeaksbvge1ckupgqybp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoeaksbvge1ckupgqybp.png" alt="75-keyboard.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5viyxk87z9hin0wp5bid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5viyxk87z9hin0wp5bid.png" alt="65-keyboard.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sqhvz3ms8o8ax3r8v3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sqhvz3ms8o8ax3r8v3m.png" alt="60-keyboard.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Source and a great forms guide from &lt;a href="https://www.keychron.com/blogs/news/keyboard-size-layout-buying-guide" rel="noopener noreferrer"&gt;keychron.com&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The full-sized is probably the "classic" keyboard, while a variation of 75% is roughly what we see on most laptops. From my personal experience, I'd say that most of us are comfortable with keyboards in the range of 75% to full-sized.&lt;/p&gt;

&lt;p&gt;If we go down to 65%, usually the first thing that we lose is the function keys (&lt;code&gt;F1&lt;/code&gt;, &lt;code&gt;F2&lt;/code&gt;, ...). &lt;/p&gt;

&lt;p&gt;But function keys are useful, and so an &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Fn_key" rel="noopener noreferrer"&gt;Fn key&lt;/a&gt;&lt;/strong&gt; usually exists, that when held, will "switch" the functionality of the top row to the function keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ESC&lt;/code&gt; -&amp;gt; &lt;code&gt;`&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt; -&amp;gt; &lt;code&gt;F1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2&lt;/code&gt; -&amp;gt; &lt;code&gt;F2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is all still pretty sane since F keys are not very commonly used, so pressing an additional key from time to time to use the F keys is still within the "comfortable" zone.&lt;/p&gt;

&lt;p&gt;When we go below 65%, though, things are starting to get "less comfortable" (and more interesting 😬). Perhaps the biggest change is the removal of &lt;strong&gt;arrow keys&lt;/strong&gt;. These keys are so common, that it sounds insane to be able to work properly without them.&lt;/p&gt;

&lt;p&gt;Today we're going to discuss the benefits of 60% keyboards, and why I think they are good for you :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5rcpg66ncqef6m6nbbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5rcpg66ncqef6m6nbbx.png" alt="My 60% Keyboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(My 60% keyboard)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is a 60% keyboard good for you?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Faster switch from using the mouse to typing&lt;/li&gt;
&lt;li&gt;For most people it's ergonomically better&lt;/li&gt;
&lt;li&gt;Faster reach to all navigational keys&lt;/li&gt;
&lt;li&gt;More compact&lt;/li&gt;
&lt;li&gt;Cheaper&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  (1) Keyboard and mouse
&lt;/h3&gt;

&lt;p&gt;Whenever we're typing, our neutral position of both hands is on what is called the &lt;a href="https://www.computerhope.com/jargon/h/hrk.htm" rel="noopener noreferrer"&gt;home row keys&lt;/a&gt;, which are &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;S&lt;/code&gt;, &lt;code&gt;D&lt;/code&gt;, &lt;code&gt;F&lt;/code&gt; for the right hand, and  &lt;code&gt;J&lt;/code&gt;, &lt;code&gt;K&lt;/code&gt;, &lt;code&gt;L&lt;/code&gt;, &lt;code&gt;;&lt;/code&gt; for the left.&lt;/p&gt;

&lt;p&gt;Assuming you're right-handed, whenever you want to use your mouse, you need to move your hand from the home row keys to the mouse, as seen in the following graphic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr5vgczmm6rmidqqawqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr5vgczmm6rmidqqawqm.png" alt="keyboard-full-size-mouse.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we can, when working with a full-size keyboard, the distance is quite large. With a 60% keyboard, it looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zu0n6blj7morf8t7447.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zu0n6blj7morf8t7447.png" alt="keyboard-60-mouse.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means that with a 60% keyboard, switching between 2-hand typing and the mouse is much faster (~half the distance!).&lt;/p&gt;

&lt;h3&gt;
  
  
  (2) Ergonomics
&lt;/h3&gt;

&lt;p&gt;While it depends on your shoulder length, the average person needs to bend his hands outwards from their neutral resting position when using a full-size keyboard. A 60% or tenkeyless keyboard is almost always more ergonomic.&lt;/p&gt;

&lt;p&gt;The following article seems to go really deep into choosing the right keyboard form for you: &lt;a href="https://www.ctrl.blog/entry/keyboard-form-factor-guide.html" rel="noopener noreferrer"&gt;Keyboard Form Factor Guide / Ctrl.blog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  (3) Use navigational keys faster
&lt;/h3&gt;

&lt;p&gt;A common feature in mechanical keyboards is the key mapping programmability. We can program keys to behave differently. &lt;/p&gt;

&lt;p&gt;A specific capability is the "temporary layer switch", which allows a held key to change the entire keyboard's key mapping temporarily (as long as it's being held).&lt;/p&gt;

&lt;p&gt;The following visualization shows my personal temporary layer key mapping. I chose the &lt;code&gt;Caps Lock&lt;/code&gt; key as my layer switch key, as I rarely use this functionality anyway, and it's positioned nicely on the home row.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvojj78ysc8xj49tb0ctt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvojj78ysc8xj49tb0ctt.png" alt="my-keyboard-caps-layer.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, all the navigational and Fn keys (+bonus media keys!) are now much closer to the home row, which keeps your hands in the same place even when using the arrow keys!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: It takes some time to get used to a new key mapping such as this. It took me 3 weeks to reach my regular working speed, and since then it had gotten better ^^&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  (4) More compact
&lt;/h3&gt;

&lt;p&gt;Not much to add here really, it's just smaller, and therefore allows for more desk space and is much more portable.&lt;/p&gt;

&lt;h3&gt;
  
  
  (5) Cheaper
&lt;/h3&gt;

&lt;p&gt;Fewer keys == Fewer materials == Cheaper (Assuming all the rest of the factors of the keyboard are the same).&lt;/p&gt;

&lt;h2&gt;
  
  
  When used at work
&lt;/h2&gt;

&lt;p&gt;We've already covered that one of the characteristics of mechanical keyboards is that they are &lt;strong&gt;usually&lt;/strong&gt; louder than their membrane counterparts.&lt;/p&gt;

&lt;p&gt;While this can be considered an advantage if you like the sound of the typing, when working alongside others, it can become a life-threatening event (A few co-workers not-so-secretly expressed the desire to murder me when I used a clicky-switch keyboard for long enough periods).&lt;/p&gt;

&lt;p&gt;However, there are insanely quiet switches that are even quieter than membrane keyboards.&lt;/p&gt;

&lt;p&gt;We are now going to cover my current mechanical keyboard setup that I personally like (and is also very quiet).&lt;/p&gt;

&lt;h2&gt;
  
  
  My 60% keyboard setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prebuilt keyboard
&lt;/h3&gt;

&lt;p&gt;My own keyboard setup is pretty simple. I originally bought a prebuilt budget keyboard that is quite customizable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvaf3h1yxtjndu1cvwft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvaf3h1yxtjndu1cvwft.png" alt="igk61 keyboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's breakdown the long title description of this keyboard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;60%&lt;/strong&gt; - We know this one already ;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RGB&lt;/strong&gt; - Full Red-Green-Blue lighting on each of the keys, and is fully programmable with animations, etc...&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hotswap switch&lt;/strong&gt; - This means that the board allows you to pull out existing switches and replace them with others easily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pbt keycaps&lt;/strong&gt; - The type of the keycaps. This is a whole topic in and of itself, here's an &lt;a href="https://drop.com/talk/108/massdrop-101-intro-to-keycaps" rel="noopener noreferrer"&gt;overview&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;programmable&lt;/strong&gt; - There's software that allows configuring everything from keymapping and lighting to macros.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;61 key poker layout&lt;/strong&gt; - The keyboard has exactly 61 keys. "Poker" stands for an unofficial name of all 60% keyboards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SmartMonkey iGK61 set2b&lt;/strong&gt; - The exact model of the keyboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are two customization options: the color of the keyboard and the switch model.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.epathbuy.com/product/60-rgb-mechanical-keyboard-hotswap-switch-pbt-keycaps-programmable-61-key-poker-layout-smartmonkey-igk61-set2b" rel="noopener noreferrer"&gt;Purchase link&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My first switches were the &lt;a href="https://keebworks.com/kailh-box-white/#:~:text=The%20Kailh%20BOX%20White%20is,tactility%20and%20a%20click%20noise." rel="noopener noreferrer"&gt;Kailh Box Whites&lt;/a&gt;. These switches are very clicky and while I absolutely loved the typing feeling they had (one of the best I ever tried), I needed something else for the office.&lt;/p&gt;

&lt;h3&gt;
  
  
  Silent Switches
&lt;/h3&gt;

&lt;p&gt;After some research, I came across &lt;a href="https://thocstock.com/switches/gazzew-boba-u4-silents" rel="noopener noreferrer"&gt;Gazzew's Boba U4 Silents&lt;/a&gt; switches.&lt;/p&gt;

&lt;p&gt;It's magical how quiet these switches are!&lt;/p&gt;

&lt;p&gt;I also really liked their typing feeling, and they are my current favorite switches for typing at the office.&lt;/p&gt;

&lt;h3&gt;
  
  
  GSA Keycaps
&lt;/h3&gt;

&lt;p&gt;Next, I wanted to give some color to my keycaps. While I don't think they're the nicest looking keycaps out there, their "same-height" GSA profile (Yes, Keycaps layout is another thing you should be aware of 🙈) is really nice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h12q2110pyxewwz9d48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h12q2110pyxewwz9d48.png" alt="my-keyboard-cropped.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.epathbuy.com/product/custom-gh60-keycaps-set-pbt-61" rel="noopener noreferrer"&gt;Purchase link&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Programming the temporary layer
&lt;/h3&gt;

&lt;p&gt;This keyboard has software that allows remapping the keys to enable the temporary layer as seen in the Use navigational keys faster section to improve productivity.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="http://www.jikedingzhi.com/downloadlist?driverID=41" rel="noopener noreferrer"&gt;Download link&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you need any help with defining the mapping, then try this &lt;a href="https://www.youtube.com/watch?v=0du_7cg058Y" rel="noopener noreferrer"&gt;youtube video&lt;/a&gt;. Also, feel free to reach out!&lt;/p&gt;




&lt;p&gt;That's it, folks! I hope that you've enjoyed this blog post. If you have any questions about mechanical keyboards or decided to learn more after reading this, please let me know by commenting here or reaching me directly at @ @ilai&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: I'm a rather noob in the vast world of mechanical keyboards. There are awesome resources out there to further learn about mechanical keyboards. Youtube is a great starting point, just write "Getting started with mechanical keyboards" and get started (Just remember to open a stopwatch to stop you from a never-ending video wormhole 😉).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you liked this content, consider &lt;a href="https://buildstupidstuff.com/newsletter" rel="noopener noreferrer"&gt;signing up to my newsletter (it's free).&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://buildstupidstuff.com/a-60-keyboard-is-good-for-you" rel="noopener noreferrer"&gt;https://buildstupidstuff.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>One Config to Rule Them All</title>
      <dc:creator>Ilai Fallach</dc:creator>
      <pubDate>Tue, 20 Sep 2022 19:52:04 +0000</pubDate>
      <link>https://forem.com/ilaif/one-config-to-rule-them-all-1ho1</link>
      <guid>https://forem.com/ilaif/one-config-to-rule-them-all-1ho1</guid>
      <description>&lt;h3&gt;
  
  
  So many configuration files
&lt;/h3&gt;

&lt;p&gt;Every company I've worked for had dozens of repositories written in the same tech stack (either due to a micro-services architecture, or just many different types of projects, think a few backend applications, a CLI app, an open source project, etc...).&lt;/p&gt;

&lt;p&gt;What &lt;strong&gt;all of these&lt;/strong&gt; repositories had in common was a project-level configuration that was &lt;em&gt;almost&lt;/em&gt; the same. Some examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A CI/CD configuration: &lt;a href="https://github.com/features/actions"&gt;GitHub&lt;/a&gt;'s &lt;code&gt;.github/workflows/...&lt;/code&gt;, &lt;a href="https://circle.ci"&gt;CircleCI&lt;/a&gt;'s &lt;code&gt;.circleci/config.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;An IDE configuration: &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt;'s &lt;code&gt;.vscode/&lt;/code&gt; or &lt;a href="https://www.jetbrains.com/idea/"&gt;Intellij IDEA&lt;/a&gt;'s &lt;code&gt;.idea/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A common linter/formatter configuration: &lt;code&gt;.eslintrc&lt;/code&gt;, &lt;code&gt;.prettierrc&lt;/code&gt;, &lt;code&gt;.golangci.yaml&lt;/code&gt;, &lt;code&gt;.pylintrc&lt;/code&gt;, ...&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package.json&lt;/code&gt; scripts, &lt;code&gt;.github/dependabot.yaml&lt;/code&gt;, &lt;code&gt;.github/pull_request_template.md&lt;/code&gt;, &lt;code&gt;Makefile&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the list goes on...&lt;/p&gt;

&lt;p&gt;Whenever I wanted to make a change to such a configuration file, I had to open 10 or more pull requests in all of the different repositories, carefully copy-pasting the same changes, trying to stay focused (and sane) in the process to make sure I got everything changed correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w89RNFJ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ecnxvgdyy2lknltzf91w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w89RNFJ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ecnxvgdyy2lknltzf91w.png" alt="bart-simpson-punishment.png" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Image created by this awesome &lt;a href="https://www.ranzey.com/generators/bart/index.html"&gt;bart chalkboard generator&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If we wanted to make 5 changes in 5 configuration files across 10 repositories, that would require 250 changes to be made just to update a configuration change!!!&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't Repeat Yourself
&lt;/h3&gt;

&lt;p&gt;One of the first principles we learn as programmers is &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;Don't Repeat Yourself (DRY)&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So how come we let ourselves rewrite the same configuration again and again in all of our projects?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E0wRZk35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g5rolbopxci0j9snyfp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E0wRZk35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g5rolbopxci0j9snyfp2.png" alt="going-crazy" width="720" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Call me Sauron, but this drove me insane, and so I embarked on a quest to solve it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Existing solutions
&lt;/h3&gt;

&lt;p&gt;I'm not the first to tackle this problem and approach solving it. While looking for solutions, I found 2 interesting projects. Here are my opinionated thoughts on both of them:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://mrm.js.org"&gt;mrm&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;A powerful tool that uses tasks written in javascript to maintain updates on shared config files intelligently.&lt;/p&gt;

&lt;p&gt;👍🏼 Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Powerful&lt;/li&gt;
&lt;li&gt;Comes with predefined presets &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👎🏼 Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex and implicit (I don't want to write code if I don't have to)&lt;/li&gt;
&lt;li&gt;Very oriented to the javascript ecosystem&lt;/li&gt;
&lt;li&gt;Doesn't support syncing multiple repositories simultaneously&lt;/li&gt;
&lt;li&gt;Doesn't support creating pull requests for the updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://cruft.github.io"&gt;cruft&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;A &lt;a href="https://cookiecutter.readthedocs.io/"&gt;Cookiecutter&lt;/a&gt; compatible tool that supports initializing and updating project boilerplate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;a href="https://en.wikipedia.org/wiki/Cookie_cutter"&gt;Cookie cutter&lt;/a&gt; is a tool that helps with creating new projects based on boilerplate templates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;👍🏼 Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds on many good boilerplates (I personally don't like boilerplates, there usually isn't a one-size-fits-all and I like to get my hands dirty to make sure I understand the configuration)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👎🏼 Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Doesn't support syncing multiple repositories simultaneously&lt;/li&gt;
&lt;li&gt;Doesn't support creating pull requests for the updates&lt;/li&gt;
&lt;li&gt;Has to be based on a cookie-cutter template&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My requirements
&lt;/h3&gt;

&lt;p&gt;When starting to think about a solution that would fit my needs, I had a couple of requirements in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌵 Stay DRY - Write a configuration once, and have it synced across many projects.&lt;/li&gt;
&lt;li&gt;🤤 &lt;a href="https://en.wikipedia.org/wiki/KISS_principle"&gt;Keep It Simple Stupid (KISS)&lt;/a&gt; - Treat configuration snippets as simple text, not assuming anything about structure.&lt;/li&gt;
&lt;li&gt;🙆🏻‍♀️ Allow flexibility, but not too much - Allow syncing whole files, or parts of them (currently, line-based).&lt;/li&gt;
&lt;li&gt;🤖 Automate all the things - After an initial configuration, I want the solution to handle the rest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introducing Goplicate
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ilaif/goplicate"&gt;Goplicate&lt;/a&gt; is a CLI tool that helps define common code or configuration snippets once and sync them to multiple projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nvDOYyZu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvmq3ug3cnfmpigxy4fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nvDOYyZu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvmq3ug3cnfmpigxy4fz.png" alt="goplicate.png" width="880" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Made using &lt;a href="https://gopherize.me"&gt;https://gopherize.me&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;It balances simplicity and flexibility by using comments to annotate blocks of configuration that we would like to sync. I've felt the 2 alternative solutions required too much of me to get started.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: I'm the author of Goplicate&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Quick start in 4 simple steps
&lt;/h3&gt;

&lt;p&gt;In the following simplified example, we'll sync an &lt;a href="https://eslint.org"&gt;eslint&lt;/a&gt; configuration.&lt;/p&gt;

&lt;p&gt;We'll end up having the following folder structure (full example &lt;a href="https://github.com/ilaif/goplicate/tree/main/examples/simple"&gt;here&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+ shared-configs-repo/
+   .eslintrc.js
&lt;/span&gt;  repo-1/
    .eslintrc.js
&lt;span class="gi"&gt;+   .goplicate.yaml
&lt;/span&gt;  repo-2/
    .eslintrc.js
&lt;span class="gi"&gt;+   .goplicate.yaml
&lt;/span&gt;  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's go!&lt;/p&gt;

&lt;p&gt;1️⃣ Choose a config file that some of its contents are copied across multiple projects, and add goplicate block comments for the &lt;code&gt;common-rules&lt;/code&gt; section of your desire:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;repo-1/.eslintrc.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="p"&gt;module.exports = {
&lt;/span&gt;    "extends": "eslint:recommended",
    "rules": {
&lt;span class="gi"&gt;+       // goplicate-start:common-rules
&lt;/span&gt;        // enable additional rules
        "indent": ["error", 2],
        "linebreak-style": ["error", "unix"],
        "quotes": ["error", "double"],
        "semi": ["error", "always"],
&lt;span class="gi"&gt;+       // goplicate-end:common-rules
&lt;/span&gt;
        // override configuration set by extending "eslint:recommended"
        "no-empty": "warn",
        "no-cond-assign": ["error", "always"],
    }
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2️⃣ Create a separate, centralized repository to manage all of the shared config files. We'll name it &lt;code&gt;shared-configs-repo&lt;/code&gt;. Then, add a &lt;code&gt;.eslintrc.js&lt;/code&gt; file with the &lt;code&gt;common-rules&lt;/code&gt; snippet that we want to sync:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;shared-configs-repo/.eslint.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
     "rules": {
          // goplicate-start:common-rules
          // enable additional rules
          "indent": ["error", 4],
          "linebreak-style": ["error", "unix"],
          "quotes": ["error", "double"],
          "semi": ["error", "always"],
          // goplicate-end:common-rules
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Goplicate snippets are simply the sections of the config file that we'd like to sync. In this example, we've also added the surrounding configuration to make it more readable, but it's not really needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3️⃣ Go back to the original project, and create a &lt;code&gt;.goplicate.yaml&lt;/code&gt; file in your project root folder:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;repo-1/.goplicate.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.eslintrc.js&lt;/span&gt;
    &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;../shared-configs-repo/.eslintrc.js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4️⃣ Finally, run goplicate on the repository to sync any updates:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ichmvqwa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8fhfrw8h6c9y8o2lmbl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ichmvqwa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8fhfrw8h6c9y8o2lmbl3.png" alt="goplicate-run.png" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is only a simplified example. Let's see Goplicate's additional features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other supported features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;goplicate sync&lt;/code&gt; command to sync multiple repositories with a single command.&lt;/li&gt;
&lt;li&gt;Support for checking out a new git branch, committing the changes, and opening a GitHub pull request (assuming &lt;a href="https://cli.github.com/"&gt;GitHub CLI&lt;/a&gt; is installed and configured).&lt;/li&gt;
&lt;li&gt;Template support using &lt;a href="https://pkg.go.dev/text/template"&gt;Go Templates&lt;/a&gt; with dynamic parameters.&lt;/li&gt;
&lt;li&gt;Support for automatically running post hooks to validate that the updates worked well before opening a pull request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Future Plans
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Support for syncing from a remote source (a GitHub repository, etc...) to incorporate as part of a CI flow.&lt;/li&gt;
&lt;li&gt;Support goplicating (😉) JSON files (they don't support comments so we'll have to do it another way).&lt;/li&gt;
&lt;li&gt;Adding a documentation website with quick start examples for various use cases.&lt;/li&gt;
&lt;li&gt;Adding CI integrations for the &lt;code&gt;goplicate sync&lt;/code&gt; command to automate the opening of PRs for each update to the shared config repository.&lt;/li&gt;
&lt;li&gt;Your next suggested feature 😁.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Goplicate is in the early stages of development - If you want to contribute, then feel free to open a PR or hit me up @ @&lt;a href="https://dev.to@ilaif"&gt;Ilai Fallach&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;If you're maintaining many different projects with similar config files or a single project with many such repositories, then try &lt;a href="https://github.com/ilaif/goplicate"&gt;Goplicate&lt;/a&gt; out - It literally takes 4 steps to integrate into your existing projects' setup!&lt;/p&gt;

&lt;p&gt;What do you think about Goplicate? Leave a comment and share your feedback and thoughts 🙏&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://buildstupidstuff.com/one-config-to-rule-them-all"&gt;https://buildstupidstuff.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>devops</category>
      <category>automation</category>
    </item>
    <item>
      <title>Building stupid stuff</title>
      <dc:creator>Ilai Fallach</dc:creator>
      <pubDate>Tue, 13 Sep 2022 06:32:21 +0000</pubDate>
      <link>https://forem.com/ilaif/building-stupid-stuff-2nb7</link>
      <guid>https://forem.com/ilaif/building-stupid-stuff-2nb7</guid>
      <description>&lt;h2&gt;
  
  
  Building stupid stuff
&lt;/h2&gt;

&lt;p&gt;Hi there, you yet non-existent readers 👋🏼&lt;/p&gt;

&lt;p&gt;This is actually my 2nd attempt at starting a blog. The last time was over 7 years ago (If you want an intro to &lt;a href="https://en.wikipedia.org/wiki/Neural_network"&gt;Neural Networks&lt;/a&gt;, then go ahead and visit my &lt;a href="https://ilaif.wordpress.com/2015/02/24/machine-learning-neural-networks-1/"&gt;first and last post there&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A few questions I asked myself when writing this first post:&lt;/p&gt;

&lt;h3&gt;
  
  
  Why start a new blog instead of using the existing one?
&lt;/h3&gt;

&lt;p&gt;I guess that it feels better to start with a clean slate. It's always easier when you have no history (Also, I don't really study or practice ML nowadays, so having my first blog post about Neural Networks feels weird to me, but maybe I'll re-post it here later).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why write a blog at all?
&lt;/h3&gt;

&lt;p&gt;I've read somewhere that, as developers, we are "life-long learners". Learning all of the time is great, and I feel that sometimes what I learn just piles up in my head and doesn't "process" well enough. I think that writing about things helps with that. I also figured that if I learn something that I didn't find answers to on our incredible Internet, then someone else might benefit from reading about it as well!&lt;/p&gt;

&lt;p&gt;Another reason is to get more opinions about what I write and how I write about it; If I learn or build something, and someone has an opinion about it, then all I can do is learn from that and keep being challenged.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is this blog even about?
&lt;/h3&gt;

&lt;p&gt;I'm calling the blog "&lt;a href="https://buildstupidstuff.com/"&gt;Build Stupid Stuff&lt;/a&gt;" since many of the things we all build are probably a bit "stupid", but for me, they all originated from some need and so I'm hopeful that the name will give me the motivation to share it.&lt;/p&gt;

&lt;p&gt;So, I'll be writing about anything that I think might be useful, interesting or that I want feedback on.&lt;/p&gt;

&lt;p&gt;To new beginnings! 🍾&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BsQUww1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2v9kdeogy1syi6yaq3oz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BsQUww1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2v9kdeogy1syi6yaq3oz.png" alt="blogging-new.png" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Hint: I really like Golang nowadays)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>go</category>
    </item>
  </channel>
</rss>
