<?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: Aditya Mitra</title>
    <description>The latest articles on DEV Community by Aditya Mitra (@adityamitra).</description>
    <link>https://dev.to/adityamitra</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%2F255490%2F67b323a3-69b7-4560-b967-b520746cce57.jpeg</url>
      <title>DEV Community: Aditya Mitra</title>
      <link>https://dev.to/adityamitra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adityamitra"/>
    <language>en</language>
    <item>
      <title>Speeding up tests by partitioning</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Wed, 19 Mar 2025 13:14:40 +0000</pubDate>
      <link>https://dev.to/adityamitra/speeding-up-tests-by-partitioning-5bjo</link>
      <guid>https://dev.to/adityamitra/speeding-up-tests-by-partitioning-5bjo</guid>
      <description>&lt;p&gt;This post is on a practical tip on how to speed up your tests for CI pipelines. If you already followed your framework's official guide and added in the mentioned configurations or flags, this might be useful for you.&lt;/p&gt;

&lt;p&gt;The partitioning of the tests works across any testing framework. How does this work? &lt;strong&gt;Basically you split the test files into 2 or more sets&lt;/strong&gt;. The splitting can be done equally. Or a longer running test can be on one set and the rest on another. It can be any combination which helps you decrease the time on CI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Show me the code
&lt;/h3&gt;

&lt;p&gt;Lets assume you are using GitHub Actions and vitest and have split your tests into 2 partitions.&lt;/p&gt;

&lt;p&gt;On GitHub actions, you specify 2 jobs to run on parallel. One of them runs the first partition and the other runs the second. You can use a simple environment variable to indicate which partition is going to be run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;test_server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;partition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="c1"&gt;# rest of the workflow config&lt;/span&gt;
    &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run test&lt;/span&gt;
       &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;PARTITION&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.partition }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you will need to indicate which files you want to run on which partition. A simple way to do this would be to include specific tests to run on the first partition and the remaining to run on the second partition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vitest/config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Config&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./vitest.base.config.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paritionedFileNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/{analytics,media,social}/**/*.test.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;paritionedConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserConfig&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PARTITION&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;paritionedConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;test&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;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;paritionedFileNames&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;paritionedConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;test&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;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;exclude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;paritionedFileNames&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;paritionedConfig&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why does this work?
&lt;/h3&gt;

&lt;p&gt;Because we want to run them on parallel. The CI runners happen to be less powerful than our development machine in most cases. Most have a single or dual core CPU which make the testing jobs to run longer. &lt;br&gt;
However, most environments allow you to spawn as many virtual runners you want for the mentioned jobs. You can take advantage of this by running them on parallel.&lt;/p&gt;

&lt;p&gt;So now instead of your job taking 10 minutes, it will take 5 minutes if you have split it across 2 runners.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work?
&lt;/h3&gt;

&lt;p&gt;Yes it does.&lt;/p&gt;

&lt;p&gt;It used to take around 9 minutes to run this test.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26of3kwfv36q9dx3i5r9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26of3kwfv36q9dx3i5r9.png" alt="Before" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After partitioning, it takes around 5 minutes to run the same test.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vosz935az1bg46t0bhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vosz935az1bg46t0bhj.png" alt="After" width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading all the way and hope you found it useful. Feel free to discuss further optimization techniques you have used and suggest me to implement.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>monetize-files</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Mon, 15 Jun 2020 05:48:30 +0000</pubDate>
      <link>https://dev.to/adityamitra/monetize-files-3bb5</link>
      <guid>https://dev.to/adityamitra/monetize-files-3bb5</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Web Monetization is really cool.&lt;br&gt;
I came up with an idea that how existing content creators could add web-monetization to all their websites/projects.&lt;/p&gt;

&lt;p&gt;Adding the &lt;em&gt;monetization meta tag&lt;/em&gt; is simple, but it can be &lt;strong&gt;tiring&lt;/strong&gt; to add it one-by-one to all your projects and webpages by opening them and add the tag.&lt;/p&gt;

&lt;p&gt;With the &lt;a href="https://www.npmjs.com/package/monetize-files" rel="noopener noreferrer"&gt;monetize-files&lt;/a&gt; command-line tool, you can do it in just &lt;strong&gt;one simple command&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
npm install -g monetize-files&lt;br&gt;
cd your_project&lt;br&gt;
monetize-files -w 'wallet address&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Really, that's it!&lt;br&gt;
&lt;em&gt;monetize-files&lt;/em&gt; will figure out the &lt;em&gt;html&lt;/em&gt; files by default and add that &lt;em&gt;monetization meta tag&lt;/em&gt; to that file. You can also use other filetypes like pug or ejs if you want.&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/monetize-files" rel="noopener noreferrer"&gt;monetize-files&lt;/a&gt; falls into the category of &lt;strong&gt;Foundational technology.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1ivTPD8FUKRrRZjVfOleTIUht8_-_jtxb" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1ivTPD8FUKRrRZjVfOleTIUht8_-_jtxb" alt="working" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it to quickly get started with &lt;em&gt;monetize-files&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you want you can customize &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which filetype will it monetize&lt;/li&gt;
&lt;li&gt;which folder and its contents will it exclude from being monetized&lt;/li&gt;
&lt;li&gt;run it as dev-dependency for your project instead of a global dependency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these customization can be found &lt;a href="https://github.com/aditya-mitra/monetize-files#customization" rel="noopener noreferrer"&gt;here&lt;/a&gt; on the &lt;a href="https://github.com/aditya-mitra/monetize-files" rel="noopener noreferrer"&gt;github repo&lt;/a&gt;.&lt;br&gt;
Go on have a look ;) &lt;/p&gt;
&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;

&lt;p&gt;The code for this tool can be found here on GitHub:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aditya-mitra" rel="noopener noreferrer"&gt;
        aditya-mitra
      &lt;/a&gt; / &lt;a href="https://github.com/aditya-mitra/monetize-files" rel="noopener noreferrer"&gt;
        monetize-files
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      CLI tool to web-monetize files
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;monetize-files&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;monetize-files is a CLI tool that helps you add web monetization tags
It adds the &lt;em&gt;monetization meta tag&lt;/em&gt;  to all the files (of the desired extension) within the selected folder and its subfolders.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To get monetize-files in your system, you may use and configure it as a global package:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install -g monetize-files&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can also add it as a dev-dependency to your project (&lt;em&gt;but this may require you to add the monetize script to your package.json&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install --save-dev monetize-files&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To get a quick help at the command line for the &lt;em&gt;monetize-files&lt;/em&gt; CLI tool, you can execute:
&lt;code&gt;monetize-files -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It will show you a list of options that you can pass as arguments to the CLI tool&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/eb4660a32e8eac25235877819d89a51099b61447f2b7d5a58397ed49754d2d21/68747470733a2f2f64726976652e676f6f676c652e636f6d2f75633f69643d316f736f74655f69515063626e5676753661677749394a4235336f783234726a71"&gt;&lt;img src="https://camo.githubusercontent.com/eb4660a32e8eac25235877819d89a51099b61447f2b7d5a58397ed49754d2d21/68747470733a2f2f64726976652e676f6f676c652e636f6d2f75633f69643d316f736f74655f69515063626e5676753661677749394a4235336f783234726a71" alt="help image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Quickstart&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Once you are inside the folder where you want to web-monetize your desired files, you execute:
&lt;code&gt;monetize-files -w 'your wallet address'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will simply add the…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aditya-mitra/monetize-files" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;All contributions are welcome! :D&lt;/p&gt;

&lt;p&gt;If you find a issue, you can submit the issue on this repo or simply by &lt;a href="https://github.com/aditya-mitra/monetize-files/issues/new" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;I have used &lt;strong&gt;JavaScript&lt;/strong&gt; entirely to built this simple CLI tool.&lt;br&gt;
However, my package has one dependency on &lt;a href="https://yargs.js.org/" rel="noopener noreferrer"&gt;yargs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Basically, &lt;em&gt;monetize-files&lt;/em&gt; takes input from the command line through &lt;a href="https://yargs.js.org/" rel="noopener noreferrer"&gt;yargs&lt;/a&gt;, figures out the files and directories to be scanned using and makes changes to these files using &lt;a href="https://nodejs.org/api/fs.html" rel="noopener noreferrer"&gt;fs&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;The tool can be found &lt;a href="https://www.npmjs.com/package/monetize-files" rel="noopener noreferrer"&gt;here&lt;/a&gt; on npmjs.&lt;/p&gt;

&lt;p&gt;I really enjoyed building this and liked this hackathon. ;D&lt;/p&gt;

</description>
      <category>gftwhackathon</category>
      <category>webmonetization</category>
    </item>
    <item>
      <title>Get started with Git</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Fri, 08 May 2020 14:16:03 +0000</pubDate>
      <link>https://dev.to/adityamitra/get-started-with-git-afi</link>
      <guid>https://dev.to/adityamitra/get-started-with-git-afi</guid>
      <description>&lt;h1&gt;
  
  
  How to search for issues
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Search for tags such as beginner, low-hanging fruit, low-priority, up-for-grabs&lt;/li&gt;
&lt;li&gt;If the org doesn't have labels on it then go for issues that have less discussion and comments in it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How to search for resolving the issue
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;First check in which all files does the issue has connection with&lt;/li&gt;
&lt;li&gt;Use grep for searching through the files&lt;/li&gt;
&lt;li&gt;Read the portion of documentation where the issue has connection with&lt;/li&gt;
&lt;li&gt;Google search through and check stack-overflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Now, let's solve a real-world issue.
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Search for relevant projects and join the community
&lt;/h1&gt;

&lt;p&gt;Search for relevant projects on GitHub based on your skills. You can use GitHub Explore for this purpose or sign-up for Code Triage to get an email on a different issue every day.&lt;/p&gt;

&lt;p&gt;While choosing a project to start on, look for a project that is actively maintained (loads of commits) and has a lot of issues. Once you have found your relevant projects, Star &amp;amp; Fork the project, subscribe to its mailing list and slack channel. This is the best way to get help if you are stuck in setting up the project or making your first contribution.&lt;/p&gt;

&lt;h1&gt;
  
  
  Play with software(Find bugs)
&lt;/h1&gt;

&lt;p&gt;Explore existing issues&lt;br&gt;
Help explore documentation&lt;br&gt;
Suggest new features&lt;/p&gt;

&lt;h1&gt;
  
  
  - Introduction about Git Workflows
&lt;/h1&gt;

&lt;p&gt;A Git Workflow is the best way to work with git locally and on cloud without messing up the branches or creating merge conflicts.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Git Workflow I follow :
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;git fetch --all --prune&lt;/li&gt;
&lt;li&gt;git co master&lt;/li&gt;
&lt;li&gt;git reset --hard upstream/master&lt;/li&gt;
&lt;li&gt;git push origin master/specified branch&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Thank You
&lt;/h1&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>beginners</category>
    </item>
    <item>
      <title>WhatsTer - The ChatBot I built for TwilioHackathon</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Sat, 02 May 2020 18:39:55 +0000</pubDate>
      <link>https://dev.to/adityamitra/whatster-the-chatbot-i-built-for-twilio-9ok</link>
      <guid>https://dev.to/adityamitra/whatster-the-chatbot-i-built-for-twilio-9ok</guid>
      <description>&lt;p&gt;I really felt that the post for the &lt;strong&gt;twiliohackathon&lt;/strong&gt; was &lt;em&gt;insufficient&lt;/em&gt; and hard to &lt;em&gt;understand&lt;/em&gt;. My friends told that they liked the bot and the webapp. They encouraged me to write full blog post on it. Since I had very less time to write a full article on it before the hackathon was to end, I wrote it now. (Yeah, I finished completing the project it in the last moment! :P)&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/adityamitra" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F255490%2F67b323a3-69b7-4560-b967-b520746cce57.jpeg" alt="adityamitra"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/adityamitra/whatster-bot-a-multifunction-bot-that-i-built-for-the-twilio-hackathon-35dp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;WhatsTer Bot - A multifunction bot that I built for the Twilio Hackathon&lt;/h2&gt;
      &lt;h3&gt;Aditya Mitra ・ May 1 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#whatster&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#whatsappbot&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#twiliohackathon&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;I am not good with emojis but I have tried used them !&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;What is it?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D146B6JvPQEj2zlLsZGHVa468HwT5ohv4w" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D146B6JvPQEj2zlLsZGHVa468HwT5ohv4w" alt="brand" width="195" height="43"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="//whatster.web.app"&gt;WhatsTer&lt;/a&gt; is a Chat bot created using &lt;a href="https://www.twilio.com/docs/whatsapp/api" rel="noopener noreferrer"&gt;Twilio's Messaging API for Whatsapp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This bot is very useful when you want to :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Synchronize your data between your whatsapp messenger and a personal account of yours (where you can view them)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Want to know what's there in an image (Image Recognition)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mail to any email recipent from from your WhatsApp Messenger&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Laugh at some jokes!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;GET STARTED&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;To start using Whatster, first you need to join my twilio sandbox.&lt;br&gt;
You can easily do this just by &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=join%20decide-wish" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt; or by texting &lt;strong&gt;join decide-wish&lt;/strong&gt; to +1(415)523-8886.&lt;/p&gt;

&lt;p&gt;Now &lt;strong&gt;type&lt;/strong&gt; &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=hi" rel="noopener noreferrer"&gt;hi&lt;/a&gt; to see what it can do for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1L5bgx1_5jU9oBNmD_Toyo06qy7kD0Yfh" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1L5bgx1_5jU9oBNmD_Toyo06qy7kD0Yfh" alt="what it can do for you" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now type &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=login" rel="noopener noreferrer"&gt;login&lt;/a&gt; to get an &lt;em&gt;OTP&lt;/em&gt; from the bot.&lt;br&gt;
Use this OTP to login to the whatster account. Visit the &lt;a href="//whatster.web.app"&gt;whatster&lt;/a&gt; website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D197KNKbNThz8JkNfTD-moc6uadWp5rmme" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D197KNKbNThz8JkNfTD-moc6uadWp5rmme" alt="whatster website login page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be logged in!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Important. The above steps are very IMPORTANT and highly recommended before you start sending messages to the bot&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;How to use it?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I will explain all the functions this bot can perform one by one.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Saving messages and Getting them&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;If you send messages to &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=join%20decide-wish" rel="noopener noreferrer"&gt;this&lt;/a&gt; chat, it will be automatically saved to your account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important - *You have to &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=login" rel="noopener noreferrer"&gt;login&lt;/a&gt; at least once to the &lt;a href="//whaster.web.app"&gt;Whatster App&lt;/a&gt; to start saving messages&lt;/strong&gt;*&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;pssst! Quick Start&lt;/em&gt;---&amp;gt;  &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=send%20this%20message%20to%20start%20saving%20it" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;Type in the chat&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1mV6JS9MMkAXYYKMpwwNDO0y3Q5YdXLoE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1mV6JS9MMkAXYYKMpwwNDO0y3Q5YdXLoE" alt="demo 1" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Get it in the &lt;a href="https://web.whatster.app" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D135fLK6LjlF6k7W6YjEpRazQBPyT0wWEP" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D135fLK6LjlF6k7W6YjEpRazQBPyT0wWEP" alt="demo 2" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It even works when you FORWARD any message or media to it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1BKr2XQEfPoQewatsbwnIXG2ugXtePtC1" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1BKr2XQEfPoQewatsbwnIXG2ugXtePtC1" alt="demo 3" width="681" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is saved in &lt;a href="//whatster.web.app"&gt;Whatster&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1zS58OTPnx162Fbc15PxNOeS2Uaj6aqPS" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1zS58OTPnx162Fbc15PxNOeS2Uaj6aqPS" alt="demo 4" width="460" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can click on the file to get a link of it and preview it in a new tab.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1yZ7sfmILJiNp1j-NyOMAGQdQZyhDT1oG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1yZ7sfmILJiNp1j-NyOMAGQdQZyhDT1oG" alt="demo 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Image Analysis&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1wCRz40EEfWctQWHYmAP5YwZgIGAgWCsp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1wCRz40EEfWctQWHYmAP5YwZgIGAgWCsp" alt="image recognize" width="800" height="45"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;pssst! Quick Start&lt;/em&gt;---&amp;gt;  &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=clarifai" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;The Whatster bot enables you identify a lot of items in an image just by sending  or forwarding it. It uses &lt;a href="https://www.clarifai.com" rel="noopener noreferrer"&gt;Clarifai&lt;/a&gt; for image recognition.&lt;/p&gt;

&lt;p&gt;Start by just typing &lt;strong&gt;clarifai&lt;/strong&gt; and then sending an image.&lt;br&gt;
The bot will do the complex image analysis for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1YhdgN1GMXB3Nwvoe-j1PDnhTYVwY2_oA" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1YhdgN1GMXB3Nwvoe-j1PDnhTYVwY2_oA" alt="image analysis" width="669" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Mail&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1a4z75nqTxDaVf-v-sURvDcEz4GDL6jep" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1a4z75nqTxDaVf-v-sURvDcEz4GDL6jep" alt="command" width="463" height="42"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;pssst! Quick Start&lt;/em&gt;---&amp;gt;  &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=mail" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;Yeah! The bot can send a mail for you.&lt;br&gt;
I have used &lt;a href="https://nodemailer.com" rel="noopener noreferrer"&gt;Nodemailer&lt;/a&gt; and &lt;a href="https://sendgrid.com" rel="noopener noreferrer"&gt;Twilio's SendGrid&lt;/a&gt; to send emails.&lt;br&gt;
Just type &lt;strong&gt;mail&lt;/strong&gt; to get started. It will also send you a couple of instructions which you can refer as a help.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D16F_H-TCGG9BhjvTEQeVjsU-R2jwPCSiO" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D16F_H-TCGG9BhjvTEQeVjsU-R2jwPCSiO" alt="sending it" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now just type the email-address where you want the email to be sent and in the next line type your message.&lt;/p&gt;

&lt;p&gt;You can even &lt;strong&gt;send a file&lt;/strong&gt; (of any type) and along with a message &lt;em&gt;(not necessary)&lt;/em&gt; to the recipent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1XejnZgSgIgHUnRxvqG8SBJuNya3sSvd3" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1XejnZgSgIgHUnRxvqG8SBJuNya3sSvd3" alt="mailing it" width="800" height="865"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The email sent from &lt;strong&gt;whatsapp chat&lt;/strong&gt; will be recieved to the address you mailed to. &lt;em&gt;Just ask the sender to open up the inbox to see it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1HnpAEZx2Z_xGAGxgF5kPgaSpxwnL-U1t" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1HnpAEZx2Z_xGAGxgF5kPgaSpxwnL-U1t" alt="receiving it" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;hidden part&lt;/em&gt; which is scratched off in those images was my friend's email-address. However, it will be the &lt;em&gt;recipent's email address&lt;/em&gt; where you want to send the mail.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Jokes&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1aGttKB9eo2gXMAigt1f-04wEfA9-cPp5" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1aGttKB9eo2gXMAigt1f-04wEfA9-cPp5" alt="joke command" width="800" height="74"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;pssst! Quick Start&lt;/em&gt;---&amp;gt;  &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=joke" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;For fun, I added this feature ;P. &lt;/p&gt;

&lt;p&gt;Just type &lt;strong&gt;joke&lt;/strong&gt; to the bot to have some laugh. &lt;br&gt;
&lt;em&gt;Don't forget to forward that joke to your friends.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1PYTLHHDROpVlH1d9V8BxEtKwUlgVMVDY" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdrive.google.com%2Fuc%3Fid%3D1PYTLHHDROpVlH1d9V8BxEtKwUlgVMVDY" alt="joke" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;em&gt;Where did you get these ideas from?&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Before I finish writing this post and you reading it, I want to tell you how I came up with these ideas.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Problem is the mother of all inventions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  The Saving Messages Service
&lt;/h4&gt;

&lt;p&gt;I got this idea from one of my friends who used &lt;a href="https://telegram.org" rel="noopener noreferrer"&gt;Telegram Messenger&lt;/a&gt;. That was one of his reasons why he liked Telegram over Whatsapp.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You see I like Telegram because there is a saved messages chat where I can just forward my messages or media or send them in directly which is in sync with my Telegram account.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You guessed it ... I came up with this idea to include such a functionality in &lt;a href="//whatster.web.app"&gt;Whatster&lt;/a&gt; where anyone can forward messages to &lt;a href="https://api.whatsapp.com/send?phone=14155238886" rel="noopener noreferrer"&gt;this chat&lt;/a&gt; and get their messages saved in to their account.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thanks Saurav *&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  The Image Analysis service
&lt;/h4&gt;

&lt;p&gt;Actually, this was a problem which I faced. I sometimes could not interpret properly what items were present in the image or what was the image focusing on when someone sent me some image over Whatsapp. &lt;/p&gt;

&lt;p&gt;I thought that I will resolve that problem with &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=clarifai" rel="noopener noreferrer"&gt;Whatster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, it is really easy for me to interpret those difficult images.&lt;/p&gt;
&lt;h4&gt;
  
  
  The Mail Service
&lt;/h4&gt;

&lt;p&gt;This was a problem faced by aunt. &lt;strong&gt;Whatsapp&lt;/strong&gt; is most widely used messenger. Some of my relatives only know to operate Whatsapp &lt;em&gt;(besides phone and sms)&lt;/em&gt;. So, when somebody asked my aunt :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sujata, email that doctor's report to Rakesh's work-address so that he can tell what exactly the doctor meant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;By the way, Rakesh was their family friend and doctor by profession&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My aunt used to call me to do the email for her. Now, I added the mail service to &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=mail" rel="noopener noreferrer"&gt;Whatster&lt;/a&gt; so that she can easily send an email.&lt;br&gt;
Believe me, now she sends me an email daily (with a good morning message!).&lt;br&gt;
&lt;em&gt;Who said my aunt could not send an email?&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  The Joke Service
&lt;/h4&gt;

&lt;p&gt;I just did not like open up the browser and search for a joke to make my group laugh. I made &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=joke" rel="noopener noreferrer"&gt;Whatster&lt;/a&gt; do that for me.&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;em&gt;Final Words&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;I really liked creating &lt;strong&gt;Whatster&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Please show this post to do your family and friends so that they too can use &lt;a href="https://api.whatsapp.com/send?phone=14155238886" rel="noopener noreferrer"&gt;Whatster&lt;/a&gt;. &lt;br&gt;
I have really designed it keeping in mind that is user friendly and does not requires minimum technical knowledge to use it.&lt;/p&gt;

&lt;p&gt;I am open to edits and suggestions to this post and for &lt;strong&gt;Whatster&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I encourage you to contribute to my repo to &lt;strong&gt;Whatster&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aditya-mitra" rel="noopener noreferrer"&gt;
        aditya-mitra
      &lt;/a&gt; / &lt;a href="https://github.com/aditya-mitra/whatster" rel="noopener noreferrer"&gt;
        whatster
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Twilio Hackathon 2020 Using Twilio Whatsapp API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;WhatsTer - WhatsApp Bot&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/twilio-labs/sample-appointment-reminders/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/twilio-labs/sample-template-nodejs/workflows/Node%20CI/badge.svg" alt="Actions Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Live at &lt;a href="https://whatster.web.app" rel="nofollow noopener noreferrer"&gt;https://whatster.web.app&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Get Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Send &lt;code&gt;join decide-wish&lt;/code&gt;  as text message to Twilio's number [+1 (415) 523-8886] or &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=join%20decide-wish" rel="nofollow noopener noreferrer"&gt;click here&lt;/a&gt; to start the bot.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;WhatsTer is a User-Friendly WhatsApp Chat Bot created using Twilio's Whatsapp API. This bot enables you to do image-recognition, send emails with or without attachments to any receiver, sends you jokes, and most importantly, it saves any message or media that you send (or forward) to it, in a database which is accessible on the &lt;a href="https://whatster.web.app/" rel="nofollow noopener noreferrer"&gt;WhatsTer&lt;/a&gt; website.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How it works&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;When you send a message to the bot, it checks for a command.&lt;/p&gt;
&lt;p&gt;The commands are as follows. Follow instructions received via WhatsApp text -&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Type &amp;lt;login&amp;gt; 'to log into Whatster to read messages and media sent in this chat.'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Type &amp;lt;mail&amp;gt; 'to send an email to any email address of your choice with or without an attatchment.'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Type &amp;lt;clarifai&amp;gt; 'to&lt;/code&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aditya-mitra/whatster" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you face any issues, please do say it the repo or by &lt;a href="https://github.com/aditya-mitra/whatster/issues/new" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just so that this post does not get longer, I will explain the setup and the local development in another post. I will also explain all the technical stuff and the technologies I used in that post. [Coming Soon]&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanking
&lt;/h2&gt;

&lt;p&gt;I really thank &lt;a href="https://www.twilio.com/" rel="noopener noreferrer"&gt;Twilio&lt;/a&gt; for conducting this awesome hackathon and giving all the participants an oppurtunity to contribute.&lt;/p&gt;

&lt;p&gt;I really thank &lt;a href="//dev.to"&gt;Dev.to&lt;/a&gt; where I always learn some awesome stuff from fellow developers.&lt;/p&gt;

&lt;p&gt;I also thank my friend &lt;a href="https://github.com/dalmeow" rel="noopener noreferrer"&gt;Aditya Dalmia&lt;/a&gt; who helped me in the last moment and without whose help I really would not have been able to complete this project on time.&lt;/p&gt;

&lt;p&gt;Lastly, I want to thank you for reading my post and using &lt;strong&gt;Whatster&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>twiliohackathon</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>WhatsTer Bot - A multifunction bot that I built for the Twilio Hackathon</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Fri, 01 May 2020 06:17:17 +0000</pubDate>
      <link>https://dev.to/adityamitra/whatster-bot-a-multifunction-bot-that-i-built-for-the-twilio-hackathon-35dp</link>
      <guid>https://dev.to/adityamitra/whatster-bot-a-multifunction-bot-that-i-built-for-the-twilio-hackathon-35dp</guid>
      <description>&lt;p&gt;Live at &lt;a href="https://whatster.web.app" rel="noopener noreferrer"&gt;https://whatster.web.app&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What does the bot do?
&lt;/h1&gt;

&lt;p&gt;The bot has several interesting functionalities, such as -&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Email&lt;/strong&gt; - It can send emails to any specified email id by the user.&lt;br&gt;
The emails can have an attachment too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Image recognition&lt;/strong&gt; - The bot can recognize the contents of any image sent to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Jokes&lt;/strong&gt; - The bot doesn’t only do work, it also entertains you by sending a random dad joke, because as they say, ‘All work and no play makes Jack a   dull boy!”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Login&lt;/strong&gt; - You can log into your account from here. You can access your recent activity, and also view your saved message and media!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Link to Code&lt;/p&gt;

&lt;p&gt;You can join the sandbox by &lt;a href="https://api.whatsapp.com/send?phone=14155238886&amp;amp;text=join%20decide-wish" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt; or sending a WhatsApp message to: +1(415)523-8886, first text join decide-wish and then say hi!&lt;/p&gt;

&lt;p&gt;Check out my code on GitHub &lt;a href="https://github.com/aditya-mitra/whatster" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I built the bot?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Login&lt;/strong&gt; - For logging in, I created a web app for the login interface using ReactJS. The data is stored using MongoDB and for secure login, an OTP is generated, also through MongoDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email&lt;/strong&gt; - It uses 'nodemailer' service by &lt;a href="https://www.clarifai.com/" rel="noopener noreferrer"&gt;Sengrid.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image recognition&lt;/strong&gt; - The bot can recognize the contents of any image sent to it, using the &lt;a href="https://www.clarifai.com/" rel="noopener noreferrer"&gt;Clarifai&lt;/a&gt; API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jokes&lt;/strong&gt; - This uses the &lt;a href="https://icanhazdadjoke.com/" rel="noopener noreferrer"&gt;icanhazdadjoke&lt;/a&gt; service.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This project of mine falls into the Intersting Integrations category for this hackathon. It was a lot of fun creating this project, I hope you would enjoy using my WhatsApp bot, WhatsTer too!&lt;/p&gt;

</description>
      <category>whatster</category>
      <category>whatsappbot</category>
      <category>twiliohackathon</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Best Book for Bootstrap 4</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Sat, 30 Nov 2019 10:22:54 +0000</pubDate>
      <link>https://dev.to/adityamitra/best-book-for-bootstrap-4-48p5</link>
      <guid>https://dev.to/adityamitra/best-book-for-bootstrap-4-48p5</guid>
      <description>&lt;p&gt;While learning web-development, I found &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Bootstrap 4&lt;/strong&gt;&lt;/a&gt; very useful for designing the front-end designing of websites. It surely makes &lt;strong&gt;makes a website more interactive&lt;/strong&gt;. &lt;br&gt;
But the whole &lt;a href="https://getbootstrap.com/docs/4.4/getting-started/introduction/" rel="noopener noreferrer"&gt;documentation of bootstrap&lt;/a&gt; was so huge that trying to read it wholly over the internet was not so easy if I wanted to &lt;strong&gt;master&lt;/strong&gt; it. &lt;em&gt;(I also have eye problems) :P&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  In this case I thought surely reading a book would do the job
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Unfortunately, I could not  find one
&lt;/h4&gt;

&lt;h1&gt;
  
  
  Can you suggest me the best book to refer and learn Bootstrap 4?
&lt;/h1&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Which Programming Language is the BEST that one should learn to develop mobile apps?</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Wed, 06 Nov 2019 00:56:35 +0000</pubDate>
      <link>https://dev.to/adityamitra/which-programming-language-should-one-learn-to-develop-mobile-apps-game-engines-and-other-enterprise-level-back-ends-1e2o</link>
      <guid>https://dev.to/adityamitra/which-programming-language-should-one-learn-to-develop-mobile-apps-game-engines-and-other-enterprise-level-back-ends-1e2o</guid>
      <description></description>
      <category>discuss</category>
      <category>testing</category>
    </item>
    <item>
      <title>Telegram - The one Messenger app to rule them all</title>
      <dc:creator>Aditya Mitra</dc:creator>
      <pubDate>Wed, 30 Oct 2019 05:15:38 +0000</pubDate>
      <link>https://dev.to/adityamitra/telegram-the-one-messenger-app-to-rule-them-all-bl3</link>
      <guid>https://dev.to/adityamitra/telegram-the-one-messenger-app-to-rule-them-all-bl3</guid>
      <description>&lt;p&gt;I have been using Telegram Messenger for almost a year now. It has now become my personal preference for instant chat messaging. Telegram has it all which most other Messenger apps in the market have and more, that most other apps do not. I have a lot of reasons why I like Telegram as much as I do, and I’d like to share them. Read on to find out!&lt;/p&gt;

&lt;h1&gt;
  
  
  Cloud-Based
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsteemitimages.com%2Fp%2F7ohP4FeQn68Ht5nz9idHADdx3k2FBooyMm2g6fSHXj6QB2ohGSKUWR9QnPZPkqNFCkmwd5SdNTtict8tnGpKqUWshurZtEHuaajQ%3Fformat%3Dmatch%26mode%3Dfit%26width%3D640" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsteemitimages.com%2Fp%2F7ohP4FeQn68Ht5nz9idHADdx3k2FBooyMm2g6fSHXj6QB2ohGSKUWR9QnPZPkqNFCkmwd5SdNTtict8tnGpKqUWshurZtEHuaajQ%3Fformat%3Dmatch%26mode%3Dfit%26width%3D640" alt="image" width="400" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one the best features of Telegram. Telegram allows users to share multiple photos, docs and other file types (which are not so large in size) to be shared through its cloud based service without users having them to download in their device storage. So, you need not to worry about storage when sharing multiple small files and photos. Also, telegram provides &lt;strong&gt;unlimited&lt;/strong&gt; cloud storage for all its users. This time you might not need a backup service to &lt;em&gt;watch for your back&lt;/em&gt;!&lt;/p&gt;

&lt;h1&gt;
  
  
  Synchronization
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.degdigital.com%2Fwp-content%2Fuploads%2F2013%2F11%2Fsync-512.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.degdigital.com%2Fwp-content%2Fuploads%2F2013%2F11%2Fsync-512.png" alt="image" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
Telegram provides &lt;em&gt;seamless&lt;/em&gt; synchronization for its users. As mentioned earlier, all of the users' messages from chats to files are all saved into telegram's cloud. When logged in multiple devices for Telegram, all of the chats are updated and files appear for download. Telegram has its own &lt;strong&gt;desktop app&lt;/strong&gt; which can work &lt;em&gt;independently&lt;/em&gt; without your phone being in proximity or connected to the internet.&lt;/p&gt;

&lt;h1&gt;
  
  
  Groups (Public and Private)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fengineerbook.net%2Fuploads%2Fphotos%2Fthumbnail%2F2017%2F10%2F18%2F2185%2F1500_adf90eb9716c56bef3d97e8f956dca05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fengineerbook.net%2Fuploads%2Fphotos%2Fthumbnail%2F2017%2F10%2F18%2F2185%2F1500_adf90eb9716c56bef3d97e8f956dca05.png" alt="image" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
This another big perk of Telegram services. Groups can as big as 200,000 members &lt;em&gt;(public)&lt;/em&gt; or smaller &lt;em&gt;(private)&lt;/em&gt;. Public groups are completely transparent and can be searched for through Telegram or &lt;em&gt;even&lt;/em&gt; search engines. Public groups also have their own customizable invite link(t.me/) which can be cited on websites or blogs for interested users to join. Public groups help user to chat with people globally sharing common interests or are there for a particular motive.&lt;br&gt;
Private groups are more often used for people who know each other. Private groups are not transparent cannot be found using search. The powers which an &lt;strong&gt;admin&lt;/strong&gt; in a telegram group can hold are far more interesting. Admins can have their own custom tiles (for example:&lt;em&gt;the founder of this group&lt;/em&gt;). Admins while adding other admins can change these admins' permissions of what they will be capable to do in the group. Admins can also change the permissions of not only what chat-members in a group can do as a whole but also change a member's right individually. Moreover, they can &lt;em&gt;bots&lt;/em&gt; which can only respond to them.&lt;br&gt;
Members in a group can also be &lt;strong&gt;mentioned&lt;/strong&gt; and &lt;strong&gt;replied&lt;/strong&gt; and some messages can also be &lt;strong&gt;pinned&lt;/strong&gt; for the extra attention of the users.&lt;/p&gt;

&lt;h1&gt;
  
  
  Bots
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvuk4i1p7bxs3wje665f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvuk4i1p7bxs3wje665f.png" alt="image" width="698" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Bots are the most powerful tools Telegram has given to us.&lt;/strong&gt; If you are programmer and good at using APIs, Telegram might have the perfect tool for you- &lt;a href="https://core.telegram.org/bots/api" rel="noopener noreferrer"&gt;Telegram API&lt;/a&gt;. Bots can:- &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;welcome users in a group&lt;/li&gt;
&lt;li&gt;stop spams&lt;/li&gt;
&lt;li&gt;take anti-flood measures&lt;/li&gt;
&lt;li&gt;report statistics&lt;/li&gt;
&lt;li&gt;mark important messages&lt;/li&gt;
&lt;li&gt;fetch content (like news) from websites&lt;/li&gt;
&lt;li&gt;act a medium between two users when required&lt;/li&gt;
&lt;li&gt;and all other stuff you can think of!
Truly, bots are handy when you are using Telegram for your &lt;strong&gt;business purposes&lt;/strong&gt; or  &lt;strong&gt;managing&lt;/strong&gt; a large public group.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Encryption
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshcgcpvrenyk4abuqarr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshcgcpvrenyk4abuqarr.jpg" alt="image" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Private and normal text-chats have server-side encryption for securing users' chats. If the user still does not feel satisfied, he/she can start a &lt;strong&gt;secret chat&lt;/strong&gt; for more security as secret chats provide an added level of encryption - the client-side encryption. Anyone who can crack a Telegram secret chat conversation can win a prize of &lt;strong&gt;$300,000&lt;/strong&gt; in the &lt;a href="https://core.telegram.org/contest300K" rel="noopener noreferrer"&gt;Cracking Contest&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Gifs and Stickers
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcR86ej3bb1ZUonqyPNkpqXZrx-bKVtzffV-uQ7FvbGPslKWWQpv4A%26s" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcR86ej3bb1ZUonqyPNkpqXZrx-bKVtzffV-uQ7FvbGPslKWWQpv4A%26s" alt="image" width="266" height="190"&gt;&lt;/a&gt;&lt;br&gt;
Telegram has an arsenal of official and user made stickers and animated stickers, and integration with Giphy for gifs which can be used without downloading. Users can access gifs and stickers from the stickers panel or search for gifs using &lt;em&gt;@gif&lt;/em&gt; followed by the &lt;em&gt;gif they are searching for&lt;/em&gt;. There are also a handful of stickers created by some Telegram users which can be downloaded by the users and sent in the chats. Users can also create their own gifs using &lt;em&gt;loop&lt;/em&gt; feature in videos. &lt;/p&gt;

&lt;h1&gt;
  
  
  Channels
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2bm5nvrnlysu5rx8ka5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2bm5nvrnlysu5rx8ka5.jpg" alt="image" width="300" height="300"&gt;&lt;/a&gt;&lt;br&gt;
Telegram provides another feature besides the awesome groups it provides. Telegram channels are one-way communication chats which a user can join to get useful information about their interests. There are channels in Telegram which provide web series, movies and discount coupons for e-shopping. I joined some of the telegram channels and found them very useful.&lt;/p&gt;

&lt;h1&gt;
  
  
  Other Awesome Features
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Besides the features I talked about above, there are a couple of other features there in Telegram too&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.cleveroad.com%2Fimages%2Farticle-previews%2FHow-does-telegram-work.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.cleveroad.com%2Fimages%2Farticle-previews%2FHow-does-telegram-work.png" alt="image" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Telegram Chats can be archived.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  2. Any useful channel or group can be searched for in the Telegram search bar.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  3. Polls (&lt;em&gt;for the silent members :D&lt;/em&gt;) can be conducted to get everyone's opinion.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  4.  Sent messages can be &lt;strong&gt;deleted&lt;/strong&gt; by the sender as well as the receiver  in private chats, and in groups messsages can be deleted by the sender and the admins, without leaving any trace.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  5. Wallpapers look more amazing when you use them in Telegram with its animated features for wallpapers.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  6. Phone number stays hidden and also you can deny to accept calls from any user using Telegram.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  7. To save any message for future use, one can easily forward it to the saved messages chat in Telegram.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  8. There are &lt;strong&gt;many different themes&lt;/strong&gt; to choose from and later customized  for using Telegram.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  9. Any message in a chat can be searched for using the search bar in the chat.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  10. Telegram has its own app lock making it unnecessary for third-party app locks to lock the application.
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;After all these features I have discussed, I find myself very attached to using Telegram. I just cannot imagine myself using another messaging application beside Telegram for chatting.&lt;/em&gt;&lt;br&gt;
JUST LOVING TELEGRAM&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>messenger</category>
      <category>chat</category>
    </item>
  </channel>
</rss>
