<?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: Sayan</title>
    <description>The latest articles on DEV Community by Sayan (@sayan11).</description>
    <link>https://dev.to/sayan11</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%2F409270%2F06b5c99c-9334-46b1-8251-0b557c0ed91b.jpg</url>
      <title>DEV Community: Sayan</title>
      <link>https://dev.to/sayan11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sayan11"/>
    <language>en</language>
    <item>
      <title>How to Python (and programming in general)</title>
      <dc:creator>Sayan</dc:creator>
      <pubDate>Mon, 06 Jul 2020 20:53:33 +0000</pubDate>
      <link>https://dev.to/sayan11/how-to-python-and-programming-in-general-54ag</link>
      <guid>https://dev.to/sayan11/how-to-python-and-programming-in-general-54ag</guid>
      <description>&lt;p&gt;My first encounter with Python came in the break between my first and second semester of engineering. I was desperate to learn some cool skills to show off on my resume and almost everybody I knew recommended learning Python to me. At first, I was awestruck with all kind of things you could do with a single tool - wrangling data, websites, making games, and all other stuff. However, after a while of struggling through Python tutorials in my first attempt, I gave up and didn't even touch programming for at least half a year. &lt;/p&gt;

&lt;p&gt;Here's what went wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) No clear motive
&lt;/h3&gt;

&lt;p&gt;Ask yourself why do you want to learn to code? Is it to implement a project idea? Is it a requirement for your job? Or maybe something else which is compelling enough to keep you motivated. If you simply dive in without any concrete aim in your mind, you'll end up like me when I first started. I had no clear picture of why I wanted to code apart from the fact it seemed &lt;em&gt;cool&lt;/em&gt; to me, and for some reason, I picked up a Django tutorial to be my gateway to the world of programming. This was a gross mistake which brings us to the second point.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Zero groundwork
&lt;/h3&gt;

&lt;p&gt;It is not advisable to write code without learning the basics first. The theory has to precede the practical unless you don't care about actual learning and no, you will not pick up everything as you copy-paste the code mindlessly. &lt;br&gt;
I didn't know how to write even pseudo-code and I had zero knowledge of how websites worked as I shamelessly imported Django all over my code without having an ounce of idea on what I was doing. In the end, I managed to finish up the project, but when asked to explain how it worked? I couldn't come up with anything. &lt;/p&gt;

&lt;p&gt;My second homecoming to Python.&lt;/p&gt;

&lt;p&gt;After around 6 months of sabbatical from coding, I started exploring ideas and products instead of what languages to learn to put on my resume. I stumbled upon a couple of GitHub repos of projects based on machine learning and I got an idea of appending more components to them. &lt;/p&gt;

&lt;p&gt;That's when I first got into machine learning and after some dabbling, I started the famous Andrew Ng Machine Learning course on Coursera. I was finally learning the basics this time. While doing the course, I was always looking to relate the lectures with my personal objectives. I tinkered with the code with an aim this time around and finally amended the mistakes I had made earlier. &lt;/p&gt;

&lt;p&gt;Later in my sophomore year, I did a project where I had to build a prototype software which required me to learn computer vision. This was an immense boost to my programming journey because I had a specific target set in my mind. It was no more about looking &lt;em&gt;cool&lt;/em&gt; or whatever, it was about delivering a tangible result.&lt;/p&gt;

&lt;p&gt;Programming is overwhelming and the reason most beginners quit after a first few videos on the tutorial is not that they're lazy, but because they don't see a point of continuing once they get the "feel" of it. There is no intrinsic factor that tells them to carry on even if they don't feel like it.&lt;/p&gt;

&lt;p&gt;Are you getting into programming for superficial reasons? Think again.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>How to newsletter - the right way</title>
      <dc:creator>Sayan</dc:creator>
      <pubDate>Fri, 03 Jul 2020 13:31:43 +0000</pubDate>
      <link>https://dev.to/sayan11/how-to-newsletter-the-right-way-683</link>
      <guid>https://dev.to/sayan11/how-to-newsletter-the-right-way-683</guid>
      <description>&lt;p&gt;&lt;strong&gt;Newsletters&lt;/strong&gt; - this term rings a bell to everyone. For most of us, it's that spammy service we had signed up for, lost interest in a while, and now we're too lazy to press that elusive unsubscribe link on the email footer. &lt;/p&gt;

&lt;p&gt;Newsletters are dying. And unless we do something to revive them, they will vanish for good. In the following read, I have explored three possible reasons for why this is happening and further you'll see how a different perspective can make newsletters a handy thing to have in your product line.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) The Purpose ❓
&lt;/h3&gt;

&lt;p&gt;Most startups/firms use newsletters as a channel to deliver curated content to their users. That's a good gesture, but sometimes, the &lt;strong&gt;content we curate isn't exactly what the reader might be expecting to read&lt;/strong&gt;. "Good and engaging content" is a subjective term. For instance, I signed up for a bunch of finance newsletters to learn about stock markets. It was all good for a while until they started shooting content that was too technical and I lost my motivation to read. &lt;/p&gt;

&lt;h3&gt;
  
  
  2) The Time ⌚
&lt;/h3&gt;

&lt;p&gt;The key demographic for newsletters consist of people who are consultants, product managers, entrepreneurs, programmers, and students. Apart from a strong likelihood of signing up for your newsletters, what else do they have in common? They have very busy schedules. Now imagine dropping your beautifully designed and meticulously curated newsletter right in the middle of their &lt;strong&gt;work hours&lt;/strong&gt;. Will, they read it at that moment? No. Will, they read it later? No. Several other emails would've stacked on top of your newsletter. You clearly deserve better for your efforts.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) The Incentive 🎁
&lt;/h3&gt;

&lt;p&gt;If &lt;em&gt;knowledge and information&lt;/em&gt; is the sole value proposition of your newsletter, then you are in for a rough ride. As humans, we tend to overestimate ourselves and make impractical promises while signing up for something new. Soon, the complacency kicks in and we lose our motivation. Same happens with newsletters. People simply don't want to read anymore. &lt;strong&gt;There is not enough incentive&lt;/strong&gt; to open my cluttered inbox and engage with something that doesn't add any immediate value in my live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's rethink - A case of Netsips 🍎
&lt;/h3&gt;

&lt;p&gt;At &lt;a href="https://chrome.google.com/webstore/detail/netsips/gbahaeoliekjdeaklngijenopidoifhc"&gt;Netsips&lt;/a&gt;, we approached newsletters in a different way. Rather than a channel of communication, our newsletter serves as a tool to remind users of their bookmarks. &lt;strong&gt;We compile all the content you have saved over a period of time&lt;/strong&gt; and send it to you in both email and PDF format. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J0CSocKR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.techpowerup.org/200703/untitled-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J0CSocKR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.techpowerup.org/200703/untitled-1.png" alt="Netsips newsletter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Users curate their &lt;strong&gt;own newsletter&lt;/strong&gt; through Netsips extension. They know what they want to read.&lt;/p&gt;

&lt;p&gt;✅ Users can &lt;strong&gt;select the day and time&lt;/strong&gt; to receive their newsletters. &lt;br&gt;
Want something to go with your Sunday morning coffee? How about things you wanted to read over the week but didn't have time to do so.&lt;/p&gt;

&lt;p&gt;✅ The value-added isn't just &lt;em&gt;knowledge&lt;/em&gt;, but also a luxury to save things for later and actually get back to them. The PDF format also ensures that you can &lt;strong&gt;read the content offline without any distractions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The concept of newsletters might seem beaten up, but when put to use in the right way, it can be a wonderful asset to have.&lt;/p&gt;

&lt;p&gt;Thanks for making it this far! Hope you liked it. &lt;/p&gt;

</description>
      <category>startup</category>
      <category>productivity</category>
      <category>ux</category>
      <category>newsletters</category>
    </item>
    <item>
      <title>How Chrome extensions work</title>
      <dc:creator>Sayan</dc:creator>
      <pubDate>Thu, 02 Jul 2020 14:21:10 +0000</pubDate>
      <link>https://dev.to/sayan11/how-chrome-extensions-work-54bo</link>
      <guid>https://dev.to/sayan11/how-chrome-extensions-work-54bo</guid>
      <description>&lt;p&gt;Even after a year of web dev experience, a browser extension was a complete black box to me when I first started building &lt;a href="https://chrome.google.com/webstore/detail/netsips/gbahaeoliekjdeaklngijenopidoifhc/related"&gt;Netsips&lt;/a&gt;. Even though I had survived some really tough projects in the past, Netsips proved out to be quite a challenge.&lt;/p&gt;

&lt;p&gt;The idea was to create a Chrome Extension which not only saves bookmarks (which includes Metadata of the webpage) but also stores it securely in a database for sending email compilation to the users. &lt;/p&gt;

&lt;p&gt;Most of the tutorials I could find didn't involve any backend operations as I wanted and the official documentation isn't all that clear. However, as they say - Good things are hard to come by. Step by step and after multiple iterations of trial and error - I finally built the current version of Netsips loaded with a decent set of features and functionality you won't find them implementing on tutorials.&lt;/p&gt;

&lt;p&gt;Let's discuss the key components of a browser extension? I remember how perplexed I was when I first started this project. I couldn't even figure what code to put in what file and made a complete mess.  &lt;/p&gt;

&lt;h3&gt;
  
  
  1) The Popup
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;page_action&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default_popup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;popup.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h1YvBEkb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/images/popup_1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h1YvBEkb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/images/popup_1.png" alt="popup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A popup is the most recognizable component in a browser extension. It's also the component interfaces with the user most frequently. Essentially it's a traditional web page which is smaller in dimension and is loaded when you click on the extension icon. The popup cannot interact with the webpages directly and neither can perform any background actions. It is only meant to perform actions local to your extension. &lt;/p&gt;

&lt;p&gt;In Netsips' case, the popup is the interface through which the user can save bookmarks.&lt;/p&gt;

&lt;p&gt;Due to most browsers enforcing a very strict CSP, inline scripting is not allowed on popup's HTML files. So, you better be comfortable with event listeners before starting a browser plugin project.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) The Content Script
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="p"&gt;...&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content_scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;contentScript.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;],&lt;/span&gt;
 &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This is the script which lets you interact with the web pages that are currently open on user's browsers. You can fetch data, manipulate the web pages, and send the response to other pages in the extension package (popup and background scripts) in the form of messages. Content scripts are dependent on the permissions you declare in your manifest file and can be injected programmatically or declaratively (When extension needs to interact with web pages with a specific URL pattern).&lt;/p&gt;

&lt;p&gt;In Netsips, the content script does the fetching of Metadata (title and URL) of the webpage you intend to save by clicking on the button on the popup window.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) The Background Script
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As the name suggests, this script is always running behind the scenes, doing jobs independent of the content and popup scripts. You can use this script to initialize databases, manage between the sessions, check login status, override tabs, make context menus, and invoke OAuths to name a few. The background script is analogous to a central control of the things going on in your extension and will further assert itself as such if you choose to do more complex operations with your plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  BONUS - The Local Storage
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;permissions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;storage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
       &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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



&lt;p&gt;As a developer, efficiently managing the state your app between the sessions is a challenge. The LocalStorage API is always there, but its limitations (only string data and synchronous nature) overwhelms its simplicity. Chrome Storage API is an excellent alternative as it provides asynchronous data handling, enables read/write operations on data types other than a string, and can sync up data between users' devices if enabled. Learning to implement the chrome local storage API isn't a choice, but a necessity when you are building a Chrome Extension. &lt;/p&gt;

&lt;p&gt;Browser plugins are fun things to build and even though they don't receive the buzz they deserve, their usability is unparalleled. If you're someone whose browser has replaced their desktop home screen, you should totally check out web stores for cool plugins which will enhance your productivity (A good start would be &lt;a href="https://chrome.google.com/webstore/detail/netsips/gbahaeoliekjdeaklngijenopidoifhc/related"&gt;Netsips&lt;/a&gt; :3).&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>chrome</category>
      <category>extensions</category>
    </item>
    <item>
      <title>A different bookmark management tool</title>
      <dc:creator>Sayan</dc:creator>
      <pubDate>Wed, 01 Jul 2020 18:00:25 +0000</pubDate>
      <link>https://dev.to/sayan11/a-different-bookmark-managing-tool-3nk5</link>
      <guid>https://dev.to/sayan11/a-different-bookmark-managing-tool-3nk5</guid>
      <description>&lt;p&gt;Bookmarking content on the web is not a new thing and there are so many third-party apps already doing that. However, most people I know, do not use them or choose to use makeshift methods like copy-pasting URLs somewhere on their PC and mobile. &lt;/p&gt;

&lt;p&gt;The reason behind this?&lt;/p&gt;

&lt;p&gt;These bookmarking tools do nothing to ensure that you actually visit the content you have saved. They focus on the saving part, while &lt;strong&gt;completely ignoring the retaining part of the process&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;For this, I have built a chrome extension called - &lt;strong&gt;Netsips&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What Netsips does differently that once you bookmark content, it ensures that it is shown to you later like you intended to. &lt;/p&gt;

&lt;p&gt;How?&lt;/p&gt;

&lt;h3&gt;
  
  
  1) You save the articles using Netsips extension.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NaCNxSxb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/cws1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NaCNxSxb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/cws1.png" alt="Save"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2) You choose the day(s) you want to be reminded of them
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o0OuJg5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/settings_pic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o0OuJg5g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/settings_pic.png" alt="Select"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3) You receive a compilation of all your bookmarks in a PDF format in your email
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4fN9C8do--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/cws3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4fN9C8do--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://netsips.in/cws3.png" alt="Receive PDF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you can create and read your reading list in a PDF format, whenever you want without any ads bothering you! Consume the content while it's still relevant. &lt;/p&gt;

&lt;p&gt;Moreover, Netsips also provides you with a bookmark management dashboard so you can organize and manage your bookmarks much better. &lt;/p&gt;

&lt;p&gt;To check out Netsips -&amp;gt; &lt;a href="https://chrome.google.com/webstore/detail/netsips/gbahaeoliekjdeaklngijenopidoifhc"&gt;Chrome Web Store&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>extension</category>
      <category>chrome</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
