<?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: Alexander Schau</title>
    <description>The latest articles on DEV Community by Alexander Schau (@alexanderschau).</description>
    <link>https://dev.to/alexanderschau</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%2F248215%2F702537d5-2554-467d-9502-32b4a876911c.jpeg</url>
      <title>DEV Community: Alexander Schau</title>
      <link>https://dev.to/alexanderschau</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexanderschau"/>
    <language>en</language>
    <item>
      <title>Collect emoji feedback on your blog or website</title>
      <dc:creator>Alexander Schau</dc:creator>
      <pubDate>Wed, 23 Nov 2022 13:22:27 +0000</pubDate>
      <link>https://dev.to/alexanderschau/collect-emoji-feedback-on-your-blog-or-website-2klg</link>
      <guid>https://dev.to/alexanderschau/collect-emoji-feedback-on-your-blog-or-website-2klg</guid>
      <description>&lt;p&gt;Hey Dev community,&lt;br&gt;
in this post I want to show you, how you can embed a simple emoji feedback component to your website or blog with the help of &lt;a href="//https//emoji.instant-feedback.click/?ref=dev.to"&gt;Instant Emoji Feedback&lt;/a&gt;. This allows you to easily collect feedback and encourage your readers to interact with your content.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1 - Login
&lt;/h2&gt;

&lt;p&gt;You first need to login to [Instant Emoji Feedback] with your GitHub account. But no worries, you don‘t need to pay anything.&lt;/p&gt;

&lt;p&gt;To do so, open &lt;a href="http://emoji.instant-feedback.click/?ref=dev.to"&gt;this link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zn6nxawkjm27ft2gfky.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zn6nxawkjm27ft2gfky.gif" alt="login instructions" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2 - Add the script and our Web Component to your website
&lt;/h2&gt;

&lt;p&gt;As you can already see on the website, you now need to add two little things to your HTML.&lt;/p&gt;

&lt;p&gt;First of all insert the following script tag to your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, to download download the component:&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;head&amp;gt;&lt;/span&gt;
…
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://get-emoji.instant-feedback.click"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
…
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that you just need to insert the web component wherever you want the feedback form to be and you‘re good to go.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that the component contains a personal &lt;strong&gt;id&lt;/strong&gt; parameter. You can find yours in the install instructions on the website (&lt;a href="https://emoji.instant-feedback.click/profile?ref=dev.to"&gt;shortcut&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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;body&amp;gt;&lt;/span&gt;
…
&lt;span class="nt"&gt;&amp;lt;emoji-feedback&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_PERSONAL_ID"&lt;/span&gt; &lt;span class="na"&gt;templates=&lt;/span&gt;&lt;span class="s"&gt;"👋,👍,👎"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/emoji-feedback&amp;gt;&lt;/span&gt;
…
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;You may noticed the &lt;em&gt;templates&lt;/em&gt; parameter in the previous code snippet. You can use this one to define some default reactions, so your users don‘t have to spend time searching them.&lt;/p&gt;

&lt;p&gt;By the way, mine are the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cq1tv520ht5izs8lbb7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cq1tv520ht5izs8lbb7.jpeg" alt="My templates" width="701" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final words
&lt;/h2&gt;

&lt;p&gt;Thanks for reading til the end. I hope you will find Instant Emoji Feedback useful. I would love to hear from you, what your opinion on this project is.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And at the end I would also like to mention the pro version:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It allows you to moderate and analyze the given feedback all in one place and helps me keeping up with the bills 🙃.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39c96xm6t4j7ga5hvy10.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39c96xm6t4j7ga5hvy10.jpeg" alt="pro version" width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy your day ☺️.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Import your GitHub or GitLab repository directly into Deno</title>
      <dc:creator>Alexander Schau</dc:creator>
      <pubDate>Sun, 01 May 2022 11:13:30 +0000</pubDate>
      <link>https://dev.to/alexanderschau/import-your-github-or-gitlab-repository-directly-into-deno-c7p</link>
      <guid>https://dev.to/alexanderschau/import-your-github-or-gitlab-repository-directly-into-deno-c7p</guid>
      <description>&lt;p&gt;Denopkg.dev is a open source Deno package proxy operating on the Cloudflare Edge Network.&lt;/p&gt;

&lt;p&gt;You can use it to import your private/public GitHub/GitLab repositories into Deno 😎.&lt;/p&gt;

&lt;h2&gt;
  
  
  URL Helper
&lt;/h2&gt;

&lt;p&gt;You can use the &lt;a href="https://denopkg.dev" rel="noopener noreferrer"&gt;interactive form&lt;/a&gt; on our homepage to generate a valid link to your package in seconds.&lt;/p&gt;

&lt;p&gt;Just drop the URL of your repo and let the magic happen ✨.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  How to use it with private repositories
&lt;/h2&gt;

&lt;p&gt;For private repositories simply generate a private access token and proceed like stated out &lt;a href="https://deno.land/manual/linking_to_external_code/private#private-modules-and-repositories" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share a URL to your package
&lt;/h2&gt;

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

&lt;p&gt;If you want to share your package with some friends, it could be helpful to also send them some basic usage instructions. Just add &lt;code&gt;/import/&lt;/code&gt; after the &lt;code&gt;denopkg.dev&lt;/code&gt; domain and you're good to go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://denopkg.dev/import/gh/alexanderschau/access_token@1.0.0/mod.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contribute, it's open source
&lt;/h2&gt;

&lt;p&gt;If you love denopkg.dev as much as I do, you can help me making it better and implementing new features by contributing on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alexanderschau/denopkg.dev" rel="noopener noreferrer"&gt;Denopkg.dev's GitHub Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>deno</category>
    </item>
    <item>
      <title>And finally: Hacktoberfest is over</title>
      <dc:creator>Alexander Schau</dc:creator>
      <pubDate>Sun, 31 Oct 2021 18:58:55 +0000</pubDate>
      <link>https://dev.to/alexanderschau/and-finally-hacktoberfest-is-over-4p7f</link>
      <guid>https://dev.to/alexanderschau/and-finally-hacktoberfest-is-over-4p7f</guid>
      <description>&lt;p&gt;After a month full of crazy ideas for some new projects, now at the end of October, I find myself sitting here and thinking about all the things I learnt over the past weeks, things that worked out well and those that doesn't 😐.&lt;br&gt;
In this post I want to summarize the things I have learnt this month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things I learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HTTP streams
&lt;/h3&gt;

&lt;p&gt;Being honest, I heard of data streams quite often in the last seven years of my career, but I never really dived into it. This changed when I decided to build a webhook service, which allows both the sender and the receiver to communicate between firewalls. I needed some sort of event streaming over HTTP. And what should I say? There even is a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource"&gt;JavaScript standard for this (&lt;code&gt;EventSource&lt;/code&gt;)&lt;/a&gt;. It's sort of like a websocket, but without the ability to send a message back to server (without sending a new HTTP request).&lt;/p&gt;

&lt;h3&gt;
  
  
  Workspaces and Devcontainer in VS Code
&lt;/h3&gt;

&lt;p&gt;Another thing I never did before was to create a workspace in Visual Studio Code. This month I finally tried it out and it is really helpfull when working with Monorepos. It allows you to hide specific folder (like &lt;code&gt;node_modules&lt;/code&gt;) completely, which makes it easier to organize yourself in complex folder structures. I really can recommend you to give it a try.&lt;/p&gt;

&lt;p&gt;The second thing I tried out was &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers"&gt;Microsoft's Remote - Containers Extension for VS Code&lt;/a&gt; (it is like GitHub Codespaces on your local device). It allows you to predefine a &lt;code&gt;Dockerfile&lt;/code&gt;, from which your development environment will be created. Whit it you can code right away on every machine without the need to install dependencies by hand ever again. It also is a good preparation for cloud-based development, which definitely will be the future (the same syntax is also used by GitHub Codespaces and soon Gitpod).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I think if you really want to learn something, it doesn't need an event like Hacktoberfest to get started, however it is a great motivation to try out new things. Remember, we're never done learning.&lt;/p&gt;

&lt;p&gt;I hope you all got through October well and maybe some of you also learned something new this month. I would like to invite you to also write about your highlights and achievements over the last month. Feel free to link your post in the comments.&lt;/p&gt;

&lt;p&gt;Ps: For the equal rights of the American and British English speakers here, I used both word forms, "learnt" and "learned".&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>programming</category>
      <category>productivity</category>
      <category>vscode</category>
    </item>
    <item>
      <title>How I built a COVID-19 newsletter with n8n (in just 5 minutes)</title>
      <dc:creator>Alexander Schau</dc:creator>
      <pubDate>Mon, 11 Jan 2021 10:51:49 +0000</pubDate>
      <link>https://dev.to/alexanderschau/how-i-built-a-covid-19-newsletter-with-n8n-in-just-5-minutes-3g37</link>
      <guid>https://dev.to/alexanderschau/how-i-built-a-covid-19-newsletter-with-n8n-in-just-5-minutes-3g37</guid>
      <description>&lt;h1&gt;
  
  
  The idea
&lt;/h1&gt;

&lt;p&gt;My idea was quite simple. I wanted to build a corona newsletter, which sends me a daily email with the latest number of corona cases in my region, so I can keep myself up to date without checking multiple websites every day. To keep the whole project simple I also decided to use the open source workflow automation tool n8n.&lt;/p&gt;

&lt;h1&gt;
  
  
  The dataset
&lt;/h1&gt;

&lt;p&gt;The biggest challenge at this whole project was the dataset. A simple method to get the data would be to just scrape the website of the local authorities and filter out the important stuff, but I wanted to challenge myself a little bit and build a tool, which will also work in other regions or countries. So, I started searching for a dataset with daily updates.&lt;/p&gt;

&lt;p&gt;A dataset, which looked nice to me, was one provided by the European Union. The only problem with it: It doesn’t receive daily updates 😟.&lt;/p&gt;

&lt;p&gt;After searching GitHub for a dataset, I found a, currently quite popular, &lt;a href="https://github.com/CSSEGISandData/COVID-19" rel="noopener noreferrer"&gt;repository of the Johns Hopkins University&lt;/a&gt;. It provides daily reports from many countries in the world and was thus my choice to go on.&lt;/p&gt;

&lt;h1&gt;
  
  
  The workflow
&lt;/h1&gt;

&lt;p&gt;After finding the perfect dataset, I started building my workflow by adding a daily Cron node at 7am GMT, so I can get the latest data (they usually publish updates between 04:45 and 05:15 GMT) &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%2Fx0xekokgvkwj4ktokkmj.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%2Fx0xekokgvkwj4ktokkmj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
After that I add a Function Item node, which formats the current date to the MM-DD-YYYY format, so we can use it as filename.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;T&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;split&lt;/span&gt;&lt;span class="p"&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="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;date&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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I made a HTTP Request to get the file binary from the GitHub raw URL and convert the CSV file into JSON using the Spreadsheet File node.&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%2Fpr7hop6djrou3b140swo.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%2Fpr7hop6djrou3b140swo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
The only thing, that’s left now, is to filter out the data of a region and sending it through email.&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="nx"&gt;items&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="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;myVariable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Combined_Key&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Berlin, Germany&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F52lq58qhq81kugeduy7l.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%2F52lq58qhq81kugeduy7l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Final words
&lt;/h1&gt;

&lt;p&gt;Seriously, I never thought it would be that easy to build something powerful like this. Next to the possibility to sending emails, n8n also support lots of other ways like Matrix or Slack, which allows you to send this newsletter to the place where you need it the most. &lt;/p&gt;

&lt;p&gt;If you now want to build this project on your own feel free to use my code (you will find it on &lt;a href="https://n8n.io/workflows/886" rel="noopener noreferrer"&gt;n8n’s website&lt;/a&gt; and on &lt;a href="https://gist.github.com/alexanderschau/39192f90d99d82704a17420eca3105e2" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;), but I really recommend you, to build it from scratch, because it’s incredible to build something like this in just 5 minutes 😁.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>automation</category>
      <category>covid19</category>
      <category>n8n</category>
    </item>
    <item>
      <title>Secure JSON Web Token with Unique Browser IDs</title>
      <dc:creator>Alexander Schau</dc:creator>
      <pubDate>Sun, 08 Nov 2020 15:48:41 +0000</pubDate>
      <link>https://dev.to/alexanderschau/secure-json-web-token-with-unique-browser-ids-3a78</link>
      <guid>https://dev.to/alexanderschau/secure-json-web-token-with-unique-browser-ids-3a78</guid>
      <description>&lt;p&gt;JSON web token (JWT) are a really good opportunity to create secure login workflows without storing tons of access tokens in your database. But as good as it might sound in the first moment they have a huge problem. After giving them to a user, you can't really control, if someone will copy them to another machine.&lt;/p&gt;

&lt;p&gt;This makes it easy for everyone to just copy a JSON web token out of the Local Storage and place it somewhere else.&lt;/p&gt;

&lt;p&gt;One of the first ideas you may have, if you want to solve this problem is to bind them to the clients ip so nobody from outside can use the token, but since we are speaking of IP scarcity and things like DS-Lite, this isn't a really good solution.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Idea
&lt;/h1&gt;

&lt;p&gt;The only really good solution for this would be to give each browser a unique ID, which only can be manipulated hardly like the MAC address.&lt;/p&gt;

&lt;p&gt;Sadly nowadays browsers doesn't provide built in endpoint for this, so we have to built something around the existing APIs.&lt;/p&gt;

&lt;p&gt;When you search around the internet for a while you will  soon find some projects like &lt;a href="https://amiunique.org/" rel="noopener noreferrer"&gt;AmIUnique&lt;/a&gt;, which are using parameters like your computers User Agent or the way of rendering text to distinguish between devices and browsers. When you use some of these indetifiers you can create a unique id for any device and browser as long as there aren't any updates to your system. But because in our case JWTs only need to be valid for some hours or days this should work fine.&lt;/p&gt;

&lt;h1&gt;
  
  
  Unique ID in React App
&lt;/h1&gt;

&lt;p&gt;To show you how to implement this into your apps I will create a sample react app and use the &lt;a href="https://www.npmjs.com/package/uniquebrowserid" rel="noopener noreferrer"&gt;uniquebrowserid&lt;/a&gt; package for creating the unique IDs.&lt;/p&gt;

&lt;p&gt;After you &lt;a href="https://create-react-app.dev/" rel="noopener noreferrer"&gt;initialize your app&lt;/a&gt;, you can install the package with &lt;code&gt;npm install uniquebrowserid&lt;/code&gt;, open the &lt;code&gt;App.js&lt;/code&gt; file and add the following code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
After saving the file and running &lt;code&gt;npm run start&lt;/code&gt; you should see your unique browser ID in the app.&lt;br&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%2Fsxzbtf3de3n0fcse77iq.png" alt="Alt Text"&gt;&lt;br&gt;
To bind this into your JSON Web Tokens, you just need to send the result of the &lt;code&gt;new UID().completeID()&lt;/code&gt; function to your backend.

&lt;p&gt;If you want to learn more about the implementation of unique browser IDs into your app, you can visit the packages website at: &lt;a href="https://www.npmjs.com/package/uniquebrowserid" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/uniquebrowserid&lt;/a&gt;. There you also find, how to create one time unique IDs.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>jwt</category>
      <category>authentication</category>
    </item>
  </channel>
</rss>
