<?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: Uday Vunnam</title>
    <description>The latest articles on DEV Community by Uday Vunnam (@udayvunnam).</description>
    <link>https://dev.to/udayvunnam</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%2F106338%2F4df48f5e-665a-41c1-b3c6-4ccdbc0df97b.jpeg</url>
      <title>DEV Community: Uday Vunnam</title>
      <link>https://dev.to/udayvunnam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/udayvunnam"/>
    <language>en</language>
    <item>
      <title>Naming Library Release</title>
      <dc:creator>Uday Vunnam</dc:creator>
      <pubDate>Sun, 21 Jul 2019 06:29:56 +0000</pubDate>
      <link>https://dev.to/udayvunnam/naming-library-release-1if7</link>
      <guid>https://dev.to/udayvunnam/naming-library-release-1if7</guid>
      <description>&lt;p&gt;I choose &lt;em&gt;Indian River&lt;/em&gt; names for naming my library releases. The latest one is &lt;strong&gt;Yamuna(v2.0.0)&lt;/strong&gt;. How do you name your library releases?&lt;/p&gt;

&lt;p&gt;Check my release naming at - &lt;a href="https://github.com/udayvunnam/xng-breadcrumb/releases"&gt;https://github.com/udayvunnam/xng-breadcrumb/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Library &lt;a href="https://www.npmjs.com/package/xng-breadcrumb"&gt;xng-breadcrumbs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learningjavascriptwebdev</category>
    </item>
    <item>
      <title>Implementing LRU cache in JavaScript</title>
      <dc:creator>Uday Vunnam</dc:creator>
      <pubDate>Sun, 30 Jun 2019 02:51:30 +0000</pubDate>
      <link>https://dev.to/udayvunnam/implementing-lru-cache-in-javascript-3c8g</link>
      <guid>https://dev.to/udayvunnam/implementing-lru-cache-in-javascript-3c8g</guid>
      <description>&lt;p&gt;&lt;strong&gt;LRU&lt;/strong&gt; is the acronym of &lt;em&gt;Least Recently Used cache&lt;/em&gt;. The cache is used everywhere, let's try to implement that in Javascript. In simple steps -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a data structure to hold the cache data with the initial limit.&lt;/li&gt;
&lt;li&gt;Provide functionalities for adding to cache, getting an element from the cache, removing the least used element from the cache and iterating through the cache.&lt;/li&gt;
&lt;li&gt;We implement the functionality by mimicking &lt;code&gt;Doubly LinkedList&lt;/code&gt; and a &lt;code&gt;Map(Object)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Read and write operations has to be in O(1) time complexity. &lt;br&gt;
DoublyLinkedList for &lt;strong&gt;write/remove&lt;/strong&gt; and &lt;strong&gt;Map(object)&lt;/strong&gt; for read operation makes this possible.&lt;/p&gt;
&lt;h2&gt;
  
  
  Identifying LRU item from the cache:
&lt;/h2&gt;

&lt;p&gt;In a Doubly Linked list make head as most recently used and tail as least recently used.&lt;/p&gt;

&lt;p&gt;1) Do every insertion at the head.&lt;/p&gt;

&lt;p&gt;2) On every read or update operation detach the node from its position and attach at the head of the LinkedList. Remember, LRU is indicated in terms of both read and write operations to the cache.&lt;/p&gt;

&lt;p&gt;3)When cache limit exceeds remove a node from the tail&lt;/p&gt;

&lt;p&gt;4) Store &lt;code&gt;key: Node&lt;/code&gt; relation in the cache map. So that retrieval is possible in O(1).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8jqsaee1jk93ijnp0ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8jqsaee1jk93ijnp0ey.png" alt="LRU Cache visualized as map and LinkedList" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  LRU Implementation
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  LRU Usage
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;As we are adding the 4th element in a cache with limit 3, which element do you think is removed ????????????&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes, it is ‘b’.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since ‘a’ is read recently and ‘c’ is the last added item. ‘b’ becomes the element that isn’t used recently by either read or write operations and hence available for deletion from the cache.&lt;/p&gt;




&lt;p&gt;If you want to take it to the next level implement LRU cache with a time limit. When no read and write operations are performed on LRU for certain time invalidate the cache. Even better invalidate only specific node when there is no operation on that node for a certain time.&lt;/p&gt;

&lt;p&gt;I often write and share about technology! You can follow my updates on &lt;a href="https://www.linkedin.com/in/udayvunnam/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/codeasync" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Happy coding!&lt;/p&gt;

&lt;p&gt;Note: This article was originally published on &lt;a href="https://medium.com/dsinjs/implementing-lru-cache-in-javascript-94ba6755cda9" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>algorithms</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Top 5 things to consider when creating an Angular library</title>
      <dc:creator>Uday Vunnam</dc:creator>
      <pubDate>Wed, 26 Jun 2019 17:56:18 +0000</pubDate>
      <link>https://dev.to/udayvunnam/be-the-thanos-of-your-angular-library-11oe</link>
      <guid>https://dev.to/udayvunnam/be-the-thanos-of-your-angular-library-11oe</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Essential checklist and best practices for beginners in creating and releasing your first Angular library&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are planning to create a library, don't wait. The time is now. The current open source tools make everything so seamless. Below are the steps I followed to release my first library. As we go along, you can check the &lt;a href="https://github.com/udayvunnam/xng-breadcrumb" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; for reference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plan your library&lt;/li&gt;
&lt;li&gt;Setup Angular workspace for library and it's demo app&lt;/li&gt;
&lt;li&gt;Empathize with your users and fellow developers&lt;/li&gt;
&lt;li&gt;Configure CICD&lt;/li&gt;
&lt;li&gt;Announce it to the world&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  ✅Plan your Library
&lt;/h1&gt;

&lt;p&gt;Have a simple design of how the library works and the contract it provides.&lt;/p&gt;

&lt;p&gt;The usual prefixes for Angular are &lt;code&gt;ng&lt;/code&gt; or &lt;code&gt;ngx&lt;/code&gt;(Say no to ng2, ng4, ng7, etc. They seem tied to a specific version). &lt;code&gt;ng&lt;/code&gt; and &lt;code&gt;ngx&lt;/code&gt; prefixes are taken for most of the libraries of Angular, so I have used &lt;code&gt;xng&lt;/code&gt; prefix. &lt;/p&gt;

&lt;p&gt;After choosing the name of your library, create a simple folder with package.json and publish it to npm under your account. Follow the &lt;a href="https://docs.npmjs.com/creating-and-publishing-unscoped-public-packages" rel="noopener noreferrer"&gt;guide to publish npm packages with basic setup&lt;/a&gt;. (This ensures package name is available and your ownership of it).  You can even use scoped packages &lt;a class="mentioned-user" href="https://dev.to/scope"&gt;@scope&lt;/a&gt;/package-name if the regular package name of your wish isn't available.&lt;/p&gt;

&lt;p&gt;Try to create a unique library that can do any of the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;makes a particular task easy &lt;/li&gt;
&lt;li&gt;provides a configurable solution&lt;/li&gt;
&lt;li&gt;tweaks a functionality&lt;/li&gt;
&lt;li&gt;offers a visual UI component&lt;/li&gt;
&lt;li&gt;simplifies a process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Library API design - The right things have to be the defaults of your library. We don't need the user specifying the redundant configuration, which otherwise is a default.&lt;/p&gt;

&lt;p&gt; &lt;br&gt;
I have planned xng-breadcrumb with the following API design -&lt;/p&gt;

&lt;p&gt;1) Add breadcrumb selector in html, wherever the user wants to show breadcrumbs.&lt;/p&gt;

&lt;p&gt;2) Show default breadcrumb same as the path, if no configuration is provided. The user just needs to add &lt;code&gt;&amp;lt;breadcrumb&amp;gt;&amp;lt;/breadcrumb&amp;gt;&lt;/code&gt; for a quick start.&lt;/p&gt;

&lt;p&gt;3) Declarative: Add a custom label to a route by directly defining it in route configuration of App.&lt;/p&gt;

&lt;p&gt;4) Dynamic: provide a service to update a route label lazily. Ex: In product details page we show product id in URL but want to show product name in the breadcrumb, which is fetched asynchronously from a server.&lt;/p&gt;

&lt;p&gt;5) Skip specific path from displaying in the breadcrumb. Come path even though it appears in URL has no meaning in the breadcrumb. We have to provide a way to hide it.&lt;/p&gt;

&lt;p&gt;Start with releasing useful features first and iterate from user feedback and feature requests.&lt;/p&gt;
&lt;h1&gt;
  
  
  ✅Setup Angular library and a demo app
&lt;/h1&gt;

&lt;p&gt;With Angular CLI you are just a few commands away from setting up a library and a demo app. You can test your library usage along with the demo app. Thanks to Angular CLI 😍.&lt;/p&gt;

&lt;p&gt;You have already chosen a unique name for your library. For me, it is &lt;code&gt;xng-breadcrumb&lt;/code&gt;. Below are the basic commands for initiating an Angular workspace with a library and its demo app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;ng&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;xng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;breadcrumb&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;createApplication&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;ng&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt; &lt;span class="nx"&gt;xng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;breadcrumb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;scss&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;ng&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="nx"&gt;library&lt;/span&gt; &lt;span class="nx"&gt;xng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;breadcrumb&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;xng&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dist&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;xng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;breadcrumb&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="nx"&gt;xng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;breadcrumb&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ng new xng-breadcrumb --createApplication=false&lt;/code&gt; generates a blank Angular workspace. If createApplication is not false, the unique library name is actually applied to demo app and later you would need to rename it in angular.json. To avoid this just start as above. We can create both the library and demo apps under the projects folder in the next steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ng g application xng-breadcrumb-app --style=scss&lt;/code&gt; creates a demo app under projects, for testing your library alongside the app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ng g library xng-breadcrumb --prefix=xng&lt;/code&gt; creates a library inside the projects folder with all the necessary build and packaging steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;git init&lt;/code&gt; inside the workspace to move it to a git repo, so that you can track everything from the start.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;During development, run &lt;code&gt;npm link&lt;/code&gt; inside the compiled project folder (./dist/library) and &lt;code&gt;npm link library-name&lt;/code&gt; at the project root. &lt;code&gt;npm link&lt;/code&gt; symlinks compiled package folder to the npm package and any changes you make to the library reflects immediately in the demo app.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;xng-breadcrumb's &lt;a href="https://xng-breadcrumb.netlify.com" rel="noopener noreferrer"&gt;demo app&lt;/a&gt; to showcase library usage-&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eg9f21ekr2bozjt0506.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eg9f21ekr2bozjt0506.gif" width="600" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅Empathize with your users and fellow developers
&lt;/h1&gt;

&lt;p&gt;No matter how great your library is, people, won't use it unless you provide good documentation so, provide a README with -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Quick Start&lt;/em&gt; - The simplest way possible to use your library. Make it as easy as it can be to start with your library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Usage and API&lt;/em&gt; -library API,  features and common patterns of doing usual things should be documented. Good documentation can save a lot of time for users. They don't have to dig deep into the code or choose an additional library or implement a custom solution when its already offered with the library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Demo URL&lt;/em&gt;  - provide a playground of your working library within an App.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Development guide&lt;/em&gt;, &lt;em&gt;Contribution guidelines&lt;/em&gt; will look welcoming for other developers to contribute.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Badges&lt;/em&gt; - Add badges to show deployment status, test status, release version, and other repo activities&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A clear license gives the confidence to use your library. MIT is the defacto standard for opensource. To know the importance of licensing read &lt;a href="https://thenextweb.com/dd/2017/09/25/facebook-re-licenses-react-mit-license-developer-backlash/" rel="noopener noreferrer"&gt;React's license change from its own custom license to MIT after developer backlash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schematics
&lt;/h2&gt;

&lt;p&gt;Provide Schematics to the library(specific to Angular). Users can easily use &lt;code&gt;ng add&lt;/code&gt; to include a base version of your library into their project.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;xng-breadcrumb&lt;/code&gt; schematic on &lt;code&gt;ng add&lt;/code&gt; will do the following.&lt;/p&gt;

&lt;p&gt;1) Installs and adds the library to package.json&lt;/p&gt;

&lt;p&gt;2) Imports the &lt;code&gt;BreadcrumbModule&lt;/code&gt; to root Module.&lt;/p&gt;

&lt;p&gt;3) Places &lt;code&gt;&amp;lt;breadcrumb&amp;gt;&amp;lt;/breadcrumb&amp;gt;&lt;/code&gt; tag at root html.&lt;/p&gt;

&lt;p&gt;4) Auto updates library with ng update.&lt;/p&gt;

&lt;p&gt;There is already great documentation from Angular on &lt;a href="https://angular.io/guide/schematics-authoring" rel="noopener noreferrer"&gt;Schematic authoring&lt;/a&gt; and &lt;a href="https://angular.io/guide/creating-libraries" rel="noopener noreferrer"&gt;Library creation&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅Configure CICD
&lt;/h1&gt;

&lt;p&gt;CICD is the norm of software development. Automate everything -linting, build, tests, publishing to npm and demo app deployment. You only have to set it up once to make life easier. Test your code but not the users :)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Prettier&lt;/em&gt; and &lt;em&gt;Husky&lt;/em&gt; for linting automatically on git commit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;CircleCI&lt;/em&gt; or &lt;em&gt;Travis&lt;/em&gt; for configuring CICD&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Netlify&lt;/em&gt; for hosting demo App&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;xng-breadcrumb is configured with below steps using &lt;a href="https://github.com/udayvunnam/xng-breadcrumb/blob/master/.circleci/config.yml" rel="noopener noreferrer"&gt;CircleCI&lt;/a&gt; and demo app is hosted on &lt;a href="https://xng-breadcrumb.netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;1) &lt;em&gt;build&lt;/em&gt; and &lt;em&gt;test&lt;/em&gt; every commit of every branch.&lt;/p&gt;

&lt;p&gt;2) &lt;em&gt;deploy&lt;/em&gt; demo app(&lt;code&gt;netlify deploy&lt;/code&gt;) only if the code is pushed or PR is merged to the master branch. build and tests should succeed to deploy.&lt;/p&gt;

&lt;p&gt;3) &lt;em&gt;publish&lt;/em&gt; to npm(&lt;code&gt;npm publish&lt;/code&gt;), whenever a new release is tagged in the repo using &lt;code&gt;git tag vX.Y.Z&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅Announce it to the world
&lt;/h1&gt;

&lt;p&gt;You have put in a lot of effort. Now it's time to showcase it to the world for use. Announce it on LinkedIn, Twitter, Reddit and any platform with your target audience.&lt;/p&gt;

&lt;p&gt;Be open about contributions, bug fixes, and feature requests.&lt;/p&gt;

&lt;p&gt;Once your library is found useful and attains enough users, Google takes care of rest.&lt;/p&gt;




&lt;p&gt;If you plan to add breadcrumbs to your Angular project, try &lt;a href="https://github.com/udayvunnam/xng-breadcrumb" rel="noopener noreferrer"&gt;xng-breadcrumb&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Check the &lt;a href="https://github.com/udayvunnam/xng-breadcrumb" rel="noopener noreferrer"&gt;Git repo&lt;/a&gt;, if you wish to create an Angular library with complete setup. Contributions, issues, and feature requests are welcome.&lt;/p&gt;

&lt;p&gt;Anything you would like to let me know? connect via &lt;a href="https://www.linkedin.com/in/udayvunnam/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://twitter.com/codeasync" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: I have cross-posted this article at &lt;a href="https://medium.com/@udayvunnam/https-medium-com-udayvunnam-be-the-thanos-of-your-angular-library-320f93ddc9ec" rel="noopener noreferrer"&gt;medium.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
