<?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: Mark Witt</title>
    <description>The latest articles on DEV Community by Mark Witt (@markwitt_me).</description>
    <link>https://dev.to/markwitt_me</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%2F393825%2F715ed85b-ef17-4e33-8013-b2ff55f99d34.jpg</url>
      <title>DEV Community: Mark Witt</title>
      <link>https://dev.to/markwitt_me</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/markwitt_me"/>
    <language>en</language>
    <item>
      <title>How to Read Scientific Papers from arxiv.org on Kobo E-Readers</title>
      <dc:creator>Mark Witt</dc:creator>
      <pubDate>Fri, 11 Aug 2023 16:49:56 +0000</pubDate>
      <link>https://dev.to/markwitt_me/how-to-read-scientific-papers-from-arxivorg-on-kobo-e-readers-l7l</link>
      <guid>https://dev.to/markwitt_me/how-to-read-scientific-papers-from-arxivorg-on-kobo-e-readers-l7l</guid>
      <description>&lt;p&gt;Reading scientific papers on arxiv.org directly from your Kobo E-Reader without needing a USB connection sounds like a dream, right? This guide will walk you through the process, step-by-step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge with PDFs
&lt;/h2&gt;

&lt;p&gt;Many scientific papers on arxiv.org are in PDF format. Directly saving these PDFs to Pocket means they won't appear on your Kobo E-Reader at all. Thus, to ensure the content is accessible and optimized for reading, we need a different approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-step Guide:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Set Up a Pocket Account on Your Kobo E-Reader
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Turn on your Kobo E-Reader.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tap the &lt;code&gt;More&lt;/code&gt; option, usually represented by three dots (&lt;code&gt;...&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;Settings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Scroll and find the &lt;code&gt;Accounts&lt;/code&gt; section.&lt;/li&gt;
&lt;li&gt;Choose &lt;code&gt;Pocket&lt;/code&gt;, then &lt;code&gt;Sign in or create an account&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Follow the prompts to set up an account. Remember, the Firefox login option won't work here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Access Your Pocket Account on a Computer or Mobile Device
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://getpocket.com/"&gt;Pocket’s website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the credentials you set up on your Kobo to log in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Install the Pocket Browser Extension
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Head to your browser's extensions or add-ons marketplace.&lt;/li&gt;
&lt;li&gt;Search for and install the &lt;code&gt;Pocket&lt;/code&gt; extension.&lt;/li&gt;
&lt;li&gt;Once installed, you'll gain the ability to add pages to Pocket via the browser's context menu (right-click).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Make the arxiv PDF Reader-Friendly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the arxiv page of your desired paper.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the URL, change the "x" in "arxiv" to "5".&lt;br&gt;&lt;br&gt;
&lt;em&gt;For example:&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Original URL: &lt;code&gt;https://arxiv.org/abs/1706.03762&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Modified URL: &lt;code&gt;https://ar5iv.org/abs/1706.03762&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This change converts the PDF into a responsive webpage, optimized for e-readers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Store the Converted Page in Pocket
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Right-click on the page.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;Save to Pocket&lt;/code&gt; option from the context menu.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Access and Read the Paper on Your Kobo E-Reader
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;On your Kobo E-Reader, from the home screen, tap the &lt;code&gt;More&lt;/code&gt; tab on the right.&lt;/li&gt;
&lt;li&gt;Tap &lt;code&gt;My Titles&lt;/code&gt; (next to the Pocket logo. You should now see a list of all articles you've saved, including the recently added paper.&lt;/li&gt;
&lt;li&gt;Tap on the desired paper to read it in a format optimized for the Kobo.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;By utilizing ar5iv's rendering tool and the Pocket extension, you can enjoy a seamless experience reading scientific papers from arxiv.org on your Kobo E-Reader. This method bypasses the need for USB transfers, making the entire process wireless and hassle-free.&lt;/p&gt;

</description>
      <category>kobo</category>
      <category>ebook</category>
      <category>research</category>
      <category>arxiv</category>
    </item>
    <item>
      <title>Automating email verification for online accounts using JavaScript</title>
      <dc:creator>Mark Witt</dc:creator>
      <pubDate>Mon, 29 Nov 2021 20:09:35 +0000</pubDate>
      <link>https://dev.to/markwitt_me/automating-email-verification-for-online-accounts-using-javascript-8gh</link>
      <guid>https://dev.to/markwitt_me/automating-email-verification-for-online-accounts-using-javascript-8gh</guid>
      <description>&lt;h1&gt;
  
  
  What this is good for
&lt;/h1&gt;

&lt;p&gt;To automate the creation of online accounts, we need to perform the same http requests that a user does when signing up programmatically. If it is a website, you can use the DevTools to inspect the network traffic and look it up. If it is an app, you can use an emulator and a tool like &lt;a href="https://mitmproxy.org/"&gt;mitmproxy&lt;/a&gt; to monitor http requests.&lt;br&gt;
Then you can write a quite simple script which creates hundreds of user accounts in a matter of seconds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;put a gentle timeout in between http requests so your script will not be considered as a Denial of Service attack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most online services require users to have an account linked to a valid email address. To verify that the user really has access to the provided email address, companies use an email verification system in form of a special link sent via email which contains some id and has to be clicked in order to verify.&lt;/p&gt;

&lt;p&gt;I am going to show you how to automate that with some simple JavaScript.&lt;/p&gt;
&lt;h1&gt;
  
  
  Domain and Mandrill Setup
&lt;/h1&gt;

&lt;p&gt;First, We need our own domain to create as many email addresses as we want.&lt;br&gt;
I am using NameCheap in this guide but you can use whatever you are comfortable with.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;if you are a student, you can use &lt;a href="https://education.github.com/pack"&gt;GitHub student developer pack&lt;/a&gt; to get a free .me domain&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We want to use &lt;a href="https://mandrillapp.com/inbound"&gt;MailChimp/Mandrill&lt;/a&gt;'s Inbound API which has a good free tier to POST any incoming email to a Webhook we will setup later. Again, there's other services such as SendGrid which do the same job, so feel free to use anything you want to.&lt;/p&gt;

&lt;p&gt;Follow the instructions to &lt;a href="https://mailchimp.com/help/verify-a-domain/"&gt;verify an Email Domain&lt;/a&gt; at Mailchimp!&lt;/p&gt;

&lt;p&gt;We will have to setup some DNS records.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yLW6MMD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://namecheap.simplekb.com/SiteContents/2-7C22D5236A4543EB827F3BD8936E153E/media/advanced_dns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yLW6MMD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://namecheap.simplekb.com/SiteContents/2-7C22D5236A4543EB827F3BD8936E153E/media/advanced_dns.png" alt="Namecheap Advanced DNS" width="880" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to &lt;a href="https://mandrillapp.com/inbound"&gt;https://mandrillapp.com/inbound&lt;/a&gt;, add your domain and click "View Setup Instructions". You will need to add 2 DNS records of type "MX" which will set Mandrill as the Mailserver for your domain.&lt;/p&gt;

&lt;p&gt;Click "Test DNS Settings"." If it works, proceed:&lt;/p&gt;
&lt;h1&gt;
  
  
  Let's start coding
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Create a new folder and call it what you want&lt;/li&gt;
&lt;li&gt;cd into it and &lt;code&gt;npm init&lt;/code&gt; (assuming you have &lt;a href="https://nodejs.org/"&gt;node.js&lt;/a&gt; installed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sshSaXV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2el1zvg5jdleby46ssai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sshSaXV3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2el1zvg5jdleby46ssai.png" alt="Screenshot from 2020-09-19 12-35-04" width="317" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We will need 3 dependencies and 1 optional devDependency:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://expressjs.com/"&gt;express&lt;/a&gt; to setup a server that listens for incoming http requests&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cheerio.js.org/"&gt;cheerio&lt;/a&gt; to parse the HTML structure of an incoming email and filter out the link we need to click to verify our email address by an attribute (in this case the text Content of the link but it could be any html attribute)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pptr.dev/"&gt;puppeteer&lt;/a&gt; to access the link href inside an automated browser environment (these verification systems use redirects and JavaScript so sending a simple GET request will not do in most cases)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodemon.io/"&gt;nodemon&lt;/a&gt;: this devDependency automatically reruns our app when a file in the project changes.
Run:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npm &lt;span class="nb"&gt;install &lt;/span&gt;cheerio express puppeteer
  npm i &lt;span class="nt"&gt;-D&lt;/span&gt; nodemon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Let's make an app.js file in our project directory and create a simple express app:
&lt;/li&gt;
&lt;/ol&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;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&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;cheerio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cheerio&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;puppeteer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;puppeteer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;urlencoded&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
   &lt;span class="cm"&gt;/* this middleware enables us to access the http body
   (containing our emails) coming from Mandrill */&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="cm"&gt;/*adding a get route shows to Mandrill that the url "exists"
   by sending an "OK" status code. */&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="c1"&gt;// let us just console.log the body for now...&lt;/span&gt;
     &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="cm"&gt;/*for local development, our server will run on port 3000
   When deployed, the PORT environment will be created by
   Heroku */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;In package.json, add two npm scripts:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   "scripts": {
       "start": "node app.js",
       "dev": "nodemon start"
     },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;npm run dev&lt;/code&gt; to start a local server. Notice that it reruns everytime you change something and save.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  build a tunnel using ngrok
&lt;/h1&gt;

&lt;p&gt;ngrok is a super cool free utility that we can use to tunnel our localhost server to the world wide web.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download ngrok and unzip it into your project directory&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;add a .gitignore file:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ngrok
#on windows: ngrok.exe
node_modules
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;run &lt;code&gt;ngrok http 3000&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bGRQFTjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.intercomassets.com/blog/wp-content/uploads/2019/11/lauras-post-request.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bGRQFTjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.intercomassets.com/blog/wp-content/uploads/2019/11/lauras-post-request.png" alt="ngrok Screenshot" width="880" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;copy the full .ngrok.io address from your command line (keep in mind that it will change if you restart ngrok)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="https://mandrillapp.com/inbound"&gt;Mandrill Inbound&lt;/a&gt; -&amp;gt;&lt;br&gt;&lt;br&gt;
Select your Domain -&amp;gt; Routes and add a new Route.&lt;br&gt;&lt;br&gt;
Enter an asterik (*) in the first field to forward all email addresses to your webhook. Paste your ngrok url in the second field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the webhook, select it in the dashboard and click "send test". If everything is working, you will get something logged to your console.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;JSON.parse(unescape(req.body.mandrill_events)&lt;/code&gt; to get a valid object that you can explore. You can iterate over emails using forEach.&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;mandrillEvents&lt;/span&gt; &lt;span class="o"&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;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;unescape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mandrill_events&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

  &lt;span class="nx"&gt;mandrillEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;mandrillEvent&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mandrillEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//implemented in next step&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Extracting the desired url using cheerio
&lt;/h1&gt;

&lt;p&gt;We now have the html content of our email as a string.&lt;br&gt;
Let us use cheerio to parse it and extract our link:&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;LINK_TEXT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;verify email address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//adjust this&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&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;$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cheerio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;withDomLvl1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;normalizeWhitespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;decodeEntities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="cm"&gt;/* creates a traversable Document tree from your html string
      Now, let us iterate over every anchor tag and see
      if it is the link we are looking for */&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;each&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;link&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attribs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;href&lt;/span&gt;&lt;span class="dl"&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;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&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;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&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;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;LINK_TEXT&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nx"&gt;clickLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//will be implemented in the next step&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that the code you need may differ from mine depending on your email html structure. Analyze it by saving the html on your file system and opening it in your web browser. The cheerio library has a very similar syntax to jQuery.&lt;/p&gt;

&lt;h1&gt;
  
  
  "Clicking the link" using puppeteer
&lt;/h1&gt;

&lt;p&gt;Puppeteer is a library which allows you to run an automated Chromium instance.&lt;/p&gt;

&lt;p&gt;Let us create a clickLink function to open the url provided url.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;clickLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&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;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="cm"&gt;/* setting "headless" to false enables us 
  to actually see what is going on behind the scenes*/&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Puppeteer is at &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Deployment using Heroku
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;a href="//heroku.com"&gt;Heroku&lt;/a&gt; account and sign it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download and install the &lt;a href="https://devcenter.heroku.com/articles/heroku-cli"&gt;Heroku CLI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;heroku login&lt;/code&gt; and follow the instructions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;cd into the project directory and run &lt;code&gt;git init &amp;amp;&amp;amp; heroku create&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For technical reasons which I am not the right person to explain, we need to install the node buildpack and the &lt;a href="https://elements.heroku.com/buildpacks/jontewks/puppeteer-heroku-buildpack"&gt;puppeteer buildpack&lt;/a&gt; for Heroku:&lt;br&gt;
&lt;code&gt;heroku buildpacks:add jontewks/puppeteer &amp;amp;&amp;amp; heroku buildpacks:add heroku/nodejs&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The puppeteer buildpack requires us to run puppeteer with the argument "--no-sandbox". At the same time, we want it to run in "headless" mode on the server (without gui).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's create two constants &lt;code&gt;devOptions&lt;/code&gt; and &lt;code&gt;prodOptions&lt;/code&gt;:&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;devOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&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;prodOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--no-sandbox&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="c1"&gt;//"headless" defaults to tru&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the heroku dyno, the environment variable &lt;code&gt;NODE_ENV&lt;/code&gt; is setto &lt;code&gt;"production"&lt;/code&gt;. We can use it to run puppeteer with differentoptions depending on if we are running it locally or inside Heroku.&lt;br&gt;
Change the first line inside clickLink:&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;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;puppeteer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;prodOptions&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;devOptions&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;We're ready to rumble. Open your terminal and run
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  git add &lt;span class="nb"&gt;.&lt;/span&gt;
  git commit &lt;span class="nt"&gt;-am&lt;/span&gt; &lt;span class="s2"&gt;"whatever message you want to put here i don't care"&lt;/span&gt;
  git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Type &lt;code&gt;heroku info -s&lt;/code&gt; and copy the Web URL from your terminal. Paste it as the webhook URL inside Mandrill Inbound Dashboard. Now, everything should work as expected.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If it doesn't work or you have anything else you want to tell me, feel free to hit me up anytime on &lt;a href="https://twitter.com/markwitt_me"&gt;Twitter&lt;/a&gt; or via &lt;a href="//mailto:hello@markwitt.me"&gt;E-Mail&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is my first blog post and I am always grateful to hear any feedback or suggestions from you guys 🤠&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Creating a custom VSCode Terminal Profile for using Rosetta on an M1 Mac (Apple Silicon)</title>
      <dc:creator>Mark Witt</dc:creator>
      <pubDate>Mon, 29 Nov 2021 18:29:45 +0000</pubDate>
      <link>https://dev.to/markwitt_me/creating-a-custom-vscode-terminal-profile-for-using-rosetta-on-an-m1-mac-apple-silicon-2gb2</link>
      <guid>https://dev.to/markwitt_me/creating-a-custom-vscode-terminal-profile-for-using-rosetta-on-an-m1-mac-apple-silicon-2gb2</guid>
      <description>&lt;h2&gt;
  
  
  Why do this?
&lt;/h2&gt;

&lt;p&gt;Many programs and packages still do not support the ARM architecture used on the new Apple M1 chip.&lt;br&gt;
If you are a developer dealing with older codebases, you may have already had issues installing npm dependencies or running specific tools.&lt;/p&gt;

&lt;p&gt;Luckily, Apple provides us with the &lt;a href="https://support.apple.com/en-us/HT211861" rel="noopener noreferrer"&gt;Rosetta&lt;/a&gt; emulation layer.&lt;br&gt;
It enables us to emulate the x86 architecture to run all the programs made for older Macs, with a little performance decrease when compared to apps optimized for M1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rosetta Terminal
&lt;/h2&gt;

&lt;p&gt;When installing build tools like CocoaPods, you have to run your whole terminal session with Rosetta enabled.&lt;/p&gt;

&lt;p&gt;A prevalent practice to achieve this is to create a copy of the Terminal.app, click "Get Info" and enable the flag "Open using Rosetta". Now you have a second terminal that is always running as Rosetta.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnoy7hict7wowtefyc7uk.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%2Fnoy7hict7wowtefyc7uk.png" alt="RosyTerm copy of Terminal app using Rosetta"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to do this in VSCode
&lt;/h2&gt;

&lt;p&gt;I very much enjoy using the integrated Terminal in VSCode because I don't have to switch windows so often and can continue coding while running processes like building my app or installing dependencies.&lt;/p&gt;

&lt;p&gt;How to create a custom terminal profile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Visual Studio Code&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;cmd+shift+p&lt;/code&gt; to open the Command Palette.&lt;/li&gt;
&lt;li&gt;Type "Open Settings (JSON)" and press enter&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the settings.json file, search for the property &lt;code&gt;terminal.integrated.profiles.osx&lt;/code&gt;, it should look similar to this: &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"terminal.integrated.profiles.osx": {
    "bash": {
    "path": "bash",
    "args": ["-l"],
    "icon": "terminal-bash"
    },
    "zsh": {
    "path": "zsh",
    "args": ["-l"]
    },
    "fish": {
    "path": "fish",
    "args": ["-l"]
    },
    "tmux": {
    "path": "tmux",
    "icon": "terminal-tmux"
    },
    "pwsh": {
    "path": "pwsh",
    "icon": "terminal-powershell"
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
- Add this property:

    ```


    "terminal.integrated.profiles.osx": {
     ....,
      "rosetta": {
        "path": "arch",
        "args": ["-x86_64", "zsh", "-l"],
        "overrideName": true
      }
    }


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

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Save the file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tada! You now have a dedicated rosetta Terminal profile in VSCode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click the dropdown arrow at the right side of your VSCode terminal. You should see the option "rosetta".&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%2Fudj6pmf4jvehywq3u2b7.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%2Fudj6pmf4jvehywq3u2b7.png" alt="Rosetta profile in terminal dropdown"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it doesn't work or you have anything else you want to tell me, feel free to hit me up anytime on &lt;a href="https://twitter.com/markwitt_me" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
