<?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: Robin Kretzschmar</title>
    <description>The latest articles on DEV Community by Robin Kretzschmar (@darksmile92).</description>
    <link>https://dev.to/darksmile92</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%2F41170%2Fc66534e9-5530-418d-8cd1-9fbf48fa5681.jpeg</url>
      <title>DEV Community: Robin Kretzschmar</title>
      <link>https://dev.to/darksmile92</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darksmile92"/>
    <language>en</language>
    <item>
      <title>What is the ideal session timeout?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Wed, 11 Jan 2023 15:31:29 +0000</pubDate>
      <link>https://dev.to/darksmile92/what-is-the-ideal-session-timeout-38i</link>
      <guid>https://dev.to/darksmile92/what-is-the-ideal-session-timeout-38i</guid>
      <description>&lt;p&gt;To make applications that rely on user sessions secure, it is necessary to define a session timeout.&lt;br&gt;
The timeout defines the validity of a user session and after the set amount of time without activity, the session will expire and the user needs to authenticate himself again.&lt;/p&gt;

&lt;p&gt;There is always the clinch between convenience for the user to not need to login too often and strict security from the code side to keep it as short as possible.&lt;/p&gt;

&lt;p&gt;I've seen anything throughout my carreer, from 4 hours up to 30 days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the ideal session timeout for you and why?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What are your geek christmas present ideas?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Mon, 14 Nov 2022 07:56:35 +0000</pubDate>
      <link>https://dev.to/darksmile92/what-are-your-geek-christmas-present-ideas-1fij</link>
      <guid>https://dev.to/darksmile92/what-are-your-geek-christmas-present-ideas-1fij</guid>
      <description>&lt;p&gt;With christmas being around the corner for most people, shopping for christmas presents can be a stressful and daunting task. We have the responsibility to find the perfect gift for our loved ones. It's not only about finding something they will like, but also something they will need.&lt;/p&gt;

&lt;p&gt;Finding geeky presents is even harder because there is a thin line between things the person could already own and things they wouldn't use at all (owned or not).&lt;/p&gt;

&lt;p&gt;What creative ideas do you have for geeky presents this year?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Fun fact: the header image is the first one I created with an AI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Set docker build args from .env file (NextJS)</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Thu, 15 Sep 2022 21:36:48 +0000</pubDate>
      <link>https://dev.to/darksmile92/set-docker-build-args-from-env-file-2p4a</link>
      <guid>https://dev.to/darksmile92/set-docker-build-args-from-env-file-2p4a</guid>
      <description>&lt;p&gt;I recently came across the issue that I had to build a Docker container with a NextJS app inside that was relying on a environment variable to set the domain for &lt;a href="https://plausible.io/"&gt;Plausible.io&lt;/a&gt;.&lt;br&gt;
The tricky thing was that I was building the container once and deploying it to multiple pods with different environment configs.&lt;/p&gt;

&lt;p&gt;Technically docker can respect a &lt;code&gt;.env&lt;/code&gt; file when it is run with the option &lt;code&gt;--env-file&lt;/code&gt; like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--env-file&lt;/span&gt; .env &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 &lt;span class="nt"&gt;-d&lt;/span&gt; YOUR_CONTAINER_TAG:prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  So here comes the issue...
&lt;/h3&gt;

&lt;p&gt;But since the environment was set during build time inside the container and NextJS has automatic site optimiziation and builds pre-rendered pages for server-side render during build, the environment variables from the Docker build run were baked into the image and it did not care about the &lt;code&gt;.env&lt;/code&gt; file for server logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  A small bash script to the rescue
&lt;/h3&gt;

&lt;p&gt;I am using Envault to manage environment configs and since the image is being build with a Jenkins pipeline, the pipeline pulls the correct &lt;code&gt;.env&lt;/code&gt; file from Envault each time.&lt;br&gt;
Inside the &lt;code&gt;Dockerfile&lt;/code&gt;, change the vars to be this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ARG DB_USER
ARG DD_SVC_NAME
ENV &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$DB_USER&lt;/span&gt;
ENV &lt;span class="nv"&gt;DD_SVC_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$ARG&lt;/span&gt; DD_SVC_NAME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means the build command needs to contain &lt;code&gt;--build-arg&lt;/code&gt; paramters for each variable.&lt;br&gt;
To read those from the &lt;code&gt;.env&lt;/code&gt; file via bash, we can use this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; .env&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;out+&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"--build-arg &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The docker command looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-f&lt;/span&gt; Dockerfile &lt;span class="nt"&gt;-t&lt;/span&gt; MYTAG:prod &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; .env&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;out+&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"--build-arg &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt; "&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bonus round: makefile
&lt;/h3&gt;

&lt;p&gt;Since I love Makefiles, there is a small pitfall how to include the bash loop into the command, so here is my Makefile for reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;SHELL :&lt;span class="o"&gt;=&lt;/span&gt; /bin/bash
...
&lt;span class="c"&gt;# this line will set the build args from env file&lt;/span&gt;
DECONARGS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;shell &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;(for i in &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; .env&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="s2"&gt;; do out+="&lt;/span&gt;&lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;i &lt;span class="s2"&gt;" ; done; echo &lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;out;out="")"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
GEN_ARGS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;eval &lt;/span&gt;&lt;span class="nv"&gt;BARGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;DECONARGS&lt;span class="si"&gt;))&lt;/span&gt;

.PHONY: dist-prod
dist-prod:
    @echo &lt;span class="s2"&gt;"Running docker build for PROD ..."&lt;/span&gt;
        &lt;span class="si"&gt;$(&lt;/span&gt;GEN_ARGS&lt;span class="si"&gt;)&lt;/span&gt;
    docker build &lt;span class="nt"&gt;-f&lt;/span&gt; Dockerfile &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;TAG_SHA&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;BARGS&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
      <category>devops</category>
    </item>
    <item>
      <title>Arch Linux remap keys for 80% keyboard</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Mon, 07 Mar 2022 14:21:40 +0000</pubDate>
      <link>https://dev.to/darksmile92/arch-linux-remap-keys-for-80-keyboard-44ah</link>
      <guid>https://dev.to/darksmile92/arch-linux-remap-keys-for-80-keyboard-44ah</guid>
      <description>&lt;h2&gt;
  
  
  The story behind it
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Skip this section if you just want to know the implementation, no one will judge you :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After the keycaps on my mechanical keyboard became more worn down year by year, I decided to peak into &lt;a href="https://www.reddit.com/r/MechanicalKeyboards"&gt;r/MechanicalKeyboards&lt;/a&gt; for some inspiration.&lt;/p&gt;

&lt;p&gt;After reading a lot about the different switches and boards, I decided to by an 80% keyboard (a &lt;a href="https://rkgamingstore.com/collections/84-keys/products/rk84-80-mechanical-keyboard"&gt;Royal Kludge RK84&lt;/a&gt; to be precise).&lt;/p&gt;

&lt;p&gt;As I am german and require an ISO keymap, I wanted to buy custom keycaps with the ISO lettering. But the keyboard arrived before I had made up my mind which keycaps to buy and so I gave it a try with the US keycaps.&lt;/p&gt;

&lt;p&gt;Everything seemed to work fine, even the german "Umlaute" (ö,ä,ü,ß) are properly recognized by my Arch installation. And if we are being honest: after some days of typing I knew which key and combination is what so I don't really need to look at the keycaps anymore now.&lt;/p&gt;

&lt;p&gt;But one thing bothered me:&lt;br&gt;
The "greater than" and "less than" symbols were impossible to produce for me.&lt;br&gt;
I tried every combination there is but I only got double side arrows with &lt;code&gt;alt&lt;/code&gt;+&lt;code&gt;Z&lt;/code&gt; and &lt;code&gt;alt&lt;/code&gt;+&lt;code&gt;X&lt;/code&gt;.&lt;br&gt;
It looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;»
«
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After reading a bit in the Arch wiki, I decided to remap my keys for this purpse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The remapping
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Check the current mapping
&lt;/h3&gt;

&lt;p&gt;The first thing to do is to check the current mappings with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xmodmap &lt;span class="nt"&gt;-pke&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives a similar output to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
keycode  52 = y Y y Y guillemotright U203A guillemotright
keycode  53 = x X x X guillemotleft U2039 guillemotleft
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As seen in this output, the keys are mapped to unicode signs for "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" and "SINGLE LEFT-POINTING ANGLE QUOTATION MARK". You can check the unicode values at &lt;a href="https://www.fileformat.info/info/unicode/char/203a/index.htm"&gt;fileformat.info unicodes&lt;/a&gt; by changing the code in the URL to the one you want to check (without the leading U that just indicates that this is unicode).&lt;/p&gt;

&lt;h3&gt;
  
  
  Find keycodes you want to change
&lt;/h3&gt;

&lt;p&gt;If you search for the keys you want to remap in the output, you'll find the keycode. Copy the whole line you want to change as you'll adjust only the parts you want to remap.&lt;/p&gt;

&lt;p&gt;Another way to find the keycode to look for is to use the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xev &lt;span class="nt"&gt;-event&lt;/span&gt; keyboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which opens a window that captured your input from the keyboard and displays the keycodes in the console.&lt;/p&gt;

&lt;p&gt;For this example, I would copy the 2 lines shown above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remap on the fly
&lt;/h3&gt;

&lt;p&gt;To remap the keys, replace the mapping string and apply the changes like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xmodmap &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"keycode 52 = y Y y Y guillemotright U003E guillemotright"&lt;/span&gt;
xmodmap &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"keycode  53 = x X x X guillemotleft U003C guillemotleft"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can try it immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persist the mapping
&lt;/h3&gt;

&lt;p&gt;Now to ensure this new mapping stays persistent if you ever switch the USB port your keyboard is connected to or had it connected to another maschine in between, you should persist the new mapping.&lt;/p&gt;

&lt;p&gt;Store them with: &lt;code&gt;xmodmap -pke &amp;gt; ~/.Xmodmap&lt;/code&gt;&lt;br&gt;
Xorg server will pick up the file by itself, but to ensure you have the same settings for terminal sessions, add the following lines to your &lt;code&gt;~/.xinitrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;usermodmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.Xmodmap

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$usermodmap&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;xmodmap &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$usermodmap&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>archlinux</category>
    </item>
    <item>
      <title>How do you find cool names for your side projects?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Sat, 22 May 2021 13:45:24 +0000</pubDate>
      <link>https://dev.to/darksmile92/how-do-you-find-cool-names-for-your-side-projects-2g4d</link>
      <guid>https://dev.to/darksmile92/how-do-you-find-cool-names-for-your-side-projects-2g4d</guid>
      <description>&lt;p&gt;Having side projects is fun and sometimes one of them will even be launched and used by a large crowd.&lt;/p&gt;

&lt;p&gt;Often times it starts with an idea and the name for the project will come based on a set of features, a target market or some other aspects.&lt;/p&gt;

&lt;p&gt;But sometimes the idea is there but coming up with a name for it is hard - I'm sure everyone knows the struggle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you find cool names / codenames for your projects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any resources / generators you use?&lt;br&gt;
A specific strategy to find a name?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>How do you catch and log errors of production web apps?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Wed, 20 Jan 2021 09:34:38 +0000</pubDate>
      <link>https://dev.to/darksmile92/how-do-you-catch-and-log-errors-of-production-web-apps-1l45</link>
      <guid>https://dev.to/darksmile92/how-do-you-catch-and-log-errors-of-production-web-apps-1l45</guid>
      <description>&lt;p&gt;Do you catch and log errors of your productions web apps?&lt;br&gt;
If so, which tools/libs/methods are you using?&lt;br&gt;
If not, why did you decide to ignore it?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Explain apollo graphql partialRefetch like I'm five</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Sun, 29 Nov 2020 10:40:05 +0000</pubDate>
      <link>https://dev.to/darksmile92/explain-apollo-graphql-partialrefetch-like-i-m-five-44ka</link>
      <guid>https://dev.to/darksmile92/explain-apollo-graphql-partialrefetch-like-i-m-five-44ka</guid>
      <description>&lt;p&gt;&lt;a href="https://www.apollographql.com/docs/react/data/queries/"&gt;Apollo GraphQL Query&lt;/a&gt; hook has an option called &lt;code&gt;partialRefetch&lt;/code&gt; and the docs state:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If true, perform a query refetch if the query result is marked as being partial, and the returned data is reset to an empty Object by the Apollo Client QueryManager (due to a cache miss). The default value is false for backwards-compatibility's sake, but should be changed to true for most use-cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sadly I don't fully get it by reading the docs and searching online.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is different for queries using this parameter?&lt;/li&gt;
&lt;li&gt;When to use it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please go ahead and ELI5!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>explainlikeimfive</category>
    </item>
    <item>
      <title>What questions do you ask a new client?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Mon, 26 Oct 2020 15:32:38 +0000</pubDate>
      <link>https://dev.to/darksmile92/what-questions-do-you-ask-a-new-client-49ml</link>
      <guid>https://dev.to/darksmile92/what-questions-do-you-ask-a-new-client-49ml</guid>
      <description>&lt;p&gt;Every client and every project is different. There is no checklist that fits every client and every project - at least not that I'm aware of!&lt;/p&gt;

&lt;p&gt;But there are some basics that are necessary to get started with a new client.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you ask them at first contact? How do you store this?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I'm curious!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use Google Forms and here is what I ask new clients before making an offer for a project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web/App/Other project or combination?&lt;/li&gt;
&lt;li&gt;If applicable: are domains already registered?&lt;/li&gt;
&lt;li&gt;If applicable: Name of registrar&lt;/li&gt;
&lt;li&gt;If applicable: Name of domain(s)&lt;/li&gt;
&lt;li&gt;If applicable: Do you have an existing host?&lt;/li&gt;
&lt;li&gt;If applicable: Should I take care of hosting? (charging included)&lt;/li&gt;
&lt;li&gt;Base data of company and client (Name, address, VAT-Id, and whatnot is required)&lt;/li&gt;
&lt;li&gt;Can I display this project in my portfolio?&lt;/li&gt;
&lt;li&gt;Upload of resources (Logo, other stuff)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Reach Router scroll top fix - my 2nd npm package!</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Thu, 22 Oct 2020 15:35:16 +0000</pubDate>
      <link>https://dev.to/darksmile92/reach-router-scroll-top-fix-my-2nd-npm-package-3b04</link>
      <guid>https://dev.to/darksmile92/reach-router-scroll-top-fix-my-2nd-npm-package-3b04</guid>
      <description>&lt;p&gt;I did a lot of projects with NextJS and recently had to do one with &lt;code&gt;create-react-app&lt;/code&gt; again.&lt;br&gt;
So I quickly remembered how tedious it was to fiddle around with &lt;a href="https://reactrouter.com/" rel="noopener noreferrer"&gt;React-Router&lt;/a&gt; and searched for an alternative.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reach.tech/router/" rel="noopener noreferrer"&gt;Reach Router&lt;/a&gt; seemed like a good alternative. I quickly noticed one problem:&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem to solve
&lt;/h2&gt;

&lt;p&gt;When using Reach Router, the &lt;a href="https://reach.tech/router/accessibility" rel="noopener noreferrer"&gt;accessibility&lt;/a&gt; features are turned on by default. &lt;br&gt;
The official docs say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Focus Management&lt;br&gt;
Whenever the content of a page changes in response to a user interaction, the focus should be moved to that content; otherwise, users on assistive devices have to search around the page to find what changed–yuck! Without the help of a router, managing focus on route transitions requires a lot effort and knowledge on your part.&lt;/p&gt;

&lt;p&gt;Reach Router provides out-of-the-box focus management so your apps are significantly more accessible without you breaking a sweat.&lt;/p&gt;

&lt;p&gt;When the location changes, the top-most part of your application that changed is identified and focus is moved to it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my case, after scrolling to the bottom at one page and navigating to another page, the newly loaded page will be scrolled to the same distance as the previous, if the content is longer than the viewport height.&lt;br&gt;
This can be disabled by setting &lt;code&gt;primary={false}&lt;/code&gt; at the &lt;code&gt;Router&lt;/code&gt; component of Reach, but this would also disable the accessibility features.&lt;/p&gt;
&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;I got inspired by a couple of Stackoverflow answers but none of them were using React hooks and none could be implemented quickly enough for me.&lt;br&gt;
So I took the time and wrote a solution using hooks.&lt;br&gt;
It consisted of 2 parts:&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="c1"&gt;// new component OnRouteChangeWorker.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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;OnRouteChangeWorker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;locationRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&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="nf"&gt;useEffect&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;locationRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;locationRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&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;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&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;OnRouteChangeWorker&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// in App.js - global entry file&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@reach/router&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OnRouteChangeWorker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./components/OnRouteChangeWorker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Router&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HomePage&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ImpressumPage&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;terms&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PrivacyPage&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;privacy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Router&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OnRouteChange&lt;/span&gt;
          &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="o"&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="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scrollTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="p"&gt;}}&lt;/span&gt;
        &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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/DarkSmile92" rel="noopener noreferrer"&gt;
        DarkSmile92
      &lt;/a&gt; / &lt;a href="https://github.com/DarkSmile92/reach-router-scroll-top" rel="noopener noreferrer"&gt;
        reach-router-scroll-top
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;reach-router-scroll-top&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Want to have the accessibility features of &lt;a href="https://reach.tech/" rel="nofollow noopener noreferrer"&gt;Reach Router&lt;/a&gt; and scroll to top after navigating? Get it working with just this one component!&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install --save reach-router-scroll-top&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;// in your App.js / entry point&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-v"&gt;OnRouteChange&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"reach-router-scroll-top"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-c"&gt;// ...&lt;/span&gt;
&lt;span class="pl-k"&gt;function&lt;/span&gt; &lt;span class="pl-v"&gt;App&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-k"&gt;return&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;
        &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;div&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;Router&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;HomePage&lt;/span&gt; &lt;span class="pl-c1"&gt;path&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"/"&lt;/span&gt; &lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;Router&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="pl-kos"&gt;{&lt;/span&gt;&lt;span class="pl-c"&gt;/* add it after the router! */&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;
            &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;OnRouteChange&lt;/span&gt; &lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="pl-c1"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-c1"&gt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;div&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;
&lt;span class="pl-c"&gt;// ...&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it solves&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;When using &lt;a href="https://reach.tech/" rel="nofollow noopener noreferrer"&gt;Reach Router&lt;/a&gt;, the accessibility features are turned on by default. After scrolling to the bottom at one page and navigating to another page, the newly loaded page will be scrolled to the same distance as the previous
This can be disabled by setting &lt;code&gt;primary={false}&lt;/code&gt; at the &lt;code&gt;Router&lt;/code&gt; component of Reach, but this…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/DarkSmile92/reach-router-scroll-top" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Why a npm package?
&lt;/h2&gt;

&lt;p&gt;I wanted to archive the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;do something in Typescript &lt;/li&gt;
&lt;li&gt;learn how to publish a npm package myself&lt;/li&gt;
&lt;li&gt;provide this solution for others to quickly integrate into their projects&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>Is it important to get up everyday at the same time?</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Tue, 04 Aug 2020 21:42:08 +0000</pubDate>
      <link>https://dev.to/darksmile92/is-it-important-to-get-up-everyday-at-the-same-time-2242</link>
      <guid>https://dev.to/darksmile92/is-it-important-to-get-up-everyday-at-the-same-time-2242</guid>
      <description>&lt;p&gt;Is it important to you to get up and start your day at the same time throughout the week?&lt;/p&gt;

&lt;p&gt;And if so, why is it important to you and what made you start with it? &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>PowerShell disabled support for TLS 1.0 for the Gallery - Update-Module and Install-Module broken</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Thu, 14 May 2020 08:56:26 +0000</pubDate>
      <link>https://dev.to/darksmile92/powershell-disabled-support-for-tls-1-0-for-the-gallery-update-module-and-install-module-broken-1oii</link>
      <guid>https://dev.to/darksmile92/powershell-disabled-support-for-tls-1-0-for-the-gallery-update-module-and-install-module-broken-1oii</guid>
      <description>&lt;p&gt;Microsoft announced that the PowerShell Gallery has deprecated Transport Layer Security (TLS) versions 1.0 and 1.1 as of April 2020&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To provide the best-in-class encryption to our customers&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Announcement, details and reasons can be found on &lt;a href="https://devblogs.microsoft.com/powershell/powershell-gallery-tls-support/" rel="noopener noreferrer"&gt;DevBlogs.microsoft&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Awesome news!&lt;br&gt;
... &lt;strong&gt;leaving &lt;code&gt;Update-Module&lt;/code&gt; and &lt;code&gt;Install-Module&lt;/code&gt; broken!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running &lt;code&gt;Update-Module&lt;/code&gt; or &lt;code&gt;Install-Module&lt;/code&gt; will now throw an error like one of the two following:&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%2Fi%2Fd5szocibslnmo5ua4kag.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%2Fi%2Fd5szocibslnmo5ua4kag.png" alt="Error unable to find repository"&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%2Fi%2F5ctoon8ucebwmhroa99e.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%2Fi%2F5ctoon8ucebwmhroa99e.png" alt="PowerShell Gallery currently unavailable"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;Get-PSGalleryApiAvailability&lt;/span&gt; &lt;span class="nf"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;PowerShell&lt;/span&gt; &lt;span class="nf"&gt;Gallery&lt;/span&gt; &lt;span class="nf"&gt;is&lt;/span&gt; &lt;span class="nf"&gt;currently&lt;/span&gt; &lt;span class="nf"&gt;unavailable.&lt;/span&gt; &lt;span class="nf"&gt;Please&lt;/span&gt; &lt;span class="nf"&gt;try&lt;/span&gt; &lt;span class="nf"&gt;again&lt;/span&gt; &lt;span class="nf"&gt;later.&lt;/span&gt;
&lt;span class="nf"&gt;...........&lt;/span&gt; &lt;span class="s"&gt;(cutted)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;PackageManagement\Install-Package&lt;/span&gt; &lt;span class="nf"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Unable&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;find&lt;/span&gt; &lt;span class="nf"&gt;repository&lt;/span&gt; &lt;span class="nf"&gt;'https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/www.powershellgallery.com/api/v2'.&lt;/span&gt; &lt;span class="nf"&gt;Use&lt;/span&gt; &lt;span class="nf"&gt;Get-PSRepository&lt;/span&gt; &lt;span class="nf"&gt;to&lt;/span&gt; &lt;span class="nf"&gt;see&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt; &lt;span class="nf"&gt;available&lt;/span&gt; &lt;span class="nf"&gt;repositories.&lt;/span&gt;
&lt;span class="nf"&gt;...........&lt;/span&gt; &lt;span class="s"&gt;(cutted)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fixing it (Microsoft way)
&lt;/h2&gt;

&lt;p&gt;You just got the error and didn't try any wild ideas to fix it and poked around? Good, execute the migration command Microsoft provided in their announcement and you'll be good to go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::SecurityProtocol&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.SecurityProtocolType&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::Tls12&lt;/span&gt; 
&lt;span class="nf"&gt;Install-Module&lt;/span&gt; &lt;span class="nf"&gt;PowerShellGet&lt;/span&gt; &lt;span class="nf"&gt;-RequiredVersion&lt;/span&gt; &lt;span class="nf"&gt;2.2.4&lt;/span&gt; &lt;span class="nf"&gt;-SkipPublisherCheck&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will change the security protocol to TLS 1.2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Already messed around? Fix it with this
&lt;/h2&gt;

&lt;p&gt;If you already messed around with various commands like trying a proxy, removing the repository of &lt;code&gt;PSGallery&lt;/code&gt; and stuff or getting the second error, you can fix it with the following commands:&lt;/p&gt;

&lt;h4&gt;
  
  
  Impatient, in a hurry or not interested in details
&lt;/h4&gt;

&lt;p&gt;No judgement here.&lt;br&gt;
Just looking for the commands? Quick summary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::SecurityProtocol&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::SecurityProtocol&lt;/span&gt; &lt;span class="nf"&gt;-bor&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.SecurityProtocolType&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::Tls12&lt;/span&gt;
&lt;span class="nf"&gt;Register-PSRepository&lt;/span&gt; &lt;span class="nf"&gt;-Default&lt;/span&gt; &lt;span class="nf"&gt;-Verbose&lt;/span&gt;
&lt;span class="nf"&gt;Set-PSRepository&lt;/span&gt; &lt;span class="nf"&gt;-Name&lt;/span&gt; &lt;span class="nf"&gt;"PSGallery"&lt;/span&gt; &lt;span class="nf"&gt;-InstallationPolicy&lt;/span&gt; &lt;span class="nf"&gt;Trusted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Commands with explanations
&lt;/h4&gt;

&lt;p&gt;Set the TLS 1.2 protocol first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::SecurityProtocol&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::SecurityProtocol&lt;/span&gt; &lt;span class="nf"&gt;-bor&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Net.SecurityProtocolType&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nf"&gt;::Tls12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now register the &lt;code&gt;PSGallery&lt;/code&gt; again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;Register-PSRepository&lt;/span&gt; &lt;span class="nf"&gt;-Default&lt;/span&gt; &lt;span class="nf"&gt;-Verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the success with &lt;code&gt;Get-PSRepository&lt;/code&gt; and you should see an output like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;PS&lt;/span&gt; &lt;span class="nf"&gt;C:\windows\system32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Get-PSRepository&lt;/span&gt;

&lt;span class="nf"&gt;Name&lt;/span&gt;                      &lt;span class="nf"&gt;InstallationPolicy&lt;/span&gt;   &lt;span class="nf"&gt;SourceLocation&lt;/span&gt;
&lt;span class="nf"&gt;----&lt;/span&gt;                      &lt;span class="nf"&gt;------------------&lt;/span&gt;   &lt;span class="nf"&gt;--------------&lt;/span&gt;
&lt;span class="nf"&gt;PSGallery&lt;/span&gt;                 &lt;span class="nf"&gt;Untrusted&lt;/span&gt;            &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/www.powershellgallery.com/api/v2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the Installation Policy of &lt;code&gt;PSGallery&lt;/code&gt; to &lt;em&gt;Trusted&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;Set-PSRepository&lt;/span&gt; &lt;span class="nf"&gt;-Name&lt;/span&gt; &lt;span class="nf"&gt;"PSGallery"&lt;/span&gt; &lt;span class="nf"&gt;-InstallationPolicy&lt;/span&gt; &lt;span class="nf"&gt;Trusted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;PS&lt;/span&gt; &lt;span class="nf"&gt;C:\windows\system32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Get-PSRepository&lt;/span&gt;

&lt;span class="nf"&gt;Name&lt;/span&gt;                      &lt;span class="nf"&gt;InstallationPolicy&lt;/span&gt;   &lt;span class="nf"&gt;SourceLocation&lt;/span&gt;
&lt;span class="nf"&gt;----&lt;/span&gt;                      &lt;span class="nf"&gt;------------------&lt;/span&gt;   &lt;span class="nf"&gt;--------------&lt;/span&gt;
&lt;span class="nf"&gt;PSGallery&lt;/span&gt;                 &lt;span class="nf"&gt;Trusted&lt;/span&gt;              &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/www.powershellgallery.com/api/v2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you'll be able to run &lt;code&gt;Update-Module&lt;/code&gt; and &lt;code&gt;Install-Module&lt;/code&gt; successful again.&lt;/p&gt;

</description>
      <category>powershell</category>
    </item>
    <item>
      <title>Make task management fun again</title>
      <dc:creator>Robin Kretzschmar</dc:creator>
      <pubDate>Tue, 12 May 2020 17:18:04 +0000</pubDate>
      <link>https://dev.to/darksmile92/make-task-management-fun-again-31ce</link>
      <guid>https://dev.to/darksmile92/make-task-management-fun-again-31ce</guid>
      <description>&lt;p&gt;I like to deal with productivity and how to increase it. In doing so, I am always trying out new tools and techniques, which I read or hear about.&lt;/p&gt;

&lt;p&gt;You can imagine that there are some very pleasant tools and methods, but also some that do not fit me personally.&lt;/p&gt;

&lt;p&gt;My previous experience has taught me that new tools and methodologies can be the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;complex to learn&lt;/li&gt;
&lt;li&gt;untested and undocumented&lt;/li&gt;
&lt;li&gt;Controversially discussed&lt;/li&gt;
&lt;li&gt;not suited to my personal daily routine&lt;/li&gt;
&lt;li&gt;ill-suited to my way of working&lt;/li&gt;
&lt;li&gt;not suited to my working environment&lt;/li&gt;
&lt;li&gt;ill-adapted to my way of thinking&lt;/li&gt;
&lt;li&gt;time-consuming to implement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nevertheless, it is fun to try new things and maybe even to adapt and integrate only parts of them.&lt;/p&gt;

&lt;p&gt;This is how I came across &lt;a href="https://workflowy.com/"&gt;WorkFlowy&lt;/a&gt; some time ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet WorkFlowy
&lt;/h2&gt;

&lt;p&gt;WorkFlowy itself is already described on the homepage, which welcomes you with a very simple design:&lt;/p&gt;

&lt;p&gt;Overwhelmed? We can help.&lt;br&gt;
WorkFlowy offers a simple way to stay organized. If you have a crazy job or an ambitious project, we will be your trusty sidekick.&lt;/p&gt;

&lt;h4&gt;
  
  
  What is WorkFlowy about
&lt;/h4&gt;

&lt;p&gt;WorkFlowy is a todo list. It can have an infinite number of levels, uses keywords and can do much more. All this combined in a super easy to use, tidy interface with clever shortcuts and completely keyboard driven (for keyboard fanatics like me).&lt;/p&gt;

&lt;h4&gt;
  
  
  Which features does it provide
&lt;/h4&gt;

&lt;p&gt;As described at the beginning, I am always interested to learn about new things concerning productivity. But of course I also want to optimize my own processes.&lt;/p&gt;

&lt;p&gt;I have been using WorkFlowy for half a year. I use it for simple todos, for notes during phone calls and for short intermediate storage of texts.&lt;/p&gt;

&lt;p&gt;I make particularly intensive use of the function for nesting lists.&lt;/p&gt;

&lt;p&gt;I write the text for a point, decide that I would like to gather more information for it or that I want to divide it further into individual tasks and simply jump one level deeper with the key combination &lt;code&gt;ALT+Right&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The lists can also be sorted easily by simply dragging and dropping the items or using a key combination.&lt;/p&gt;

&lt;p&gt;Of course you can also indent points and thus visually display different levels without directly creating a new sublist.&lt;/p&gt;

&lt;p&gt;If you now imagine that you can have an infinite number of levels, you will find the successful search function even more helpful!&lt;/p&gt;

&lt;p&gt;Here is a list of features. I made a short GIF to demonstrate the features to get a better feeling of how fast you will be with WorkFlowy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;searching&lt;/li&gt;
&lt;li&gt;ordering&lt;/li&gt;
&lt;li&gt;complete&lt;/li&gt;
&lt;li&gt;duplicate&lt;/li&gt;
&lt;li&gt;deleting&lt;/li&gt;
&lt;li&gt;show/hide completed&lt;/li&gt;
&lt;li&gt;notes&lt;/li&gt;
&lt;li&gt;bold/italic/underline&lt;/li&gt;
&lt;li&gt;switch pages&lt;/li&gt;
&lt;li&gt;board view / list view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a demo of all the features as &lt;a href="https://ibb.co/WyD7Xyt"&gt;GIF&lt;/a&gt; on imgbb (was too big to include here).&lt;/p&gt;

&lt;h4&gt;
  
  
  Why do I recommend WorkFlowy
&lt;/h4&gt;

&lt;p&gt;I love the simple operation. Working alone with the keyboard is great and you stay right in the flow if you stay directly on the keyboard after finishing the sentence, descend one level lower and continue writing.&lt;/p&gt;

&lt;p&gt;You find your entries super fast, can manage them comfortably and I must say that since then I don't use any other tool for the pure management of tasks anymore.&lt;/p&gt;

&lt;p&gt;Due to projects, there are of course still tools like Azure DevOps and others in use, but I even transfer some information from there to &lt;a href="https://workflowy.com/"&gt;WorkFlowy&lt;/a&gt; to manage everything clearly in one place.&lt;/p&gt;

&lt;p&gt;Did you know WorkFlowy already? What is your experience?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
