<?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: hitesh saini</title>
    <description>The latest articles on DEV Community by hitesh saini (@fxnoob).</description>
    <link>https://dev.to/fxnoob</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%2F451867%2F354956df-38b3-4a5e-a1b4-7a91cc2fbd50.jpeg</url>
      <title>DEV Community: hitesh saini</title>
      <link>https://dev.to/fxnoob</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fxnoob"/>
    <language>en</language>
    <item>
      <title>Using Javascript to Improve upon my english language skills!</title>
      <dc:creator>hitesh saini</dc:creator>
      <pubDate>Sun, 31 Jan 2021 17:32:42 +0000</pubDate>
      <link>https://dev.to/fxnoob/using-javascript-to-improve-upon-my-english-language-skills-bio</link>
      <guid>https://dev.to/fxnoob/using-javascript-to-improve-upon-my-english-language-skills-bio</guid>
      <description>&lt;p&gt;This is the story of my journey where I am going to share how I am using my technical skills to improve upon my soft skills.&lt;br&gt;
Please bear with me, As this story becomes from non technical to super technical or vice-versa.&lt;br&gt;
 As we know best way to learn a language is to read or write in that language.I was already reading the books (mostly technical books). I also had to Improve upon my writing skills so I found a website called 750words.com where user can write whatever they want in 750 words on daily basic in their private post. So I started to write 750 words on daily basis. I was also looking for ways to practice my spoken English and also so much typing sucks! when it is not code. one day I got to know about speech Recognition API from MDN docs. so I quickly figured out if I can integrate this API in Chrome extension then this will be available on every page in Chrome browser to type with voice, So I started to develop a Chrome extension called speech recognition Toolkit[&lt;a href="https://github.com/fxnoob/speech-recognition-toolkit"&gt;https://github.com/fxnoob/speech-recognition-toolkit&lt;/a&gt;]&lt;br&gt;
 core of this extension  contains only turning on and off the  speech recognition API, excluding this everything is handled as command, which is truly extendable.&lt;/p&gt;
&lt;h2&gt;
  
  
  So to write a new Command in this chrome extension
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;new_command.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// just write a new function with this signature&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;commandAlias&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name_of_command&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;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;description of command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BAC548F8-69DB-07DE-2AA6-E687AEF889CC_random_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;commandAlias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;exact&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// your logic&lt;/span&gt;
      &lt;span class="c1"&gt;// this will be executed when command is spoken&lt;/span&gt;
     &lt;span class="c1"&gt;// text contains the recognized text &lt;/span&gt;
     &lt;span class="c1"&gt;// options is an object which contains dom object&lt;/span&gt;
     &lt;span class="c1"&gt;// dom object has useful methods such as simulateWordTyping&lt;/span&gt;
    &lt;span class="c1"&gt;// simulateWordTyping invokes the keyboard events to type words&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dom&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="c1"&gt;// type anything you want eg. even emojis&lt;/span&gt;
      &lt;span class="nx"&gt;dom&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;simulateWordTyping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your🌻text&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;And just Import this new file in &lt;code&gt;https://github.com/fxnoob/speech-recognition-toolkit/blob/master/src/services/commandsService.js&lt;/code&gt; to include it in the codebase. isn't that dead simple?&lt;/p&gt;

&lt;p&gt;This way I got to make some useful commands such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;code&gt;typing emojis with voice&lt;/code&gt; from list of 1800 emojis.&lt;/li&gt;
&lt;li&gt;Doing basic maths with voice (add, subtract, multiply)
And couple of other useful stuff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As need grew, I wanted it to work in my native language too, As I don't know how to type in my native language with available keyboard. Again &lt;code&gt;Speech Recognition API&lt;/code&gt; came into rescue. It provides support for multi language speech recognitions with different dialects for free.&lt;br&gt;
So first I had to translate every existing command to all languages which were supported in the Speech Recognition API.&lt;br&gt;
so I maintained json files containing translation for each text/command in every supported language and I created a Service called translation service[&lt;a href="https://github.com/fxnoob/speech-recognition-toolkit/blob/master/src/services/translationService.js"&gt;https://github.com/fxnoob/speech-recognition-toolkit/blob/master/src/services/translationService.js&lt;/a&gt;] to have translation for any text based upon its key and selected language ID.&lt;/p&gt;
&lt;h2&gt;
  
  
  So to write a new Command for every supported language
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;new_command.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// import translation service file&lt;/span&gt;
&lt;span class="c1"&gt;// but first append your translations in json files available in the src/app/_locales directory of project source.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;translationService&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;../translationService&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// just write a new function with this signature&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;langId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;commandAlias&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;translationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;langId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;command_label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;translationService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;langId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;command_cmd_name_description&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BAC548F8-69DB-07DE-2AA6-E687AEF889CC_RANDOM-ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;commandAlias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;exact&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// your logic&lt;/span&gt;
      &lt;span class="c1"&gt;// this will be executed when command is spoken&lt;/span&gt;
     &lt;span class="c1"&gt;// text contains the recognized text &lt;/span&gt;
     &lt;span class="c1"&gt;// options is an object which contains dom object&lt;/span&gt;
     &lt;span class="c1"&gt;// dom object has useful methods such as simulateWordTyping&lt;/span&gt;
    &lt;span class="c1"&gt;// simulateWordTyping invokes the keyboard events to type words&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dom&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="c1"&gt;// type anything you want eg. even emojis&lt;/span&gt;
      &lt;span class="nx"&gt;dom&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;simulateWordTyping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your🌻text&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;That's how, this project became useful for others as well. You can contribute to the project as its open source or just use it if you like.&lt;/p&gt;

&lt;p&gt;In next post I'm going to share how I made it work with Different environments other than Chrome pages eg. Windows/Mac/Linux with the help of ElectronJS + chrome extension[&lt;a href="https://github.com/fxnoob/voice-typing-for-desktop"&gt;https://github.com/fxnoob/voice-typing-for-desktop&lt;/a&gt;]. &lt;br&gt;
Have a Good day!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>A chrome extension with a hand gesture and speech recognition capabilities. </title>
      <dc:creator>hitesh saini</dc:creator>
      <pubDate>Tue, 18 Aug 2020 03:00:19 +0000</pubDate>
      <link>https://dev.to/fxnoob/a-chrome-extension-with-a-hand-gesture-and-speech-recognition-capabilities-35o5</link>
      <guid>https://dev.to/fxnoob/a-chrome-extension-with-a-hand-gesture-and-speech-recognition-capabilities-35o5</guid>
      <description>&lt;p&gt;Here I will be discussing a chrome extension &lt;a href="https://github.com/fxnoob/Hand-in-the-air"&gt;Hand in the Air&lt;/a&gt; which I've developed with the help of open-source projects and my little knowledge on browser extensions which manages user scripts and invokes these scripts based upon user interaction (hand gesture and voice input). &lt;/p&gt;

&lt;p&gt;I wanted to make a chrome extension which could manage the user scripts(scripts which run on the particular domain) like &lt;a href="https://github.com/greasemonkey/greasemonkey"&gt;Greasemonkey&lt;/a&gt; but with some user interaction like waving a hand in front of the webcam (hand gesture recognition) or through voice interaction(Speech recognition) so basically a Greasemonkey extension on Steroids. &lt;/p&gt;

&lt;p&gt;Before taking on this project I wanted to use reactjs lib and import/export in chrome extension. as &lt;code&gt;create-react-app&lt;/code&gt; was not useful in this.&lt;br&gt;
Along the way, I've figured out that I could do it with the help of a transpiler or a next-gen compiler (in this case it was babel) and a bundler which was webpack.&lt;/p&gt;

&lt;p&gt;After creating &lt;a href="https://github.com/fxnoob/chrome-extension-boilerplate"&gt;chrome-extension-react-boilerplate&lt;/a&gt; setup, I came along this library &lt;a href="https://github.com/hdmchl/gest.js"&gt;Gest.js&lt;/a&gt; which uses diff algorithm to recognise hand movement(left, right, up, down). I &lt;a href="https://github.com/fxnoob/Hand-in-the-air/blob/master/src/lib/gest.es6.js"&gt; modified it&lt;/a&gt; to make it importable in the project as initially it was written in es5. After this main issue was how should I include this library so it asks for camera permission only for the first time. and could operate on any browser tab that user visits. so for this, I put this script on the options page and the background script of the extension. so for first-time browser extension asks camera/audio permissions from options page, then the browser is whitelisted for camera/audio uses then I could easily operate on camera/audio input when the user clicks on the extension icon. on second run extension could get access camera/audio from background script. and recognized gesture direction is sent to the active tab with the help of message passing APIs. After this, I created an options page UI form to save user scripts on a particular domain. &lt;/p&gt;

&lt;p&gt;there are two types of user-scripts for hand gesture - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. default user scripts &lt;/li&gt;
&lt;li&gt;2. custom scripts &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;default scripts are the scripts that are already available in the extension eg. mapping arrow keys with left, right, up, down hand gestures on any webpage(useful in playing games on &lt;a href="http://play2048.co"&gt;http://play2048.co&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In custom scripts, the user can type their logic as &lt;code&gt;gesture&lt;/code&gt; object was exposed in the custom script APIs. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;eg. On tinder web(tinder.com) user can wave hand left to right or vise versa to like or dislike a profile
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!gesture.error) {
  var el = null;
  if (gesture.direction === "Left") {
    el = document.querySelector('[aria-label="Nope"]');
    el.click();
  } else if (gesture.direction === "Right") {
    el = document.querySelector('[aria-label="Like"]');
    el.click();
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;user can go back and forth in slides on &lt;a href="https://www.slideshare.net/"&gt;https://www.slideshare.net/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!gesture.error) {
  if (gesture.direction === "Left") {
    document.querySelector("#btnNext").click();
  } else if (gesture.direction === "Right") {
    document.querySelector("#btnPrevious").click();
  }
}

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

&lt;p&gt;&lt;br&gt;
`&lt;br&gt;
I defined these terms:-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;script handler: a handler that recognizes the gestures eg. gestjs 

&lt;ul&gt;
&lt;li&gt;script handler callback: a callback which is fired by script handler. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I thought of replacing gestjs with a generic handler so I thought of integrating voice input feature chrome speech recognition APIs .for I used &lt;a href="https://github.com/TalAter/annyang"&gt;annyang.js&lt;/a&gt; which is built on top of chrome speech recognition API and has a couple of utility classes on top of that. basically it turned out as alexa skills for webpages.&lt;/p&gt;

&lt;p&gt;I created 2 same types for voice input - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. default user scripts &lt;/li&gt;
&lt;li&gt;2. custom scripts
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;default user scripts are the same as described above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Custom scripts I exposed a string variable &lt;code&gt;command&lt;/code&gt; which contains the recognized word or sentence. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;eg. to navigate back and forth in slides on &lt;a href="https://www.slideshare.net/"&gt;https://www.slideshare.net/&lt;/a&gt; use can say &lt;code&gt;next&lt;/code&gt; or &lt;code&gt;previous&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (command === "next") {
    document.querySelector("#btnNext").click();
  } else if (command === "previous") {
    document.querySelector("#btnPrevious").click();
  }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;h3&gt;
  
  
  Further Development
&lt;/h3&gt;

&lt;p&gt;I want to add one more &lt;code&gt;handler&lt;/code&gt; for eye-movement tracking, cause there is a use case for this lets users say click on search while being on &lt;a href="https://google.com"&gt;https://google.com&lt;/a&gt;. this can be written in the above-defined script but for now, the script has to search on the entire page for visible text or something to match the element and click on that and this brute force search could lead to false results very easily. &lt;br&gt;
So to have eye-tracking I came along this open-source project called &lt;a href="https://github.com/brownhci/WebGazer"&gt;webgazer&lt;/a&gt; it wasn't ready to use the library so I made a &lt;a href="https://github.com/brownhci/WebGazer/pull/142"&gt;pr&lt;/a&gt; there and making couple of more tweaks to make it usable in chrome extension. so that searching could be limited to bounding box of 100px relative to where user is currently looking at the webpage. &lt;/p&gt;

&lt;p&gt;thanks for the read and Stay Healthy!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>chromeextension</category>
      <category>extension</category>
    </item>
  </channel>
</rss>
