<?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: Deepika Banoth</title>
    <description>The latest articles on DEV Community by Deepika Banoth (@deepika_banoth).</description>
    <link>https://dev.to/deepika_banoth</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%2F274825%2Fb030bb67-9131-49bf-a29b-e5c8dbd03ba3.jpg</url>
      <title>DEV Community: Deepika Banoth</title>
      <link>https://dev.to/deepika_banoth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deepika_banoth"/>
    <language>en</language>
    <item>
      <title>Understanding WebSockets</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Mon, 27 Apr 2020 05:09:36 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/understanding-websockets-1jja</link>
      <guid>https://dev.to/deepika_banoth/understanding-websockets-1jja</guid>
      <description>&lt;h3&gt;
  
  
  What is WebSocket?
&lt;/h3&gt;

&lt;p&gt;Websocket is that protocol which offers interactive bi-directional communication session between the server and the client over a single TCP connection.&lt;/p&gt;

&lt;p&gt;This means server can actively send messages to the client at any time, and also the client can send messages to the server without doing full HTTP requests each time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffxrcw61hgc03enlplxwx.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffxrcw61hgc03enlplxwx.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is made possible by providing a normalized way for the server to send content to the browser without being requested by the client, and allowing information to be pushed back and forth while keeping the connection open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why to use WebSocket?
&lt;/h3&gt;

&lt;p&gt;As Websocket provides full-duplex communication, this can be used:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When your application involve multiple users communicating with each other.&lt;/li&gt;
&lt;li&gt;When your application is a window to server-side data that’s constantly changing.
Few scenarios where Websocket can be used:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Ongoing Updates&lt;/strong&gt;: When a client wants ongoing updates, using WebSocket is good. As there is a good fit when the client cannot predict when a change will occur and changes are like to happen. Example: Using a WebSocket on social applications, can update your feed in real-time or also getting a notification on your post as soon as your friend reacts to that.&lt;/p&gt;

&lt;p&gt;Also if you are including sports information in your web application, WebSockets can keep your users up to speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Reaction&lt;/strong&gt;: When a client needs to react quickly to a change or an update, using Websocket is the best. A good example of this is a chat application that allows multiple users to chat in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impromptu messaging&lt;/strong&gt;: Websocket design provides bi-directional messaging. Messages may be sent from either end of the connection at any time, and there is no native support for one message to indicate that it is related to another message. Websocket design is well suited for &lt;code&gt;fire and forget&lt;/code&gt; messaging scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works?
&lt;/h3&gt;

&lt;p&gt;To establish a WebSocket connection, the client sends a WebSocket handshake request, for which the server returns a WebSocket handshake response. The handshake resembles HTTP in allowing servers to handle HTTP connections as well as WebSocket connections on the same port.&lt;/p&gt;

&lt;p&gt;Once the connection is established, communication switches to a bi-directional binary protocol which doesn’t conform to the HTTP protocol. Now, the client and server can send WebSocket data or text frames back and forth in full-duplex mode. The data is minimally framed, with a small header followed by a payload.&lt;/p&gt;

&lt;h3&gt;
  
  
  When not to use WebSocket?
&lt;/h3&gt;

&lt;p&gt;When we know when to use WebSocket, it is also important to know when not to use it.&lt;/p&gt;

&lt;p&gt;Following are scenarios where Websockets are not preferred:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edge Caching&lt;/strong&gt;: When your application benefits from caching, that is when the representation of your app changes rarely. Websocket design does not allow explicit proxies to cache messages as it prevents caching proxy from re-sending a previous WebSocket conversation. A usage of WebSocket can degrade client performance in this scenario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safety&lt;/strong&gt;: Websocket does not provide any authentication, privacy or integrity, the protocol leaves these issues to the messaging layer design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transactional messaging&lt;/strong&gt;: Websockets are poorly suited for transactional requirements or download and upload techniques as it does not support &lt;code&gt;Request-Response&lt;/code&gt; messaging pattern. The messaging layer must address your transactional needs if that’s needed in your application.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I solved: Failed to fetch http://ppa.launchpad.net/.., 403  Forbidden</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Thu, 23 Apr 2020 05:13:51 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/how-i-solved-failed-to-fetch-http-ppa-launchpad-net-403-forbidden-2544</link>
      <guid>https://dev.to/deepika_banoth/how-i-solved-failed-to-fetch-http-ppa-launchpad-net-403-forbidden-2544</guid>
      <description>&lt;p&gt;I've been using Ubuntu 16.04 vagrant machine for quite some time now. I wanted to install a package, for which I had to do &lt;code&gt;sudo apt-get update&lt;/code&gt; before.&lt;br&gt;
But when I ran this command in my machine, it failed with the following error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nl"&gt;Err:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial/main amd64 Packages&lt;/span&gt;
  &lt;span class="mi"&gt;403&lt;/span&gt;  &lt;span class="nc"&gt;Forbidden&lt;/span&gt;
&lt;span class="nl"&gt;Ign:&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial/main Translation-en&lt;/span&gt;
&lt;span class="nc"&gt;Reading&lt;/span&gt; &lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;lists...&lt;/span&gt; &lt;span class="nc"&gt;Done&lt;/span&gt;
&lt;span class="nl"&gt;W:&lt;/span&gt; &lt;span class="nc"&gt;The&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial Release' does not have a Release file.&lt;/span&gt;
&lt;span class="nl"&gt;N:&lt;/span&gt; &lt;span class="nc"&gt;Data&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;such&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;authenticated&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;therefore&lt;/span&gt; &lt;span class="n"&gt;potentially&lt;/span&gt; &lt;span class="n"&gt;dangerous&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nl"&gt;N:&lt;/span&gt; &lt;span class="nc"&gt;See&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;secure&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;manpage&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="n"&gt;creation&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;details&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nl"&gt;E:&lt;/span&gt; &lt;span class="nc"&gt;Failed&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;fetch&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//ppa.launchpad.net/jonathonf/python-3.6/ubuntu/dists/xenial/main/binary-amd64/Packages  403  Forbidden&lt;/span&gt;
&lt;span class="nl"&gt;E:&lt;/span&gt; &lt;span class="nc"&gt;Some&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nc"&gt;They&lt;/span&gt; &lt;span class="n"&gt;have&lt;/span&gt; &lt;span class="n"&gt;been&lt;/span&gt; &lt;span class="n"&gt;ignored&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt; &lt;span class="n"&gt;ones&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="n"&gt;instead&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It looked like there is an invalid repository which gives 403 error&lt;/p&gt;

&lt;p&gt;So as a workaround, I thought of temporarily commenting out that in source list.&lt;br&gt;
I grepped all the enabled binary sources by running this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;grep&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;include&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*.list&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;^deb &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;which gave output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial main restricted&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial-updates main restricted&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial universe&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial-updates universe&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial multiverse&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial-updates multiverse&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//security.ubuntu.com/ubuntu xenial-security main restricted&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//security.ubuntu.com/ubuntu xenial-security universe&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//security.ubuntu.com/ubuntu xenial-security multiverse&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;amd64&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;https:&lt;/span&gt;&lt;span class="c1"&gt;//download.docker.com/linux/ubuntu xenial stable&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jonathonf&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3_6&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xenial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;http:&lt;/span&gt;&lt;span class="c1"&gt;//ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial main&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nodesource&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;list&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;deb&lt;/span&gt; &lt;span class="nl"&gt;https:&lt;/span&gt;&lt;span class="c1"&gt;//deb.nodesource.com/node_8.x xenial main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;So in my case &lt;code&gt;jonathonf-ubuntu-python-3_6-xenial.list&lt;/code&gt; has the problem.&lt;br&gt;
So I commented out the content in &lt;code&gt;/etc/apt/sources.list.d/jonathonf-ubuntu-python-3_6-xenial.list&lt;/code&gt;, which now looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# deb http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial main&lt;/span&gt;
&lt;span class="c"&gt;# deb-src http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now when I ran &lt;code&gt;sudo apt-get update&lt;/code&gt; again after this fix, it worked fine for me.&lt;/p&gt;

&lt;p&gt;If you are facing the above error, you can also use this as a workaround and if you have a better solution please let me know :)&lt;/p&gt;

&lt;p&gt;Have a great day!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Continuous Integration and Continuous Delivery?</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Fri, 17 Apr 2020 05:20:56 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/what-is-continuous-integration-and-continuous-delivery-44gk</link>
      <guid>https://dev.to/deepika_banoth/what-is-continuous-integration-and-continuous-delivery-44gk</guid>
      <description>&lt;p&gt;We all follow few rules while writing code. Few of the basic rules involves indentation, syntax, maximum letters in a line, etc.,&lt;/p&gt;

&lt;p&gt;I being a developer, I always wanna push good code. This can only be achieved by testing what you have written. At least I wanna meet my basic rules of writing code.&lt;/p&gt;

&lt;p&gt;But is it possible to test each line of your code during a tight schedule?&lt;/p&gt;

&lt;p&gt;There were times when my pull request was rejected for improper alignment of code. Also, there were times when I broke our Staging environment due to my code change. This is all because of lack of testing.&lt;/p&gt;

&lt;p&gt;For example, if you are a javascript developer, you can run js lint before sending a pull request and resolve if it throws an error. What if you have changes in multiple repositories?&lt;/p&gt;

&lt;p&gt;How will you test optimized by utilizing time? Here, Continuous Integration comes in to picture.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Continuous Integration?
&lt;/h3&gt;

&lt;p&gt;Continuous Integration is a software development practice of testing each change done in your central repository automatically by running automated builds and tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuukwx3bsvwhejc3zpgo3.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuukwx3bsvwhejc3zpgo3.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the diagram, we can see: Developer does a code change and pushes changes to his/her own repository. As soon as he/she commit changes a webhook is triggered by the version control, in my case am using Github. Now, the commit webhook will trigger a build which actually runs all your test cases. You can use any CI/CD platform to run your build, amusing &lt;a href="https://jfrog.com/pipelines/" rel="noopener noreferrer"&gt;JFrog Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now if your build fails, you can go back and do the required changes. If your build passes then you can raise a pull request and send it for review.&lt;/p&gt;

&lt;p&gt;I believe the goal of Continous Integration is to find and address bugs as soon as possible. This improves your code quality, system quality and reduce the time it takes to validate any new updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Continuous Delivery?
&lt;/h3&gt;

&lt;p&gt;Continuous Delivery follows the testing that happens in CI and push to staging/production environments continuously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqdavjdnba5qtpjnvudhm.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqdavjdnba5qtpjnvudhm.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core idea here is to deliver the code to QA or any user base so that it can be regularly reviewed. The main motivation of all this is to improve your software and of course to ship good code.&lt;/p&gt;

&lt;p&gt;I hope you find this post helpful 🙂&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>developers</category>
      <category>devops</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Scheduled triggers using JFrog Pipelines</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Wed, 15 Apr 2020 10:02:18 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/scheduled-triggers-using-jfrog-pipelines-56ag</link>
      <guid>https://dev.to/deepika_banoth/scheduled-triggers-using-jfrog-pipelines-56ag</guid>
      <description>&lt;p&gt;Jfrog Pipelines support automatic triggers through webhooks, REST API based triggers, as well as manual triggers through the UI.&lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/CICD/Welcome+to+JFrog+Pipelines"&gt;Jfrog Pipelines&lt;/a&gt; also provides you the ability to schedule a Pipeline to be triggered at specific date/times, or at a recurring interval.&lt;/p&gt;

&lt;p&gt;You can use the &lt;code&gt;cronTrigger&lt;/code&gt; resource of JFrog Pipelines to achieve the functionality scheduled triggers in your workflow.&lt;/p&gt;

&lt;p&gt;Before starting I would like to quickly tell you about JFrog Pipelines key concepts which would help you understand this better.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pipeline&lt;/td&gt;
&lt;td&gt;It is a collection of interconnected serial or parallel steps required to achieve an outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steps&lt;/td&gt;
&lt;td&gt;Steps are the executable units of your pipelines that can execute any DevOps activity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrations&lt;/td&gt;
&lt;td&gt;Integrations contain credentials to third-part tools/services such as AWS, slack, Github, etc.,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resources&lt;/td&gt;
&lt;td&gt;Resources contain information required to execute steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run&lt;/td&gt;
&lt;td&gt;Run is an instance of pipeline execution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  CronTrigger Resource
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;cronTrigger&lt;/code&gt; resource provides cron-like functionality. It is used to trigger a build in a cron-like manner.&lt;br&gt;
You can define the resource in your yaml config file as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&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;cron&lt;/span&gt;                 &lt;span class="c1"&gt;#friendly name to remember&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CronTrigger&lt;/span&gt;
  &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
    &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*/2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;  &lt;span class="c1"&gt;#follows the standard Cron format&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This resource can be used as an inputResource to a step in pipeline as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bash_1&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bash&lt;/span&gt;
        &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;inputResources&lt;/span&gt;&lt;span class="pi"&gt;:&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;github&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;cron&lt;/span&gt;        &lt;span class="c1"&gt;#created CronTrigger resource name&lt;/span&gt;
        &lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;onExecute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;echo "executing bash step."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If the CronTrigger typed resource is given as Input to a step then it gets triggered at the recurring interval or at a specific date as depends on what you configure in &lt;code&gt;interval&lt;/code&gt;.&lt;br&gt;
A new run will be created every time the step is triggered.&lt;br&gt;
In my example, this &lt;code&gt;bash_1&lt;/code&gt; step will be triggered by &lt;code&gt;cron&lt;/code&gt; resource in every 2 minutes as shown in the below screenshot:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wolyBWbP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/onc1a1x5wo1rd3h8xavm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wolyBWbP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/onc1a1x5wo1rd3h8xavm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also schedule to trigger this on a particular day by just updating the &lt;code&gt;interval&lt;/code&gt; in the resource definition as per cron syntax.&lt;/p&gt;

&lt;p&gt;Hope this helps. :)&lt;/p&gt;

</description>
      <category>scheduledtriggers</category>
      <category>cicd</category>
      <category>devops</category>
      <category>cron</category>
    </item>
    <item>
      <title>Vue watchers vs computed properties</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Fri, 03 Apr 2020 10:03:39 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/vue-watchers-vs-computed-properties-4kfn</link>
      <guid>https://dev.to/deepika_banoth/vue-watchers-vs-computed-properties-4kfn</guid>
      <description>&lt;p&gt;From the past few days, I have been spending most of my time in learning and understanding how Vue and its reactivity works.&lt;br&gt;
Today I would like to share my learnings on when to use watchers and computed properties.&lt;br&gt;
To be noted, I am still at beginner level :)&lt;/p&gt;
&lt;h3&gt;
  
  
  When to use Computed properties
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Computed Properties can react to changes in multiple properties, so you can use it when you have a variable in your template, that's built from one or more data properties. A simple example would be creating &lt;code&gt;fullName&lt;/code&gt; from the list of &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Computed Properties are very useful for composing new data from existing sources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;The output of a computed property is cached, this means that if something independent of the computed property changes and the UI is re-rendered, the cached result will be returned and the property will not be re-calculated, sparing us an expensive operation&lt;br&gt;
For example, consider two counters, in which &lt;code&gt;computedCounter&lt;/code&gt; will be updated from &lt;code&gt;computed button&lt;/code&gt; and &lt;code&gt;methodCounter&lt;/code&gt; will be updated from &lt;code&gt;method button&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;computedCounter&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="na"&gt;methodCounter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;printMsgComputed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&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="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;printed&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     
         &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;computedCounter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; 
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;printMsgMethod&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&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="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;printed&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
          &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;methodCounter&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;p&gt;HTML:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight html"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;”computedCounter++”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;computed button&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ computedCounter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;”methodCounter++”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;method button&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;   
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ methodCounter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;

      {{ printMsgMethod() }}
      {{ printMsgComputed }}
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;When the above code is executed and when you click on &lt;code&gt;computed button&lt;/code&gt; both &lt;code&gt;printMsgMethod&lt;/code&gt; and &lt;code&gt;printMsgComputed&lt;/code&gt; will run.&lt;br&gt;
But when you click on &lt;code&gt;method button&lt;/code&gt; you can see that only &lt;code&gt;printMsgMethod&lt;/code&gt; running. You&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Computed properties creates new reactive properties, so you can use it when you want to reduce a nested property name to a more readable and easy to use one, yet update it when the original property changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can also use computed properties when you need to listen to changes of more than one data property&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  When to use Watchers
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Watchers are useful for cases when you want to perform an action in response to a data property change&lt;/li&gt;
&lt;li&gt;Also Watchers are most useful when you want to perform asynchronous or expensive operations in response to changing data&lt;/li&gt;
&lt;li&gt;You can also use watchers when you only need to listen to one specific property&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also Computed properties are only executed when they are needed to be used whereas Watchers are executed whenever a property is changed.&lt;/p&gt;

&lt;p&gt;Correct me if I am wrong or missed something.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>reactivity</category>
      <category>quarantine</category>
      <category>computed</category>
    </item>
    <item>
      <title>Managing integration of CI/CD server to DevOps Environment</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Fri, 20 Mar 2020 09:04:44 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/managing-integration-of-ci-cd-server-to-devops-environment-5385</link>
      <guid>https://dev.to/deepika_banoth/managing-integration-of-ci-cd-server-to-devops-environment-5385</guid>
      <description>&lt;p&gt;We all know that CI or CD server needs to be tightly connected or integrated across your DevOps environment.&lt;/p&gt;

&lt;p&gt;But the problem in most of the CI servers today, is that you have to configure for each job every time.&lt;br&gt;
For example, if you are trying to deploy to Kubernetes using Jenkins, you have to configure this at a Job level and you can only verify this by actually running the build.&lt;br&gt;
If you need this KubeConfig in few other jobs the only way in here is that you add the same config file in all other required jobs.&lt;br&gt;
Now imagine, you need to change something in the config file, now you have to go to all other places and change them, which is &lt;code&gt;not effective&lt;/code&gt;.&lt;br&gt;
This stands the same for deploying to Google Cloud or AWS or any other cloud provider which might also require some plugin to make it work.&lt;/p&gt;

&lt;p&gt;So just to tackle this problem, &lt;a href="https://jfrog.com/pipelines/"&gt;JFrog Pipelines&lt;/a&gt; extracted these out into a central system, created a pointer for you which you can use it in your steps where our platform gonna inject them during run time and we call these as Integrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrations&lt;/strong&gt; are used to connect your Pipelines CI or CD workflows to third party platforms or services and manage secrets like keys, tokens, passwords that are needed for Steps in a Pipeline to interact with the source. &lt;br&gt;
All credential information is encrypted and maintained separately from the pipeline definition, and held in a secure storage.&lt;/p&gt;

&lt;p&gt;The biggest advantages of our design for integrations are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Integrations are created in the UI and used with friendly names in your YAML config. This means you do not have to touch your automation scripts when an integration is updated.&lt;/li&gt;
&lt;li&gt;Integrations are securely stored in a &lt;code&gt;Vault store&lt;/code&gt; and encrypted at rest and in-flight.&lt;/li&gt;
&lt;li&gt;Integrations values are not revealed in logs unless you choose to print them out as part of your workflow.
You can scope each integration to allow or deny access for Pipeline Sources&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let me show an example of adding an integration and using it in one of your step.&lt;/p&gt;
&lt;h4&gt;
  
  
  Add New Integration
&lt;/h4&gt;

&lt;p&gt;To add new integration, Go to Pipelines-&amp;gt;Integrations tab and click on &lt;code&gt;Add an Integration&lt;/code&gt;,&lt;br&gt;
You can give some friendly name and select the type of integration which you want to create.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5DEvqgpt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e72nkhmattv8h2seah26.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5DEvqgpt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e72nkhmattv8h2seah26.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The available integration types for Jfrog Pipelines are: &lt;br&gt;
&lt;a href="https://www.jfrog.com/confluence/display/CICD/Airbrake+Integration"&gt;Airbrake&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Artifactory+Integration"&gt; Artifactory&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/AWS+Keys+Integration"&gt; AWS Keys&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Azure+Keys+Integration"&gt; Azure Keys&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Bitbucket+Integration"&gt; Bitbucket&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Digital+Ocean+Integration"&gt; Digital Ocean&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Distribution+Integration"&gt; Distribution&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Docker+Registry+Integration"&gt; Docker Registry&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/External+Webhook+Integration"&gt; External Webhook&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/File+Server+Integration"&gt; File Server&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Generic+Integration"&gt; Generic&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/GitHub+Enterprise+Integration"&gt; Github Enterprise &lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/GitHub+Integration"&gt; Github&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/GitLab+Integration"&gt; Gitlab&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Google+Cloud+Integration"&gt; Google Cloud&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Internal+Webhook+Integration"&gt; Internal Webhook Integration&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Jira+Integration"&gt; Jira&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Kubernetes+Integration"&gt; Kubernetes&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/NewRelic+Integration"&gt; Newrelic&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/PEM+Key+Integration"&gt; PEM Key&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/Slack+Integration"&gt; Slack&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/SMTP+Credentials+Integration"&gt; SMTP Credentials&lt;/a&gt;, &lt;a href="https://www.jfrog.com/confluence/display/CICD/SSH+Key+Integration"&gt; SSH Key&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you added all the required fields:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fc74JlaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ze165fo9mavj4i1crzvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fc74JlaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ze165fo9mavj4i1crzvs.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also set which Pipeline sources can use this integration:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ww-Xmv0V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f0ml01o8udg4b8ods4oz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ww-Xmv0V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f0ml01o8udg4b8ods4oz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating, you can add the integration directly to a step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sample_bash&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bash&lt;/span&gt;
        &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;integrations&lt;/span&gt;&lt;span class="pi"&gt;:&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;myArtifactory&lt;/span&gt;
        &lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;onExecute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;echo "executing bash step."&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;echo $int_myArtifactory_url&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;when you do that, a set of environment variables is automatically made available.&lt;/p&gt;

&lt;p&gt;You can also send notifications using utility function: &lt;a href="https://www.jfrog.com/confluence/display/CICD/Utility+Functions#UtilityFunctions-send_notification"&gt;send_notification&lt;/a&gt; whenever your step succeeds or fails due to some reason using Notification integrations: Airbrake, Slack, Jira, NewRelic, Outgoing webhook, SmtpCreds(email)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sample_bash&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bash&lt;/span&gt;
        &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;integrations&lt;/span&gt;&lt;span class="pi"&gt;:&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;myArtifactory&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;mySlack&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;myJira&lt;/span&gt;
        &lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;onExecute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;echo "executing bash step."&lt;/span&gt;
          &lt;span class="na"&gt;onSuccess&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;send_notification mySlack&lt;/span&gt;
          &lt;span class="na"&gt;onFailure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;send_notification myJira --project-id myProjectOnJira --type Bug --summary "sample_bash step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${step_id} failed"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Hope this helps! :) &lt;/p&gt;

</description>
      <category>devops</category>
      <category>pipelines</category>
      <category>cicd</category>
      <category>integrations</category>
    </item>
    <item>
      <title>How to: use jsonb_set function in PostgreSQL</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Fri, 21 Feb 2020 06:35:02 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/how-to-use-jsonbset-function-in-postgresql-35eo</link>
      <guid>https://dev.to/deepika_banoth/how-to-use-jsonbset-function-in-postgresql-35eo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Definition&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;jsonb_set(target jsonb, path text[], new_value jsonb, [create_missing boolean])&lt;/strong&gt;&lt;br&gt;
Returns &lt;code&gt;target&lt;/code&gt; with the section designated by &lt;code&gt;path&lt;/code&gt; replaced by &lt;code&gt;new_value&lt;/code&gt;, or with &lt;code&gt;new_value&lt;/code&gt; added if create_missing is true (default is true) and the item designated by path does not exist. As with the path oriented operators, negative integers that appear in path count from the end of JSON arrays.&lt;/p&gt;

&lt;p&gt;Let's take the below data set as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Place"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&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;"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;"Taj Mahal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"images/0001.jpg"&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;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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Place"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&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;"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;"Eiffel Tower"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"images/0002.jpg"&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;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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Food"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&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;"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;"Biryani"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"images/0003.jpg"&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;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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Food"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&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;"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;"Pizza"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"images/0004.jpg"&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;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;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The model &lt;code&gt;Example&lt;/code&gt; of the object in postgresql is something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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="s2"&gt;"id"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;smallint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;character&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;varying(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="s2"&gt;"details"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;text&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;p&gt;Now, here are the following queries you can use in &lt;code&gt;postgres&lt;/code&gt; to parse, update the object:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. How to parse JSON value of text column
&lt;/h3&gt;

&lt;p&gt;Let's fetch object of name &lt;code&gt;Biryani&lt;/code&gt; from the above data set&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"Example"&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Biryani'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above query will return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-[ RECORD 1 ]---------------+---------------------------------------------
id                          | 3
type                        | Food
details                     | { "name": "Biryani", "url": "images/0003.jpg"}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  2. How to update JSON value of text column
&lt;/h3&gt;

&lt;p&gt;Here is the query to update &lt;code&gt;url&lt;/code&gt; of &lt;code&gt;Eiffel Tower&lt;/code&gt; object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="nv"&gt;"Example"&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;jsonb_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;jsonb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'{url}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'"images/0005.jpg"'&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Eiffel Tower'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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



&lt;p&gt;now the updated object will look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-[ RECORD 1 ]---------------+---------------------------------------------
id                          | 2
type                        | Place
details                     | { "name": "Eiffel Tower", "url": "images/0005.jpg"}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>postgres</category>
      <category>jsonb</category>
      <category>sql</category>
      <category>example</category>
    </item>
    <item>
      <title>How to fix: "locale.Error: unsupported locale setting" on pip install</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Tue, 21 Jan 2020 09:49:22 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/how-to-fix-locale-error-unsupported-locale-setting-on-pip-install-4noj</link>
      <guid>https://dev.to/deepika_banoth/how-to-fix-locale-error-unsupported-locale-setting-on-pip-install-4noj</guid>
      <description>&lt;p&gt;If you see the following error while installing pip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Traceback&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
     &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="s"&gt;"/usr/bin/pip"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exit&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
     &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="s"&gt;"/usr/lib/python2.7/dist-packages/pip/__init__.py"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;215&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;
       &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setlocale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;LC_ALL&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;''&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
     &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="s"&gt;"/usr/lib/python2.7/locale.py"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;581&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;setlocale&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;_setlocale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unsupported&lt;/span&gt; &lt;span class="n"&gt;locale&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;this means the environment variable &lt;code&gt;LC_ALL&lt;/code&gt; is missing or invalid somehow.&lt;/p&gt;

&lt;h3&gt;
  
  
  FIX :
&lt;/h3&gt;

&lt;p&gt;run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;export&lt;/span&gt; &lt;span class="no"&gt;LC_ALL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;and retry installing again.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is LC_ALL?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;LC_ALL&lt;/code&gt; is the environment variable that overrides the value of the &lt;code&gt;LANG&lt;/code&gt; and the values of any other &lt;code&gt;LC_*&lt;/code&gt; environment variables.&lt;/p&gt;

&lt;p&gt;In a script, if you want to force a specific setting, as you don't know what settings the user has forced, your safest and generally only option is to force LC_ALL.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;C&lt;/code&gt; locale is for computers. In the &lt;code&gt;C&lt;/code&gt; locale, characters are single bytes, the charset is ASCII, the sorting order is based on the byte values, the language is usually US English.&lt;br&gt;
You generally run a command with &lt;code&gt;LC_ALL=C&lt;/code&gt; to avoid the user's settings to interfere with your script. For example, if you want &lt;code&gt;[a-z]&lt;/code&gt; to match the 26 ASCII characters from &lt;code&gt;a&lt;/code&gt; to &lt;code&gt;z&lt;/code&gt;, you have to set &lt;code&gt;LC_ALL=C&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hope this helps! :) &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>pip</category>
      <category>python</category>
      <category>fix</category>
    </item>
    <item>
      <title>What happens when I type a URL in browser
</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Thu, 19 Dec 2019 07:04:38 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/what-happens-when-i-type-a-url-in-browser-3i5o</link>
      <guid>https://dev.to/deepika_banoth/what-happens-when-i-type-a-url-in-browser-3i5o</guid>
      <description>&lt;p&gt;Ever wondered what actually happens when you type a URL in the browser?&lt;/p&gt;

&lt;p&gt;I think this is a very common query that lingers around in our mind every time we type a URL in the browser.&lt;/p&gt;

&lt;p&gt;So today am gonna briefly discuss what happens when you type a URL in the browser.&lt;/p&gt;

&lt;p&gt;You enter a URL into the browser. It all starts here.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbehqglei9lk71cng1183.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbehqglei9lk71cng1183.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically, whenever we want to connect to a particular server, for example, let's consider google.com. Here we actually want to reach out to a server where google web services are hosted. As an example, I have given one such server, as google has around one million servers in various locations.&lt;/p&gt;

&lt;p&gt;The browser looks up the IP address for the domain name. DNS server which I would call a resolver does look up to find the IP address of the server.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjpuuxv6n5qtcfhbf0yne.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjpuuxv6n5qtcfhbf0yne.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DNS lookup proceeds by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First checking Browser cache&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the browser doesn’t contain the record in its cache. It makes a system call to the underlying operating system to fetch the record&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If that also fails, then the search continues to your router which has its own cache&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If everything fails, then the search moves on to ISP. It first tries in its cache, if not found then ISP’s DNS recursive search comes into picture&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the domain name which you have entered gets converted into the DNS number.&lt;/p&gt;

&lt;p&gt;After which the browser initiates a TCP connection with the server and sends an HTTP GET request. Now the webserver passes on the request to the proper request handler which will return an HTML response in our case.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsv3kj8a9cx926voqb3st.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsv3kj8a9cx926voqb3st.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This HTML data stream response is then sent back to the browser. Now the browser receives the HTTP response and then the browser displays the HTML content. In our case its the google web page.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftyf7l0ganur6qxfibsxl.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftyf7l0ganur6qxfibsxl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rendering of HTML content is done in phases. It first gets HTML structure and then sends multiple GET requests to fetch links and other stuff. And there is a lot more after this. And yeah this is just an outline on what happens when you type a URL.&lt;/p&gt;

&lt;p&gt;Hope this helps 🙂&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=_cRyCo46Oo4&amp;amp;t=6s" rel="noopener noreferrer"&gt;Video on what happens when you type URL in browser. Click to watch&lt;/a&gt; &lt;/p&gt;

</description>
      <category>urlinbrowser</category>
      <category>url</category>
      <category>javascript</category>
      <category>browser</category>
    </item>
    <item>
      <title>How to Install Node.js using NVM on Linux</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Mon, 09 Dec 2019 10:54:15 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/how-to-install-node-js-using-nvm-on-linux-4mch</link>
      <guid>https://dev.to/deepika_banoth/how-to-install-node-js-using-nvm-on-linux-4mch</guid>
      <description>&lt;p&gt;NVM aka &lt;code&gt;Node Version Manager&lt;/code&gt; is a simple bash script to manage active Node.js versions. Using NVM you can easily install Node.js and also you can install a specific Node.js version or multiple Node.js versions on the same system.&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP-1: Install NVM
&lt;/h2&gt;

&lt;p&gt;To install or update NVM, you need to run the install script. Use the following command to install NVM on your Linux machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Reload system environment using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc     
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It will set the required environment variables to use nvm on the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify NVM&lt;/strong&gt;&lt;br&gt;
Run the following command to check if the nvm is installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; nvm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If it's installed correctly, you will see&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;as message printed.&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP-2 Find Node.js version
&lt;/h2&gt;

&lt;p&gt;As now NVM is installed in your system, find out the available Node.js version to install. You can run the following command to find out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm ls-remote
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;A long list of available Node.js versions is printed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;       &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
       v10.12.0
       v10.13.0   &lt;span class="o"&gt;(&lt;/span&gt;LTS: Dubnium&lt;span class="o"&gt;)&lt;/span&gt;
       v10.14.0   &lt;span class="o"&gt;(&lt;/span&gt;LTS: Dubnium&lt;span class="o"&gt;)&lt;/span&gt;
       &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
       &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
       v10.17.0   &lt;span class="o"&gt;(&lt;/span&gt;Latest LTS: Dubnium&lt;span class="o"&gt;)&lt;/span&gt;
        v11.0.0
       &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
       &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
       v12.12.0
       v12.13.0   &lt;span class="o"&gt;(&lt;/span&gt;LTS: Erbium&lt;span class="o"&gt;)&lt;/span&gt;
       v12.13.1   &lt;span class="o"&gt;(&lt;/span&gt;Latest LTS: Erbium&lt;span class="o"&gt;)&lt;/span&gt;
        v13.0.0
        v13.0.1
        v13.1.0
        v13.2.0
        v13.3.0

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



&lt;h2&gt;
  
  
  STEP-3 Node.js installation
&lt;/h2&gt;

&lt;p&gt;Now install the Node.js version you need to use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install &lt;/span&gt;v12.13.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can install multiple versions as well, just specify the version you want to install: &lt;code&gt;nvm install $version&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP-4 Set default version
&lt;/h2&gt;

&lt;p&gt;If you have installed multiple Node.js versions, then select a specific version as default version of Node.js used by your machine.&lt;br&gt;
Run the following command to get the list of currently installed Node.js versions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt; nvm list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;you will see similar output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;
-&amp;gt;     v10.16.3
       v12.13.1
         system
default -&amp;gt; v12.13.1
node -&amp;gt; stable &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; v12.13.1&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
stable -&amp;gt; 12.13 &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; v12.13.1&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
iojs -&amp;gt; N/A &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
unstable -&amp;gt; N/A &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
lts/&lt;span class="k"&gt;*&lt;/span&gt; -&amp;gt; lts/erbium &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; v12.13.1&lt;span class="o"&gt;)&lt;/span&gt;
lts/argon -&amp;gt; v4.9.1 &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; N/A&lt;span class="o"&gt;)&lt;/span&gt;
lts/boron -&amp;gt; v6.17.1 &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; N/A&lt;span class="o"&gt;)&lt;/span&gt;
lts/carbon -&amp;gt; v8.16.2 &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; N/A&lt;span class="o"&gt;)&lt;/span&gt;
lts/dubnium -&amp;gt; v10.17.0 &lt;span class="o"&gt;(&lt;/span&gt;-&amp;gt; N/A&lt;span class="o"&gt;)&lt;/span&gt;
lts/erbium -&amp;gt; v12.13.1

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



&lt;p&gt;You can see that &lt;code&gt;v12.13.1&lt;/code&gt; is set as the default version. You can use the following command to change default version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use v10.16.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, verify the current version of Node.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;  node &lt;span class="nt"&gt;--version&lt;/span&gt;

v10.16.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you want to uninstall a specific version of Node.js, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm uninstall v12.13.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I hope this tutorial helps :)&lt;/p&gt;

</description>
      <category>nvm</category>
      <category>linux</category>
      <category>node</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Creating your first web app with Node.js
</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Mon, 02 Dec 2019 03:41:26 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/creating-your-first-web-app-with-node-js-5d7</link>
      <guid>https://dev.to/deepika_banoth/creating-your-first-web-app-with-node-js-5d7</guid>
      <description>&lt;p&gt;Hello everyone! I hope you are all doing great. 🙂&lt;/p&gt;

&lt;p&gt;Today we will create a very simple web application using Node.&lt;/p&gt;

&lt;p&gt;Let's get started! 🙂&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."&lt;/em&gt; – Martin Golding&lt;/p&gt;

&lt;p&gt;This is one of my favorite quotes. And actually it is not a bad idea to write a clean code. If you are looking back at your code after some months or years, at least you should be able to understand what you wrote.&lt;/p&gt;

&lt;p&gt;So, lets first create a very simple file structure which will help in managing it easily. We will be putting most of the code of our Node application into the &lt;code&gt;server.js&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---bUmaklE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/oqz0zzofe2vf04lzaevj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---bUmaklE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/oqz0zzofe2vf04lzaevj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, for larger applications, server.js should be broken down further to separate duties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Modules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;package.json&lt;/em&gt; holds configuration of our application. Node’s package manager (npm) will use this to install and dependencies or modules that we are going to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HEo7-Dms--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7x6fny4ty87ceanxwv42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HEo7-Dms--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7x6fny4ty87ceanxwv42.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now open your terminal, go to your project and run &lt;strong&gt;npm install&lt;/strong&gt;, npm will look at this file package.json and install all dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our main file server.js will configure the app for Express, and listening on a port.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gTVSr_aK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sb35iker11h1hy15hysq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gTVSr_aK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sb35iker11h1hy15hysq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Your Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that we have &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;server.js&lt;/code&gt; started up, we can start up our server and see whats going on. Just go to your project folder in your terminal and type command node server.js. Now you have a server listening on a port 3000. Going to &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;, you should be seeing something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---71Tobih--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/v9mmv2pv4iigvl9v2dar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---71Tobih--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/v9mmv2pv4iigvl9v2dar.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also add a html which has code of our main view&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kpQNo0e0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/782l3i6i15vvl25192n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kpQNo0e0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/782l3i6i15vvl25192n1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and use the path in the server.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p9y2Pr3O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q55hr5oczufyiiqjs094.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p9y2Pr3O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q55hr5oczufyiiqjs094.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: The path you mention here must be absolute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fv4C9KcW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iswlyt1qix42rew91s5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fv4C9KcW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iswlyt1qix42rew91s5b.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this post helps 🙂&lt;/p&gt;

</description>
      <category>node</category>
      <category>jfrog</category>
      <category>meanstack</category>
      <category>webapp</category>
    </item>
    <item>
      <title>Setting up Github Enterprise server on AWS</title>
      <dc:creator>Deepika Banoth</dc:creator>
      <pubDate>Wed, 27 Nov 2019 05:06:34 +0000</pubDate>
      <link>https://dev.to/deepika_banoth/setting-up-github-enterprise-server-on-aws-2f0e</link>
      <guid>https://dev.to/deepika_banoth/setting-up-github-enterprise-server-on-aws-2f0e</guid>
      <description>&lt;p&gt;Hello everyone! I hope you all are doing great. Today, I am going to show you step by step on how you can set up a GitHub enterprise server on AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1: GET THE GITHUB ENTERPRISE AMI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To Install Github Enterprise on AWS, you must launch an EC2 instance first.&lt;/p&gt;

&lt;p&gt;To launch any instance on EC2, you need an AMI. Well, what is an AMI?&lt;/p&gt;

&lt;p&gt;An AMI (Amazon Machine Image) is a special type of virtual appliance that provides all the required information to launch an instance on Elastic Compute Cloud (EC2).&lt;/p&gt;

&lt;p&gt;Now, follow these steps to get the Github Enterprise AMI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to your Github Enterprise account, and go to &lt;code&gt;Download&lt;/code&gt; page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4o5uhr0Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0a89y8tzcfkbu7ui3xqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4o5uhr0Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0a89y8tzcfkbu7ui3xqm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now click on &lt;code&gt;Get the latest release of Github Enterprise&lt;/code&gt; under &lt;code&gt;Download the Appliance&lt;/code&gt; section.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fCHZCjaC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7uc7b3e6g8rjyupl9643.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fCHZCjaC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7uc7b3e6g8rjyupl9643.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, select &lt;code&gt;Amazon Web Services&lt;/code&gt; as the platform under &lt;code&gt;Github in the Cloud&lt;/code&gt; section. And then under &lt;code&gt;Select your Amazon region&lt;/code&gt;, select a region where you want to set up Github Enterprise. I am selecting &lt;code&gt;us-east-2&lt;/code&gt;. As soon as you select the region, AMI ID will be displayed in the same section.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T-UjpdZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l2p8d66zvjh2xam7fnld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T-UjpdZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l2p8d66zvjh2xam7fnld.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take note of the AMI ID, as it is required to launch instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. CREATE EC2 INSTANCE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As now we have the AMI ID, let's create the EC2 instance. For that, at first login to AWS console. Go to EC2 service dashboard and click on &lt;code&gt;Launch Instance&lt;/code&gt;. Make sure that you create an instance in the same region where you have selected while getting AMI ID of Github Enterprise.&lt;/p&gt;

&lt;p&gt;As soon as you click on &lt;code&gt;Launch Instance&lt;/code&gt;, it will ask you to choose an AMI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--efxNkkC3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hr0hp10dg6w8itvcfl2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--efxNkkC3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hr0hp10dg6w8itvcfl2h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, go to &lt;code&gt;Community AMIs&lt;/code&gt; section to search for the AMI ID which you got in first step:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pakudq0_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/5hic30pcxk4rx2rdvjib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pakudq0_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/5hic30pcxk4rx2rdvjib.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the AMI and continue.&lt;/p&gt;

&lt;p&gt;Now you need to choose the Instance Type. Github Enterprise is supported on the following EC2 instance types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;td&gt;M3&lt;/td&gt;
&lt;td&gt;M4&lt;/td&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;td&gt;X1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c3.2xlarge&lt;/td&gt;
&lt;td&gt;c4.2xlarge&lt;/td&gt;
&lt;td&gt;m3.xlarge&lt;/td&gt;
&lt;td&gt;m4.xlarge&lt;/td&gt;
&lt;td&gt;r3.large&lt;/td&gt;
&lt;td&gt;r4.large&lt;/td&gt;
&lt;td&gt;x1.16xlarge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c3.4xlarge&lt;/td&gt;
&lt;td&gt;c4.4xlarge&lt;/td&gt;
&lt;td&gt;m3.2xlarge&lt;/td&gt;
&lt;td&gt;m4.2xlarge&lt;/td&gt;
&lt;td&gt;r3.xlarge&lt;/td&gt;
&lt;td&gt;r4.xlarge&lt;/td&gt;
&lt;td&gt;x1.32xlarge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c3.8xlarge&lt;/td&gt;
&lt;td&gt;c4.8xlarge&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;m4.4xlarge&lt;/td&gt;
&lt;td&gt;r3.2xlarge&lt;/td&gt;
&lt;td&gt;r4.2xlarge&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;m4.10xlarge&lt;/td&gt;
&lt;td&gt;r3.4xlarge&lt;/td&gt;
&lt;td&gt;r4.4xlarge&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;m4.16xlarge&lt;/td&gt;
&lt;td&gt;r3.8xlarge&lt;/td&gt;
&lt;td&gt;r4.8xlarge&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;r4.16xlarge&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Select one of the instance type based on your seat count. And click on &lt;code&gt;Next: Configure Instance Details&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YyEANBTa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0k3047duyu4aoffnfymz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YyEANBTa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0k3047duyu4aoffnfymz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, if you want to customize instance configuration details then you may change it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HgOz7qjp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/eceqrdcw8f6l0n0zokyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HgOz7qjp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/eceqrdcw8f6l0n0zokyy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I don’t want any changes, I am skipping this and moving forward by clicking on &lt;code&gt;Next: Add Storage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1bzP99VI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mua5svgvkgyl75p232x2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1bzP99VI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mua5svgvkgyl75p232x2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Github Enterprise needs a separate EBS volume of at least 10 GiB for git data and user data. So, click on &lt;code&gt;Add New Volume&lt;/code&gt; and create an EBS volume of size &amp;gt; 10 GiB and move forward to &lt;code&gt;Next: Add tags&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4PXwq7Mz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/s2imkutw9pvtr10ue4ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4PXwq7Mz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/s2imkutw9pvtr10ue4ui.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you can create a Tag for this instance by adding name and value. Adding a tag helps you in identifying the instance in the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xPPFItJ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/au64qh3856qsst70ouaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xPPFItJ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/au64qh3856qsst70ouaz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Move on to &lt;code&gt;Next: Configure Security Group&lt;/code&gt;  and add a security group for the instance. Basically a security group is a set of firewall rules that control the traffic for your instance. While creating the security group add rules for each port in the table below:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;Git over SSH access. Clone, fetch and push operations to public/private repositories supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;SMTP&lt;/td&gt;
&lt;td&gt;SMTP with encryption (STARTTLS) support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;Web application access. All requests are redirected to the HTTPS port when SSL is enabled.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;122&lt;/td&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;Instance shell access. The default SSH port (22) is dedicated to application git+ssh network traffic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;161/UDP&lt;/td&gt;
&lt;td&gt;SNMP&lt;/td&gt;
&lt;td&gt;Required for network monitoring protocol operation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;443&lt;/td&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;Web application and Git over HTTPS access.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1194/UDP&lt;/td&gt;
&lt;td&gt;VPN&lt;/td&gt;
&lt;td&gt;Secure replication network tunnel in High Availability configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8080&lt;/td&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;Plain-text web-based Management Console. Not required unless SSL is disabled manually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8443&lt;/td&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;Secure web-based Management Console. Required for basic installation and configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9418&lt;/td&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;td&gt;Simple Git protocol port. Clone and fetch operations to public repositories only. Unencrypted network communication.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Add rules for each of the port mentioned above in the table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uS38n7-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vw6o91lvcxpahzjvrg0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uS38n7-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vw6o91lvcxpahzjvrg0r.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Click on &lt;code&gt;Review and Launch&lt;/code&gt; button. Make sure, everything is correctly configured. And click on &lt;code&gt;Launch&lt;/code&gt; when you are ok with it.&lt;/p&gt;

&lt;p&gt;Create key-value pair which can be used to ssh into that machine.&lt;/p&gt;

&lt;p&gt;Now click on &lt;code&gt;View Instances&lt;/code&gt;. And copy the Public DNS of the newly created &lt;code&gt;GHE&lt;/code&gt; instance and open it in a new tab of your web browser. It is located at the bottom right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9BPDPFMl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/y8teocfgoamn1ns0cr6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9BPDPFMl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/y8teocfgoamn1ns0cr6w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you put the public DNS in your browser you will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G2MeSiR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/o6riwva45dumiha8dnc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G2MeSiR---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/o6riwva45dumiha8dnc3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is because, Github Enterprise have a self-signed SSL certificate, because of which you might be prompted on the next screen with a warning. We can get past that screen based on which browser you are using. If you want to double-check, you can verify by ssh into the machine and following the steps as written on your screen. Now click on &lt;code&gt;Continue to setup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are on safari, you will get an alert box asking to continue or not. You can click on &lt;code&gt;continue&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are on chrome, this will redirect you to a page, where you can click &lt;code&gt;Advanced&lt;/code&gt; under it click on &lt;code&gt;Proceed to ec2-13-58-244-179.us-east-2.compute.amazonaws.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After that, you will be asked to upload your license files. If you don’t have one, you can get them from Github Enterprise Download page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N7OD31c3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hbt4p4ylcb5m2q1l6bes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N7OD31c3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hbt4p4ylcb5m2q1l6bes.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;code&gt;Download your license&lt;/code&gt; and upload it here on your machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P3CYNf-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wokbfgkduhseqxj75jf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P3CYNf-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wokbfgkduhseqxj75jf9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have to create a new password for authentication. And click on &lt;code&gt;Finish Installation&lt;/code&gt; once you are done uploading and creating a password.&lt;/p&gt;

&lt;p&gt;Now you will be asked to choose the installation type. I will be choosing &lt;code&gt;New Install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FYIrwxVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iiboece01vbhle54qfmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FYIrwxVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/iiboece01vbhle54qfmn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be redirect to Admin settings page, where you can configure the GHE instance. Click on &lt;code&gt;Save Settings&lt;/code&gt; once you are done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Md8MYsJA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/201x14y43yst6w99kn8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Md8MYsJA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/201x14y43yst6w99kn8y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it will configure the settings to your instance, it might take some time. Once all the checks are done you can click on &lt;code&gt;Visit your Instance&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qPipVwfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ur6z6wwikgeef6u30bs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qPipVwfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ur6z6wwikgeef6u30bs4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that’s it Github Enterprise is installed on your machine, you can create an admin account and later you can create or export projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WMZIE6DS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fyq3d4xveb8btnx1jt3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WMZIE6DS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fyq3d4xveb8btnx1jt3j.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you find this tutorial helpful.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>jfrog</category>
      <category>github</category>
      <category>githubenterprise</category>
    </item>
  </channel>
</rss>
