<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Filip Troníček</title>
    <description>The latest articles on Forem by Filip Troníček (@filiptronicek).</description>
    <link>https://forem.com/filiptronicek</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%2F171721%2F7966547e-20f7-460b-9d19-2ec667bf5969.jpg</url>
      <title>Forem: Filip Troníček</title>
      <link>https://forem.com/filiptronicek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/filiptronicek"/>
    <language>en</language>
    <item>
      <title>Public IPs - the hard way</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Wed, 20 Jan 2021 11:02:49 +0000</pubDate>
      <link>https://forem.com/filiptronicek/public-ips-the-hard-way-4bjk</link>
      <guid>https://forem.com/filiptronicek/public-ips-the-hard-way-4bjk</guid>
      <description>&lt;p&gt;Sometimes, it could be because of multiple reasons, you just want to host your things at home, this could be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A VPN for your devices so that you always have to access to your LAN wherever you are&lt;/li&gt;
&lt;li&gt;A bigger Web App with a separate database and need for a lot of computing power&lt;/li&gt;
&lt;li&gt;A game server (eg. Minecraft)&lt;/li&gt;
&lt;li&gt;File storage solution (FreeNAS, Plex, ..,)&lt;/li&gt;
&lt;li&gt;Whatever else that exposes a port to the network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is all nice and easy, the problem comes when you want to do one of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DDOS protection&lt;/li&gt;
&lt;li&gt;Hide your IP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both of these problems can be addressed fairly easily with the help of a VPS and optionally a service like &lt;a href="https://www.cloudflare.com/"&gt;Cloudflare&lt;/a&gt;. The way you do this is fairly simple, you set up a VPN between the VPS and your local machine and forward a specific (or more) ports on the VPS to target the local computer. This is best done when both of these systems run Linux, I will specifically be using Ubuntu 20.04 LTS on both of my systems, but it will not be hard to change the config to work on any other version/distro.&lt;/p&gt;

&lt;p&gt;First things first prepare your VPS, this can be from a cloud provider (&lt;a href="https://dev.tohttp://"&gt;Azure&lt;/a&gt;, &lt;a href="https://cloud.google.com/"&gt;GCP&lt;/a&gt;,  &lt;a href="https://aws.amazon.com/"&gt;AWS&lt;/a&gt; or a VPS service like &lt;a href="https://www.digitalocean.com/"&gt;DigitalOcean&lt;/a&gt;, &lt;a href="https://www.linode.com/"&gt;Linode&lt;/a&gt;, and others. The other important thing to note is to make sure the port you want to forward is accessible through the firewall of the provider, this way your requests won't get blocked. A static IP is also a very useful thing in this scenario, but be aware this may cost you something, but not everywhere. After that make sure you can SSH into the VPS successfully and we shall begin with the process.&lt;/p&gt;

&lt;p&gt;First, we install &lt;a href="https://www.zerotier.com/"&gt;Zerotier&lt;/a&gt; (you will need to have a Zerotier account for this), when you do, just make a new public network and take a note of the id. Paste the commands below in the terminal and change &lt;em&gt;mynetworkid&lt;/em&gt; to your id.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://install.zerotier.com | &lt;span class="nb"&gt;sudo &lt;/span&gt;bash
&lt;span class="nb"&gt;sudo &lt;/span&gt;zerotier-cli &lt;span class="nb"&gt;join &lt;/span&gt;mynetworkid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://install.zerotier.com | &lt;span class="nb"&gt;sudo &lt;/span&gt;bash
&lt;span class="nb"&gt;sudo &lt;/span&gt;zerotier-cli &lt;span class="nb"&gt;join &lt;/span&gt;mynetworkid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we forward the port &lt;em&gt;EXTERNAL_PORT&lt;/em&gt; to &lt;em&gt;LOCAL_PORT&lt;/em&gt;, so for example we can forward port 8080 on the VPS to port 80 in our local machine to route to a web server (if one is set up).&lt;/p&gt;

&lt;p&gt;VPS:&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="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;socat
&lt;span class="nb"&gt;sudo &lt;/span&gt;tmux
&lt;span class="nb"&gt;sudo &lt;/span&gt;socat TCP-LISTEN:EXTERNAL_PORT,fork,reuseaddr TCP:LOCALIP:LOCAL_PORT 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now just exit with &lt;code&gt;Ctrl+B D&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I hope this little tutorial helped, see you soon!&lt;/p&gt;

</description>
      <category>cloudnative</category>
      <category>vm</category>
    </item>
    <item>
      <title>Cloud storage v2.0: the what and the how</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Sun, 18 Oct 2020 20:56:29 +0000</pubDate>
      <link>https://forem.com/filiptronicek/cloud-storage-v2-0-the-what-and-the-how-1kli</link>
      <guid>https://forem.com/filiptronicek/cloud-storage-v2-0-the-what-and-the-how-1kli</guid>
      <description>&lt;p&gt;Cloud storage: we all use it, but how do you get to the next level with it? &lt;br&gt;
What do I mean by the next level? I mean hosting stuff that you can get direct URLs to, make them pretty as well, and embed this media anywhere you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  The easy and simple way: online free file hosting services
&lt;/h2&gt;

&lt;p&gt;Here are some services that will make you happy in a couple of seconds:&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1  Catbox.moe  (my personal favourite)
&lt;/h3&gt;

&lt;p&gt;Catbox is an awesome file hosting service, where you can store your up to 200MB files indefinitely (or use Litterbox to use it temporarily).&lt;/p&gt;

&lt;p&gt;It also provides a really neat API, which I use in my product &lt;a href="https://blog.trnck.dev/what-is-interclip/" rel="noopener noreferrer"&gt;Interclip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://catbox.moe/" rel="noopener noreferrer"&gt;catbox.moe&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%2Fcatbox.moe%2Fpictures%2Flogo.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%2Fcatbox.moe%2Fpictures%2Flogo.png" alt="Catbox logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Uguu.se
&lt;/h3&gt;

&lt;p&gt;Although very similar in UI to Catbox, uguu.se is a temporary (24 hour) file hosting service with a 100MB file size limit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uguu.se/" rel="noopener noreferrer"&gt;uguu.se&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%2Ftrnck.dev%2F0%3A%2Fimg%2Feaa127e4-674b-4a8b-b6ab-9abf9ffcfe30.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%2Ftrnck.dev%2F0%3A%2Fimg%2Feaa127e4-674b-4a8b-b6ab-9abf9ffcfe30.png" alt="uguu.se UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 File.io
&lt;/h3&gt;

&lt;p&gt;File.io is a file hosting service only for temporary uploads, with a variable date of expiration. It also provides a really simple &lt;a href="https://www.file.io/#api" rel="noopener noreferrer"&gt;API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.file.io/" rel="noopener noreferrer"&gt;file.io&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fa02e952d-4669-4ddb-b917-928ef7dbb755.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%2Ftrnck.dev%2F0%3A%2Fimg%2Fa02e952d-4669-4ddb-b917-928ef7dbb755.png" alt="file.io homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The expensive way: the cloud
&lt;/h2&gt;

&lt;p&gt;The services listed below are all on the enterprise level, where you pay for reads, writes, and other things. All of them are pay as you go.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Azure Blob Storage
&lt;/h3&gt;

&lt;p&gt;The cloud storage option from Microsoft.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-us/services/storage/blobs/" rel="noopener noreferrer"&gt;Azure blob storage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-us/pricing/details/storage/blobs/" rel="noopener noreferrer"&gt;Pricing&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fblob.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%2Ftrnck.dev%2F0%3A%2Fimg%2Fblob.png" alt="Azure Blob storage logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 GCP Storage Buckets
&lt;/h3&gt;

&lt;p&gt;Google also provides a storage option on its Google Cloud Platform. It lacks a few features (like DragN'Drop), but it is a very good service used by a lot of big companies (including Kaggle, Twitter, and others).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/storage" rel="noopener noreferrer"&gt;Google Cloud Storage options&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/storage#section-10" rel="noopener noreferrer"&gt;Pricing&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fgoogle-cloud-storage.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%2Ftrnck.dev%2F0%3A%2Fimg%2Fgoogle-cloud-storage.png" alt="GCP Storage Bucket logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.&lt;strong&gt;3&lt;/strong&gt; Amazon S*&lt;em&gt;3&lt;/em&gt;*
&lt;/h3&gt;

&lt;p&gt;The storage option from Amazon&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;S3 details&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/s3/pricing/?nc=sn&amp;amp;loc=4" rel="noopener noreferrer"&gt;Pricing&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fs3.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%2Ftrnck.dev%2F0%3A%2Fimg%2Fs3.png" alt="S3 logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Wasabi
&lt;/h3&gt;

&lt;p&gt;If you want to pay less for an enterprise solution, you should try Wasabi. They say that they provide the same quality as all the three mentioned above in up to 80% less.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wasabi.com/cloud-storage-pricing/#cost-calc" rel="noopener noreferrer"&gt;Pricing calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wasabi.com/" rel="noopener noreferrer"&gt;More info&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fwasabi.jpg" 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%2Ftrnck.dev%2F0%3A%2Fimg%2Fwasabi.jpg" alt="Wasabi logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The hacky ways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Google Drive Direct links
&lt;/h3&gt;

&lt;p&gt;If you want a quick and easy way to get direct media links, try &lt;a href="https://sites.google.com/site/gdocs2direct/" rel="noopener noreferrer"&gt;Google Drive Direct Media Links&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 GoIndex
&lt;/h3&gt;

&lt;p&gt;With a Google Drive and a Cloudflare account, you can have very cheap storage with unlimited bandwidth. You can get Google Drive storage for fairly low prices, and if you are in a company or a school with Gsuite, you may have an unlimited account.&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%2Ftrnck.dev%2F0%3A%2Fimg%2Fcdcde6d2-8d00-4b98-8028-4c9c6ba52b45.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%2Ftrnck.dev%2F0%3A%2Fimg%2Fcdcde6d2-8d00-4b98-8028-4c9c6ba52b45.png" alt="Pricing of Google One"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The only limitation is Cloudflare because &lt;a href="https://workers.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare workers&lt;/a&gt; provide only 100K free requests a day, but for most use cases, that's plenty.&lt;/p&gt;

&lt;p&gt;You can achieve all this for free:&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%2Ftrnck.dev%2F0%3A%2Fimg%2F070e37e5-2901-4942-a267-c35f3e77fee8.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%2Ftrnck.dev%2F0%3A%2Fimg%2F070e37e5-2901-4942-a267-c35f3e77fee8.png" alt="Pricing of Google One"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will be posting a tutorial on how to do this later, but if you cannot wait, look at the &lt;a href="https://github.com/alx-xlx/goindex" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Until then, see ya!&lt;/p&gt;

</description>
      <category>storage</category>
      <category>drive</category>
      <category>cloudflare</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Check how green your web project is</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Sat, 15 Aug 2020 20:42:25 +0000</pubDate>
      <link>https://forem.com/filiptronicek/check-how-green-your-web-project-is-52c9</link>
      <guid>https://forem.com/filiptronicek/check-how-green-your-web-project-is-52c9</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;Ever wondered, how much carbon gets produced every time someone visits your site? You can now do that, and track the changes in the effects on the environment on every push or PR! With the help of &lt;a href="https://www.websitecarbon.com/"&gt;website carbon&lt;/a&gt; and their API, you can get a badge in your README and an artifact on every workflow run on where your projects currently sit.&lt;/p&gt;

&lt;p&gt;Here is how the badge can look like:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eus6Iepz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://green-action.vercel.app/api/card%3Fp%3D99" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eus6Iepz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://green-action.vercel.app/api/card%3Fp%3D99" alt="Demo of badge" width="300" height="110"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;DIY Deployments&lt;/p&gt;
&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;(Don't forget to edit any parts that you want, especially the URL and the branch)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Website green-o-meter&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;update-stats&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@master&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;persist-credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt; 
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;green-website&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;filiptronicek/green-action@main&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://dev.to&lt;/span&gt; &lt;span class="c1"&gt;# Your measured URL&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Commit files&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;git config --local user.email "action@github.com"&lt;/span&gt;
          &lt;span class="s"&gt;git config --local user.name "GitHub Action"&lt;/span&gt;
          &lt;span class="s"&gt;git commit -m "Update carbon image" -a&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Push changes&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ad-m/github-push-action@master&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;github_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
          &lt;span class="na"&gt;branch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt; &lt;span class="c1"&gt;# Branch to push to&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;All the code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/filiptronicek"&gt;
        filiptronicek
      &lt;/a&gt; / &lt;a href="https://github.com/filiptronicek/green-action"&gt;
        green-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Check how your web project is affecting the planet
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Green Action&lt;/h1&gt;
&lt;p&gt;Check how your project is affecting the planet and check the carbon stats&lt;/p&gt;
&lt;p&gt;Read about it in my
&lt;a href="https://dev.to/filiptronicek/check-how-green-your-web-project-is-52c9" rel="nofollow"&gt;Dev.to&lt;/a&gt;
post&lt;/p&gt;
&lt;h2&gt;
Demo&lt;/h2&gt;
&lt;h2&gt;
Setup&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open your README and add paste the following tag in there (this will be
where the image will be placed): &lt;code&gt;&amp;lt;!-- CARBON-STATS --&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add the following workflow to your .github/workflows folder:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-yaml position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Website green-o-meter&lt;/span&gt;
&lt;span class="pl-ent"&gt;on&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;push&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;branches&lt;/span&gt;: &lt;span class="pl-s"&gt;main&lt;/span&gt;

&lt;span class="pl-ent"&gt;jobs&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;update-gist&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;runs-on&lt;/span&gt;: &lt;span class="pl-s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="pl-ent"&gt;steps&lt;/span&gt;:
      - &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@master&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;persist-credentials&lt;/span&gt;: &lt;span class="pl-c1"&gt;false&lt;/span&gt;
          &lt;span class="pl-ent"&gt;fetch-depth&lt;/span&gt;: &lt;span class="pl-c1"&gt;0&lt;/span&gt;
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;green-website&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;filiptronicek/green-action@main&lt;/span&gt;
        &lt;span class="pl-ent"&gt;env&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;URL&lt;/span&gt;: &lt;span class="pl-s"&gt;https://dev.to &lt;/span&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt;Your measured URL&lt;/span&gt;
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Commit files&lt;/span&gt;
        &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;|&lt;/span&gt;
&lt;span class="pl-s"&gt;          git config --local user.email "action@github.com"&lt;/span&gt;
&lt;span class="pl-s"&gt;          git config --local user.name "GitHub Action"&lt;/span&gt;
&lt;span class="pl-s"&gt;          git commit -m "Update carbon image" -a&lt;/span&gt;
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Push changes&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;ad-m/github-push-action@master&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;github_token&lt;/span&gt;: &lt;span class="pl-s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
          &lt;span class="pl-ent"&gt;branch&lt;/span&gt;: &lt;span class="pl-s"&gt;main &lt;/span&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt;Change this&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/filiptronicek/green-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;Used GitHub projects:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/actions"&gt;
        actions
      &lt;/a&gt; / &lt;a href="https://github.com/actions/upload-artifact"&gt;
        upload-artifact
      &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;h1&gt;
Upload-Artifact v3&lt;/h1&gt;
&lt;p&gt;This uploads artifacts from your workflow allowing you to share data between jobs and store data once a workflow is complete.&lt;/p&gt;
&lt;p&gt;See also &lt;a href="https://github.com/actions/download-artifact"&gt;download-artifact&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;
What's new&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Easier upload
&lt;ul&gt;
&lt;li&gt;Specify a wildcard pattern&lt;/li&gt;
&lt;li&gt;Specify an individual file&lt;/li&gt;
&lt;li&gt;Specify a directory (previously you were limited to only this option)&lt;/li&gt;
&lt;li&gt;Multi path upload
&lt;ul&gt;
&lt;li&gt;Use a combination of individual files, wildcards or directories&lt;/li&gt;
&lt;li&gt;Support for excluding certain files&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Upload an artifact without providing a name&lt;/li&gt;
&lt;li&gt;Fix for artifact uploads sometimes not working with containers&lt;/li&gt;
&lt;li&gt;Proxy support out of the box&lt;/li&gt;
&lt;li&gt;Port entire action to typescript from a runner plugin so it is easier to collaborate and accept contributions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer &lt;a href="https://github.com/actions/upload-artifact/tree/releases/v1"&gt;here&lt;/a&gt; for the previous version&lt;/p&gt;
&lt;h1&gt;
Usage&lt;/h1&gt;
&lt;p&gt;See &lt;a href="https://github.com/actions/upload-artifactaction.yml"&gt;action.yml&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
Upload an Individual File&lt;/h3&gt;
&lt;div class="highlight highlight-source-yaml position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;steps&lt;/span&gt;
- &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v2&lt;/span&gt;

- &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;mkdir -p path/to/artifact&lt;/span&gt;

- &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;echo hello &amp;gt; path/to/artifact/world.txt&lt;/span&gt;

- &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/upload-artifact@v3&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;my-artifact&lt;/span&gt;
    &lt;span class="pl-ent"&gt;path&lt;/span&gt;: &lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/actions/upload-artifact"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ad-m"&gt;
        ad-m
      &lt;/a&gt; / &lt;a href="https://github.com/ad-m/github-push-action"&gt;
        github-push-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GitHub actions to push back to repository eg. updated code
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
GitHub Action for GitHub Push&lt;/h1&gt;
&lt;p&gt;The GitHub Actions for pushing to GitHub repository local changes authorizing using GitHub token.&lt;/p&gt;
&lt;p&gt;With ease:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;update new code placed in the repository, e.g. by running a linter on it,&lt;/li&gt;
&lt;li&gt;track changes in script results using Git as archive,&lt;/li&gt;
&lt;li&gt;publish page using GitHub-Pages,&lt;/li&gt;
&lt;li&gt;mirror changes to a separate repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;h3&gt;
Example Workflow file&lt;/h3&gt;
&lt;p&gt;An example workflow to authenticate with GitHub Platform:&lt;/p&gt;
&lt;div class="highlight highlight-source-yaml position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;jobs&lt;/span&gt;
  &lt;span class="pl-ent"&gt;build&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;runs-on&lt;/span&gt;: &lt;span class="pl-s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="pl-ent"&gt;steps&lt;/span&gt;:
    - &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v2&lt;/span&gt;
      &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
        &lt;span class="pl-ent"&gt;persist-credentials&lt;/span&gt;: &lt;span class="pl-s"&gt;false &lt;/span&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token.&lt;/span&gt;
        &lt;span class="pl-ent"&gt;fetch-depth&lt;/span&gt;: &lt;span class="pl-c1"&gt;0&lt;/span&gt; &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; otherwise, there would be errors pushing refs to the destination repository.&lt;/span&gt;
    - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Create local changes&lt;/span&gt;
      &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;|&lt;/span&gt;
&lt;span class="pl-s"&gt;        ...&lt;/span&gt;
    - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Commit files&lt;/span&gt;
      &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;|&lt;/span&gt;
&lt;span class="pl-s"&gt;        git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"&lt;/span&gt;
&lt;span class="pl-s"&gt;        git config --local user.name "github-actions[bot]"&lt;/span&gt;
&lt;span class="pl-s"&gt;        git commit -m "Add changes" -a&lt;/span&gt;
    - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ad-m/github-push-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vercel"&gt;
        vercel
      &lt;/a&gt; / &lt;a href="https://github.com/vercel/ncc"&gt;
        ncc
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Compile a Node.js project into a single file. Supports TypeScript, binary addons, dynamic requires.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
ncc&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/vercel/ncc/actions?workflow=CI"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--38HxvWkE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/vercel/ncc/workflows/CI/badge.svg" alt="CI Status"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/vercel/ncc" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/41cafcfbecefe526a689496771ce96a24a58cba33beca94f01966ede40b649a6/68747470733a2f2f636f6465636f762e696f2f67682f76657263656c2f6e63632f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simple CLI for compiling a Node.js module into a single file
together with all its dependencies, gcc-style.&lt;/p&gt;
&lt;h2&gt;
Motivation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Publish minimal packages to npm&lt;/li&gt;
&lt;li&gt;Only ship relevant app code to serverless environments&lt;/li&gt;
&lt;li&gt;Don't waste time configuring bundlers&lt;/li&gt;
&lt;li&gt;Generally faster bootup time and less I/O overhead&lt;/li&gt;
&lt;li&gt;Compiled language-like experience (e.g.: &lt;code&gt;go&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Design goals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Zero configuration&lt;/li&gt;
&lt;li&gt;TypeScript built-in&lt;/li&gt;
&lt;li&gt;Only supports Node.js programs as input / output&lt;/li&gt;
&lt;li&gt;Support all Node.js patterns and npm modules&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;h3&gt;
Installation&lt;/h3&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm i -g @vercel/ncc&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
Usage&lt;/h3&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ ncc &lt;span class="pl-k"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; &lt;span class="pl-k"&gt;&amp;lt;&lt;/span&gt;opts&lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Eg:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ ncc build input.js -o dist&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;If building an &lt;code&gt;.mjs&lt;/code&gt; or &lt;code&gt;.js&lt;/code&gt; module inside a &lt;code&gt;"type": "module"&lt;/code&gt; &lt;a href="https://nodejs.org/dist/latest-v16.x/docs/api/packages.html#packages_package_json_and_file_extensions" rel="nofollow"&gt;package boundary&lt;/a&gt;, an ES module output will be created automatically.&lt;/p&gt;
&lt;p&gt;Outputs the Node.js compact build of &lt;code&gt;input.js&lt;/code&gt; into &lt;code&gt;dist/index.js&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: If the input file is using a &lt;code&gt;.cjs&lt;/code&gt; extension, then so will the corresponding output file
This is useful for packages that want…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vercel/ncc"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Help with the project:&lt;br&gt;
I learned a lot from implementations of GH Actions by &lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__70813"&gt;
  
    .ltag__user__id__70813 .follow-action-button {
      background-color: #6441a5 !important;
      color: #ffffff !important;
      border-color: #6441a5 !important;
    }
  
    &lt;a href="/yo" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yCltPQH0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--8lp2jtg2--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/70813/ce5c620f-5ade-4360-ab4f-c61153c1f673.png" alt="yo image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/yo"&gt;Yogi&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/yo"&gt;요기 • Creator of Devparty.io 🥳 • Developer CRED • Into #NFTs and #Web3 • Mod at Dev.to • ▲ Typescript • BTS Fanboi ⟬⟭ • he/him 🌳&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
(check him out, he's an awesome developer)

</description>
      <category>actionshackathon</category>
    </item>
    <item>
      <title>Perfecting the Windows Terminal</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Tue, 04 Aug 2020 10:30:33 +0000</pubDate>
      <link>https://forem.com/filiptronicek/perfecting-the-windows-terminal-4ilp</link>
      <guid>https://forem.com/filiptronicek/perfecting-the-windows-terminal-4ilp</guid>
      <description>&lt;p&gt;The Windows Terminal is the program, which all devs missed in Windows for years. Now it's here and it's awesome! In this post, I'll share some tips for customizing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) PowerShell Core
&lt;/h2&gt;

&lt;p&gt;PowerShell is the default shell in the Terminal, and there is now a multiplatform and open source version of it called PowerShell Core. It's not that much different from PowerShell, but it has such an awesome icon.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AI6eY2Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zxvi6tz9r3zsw04lklh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AI6eY2Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zxvi6tz9r3zsw04lklh9.png" alt="PowerShell core icon" width="128" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download it from &lt;a href="https://github.com/PowerShell/PowerShell/releases/tag/latest"&gt;GitHub&lt;/a&gt; or just &lt;code&gt;choco install powershell-core&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2) WSL 2
&lt;/h2&gt;

&lt;p&gt;You can have Linux in the Terminal, too! Just download Ubuntu, Alpine, Debian, or Kali from the Microsoft Store (more distros are in the works).&lt;/p&gt;

&lt;p&gt;With the introduction of Windows Subsystem for Linux version 2, you can do even more, because of the deeper integration of Linux into the Terminal. You can even have a GUI!&lt;/p&gt;

&lt;p&gt;You can have a lot of them running at once, just like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wrrPJ0Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sahg20mu4nkkhlexnlqj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wrrPJ0Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sahg20mu4nkkhlexnlqj.png" alt="Desktop setup with multiple tabs" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3) Terminal Settings
&lt;/h2&gt;

&lt;p&gt;At the end of the previous chapter, you saw an image of my current setup of the Terminal. As you can see, you can have custom fonts, icons, and backgrounds. All of this can be achieved by editing the settings.json of the Terminal. You can get there by hitting &lt;code&gt;Ctrl + ,&lt;/code&gt; or selecting "Settings" in the dropdown menu, you can directly edit the JSON powering your Terminal layout. If you want to see everything you can do here, take a look at the &lt;a href="https://docs.microsoft.com/en-us/windows/terminal/customize-settings/profile-settings"&gt;Microsoft Docs&lt;/a&gt;. The most important thing is, that you can set settings for both default shells and specific ones. Each shell has a GUID, which is a unique identifier of the shell. You can further specify a name, an icon, and whether to show it or not. This can result in something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"guid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{2c4de342-38b7-51cf-b940-2309a097f518}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"hidden"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ubuntu"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows.Terminal.Wsl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://files.catbox.moe/xpptug.png"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also set to use acrylic (the transparent background) or use a different font. An awesome font for the Terminal is &lt;a href="https://github.com/microsoft/cascadia-code/releases"&gt;Cascadia Code PL&lt;/a&gt; (it includes some little icons for themes and such)&lt;br&gt;
An example of this can be something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"fontFace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cascadia Mono PL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"useAcrylic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4) Panes
&lt;/h2&gt;

&lt;p&gt;Not only can you have a lot of tabs open, but you can also have two panes with the same shell at once! You can bind that to any shortcut you want, but I like to use &lt;code&gt;Alt + Shift + D&lt;/code&gt;. You can configure this again in your settings.json file mentioned above. In the keybindings section, paste this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"splitPane"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="nl"&gt;"split"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"splitMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"duplicate"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alt+shift+d"&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5) Sudo mode with gsudo
&lt;/h2&gt;

&lt;p&gt;You can use Escalated privileges mode using the Chocolatey package gsudo (&lt;code&gt;choco install gsudo&lt;/code&gt;)&lt;br&gt;
This can be used for example for using Chocolatey because it needs admin privileges to run properly.&lt;/p&gt;

&lt;p&gt;For this specific example of Chocolatey, type &lt;code&gt;notepad $Profile&lt;/code&gt; in the Powershell and add the following line to it:&lt;br&gt;
&lt;code&gt;function choco { gsudo choco @args }&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My config
&lt;/h2&gt;

&lt;p&gt;My Terminal config is publicly accesible in a &lt;a href="https://gist.github.com/filiptronicek/92a68c8b21f0f317d6995fe2f7467524"&gt;GitHub Gist&lt;/a&gt;, feel free to edit or do anything else with it.&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>windows</category>
      <category>coding</category>
      <category>sudo</category>
    </item>
    <item>
      <title>Interclip</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Sun, 27 Oct 2019 19:17:46 +0000</pubDate>
      <link>https://forem.com/filiptronicek/interclip-2hcn</link>
      <guid>https://forem.com/filiptronicek/interclip-2hcn</guid>
      <description>&lt;p&gt;Hi devs,&lt;br&gt;
I want to ask you a question: Do you use the same operating system and tools for everything you do at work (or home)? If your answer is yes, well, then there's nothing to worry about but if not, a tool I made may come in handy.&lt;br&gt;
You probably use a deployment tool for your work (if you do web development), or you have a documentation website which you want to read on your computer. For both of those things (and anything else URL related), you can use Interclip. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Interclip?
&lt;/h2&gt;

&lt;p&gt;Interclip is a modern solution for sharing URLs with yourself or someone else. You probably share URLs by just emailing them to yourself, right? Think about it. Isn't this just like... dumb? Filling your inbox and taking so much time is just nonsense. If you use Interclip, you can just paste a URL and get back a five-digit randomly generated code. This code you can then input on your other device (doesn't even have to be yours) and get the URL back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't know where to host a file? Interclip can also help
&lt;/h2&gt;

&lt;p&gt;Interclip is not just about URLs, but also about files. Any file smaller than 100 MB can be uploaded to Interclip and never be deleted. So you can host anything because there's also no file-type limitation. Also, every file is encrypted so no-one else will be able to see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  API? Of course we do
&lt;/h2&gt;

&lt;p&gt;There's also a very simple API for developers to use. Check the documentation for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;The entirety of Interclip is open source. I am working on it just by myself now so any contributions are welcome! And if you're not really into web-development or you don't have the time, a star on GitHub would be very appreciated. &lt;/p&gt;

&lt;p&gt;The APP: &lt;a href="https://interclip.app"&gt;interclip.app&lt;/a&gt;&lt;br&gt;
Github repo: &lt;a href="https://github.com/aperta-principium/Interclip"&gt;aperta-principium/Interclip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. Happy developing!&lt;/p&gt;

</description>
      <category>clipboard</category>
      <category>productivity</category>
      <category>php</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How can you upload to CatBox using JavaScript?</title>
      <dc:creator>Filip Troníček</dc:creator>
      <pubDate>Sun, 29 Sep 2019 11:33:42 +0000</pubDate>
      <link>https://forem.com/filiptronicek/how-can-you-upload-to-catbox-using-javascript-4o0m</link>
      <guid>https://forem.com/filiptronicek/how-can-you-upload-to-catbox-using-javascript-4o0m</guid>
      <description>&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;h1&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7Gn-iPj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackoverflow-logo-b42691ae545e4810b105ee957979a853a696085e67e43ee14c5699cf3e890fb4.svg" alt=""&gt;
            &lt;a href="https://stackoverflow.com/questions/58153921/how-can-you-upload-to-catbox-using-javascript" rel="noopener noreferrer"&gt;
              How can you upload to CatBox using JavaScript?
            &lt;/a&gt;
        &lt;/h1&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;Sep 29 '19&lt;/span&gt;
            &lt;span&gt;Comments: 1&lt;/span&gt;
            &lt;span&gt;Answers: 1&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://stackoverflow.com/questions/58153921/how-can-you-upload-to-catbox-using-javascript" rel="noopener noreferrer"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y9mJpuJP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          0
        &lt;/div&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wif5Zq3z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/stackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;I am making an app and wanted to add a client-side uploader. I found a couple of services, including:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.file.io/" rel="nofollow noreferrer"&gt;file.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://catbox.moe/" rel="nofollow noreferrer"&gt;catbox&lt;/a&gt; (probably the one I want to use)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.uguu.se/" rel="nofollow noreferrer"&gt;Uguu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://put.re/api-docs" rel="nofollow noreferrer"&gt;put.re&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They all support curl as seen from the documentation but as I said I want a preferably JavaScript solution for…&lt;/p&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    
      &lt;a href="https://stackoverflow.com/questions/58153921/how-can-you-upload-to-catbox-using-javascript" rel="noopener noreferrer"&gt;Open Full Question&lt;/a&gt;
    
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
