<?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>DEV Community: Florian Rand</title>
    <description>The latest articles on DEV Community by Florian Rand (@flrnd).</description>
    <link>https://dev.to/flrnd</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%2F149746%2Fed15e24d-3f0a-4ff2-ba6d-a20d7aa98913.jpg</url>
      <title>DEV Community: Florian Rand</title>
      <link>https://dev.to/flrnd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flrnd"/>
    <language>en</language>
    <item>
      <title>Must have command line tools!</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Tue, 14 Jan 2020 11:36:19 +0000</pubDate>
      <link>https://dev.to/flrnd/must-have-command-line-tools-109f</link>
      <guid>https://dev.to/flrnd/must-have-command-line-tools-109f</guid>
      <description>&lt;p&gt;It's been a while since my last post, and I thought it would be a nice new year start sharing my favourite command-line tools.&lt;/p&gt;

&lt;p&gt;Here we go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/sharkdp/bat"&gt;bat&lt;/a&gt;, A cat(1) clone with syntax highlighting and Git integration. &lt;br&gt;
&lt;a href="https://camo.githubusercontent.com/9d3d89364f2cc83ace8f29646a6236bc15ea1da0/68747470733a2f2f696d6775722e636f6d2f724773646e44652e706e67" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/9d3d89364f2cc83ace8f29646a6236bc15ea1da0/68747470733a2f2f696d6775722e636f6d2f724773646e44652e706e67" alt="bat screenshot" width="656" height="450"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/ggreer/the_silver_searcher"&gt;ag&lt;/a&gt;, The silver searcher. A code-searching tool similar to ack, but faster. &lt;a href="http://geoff.greer.fm/ag/"&gt;http://geoff.greer.fm/ag/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;ripgrep&lt;/a&gt;, another alternative to ack and ag. (Thanks to Michael for reminding me of this great tool).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/sharkdp/fd"&gt;fd&lt;/a&gt;, A simple, fast and user-friendly alternative to 'find'.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;, A command-line fuzzy finder.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_BOUQV_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/junegunn/i/master/fzf-preview.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_BOUQV_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/junegunn/i/master/fzf-preview.png" alt="fzf screenshot" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/wfxr/forgit"&gt;forgit&lt;/a&gt;, Utility tool powered by fzf for using git interactively. Thanks to &lt;a href="https://dev.to/0xdonut/comment/k9gj"&gt;Mr F.&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/ranger/ranger"&gt;ranger&lt;/a&gt;, A VIM-inspired file manager for the console &lt;a href="https://ranger.github.io"&gt;https://ranger.github.io&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/jonas/tig"&gt;tig&lt;/a&gt;, Text-mode interface for git &lt;a href="https://jonas.github.io/tig/"&gt;https://jonas.github.io/tig/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0Rm2eX9T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/5mpsyegjd6yr9m3vz1m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0Rm2eX9T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/5mpsyegjd6yr9m3vz1m7.png" alt="tig screenshot" width="800" height="710"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/github/hub"&gt;hub&lt;/a&gt;, A command-line tool that makes git easier to use with GitHub. &lt;a href="https://hub.github.com/"&gt;https://hub.github.com/&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;hub clone rtomayko/tilt

&lt;span class="c"&gt;# expands to:&lt;/span&gt;
&lt;span class="c"&gt;#=&amp;gt; git clone git://github.com/rtomayko/tilt.git&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/jakubroztocil/httpie"&gt;httpie&lt;/a&gt;, Modern command line HTTP client – user-friendly curl alternative with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc. &lt;a href="https://httpie.org/"&gt;https://httpie.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8QkD5xhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://httpie.org/static/img/httpie.gif%3Fv%3D70bc5a5b7fdf2b4982ed18b364c32b11" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8QkD5xhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://httpie.org/static/img/httpie.gif%3Fv%3D70bc5a5b7fdf2b4982ed18b364c32b11" alt="httpie gif" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://stedolan.github.io/jq/"&gt;jq&lt;/a&gt;, A lightweight and flexible command-line JSON processor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/ogham/exa"&gt;exa&lt;/a&gt;, A modern version of ‘ls’. &lt;a href="https://the.exa.website/"&gt;https://the.exa.website/&lt;/a&gt; (Thanks to &lt;a href="https://dev.to/0xdonut/comment/k8oe"&gt;Mr F.&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://dev.to/citizen428/comment/k8pi"&gt;Michael Kohl&lt;/a&gt; Suggestions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/lighttiger2505/lab"&gt;lab&lt;/a&gt;, like hub but for Gitlab (also wraps hub, so can manage both from one tool).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/Canop/broot"&gt;broot&lt;/a&gt; Instead of &lt;code&gt;tree&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/dflemstr/rq"&gt;rq&lt;/a&gt; record query, like jq but supporting more data formats.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>linux</category>
      <category>macos</category>
    </item>
    <item>
      <title>Don't let your demons conquer you.</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Fri, 28 Jun 2019 14:13:10 +0000</pubDate>
      <link>https://dev.to/flrnd/don-t-let-your-demons-conquer-you-1kk</link>
      <guid>https://dev.to/flrnd/don-t-let-your-demons-conquer-you-1kk</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image: This is my very last work before leaving the advertising world. One of the Seat Ateca campaign images that I can now showcase. I'm not sharing links to avoid looking self-promoting which isn't the case of this article&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I'm not used to writing about personal stuff. I like to share experiences and all that, but I think is normal to me, and a lot of people, to keep all that fragile stuff buried deep down, and never show it to the world.&lt;/p&gt;

&lt;p&gt;Today's story is not a story about &lt;code&gt;how to become a millionaire in a few steps&lt;/code&gt;, sorry. On the contrary, it's about failures. Well, some of my personal failures, but you know, failing is not that bad after all.&lt;/p&gt;

&lt;p&gt;Four years ago, I could happily say that I had a really successful career as a designer. I worked as an Art director for a big advertising agency, mostly specialized in the automobile industry. Working with and for teams of really smart people in campaigns for Honda, Seat, BMW, Audi and other brands from Volkswagen group, and fashion too, like Mango or Tarik Ediz to name a few.&lt;/p&gt;

&lt;p&gt;You know, working for these advertising agencies, the first thing I should've considered was those confidentiality agreements I was signing. I never cared too much. The money was good and I had very good connections, so I was never more than three consecutive days without work. Why should I worry about it? Also, because, as I said, I was lucky and I had good connections, why should I care about having a portfolio? Well, I had one, but it was an old-fashioned printed portfolio, in a cool leather folder, just in cases where I was asked to show some of my previous works, but this portfolio was full of very old work, nothing interesting in reality.&lt;/p&gt;

&lt;p&gt;Now, coming back to those confidentiality agreements I mentioned before. Unless you are a &lt;em&gt;rock superstar&lt;/em&gt;, you will have to sign a confidentiality agreement (well, probably not all agencies have the same practice, this is based on my experience with the few I've worked with), and you should have a good lawyer to review it before signing it. what was this all about? In a few points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All the work you do belongs to them and only them.&lt;/li&gt;
&lt;li&gt;You will not be allowed to talk about the details or products that you are working with during a period (to avoid leaks, for example, the launch of a new product or feature).&lt;/li&gt;
&lt;li&gt;You will not be allowed to show any kind of workpiece related to that job or campaign, online, offline, personal site or social media, not during the campaign (see the previous point) and never after. This includes mock-ups, process shoots, or final art. I will come to this point later.&lt;/li&gt;
&lt;li&gt;You are selling them your copyright or any kind of rights about the work you did for them, this is material for a very long post, so I'll keep it short. For me, the amount of money offered in return for the copyright of my work was enough to say yes! I'll sell you my soul! I was silly and should've considered granting a copyright license, for a limited period, but then I probably never would have worked for them in the first place. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coming back to not being allowed to showcase your work from those agencies, the problem as a designer is that your portfolio is your presentation letter. Without a strong visual portfolio, it doesn't matter how good you are (or you think you are). You belong to an industry where &lt;code&gt;visual&lt;/code&gt; is everything and has a strong weight.&lt;/p&gt;

&lt;p&gt;Some creative directors already knew me and my work, so no portfolio needed. A few of former colleagues started to craft personal web sites. They had the exact same confidentiality agreements problem than me. But they were smarter. My former colleagues, used those portfolio sites to showcase their skills instead of their work, side projects, rare ideas. A lot of excellent stuff. Me on the other side, didn't care too much.&lt;/p&gt;

&lt;p&gt;Social media started to be a thing. The smarter ones took care of their Instagram accounts, their followers, Facebook, &lt;em&gt;blah blah blah&lt;/em&gt;. I never cared and neglected all that. Yes, you can live with that and you don't owe shit to social media. But this is like the first industrial revolution. If you don't adapt to new times, you'll be left behind.&lt;/p&gt;

&lt;p&gt;So, what happened to me? My mother got really sick four years ago. I don't really want to enter in details here because it is still a very hard thing to swallow, but to put you into context, she had two brain strokes provoked by a heart tumor, and now she suffers &lt;a href="https://www.aphasia.org/aphasia-definitions/"&gt;aphasia&lt;/a&gt; which means that she needs care. (For those wondering, thankfully she has fantastic health right now).&lt;/p&gt;

&lt;p&gt;It was really hard to keep up my job and this situation, nearly 900 km away from my hometown. Probably at top of my career and it took me some time to decide what to do. I know for a fact, that a lot of my former partners and colleagues, in the same situation, would send her to a nursery home and continue with their lives. But you know what, I owe her too much. So, Fuck my career! &lt;/p&gt;

&lt;p&gt;Nowadays, without a strong visual portfolio forget about getting a decent job in the design industry. You can't imagine how many times I've regretted not taking care of that long time ago. Because I don't have the same energy than a few years ago to start a job-seeking process, I thought that was a good time to start my own business. What could be wrong? I had a lot of experience in my back! &lt;/p&gt;

&lt;p&gt;Oh my! How wrong I was! I opened a design shop. Outcome: I closed it a year ago, more or less with a lot of mistakes from the very beginning. Now looking in hindsight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My rates were out of the charts. I was pricing my services like I was before in a big city. The first huge mistake, not knowing the market I was introducing myself.&lt;/li&gt;
&lt;li&gt;Was a really awful salesman. And this was two mistakes in one. I should have hired a good one instead.&lt;/li&gt;
&lt;li&gt;Did a lot of free work for some clients because I liked them, very naive. I don't regret it and I even made a few friends. But from a business point of view, it was an awful business strategy.&lt;/li&gt;
&lt;li&gt;Never fired any of my former clients, and I should have fired a few of them. They cost me a lot of money, precious time and most important: mental health.&lt;/li&gt;
&lt;li&gt;Tried to copy how big agencies lick their clients' butts in their briefings and presentations. This thought was good in theory. Well, it ended being a huge waste of time. A lot of time, in fact, invested to get rejected the moment they knew about how much it would cost them. I was trying to sell the wrong product to the wrong costumers, again and again, and again.&lt;/li&gt;
&lt;li&gt;Started to become obsessed with bad design. True fact: we are surrounded by badly designed things, everywhere, from logos to gadgets, and you need to learn to live with it.&lt;/li&gt;
&lt;li&gt;I was forgetting one important thing: Life. I had no vacations, no free time or free days, for nearly three consecutive years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot more pitfalls, as you can imagine. Being an entrepreneur is serious shit. No wonder that only a few really succeed.&lt;/p&gt;

&lt;p&gt;Where am I now? After I closed my design shop I wanted a time to myself and I really needed that time.&lt;/p&gt;

&lt;p&gt;Teaching in a small design school where I live, the salary is not something from another world but helps to pay the rent and not burn my savings fast. This also leaves me with a ton of free time that I can spend with my family or to start coding again too. I even have time to write, as you can see by yourself, not my strongest suit. But it's totally fine. I'm aware that I need to improve my writing a lot, considering that I'm not a native English speaker. But instead of letting my doubts, fears and pitfalls dictate what I'm going to do next, I simply keep going. No matter what! I don't let my demons conquer me.&lt;/p&gt;

&lt;p&gt;There is no better school in life that your own mistakes.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy weekend!&lt;/p&gt;

</description>
      <category>career</category>
      <category>life</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A very simple command line tool as a side-project to learn go.</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Thu, 13 Jun 2019 21:32:39 +0000</pubDate>
      <link>https://dev.to/flrnd/a-very-simple-command-line-tool-as-a-side-project-to-learn-go-1gif</link>
      <guid>https://dev.to/flrnd/a-very-simple-command-line-tool-as-a-side-project-to-learn-go-1gif</guid>
      <description>&lt;h3&gt;
  
  
  The story
&lt;/h3&gt;

&lt;p&gt;I've been using &lt;a href="https://larder.io"&gt;Larder&lt;/a&gt; as my bookmark manager about a year and maybe and a half, more or less. Before Larder, I was -and still- using &lt;a href="https://github.com/jarun/Buku/"&gt;Buku&lt;/a&gt; (&lt;em&gt;a powerful bookmark manager written in Python3 and sqlite3&lt;/em&gt; -from Buku github page). Being used to Buku, one thing I was missing from larder was a cli to do searches directly from the command line, and since I love command line tools, what better excuse to start one in go?&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting small
&lt;/h3&gt;

&lt;p&gt;Every time I learn something new I like to find small projects, because keeping the idea small helps me to focus on specific tasks. Another reason to start small is because it's easier to finish the project in a reasonable amount of time and it feels great once it's finished, which is also great motivation to continue.&lt;/p&gt;

&lt;h3&gt;
  
  
  The cli
&lt;/h3&gt;

&lt;p&gt;This is how larder-cli was born a month ago, with Buku in mind and as inspiration. The current state of the cli is not nearly close to being called a complete tool, but that wasn't its purpose. It's been a lot of fun working in this little piece of software and I'm planning to add more features. One thing I want to learn now is a proper way to manage command line args.&lt;/p&gt;

&lt;p&gt;Another cool thing, I got an A+ in goreportcard!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oKOhG39H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/tvmhbuok4fkexxjnxgfo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oKOhG39H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/tvmhbuok4fkexxjnxgfo.png" alt="goreportcard" width="800" height="715"&gt;&lt;/a&gt;&lt;br&gt;
(that screen is from my self-hosted app, because for some reason the main app is giving me an error).&lt;/p&gt;

&lt;p&gt;I can't embed gitlab repos here so I'll leave the link: &lt;a href="https://gitlab.com/flrnprz/larder-cli"&gt;https://gitlab.com/flrnprz/larder-cli&lt;/a&gt; in case you want to check it out.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy coding!&lt;/p&gt;

</description>
      <category>go</category>
      <category>beginners</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Update - How do you refactor this piece of code?</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Wed, 12 Jun 2019 10:35:12 +0000</pubDate>
      <link>https://dev.to/flrnd/how-do-you-refactor-this-piece-of-code-5eg6</link>
      <guid>https://dev.to/flrnd/how-do-you-refactor-this-piece-of-code-5eg6</guid>
      <description>&lt;p&gt;Hello fellow gophers, I need some insights. I'm writing a command line client for larder.io bookmark in go. I have this function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;checkConfigRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;configDir&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HomeDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;configDir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c"&gt;// Check if the directory exist, if not, create it the route.&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsNotExist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MkdirAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModePerm&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I need to check if a config file exist, but before that I want to check if the route directory exist, if not create it and return the route.&lt;/p&gt;

&lt;p&gt;I don't know why but it feels off, not sure if I'm doing it wrong. What do you think? How do you refactor it? Should I pass the full route directly to the function instead of joining it inside? Help much appreciated!&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

&lt;h2&gt;
  
  
  UPDATE:
&lt;/h2&gt;

&lt;p&gt;Okey, let's see. I've got rid of that function and instead reworked the whole config setup.&lt;/p&gt;

&lt;p&gt;Here is the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Config token&lt;/span&gt;
&lt;span class="c"&gt;// and path&lt;/span&gt;
&lt;span class="c"&gt;// yaml config file&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;FileName&lt;/span&gt;    &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;Path&lt;/span&gt;        &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;TokenString&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`yaml:"token"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Token returns the configuration token string&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Unmarshal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TokenString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// SetPath defines the configuration directory path&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;SetPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;condigDir&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;condigDir&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;getUsrHomeDir&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User home error: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HomeDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;firstTimeRun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// Since we are going to store our api token,&lt;/span&gt;
    &lt;span class="c"&gt;// for security reasons we don't want give read access&lt;/span&gt;
    &lt;span class="c"&gt;// to other users in our system.&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MkdirAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0700&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;readConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ioutil&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c"&gt;// Most common cases are:&lt;/span&gt;
    &lt;span class="c"&gt;// Either the file doesn't exist, or&lt;/span&gt;
    &lt;span class="c"&gt;// Exist but you don't have read permission&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsNotExist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;firstTimeRun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Reading config file: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because ioutil.ReadFile already return any error if there is a problem with the config file, I can directly avoid the whole checkConfigRoute, If there is an error I already know that there is something wrong. So I initalizing it from the readConfig function instead.&lt;/p&gt;

&lt;p&gt;Thoughts?&lt;/p&gt;

&lt;p&gt;Thanks again!&lt;/p&gt;

</description>
      <category>help</category>
      <category>go</category>
      <category>refactorit</category>
    </item>
    <item>
      <title>What does your Desktop look like? A bit of *nixporn (Windows also welcome!)</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Tue, 11 Jun 2019 18:03:33 +0000</pubDate>
      <link>https://dev.to/flrnd/what-does-your-desktop-looks-like-a-bit-of-nixporn-windows-also-welcome-5age</link>
      <guid>https://dev.to/flrnd/what-does-your-desktop-looks-like-a-bit-of-nixporn-windows-also-welcome-5age</guid>
      <description>&lt;p&gt;Inpired in &lt;a class="mentioned-user" href="https://dev.to/aspittel"&gt;@aspittel&lt;/a&gt; post&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/aspittel" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R_6-mQQi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/practicaldev/image/fetch/s--stJcpewb--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/38627/77a2a5e7-603e-41b4-afcc-f7aff468ae2f.jpg" alt="aspittel"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/aspittel/what-does-your-terminal-look-like-4476" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;What does your Terminal look like?&lt;/h2&gt;
      &lt;h3&gt;Ali Spittel ・ Jun 11 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#bash&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#commandline&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cli&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Do you use default desktop setup or do you customize aswell?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>desktop</category>
      <category>unixporn</category>
    </item>
    <item>
      <title>Plastic.vim - a dark colorscheme for vim/neovim with low contrast colors for long coding sessions</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Fri, 31 May 2019 19:37:37 +0000</pubDate>
      <link>https://dev.to/flrnd/plastic-vim-a-dark-colorscheme-for-vim-neovim-with-low-contrast-colors-for-long-coding-sessions-5g0g</link>
      <guid>https://dev.to/flrnd/plastic-vim-a-dark-colorscheme-for-vim-neovim-with-low-contrast-colors-for-long-coding-sessions-5g0g</guid>
      <description>&lt;p&gt;&lt;a href="https://will-stone.github.io/plastic/" rel="noopener noreferrer"&gt;Plastic&lt;/a&gt; (by Will Stone) is one of my favorite color schemes for Visual Studio Code. &lt;/p&gt;

&lt;p&gt;Since I use neovim as my main editor, I decided to create a port for vim/neovim.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/flrnd" rel="noopener noreferrer"&gt;
        flrnd
      &lt;/a&gt; / &lt;a href="https://github.com/flrnd/plastic.vim" rel="noopener noreferrer"&gt;
        plastic.vim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      VSCode Plastic theme port for vim/neovim.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/flrnprz/plastic.vim/blob/master/plastic-vim-screen.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fflrnprz%2Fplastic.vim%2Fraw%2Fmaster%2Fplastic-vim-screen.png" alt="plastic.vim"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;plastic.vim&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/will-stone/plastic" rel="noopener noreferrer"&gt;VSCode Plastic&lt;/a&gt; theme port for vim/neovim.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Using your plugin manager of choice and placing &lt;code&gt;flrnprz/plastic.vim&lt;/code&gt; in your .vimrc file.
or&lt;/li&gt;
&lt;li&gt;clone this directory into your vim/plugged directory&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-viml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;"&lt;/span&gt; important:&lt;/span&gt;
&lt;span class="pl-c1"&gt;set&lt;/span&gt; &lt;span class="pl-c1"&gt;termguicolors&lt;/span&gt;

&lt;span class="pl-c1"&gt;set&lt;/span&gt; &lt;span class="pl-c1"&gt;background&lt;/span&gt;&lt;span class="pl-k"&gt;=&lt;/span&gt;dark
&lt;span class="pl-k"&gt;syntax&lt;/span&gt; &lt;span class="pl-c1"&gt;on&lt;/span&gt;
&lt;span class="pl-c1"&gt;colorscheme&lt;/span&gt; plastic

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;"&lt;/span&gt; Lightline&lt;/span&gt;
&lt;span class="pl-k"&gt;let&lt;/span&gt; &lt;span class="pl-smi"&gt;&lt;span class="pl-k"&gt;g:&lt;/span&gt;lightline&lt;/span&gt; &lt;span class="pl-k"&gt;=&lt;/span&gt; { &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;colorscheme&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;plastic&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; }&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flrnd/plastic.vim" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;It has the same design principle of simple syntax highlight. I hope you enjoy it!&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>vim</category>
      <category>colorscheme</category>
    </item>
    <item>
      <title>Design tools for 2019</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Fri, 31 May 2019 15:12:45 +0000</pubDate>
      <link>https://dev.to/flrnd/design-tools-for-2019-28c4</link>
      <guid>https://dev.to/flrnd/design-tools-for-2019-28c4</guid>
      <description>&lt;h4&gt;
  
  
  UX, UI Design software landscape
&lt;/h4&gt;

&lt;p&gt;If you had asked me a few years ago how would look like today the design applications landscape, I probably would failed my guess right away with my answer.&lt;/p&gt;

&lt;p&gt;Today we have plenty of good tools, for example: inVision and inVision Studio, Framer X, Adobe XD, Protopie, Webflow, UXPin... and the list goes on.&lt;/p&gt;

&lt;p&gt;At the end of the day our tools of choice are those which get the job done and make our lifes easier. Some other times the choices come with the Studio or Agency you work with. &lt;/p&gt;

&lt;p&gt;In the last few years I've discovered a few gems which are part of my daily workflow now, and I want to share them with you!&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Pen and Paper
&lt;/h4&gt;

&lt;p&gt;This is a very well know tool for everyone. Also is my favorite tool not only for design. If I had to make a ranking, it would be my option number one. I can't start a tool list without mention how awesome is to stain your hands with ink.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TT7h1UbT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/b88osyv5uq2jp6qjav29.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TT7h1UbT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/b88osyv5uq2jp6qjav29.jpg" alt="My personal notebook with some wireframes" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why I still preffer pen and paper with all the amazing tools out there? Because it makes me lot more productive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download your work directly from your brain to the paper.&lt;/li&gt;
&lt;li&gt;You can start working right away, no instructions needed or learn new software.&lt;/li&gt;
&lt;li&gt;You can work literally everywhere (well, not underwater).&lt;/li&gt;
&lt;li&gt;Low fidelity wireframes are more than enough to show ideas. This also helps me to get the shit done fast, without worrying about pixel perfect solutions.&lt;/li&gt;
&lt;li&gt;Handwriting, drawing, scribbling... have beneficial effects in your brain activity, also improves creativity, help with your learning hability and a big list of reasons to start doodling notebooks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a side note, can be expensive. I like to buy recycled paper notebooks, and they cost a bit more than normal paper, but also I like to keep it ECO friendly.&lt;/p&gt;

&lt;h4&gt;
  
  
  Figma
&lt;/h4&gt;

&lt;p&gt;This tool has been a game changer for me in the last two years. You can choose between browser based app or desktop. I was surprised how well it performs compared with other native apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j5cRqKJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/nqh5yfa5anslgcm3eq8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j5cRqKJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/nqh5yfa5anslgcm3eq8y.png" alt="Seach bar design for a travel agency" title="Yes it's Spanish, sorry!" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can easily collaborate and changes are live. It has a free tier with very reasonable options, and the UI is very intuitive and easy to use. &lt;/p&gt;

&lt;p&gt;It doesn't have a nice ecosystem of tools and plugins that sketch has, but I've never found a situation where figma didn't serve me well. In my opinion it has enough features to be a good professional quality tool.&lt;/p&gt;

&lt;p&gt;Another strong point is that you can integrate figma with a reasonable amount of platforms and tools, some interesting are: Zeplin, Slack, trello or protopie.&lt;/p&gt;

&lt;p&gt;And don't worry, you can continue working with sketch and then import files to figma. It has a dedicated tool for that and works really well.&lt;/p&gt;

&lt;h4&gt;
  
  
  Artboard studio
&lt;/h4&gt;

&lt;p&gt;Well, Artboard studio is another browser based gem. Like they say in their web, Artboard studio is Product mockups Made easy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7QdbURUr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/e5wwlvsvaqoud1ayqlb0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7QdbURUr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/e5wwlvsvaqoud1ayqlb0.jpeg" alt="My cover image made with artboard studio" title="I made this cover image in less than 15" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember the cover image? I made this with little to no effort today, and if you don't believe me, I invite you to try it.&lt;/p&gt;

&lt;p&gt;With this tool making photorealistic mockups is a matter of drag and drop. No more Photoshop hours separating items from the background.&lt;/p&gt;

&lt;p&gt;There is a free tier and a premium tier, depending on your needs the free resources could be more than enough.&lt;/p&gt;

&lt;h4&gt;
  
  
  Colorbox.io
&lt;/h4&gt;

&lt;p&gt;If you like working with colors, you're going to love this app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UI2skEd6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/2mq98thre65cjq3w34f1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UI2skEd6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/2mq98thre65cjq3w34f1.png" alt="Colorbox app" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a wonderful tool to build color systems for accesible UIs. This tool was released last year by Lyft Design team as a solution to some of the problems they were facing with color systems and accessibility.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fontspark
&lt;/h4&gt;

&lt;p&gt;And lastly, one of my recent findings, fontSpark.app. I love typography and fontSpark is a web based app that helps discover new fonts. It's Very easy to use, so no need to explain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--axacee2d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/91eorc1dh6prnp9plgf7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--axacee2d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/91eorc1dh6prnp9plgf7.gif" alt="FontSpark in action" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.figma.com"&gt;Figma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://artboard.studio/"&gt;Artboard studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.colorbox.io/"&gt;Colorbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fontspark.app"&gt;FontSpark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And this is it! Do you know any app like these you want to share?&lt;/p&gt;

&lt;p&gt;Have a nice weeked! 💃🏿🍻🏖️&lt;/p&gt;

</description>
      <category>ux</category>
      <category>ui</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A simple react a11y Emoji component</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Tue, 28 May 2019 10:50:02 +0000</pubDate>
      <link>https://dev.to/flrnd/a-simple-react-a11y-emoji-component-dim</link>
      <guid>https://dev.to/flrnd/a-simple-react-a11y-emoji-component-dim</guid>
      <description>&lt;p&gt;Emojis are cool, right? Everyone ❤️ emojis, but screen readers have a different opinion about the subject.&lt;/p&gt;

&lt;p&gt;For those who don't already know, there are two attributes very useful to help screen readers:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aria-label&lt;/code&gt; adds a string label to an element, it's useful in cases that the text label is &lt;em&gt;not&lt;/em&gt; visible on the screen.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aria-hidden&lt;/code&gt; (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-hidden_attribute"&gt;From MDN&lt;/a&gt;): &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Adding aria-hidden="true" to an element removes that element and all of its children from the accessibility tree. This can improve the experience for assistive technology users by hiding:&lt;/p&gt;

&lt;p&gt;Purely decorative content, such as icons or images.&lt;br&gt;
Duplicated content, such as repeated text.&lt;br&gt;
Offscreen or collapsed content, such as menus.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, these attributes seems a very good idea to our Emoji component. Let's see it in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Emoji&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;
    &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;img&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Emoji&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we don't pass a label prop, we want to set aria-hidden to true so screen readers ignore our emoji.&lt;/p&gt;

&lt;p&gt;And some use example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Emoji&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"open book"&lt;/span&gt; &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"📖"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;timeToRead&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which renders something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"emoji"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"img"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"open book"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;📖&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
2 min read
&lt;span class="c"&gt;&amp;lt;!-- ... -&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is it! Fun isn't it?&lt;br&gt;
Happy ❤️☕️🐑🐧!&lt;/p&gt;

&lt;p&gt;Cover image by &lt;a href="https://unsplash.com/@lidyanada"&gt;&lt;em&gt;Lidya Nada @Unsplash&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>a11y</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Playing with Go: Functions as a parameter</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Wed, 15 May 2019 18:59:17 +0000</pubDate>
      <link>https://dev.to/flrnd/playing-with-go-functions-as-a-parameter-5fa2</link>
      <guid>https://dev.to/flrnd/playing-with-go-functions-as-a-parameter-5fa2</guid>
      <description>&lt;p&gt;Fantastic cover image thanks to &lt;a href="https://golang.org/doc/gopher/"&gt;&lt;em&gt;golang.org&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a few things very terrifying for beginners when we are learning to code. One of them is passing functions as a parameter to other functions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Functions are &lt;em&gt;first class values&lt;/em&gt; in Go: Like other values, functions values have types, and they may be assigned to variables or passed to or returned from functions. A function value may be called like any other funcion. - &lt;a href="https://www.goodreads.com/book/show/25080953-the-go-programming-language"&gt;The Go Programming Language,  Alan A. A. Donovan, Brian W. Kernighan&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have you ever wonder why do we pass functions in the first place? If you are an experienced engineer you probably already know the answer. There is a lot of good reads and tutorials about &lt;em&gt;how to&lt;/em&gt; pass functions as parameter to other functions, but if you add &lt;code&gt;why&lt;/code&gt; to the formula, the results are a bit scarce. &lt;/p&gt;

&lt;p&gt;The perfect example is a Map() function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;With the same function we can have &lt;strong&gt;different behaviours&lt;/strong&gt; just changing the callback function! Let's see another example:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;In this example, as we can see, &lt;code&gt;double&lt;/code&gt; and &lt;code&gt;square&lt;/code&gt; are both variables with function values of type &lt;code&gt;func (int) int&lt;/code&gt;, remember our definition at the beginning? The important thing here is that we didn't modified our Map function. Instead, we added the flexibility to parametrize it's behaviour thanks to the function callbacks! How awesome is that?&lt;/p&gt;

&lt;p&gt;And this is one example why languages that let you treat functions as a &lt;em&gt;first class values&lt;/em&gt; are so powerful!&lt;/p&gt;

&lt;p&gt;Please, keep in mind that I'm learning! if you find something that can be optimized or better explained let me know! I'd love to hear about it!&lt;/p&gt;

&lt;p&gt;Happy asking &lt;em&gt;why the #%&amp;amp;?&lt;/em&gt;!&lt;/p&gt;

</description>
      <category>go</category>
      <category>beginners</category>
      <category>functions</category>
      <category>learning</category>
    </item>
    <item>
      <title>Design resources for everyone</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Fri, 10 May 2019 12:31:28 +0000</pubDate>
      <link>https://dev.to/flrnd/design-resources-for-everyone-53ad</link>
      <guid>https://dev.to/flrnd/design-resources-for-everyone-53ad</guid>
      <description>&lt;p&gt;I love tables and data. I've been looking for an excuse to make another post with a table and why not a handful of useful design resources? &lt;/p&gt;

&lt;h1&gt;
  
  
  Who is this list for?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;You are interested somehow in the subject.&lt;/li&gt;
&lt;li&gt;You design things or starting to design things.&lt;/li&gt;
&lt;li&gt;You don't design things but work with designers and the subject tickle you.&lt;/li&gt;
&lt;li&gt;You are tired of click bait posts like "How to design without design skills" and want a serious approach about this subject.&lt;/li&gt;
&lt;li&gt;You Simply like lists.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/843074.A_Primer_of_Visual_Literacy"&gt;A Primer of Visual Literacy -&lt;em&gt;by Donis A. Dondis&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Don't be fooled by ratings. This book is a must read for every person interested in design. Visual communication it's very dense and broad, but this book is a very good starting point as an introduction, a very common read between design students.&lt;/td&gt;
&lt;td&gt;Beginner / Introduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/163436.Paul_Rand"&gt;Paul Rand: A designer's Art -&lt;em&gt;by Paul Rand&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;I'm biased here because for designers Paul Rand is like Richard Stallman for GNU people. Probably not the best comparison, anyway, Paul Rand is one of the most recognised Graphic designers in our history (A self taught designer btw!). While there are other good reads about Paul Rand's work, this book shines because he explains the process graphic design, why it's important and the impact in our society. What works and what doesn't and something people usually don't explain, why it works and why it doesn't!&lt;/td&gt;
&lt;td&gt;All levels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/15778.The_Art_of_Looking_Sideways"&gt;The Art of looking Sideways -_by Alan Fletcher&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Alan Fletcher is another reference in the Graphic Design world. He's co-founder of the famous design firm Pentagram. If you like essays in a provoking way, and you are interested in design, you are going to enjoy this read!&lt;/td&gt;
&lt;td&gt;Intermediate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://lawsofsimplicity.com"&gt;The laws of simplicity -&lt;em&gt;by John Maeda&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;John Maeda is another reference to take into consideration. I discovered him in his ted talk &lt;a href="https://www.ted.com/talks/john_maeda_on_the_simple_life?language=en"&gt;Design for simplicity&lt;/a&gt; in 2012, and since then I've been inspired by his work. If my memory still works as intended, Laws of simplicity were available for free somewhere, if that's still the case there is no excuse!&lt;/td&gt;
&lt;td&gt;All levels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/69736.Thinking_with_Type"&gt;Thinking with type -&lt;em&gt;by Ellen Lupton&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Every book with Ellen Lupton's name on it and you already know that is a good read. I have a real passion for typography and this book was my first read on the subject.&lt;/td&gt;
&lt;td&gt;Beginner to Intermediate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/36491449-never-use-futura"&gt;Never use Futura -_by Douglas Thomas and Ellen Lupton&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;I will not spoil this one, a very interesting read! This book will not make you a better designer by a long shot, but if you are a curious person I promise you will enjoy it!&lt;/td&gt;
&lt;td&gt;All levels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://en.wikipedia.org/wiki/Don%27t_Make_Me_Think"&gt;Don't Make me think -&lt;em&gt;by Steve Krug&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This is another &lt;strong&gt;must read&lt;/strong&gt;. &lt;em&gt;A common sense approach to Web usability&lt;/em&gt;. Every web developer and web designer should read this. (I linked the first edition because it's the one I did read)&lt;/td&gt;
&lt;td&gt;All levels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things"&gt;The Design of Everyday Things -&lt;em&gt;by Donald A. Norman&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This is one of my favourite books about the subject. It doesn't matter if you design chairs,  logos or software. It's a very interesting read that everyone who create things should read.&lt;/td&gt;
&lt;td&gt;All levels&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And this is it! I hope you enjoy these reads! &lt;/p&gt;

&lt;p&gt;Have a nice weekend everyone 🍍🍍🍍!&lt;/p&gt;

</description>
      <category>design</category>
      <category>resources</category>
      <category>happyweekend</category>
    </item>
    <item>
      <title>Understanding the empty interface in Go</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Thu, 09 May 2019 13:26:49 +0000</pubDate>
      <link>https://dev.to/flrnd/understanding-the-empty-interface-in-go-4652</link>
      <guid>https://dev.to/flrnd/understanding-the-empty-interface-in-go-4652</guid>
      <description>&lt;p&gt;First of all, to know more about interfaces, I suggest reading &lt;a href="https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go"&gt;How to use interfaces in go&lt;/a&gt; and &lt;a href="https://research.swtch.com/interfaces"&gt;Go Data Structures: Interfaces&lt;/a&gt;. &lt;/p&gt;

&lt;h1&gt;
  
  
  Now, what's with &lt;em&gt;The empty interface&lt;/em&gt;?
&lt;/h1&gt;

&lt;p&gt;Let's say we are developing some sort of output printing library. This way, we start thinking on how to design our Print function. The function needs to receive some value(s) and then pass the result to the standard output. Let's see this with an example (&lt;a href="https://play.golang.org/p/JRFvPPzWaY4"&gt;go playground link&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// This function takes a string as a parameter and print it to the standard output&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what happen if we want to print a Number? or a more complex input? Run the example in &lt;a href="https://play.golang.org/p/36UPWg3ps04"&gt;go playground&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"os"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number: "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="c"&gt;// And this is what happen if we run our code, as we could expect:&lt;/span&gt;
&lt;span class="n"&gt;prog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;too&lt;/span&gt; &lt;span class="n"&gt;many&lt;/span&gt; &lt;span class="n"&gt;arguments&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;Println&lt;/span&gt;
    &lt;span class="n"&gt;have&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;want&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Go&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As we expected, our program fails. We are passing two parameters and we defined our function to receive only one parameter of type &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then, how do we solve our Println function? Should we need to implement every use case for every crazy idea that comes to mind? Thankfully, we do not.&lt;/p&gt;

&lt;p&gt;Go already takes care of situations like this one, and this is when the empty interface comes in handy. In fact, this is how &lt;code&gt;fmt&lt;/code&gt; package functions are implemented.&lt;/p&gt;

&lt;p&gt;First, let's check the &lt;code&gt;empty interface&lt;/code&gt; definition (from &lt;a href="https://tour.golang.org/methods/14"&gt;a tour of go&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The interface type that specifies zero methods is known as the empty interface:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;interface{}&lt;/code&gt;&lt;br&gt;
An empty interface may hold values of any type. (Every type implements at least zero methods.)&lt;/p&gt;

&lt;p&gt;Empty interfaces are used by code that handles values of unknown type. For example, fmt.Print takes any number of arguments of type interface{}.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okey, let's take a look into the &lt;a href="https://golang.org/pkg/fmt/#Fprintln"&gt;fmt package documentation&lt;/a&gt;, this is the specifications for the Fprintln function we used before in our Println:&lt;br&gt;
&lt;code&gt;func Fprintln(w io.Writer, a ...interface{}) (n int, err error)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That &lt;code&gt;a ...interface{}&lt;/code&gt; in the second argument means that we are receiving from 1 to N of &lt;code&gt;empty interface&lt;/code&gt; type values (for those familiar with Javascript spread operator). And if we quote again the definition: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Empty interfaces are used by code that handles values of _unknown type_.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Okey, &lt;em&gt;unknown type&lt;/em&gt;, for our print function we really don't care what type is it, do we? We only are worried about writing it out into the standard output.  &lt;/p&gt;

&lt;p&gt;So, there it is, this way we don't need to worry about implementing every use case, because Go is handling in runtime the conversion of those &lt;code&gt;unknown types&lt;/code&gt; for us, and now we can do something like this: &lt;code&gt;Println("Hello ", 10, &amp;amp;v)&lt;/code&gt; without worrying about parameters.&lt;/p&gt;

&lt;p&gt;NOTE: I've used the fmt implementation for this explanation because the empty interface is one of the most confusing things I've encountered while I started learning go, and playing with it in go playground helped me to understand how and why to use it.&lt;/p&gt;

&lt;p&gt;NOTE 2: this would be our final program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"os"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;// This function is a exact implementation of fmt.Println()&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="k"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;                 &lt;span class="c"&gt;// number&lt;/span&gt;
       &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"Hello!"&lt;/span&gt;           &lt;span class="c"&gt;// string&lt;/span&gt;
       &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;rune&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"もしもし！"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c"&gt;// slice of runes&lt;/span&gt;

    &lt;span class="c"&gt;// Our final Println accepts different types of values&lt;/span&gt;
    &lt;span class="c"&gt;// and go translate them in run time.&lt;/span&gt;
    &lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you got this far without falling asleep, thanks for reading! 🤓 🖖&lt;/p&gt;

&lt;p&gt;Cover photo: &lt;a href="https://unsplash.com/@pineapple"&gt;&lt;em&gt;Pineapple Supply Co @unsplash&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>beginners</category>
      <category>interfaces</category>
    </item>
    <item>
      <title>My top 5 playlists for coding</title>
      <dc:creator>Florian Rand</dc:creator>
      <pubDate>Tue, 07 May 2019 08:24:51 +0000</pubDate>
      <link>https://dev.to/flrnd/my-top-5-playlists-for-coding-37jo</link>
      <guid>https://dev.to/flrnd/my-top-5-playlists-for-coding-37jo</guid>
      <description>&lt;p&gt;Following &lt;a href="https://dev.to/ben/the-best-deep-work-soundtrack-437k"&gt;Ben Halpern's post&lt;/a&gt; about the best deep work soundtrack, I'm going to share my 5 most listened playlists for deep work, no special preference.&lt;/p&gt;

&lt;p&gt;Here we go! (For some reason I can't embed Spotify URIs sorry)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open.spotify.com/user/rfpp/playlist/3a3EWf2nNagQSQLvILkMCN?si=fWSTKZazQqOHUWwrfc9H3Q"&gt;Moodboard&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Deep atmospheric sounds, good for relaxing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open.spotify.com/user/rfpp/playlist/1fUYR6bummmWIFymwXB8Vl?si=T0ng-CMjQSWkVrvDeMJqkw"&gt;Coding Session&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;When I need something more "Electric".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open.spotify.com/user/spotify/playlist/37i9dQZF1DWVqfgj8NZEp1?si=aN3U-XrtSOmSRAN76YX9VA"&gt;Coffee break table Jazz&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Another great playlist, I like Jazz when I'm doing creative work. For some reason Jazz helps me with my crappy ideas.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open.spotify.com/user/dewanderer/playlist/601WLbJ3Vj91XIugGUJNUe?si=vgTaQ3MiRtSbRgT2NADWfA"&gt;Coding / Hacking / Feeling like a 80's scifi superhero&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The title says it all.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open.spotify.com/user/spotify/playlist/37i9dQZF1DX4sWSpwq3LiO?si=CSPNPmlYQfqGM2uGMp_Z8A"&gt;Paceful Piano&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Another favourite when I need to do creative work.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And this is it, if you feel in the mood, share your preferences in comments!&lt;/p&gt;

</description>
      <category>music</category>
      <category>coding</category>
      <category>concentration</category>
    </item>
  </channel>
</rss>
