<?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: Victor Aremu</title>
    <description>The latest articles on DEV Community by Victor Aremu (@ahkohd).</description>
    <link>https://dev.to/ahkohd</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%2F117099%2F3550b735-7cec-4548-8f68-21113cf58528.png</url>
      <title>DEV Community: Victor Aremu</title>
      <link>https://dev.to/ahkohd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahkohd"/>
    <language>en</language>
    <item>
      <title>Glance — A VSCode extension for viewing SVG sprites easy-peasy.</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Wed, 23 Jun 2021 23:14:02 +0000</pubDate>
      <link>https://dev.to/ahkohd/glance-a-vscode-extension-for-viewing-svg-sprites-easy-peasy-3f5d</link>
      <guid>https://dev.to/ahkohd/glance-a-vscode-extension-for-viewing-svg-sprites-easy-peasy-3f5d</guid>
      <description>&lt;p&gt;When working on a front-end project that uses &lt;a href="https://css-tricks.com/svg-symbol-good-choice-icons/"&gt;SVG sprites&lt;/a&gt;, I often misremember icon names or dis-remembered that I had previously added them. Consequently, I developed an extension for my favorite editor to help solve this issue.&lt;/p&gt;

&lt;p&gt;Glance is a VSCode extension for viewing SVG sprites easy-peasy. Its features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A viewer for SVG sprites&lt;/li&gt;
&lt;li&gt;Search icons&lt;/li&gt;
&lt;li&gt;Copy icon's Id or SVG to clipboard&lt;/li&gt;
&lt;li&gt;Appearance controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dK5gAxghYSo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Available on VS Code Market place&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ahkohd.glance"&gt;https://marketplace.visualstudio.com/items?itemName=ahkohd.glance&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's open-sourced, contributions are welcomed 🤗&lt;br&gt;
&lt;a href="https://github.com/ahkohd/glance"&gt;https://github.com/ahkohd/glance&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>news</category>
    </item>
    <item>
      <title>Disable two-finger swipe left/right page navigation gesture of Chromium-based browsers on macOS.</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Thu, 30 Jul 2020 21:14:57 +0000</pubDate>
      <link>https://dev.to/ahkohd/disable-two-finger-swipe-left-right-page-navigation-gesture-of-chromium-based-browsers-on-macos-3f5g</link>
      <guid>https://dev.to/ahkohd/disable-two-finger-swipe-left-right-page-navigation-gesture-of-chromium-based-browsers-on-macos-3f5g</guid>
      <description>&lt;p&gt;Chromium-based browsers i.e (Chrome, Brave) by default are shipped with two-finger gestures used for navigating to next or previous page depending on the direction you swipe.&lt;br&gt;
If for some reason you want to disable this feature, you can do this by setting &lt;strong&gt;AppleEnableSwipeNavigateWithScrolls&lt;/strong&gt; to &lt;strong&gt;FALSE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open your &lt;strong&gt;Terminal app&lt;/strong&gt;, copy the commands below, paste it in your terminal, hit the enter key to run it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;appName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"TypeTheNameOfTheChromiumBaseBrowserInstalledOnYourMacHere"&lt;/span&gt;
&lt;span class="nv"&gt;bundleID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'id of app "'&lt;/span&gt;&lt;span class="nv"&gt;$appName&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
defaults write &lt;span class="nv"&gt;$bundleID&lt;/span&gt; AppleEnableSwipeNavigateWithScrolls &lt;span class="nt"&gt;-bool&lt;/span&gt; FALSE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Remember to set &lt;code&gt;appName=”To The Name Of The Chronimum Based Browser Installed on your Mac”&lt;/code&gt;. For example, I have Brave Browser installed, mine goes like this &lt;code&gt;appName=”Brave”&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Close your &lt;strong&gt;Terminal app&lt;/strong&gt;, then restart your browser, do the gesture, it’s gone right? 🍻🌚&lt;/p&gt;

&lt;h1&gt;
  
  
  Care to know what these commands do?
&lt;/h1&gt;

&lt;p&gt;Below, I provide step by step explanation of each command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set your app name - the Chromium Browser (i.e Chrome, Brave) in a variable.&lt;/span&gt;
&lt;span class="nv"&gt;appName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Brave"&lt;/span&gt;

&lt;span class="c"&gt;# Get the bundle Id of the Chromium Browser, store it in a variable.&lt;/span&gt;
&lt;span class="nv"&gt;bundleID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'id of app "'&lt;/span&gt;&lt;span class="nv"&gt;$appName&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Example: Get the bundle Id of Brave browser&lt;/span&gt;
&lt;span class="c"&gt;# Returns:&lt;/span&gt;
&lt;span class="c"&gt;# com.brave.Browser&lt;/span&gt;

&lt;span class="c"&gt;# Now let's set a flag to disable the gesture navigation.&lt;/span&gt;
defaults write &lt;span class="nv"&gt;$bundleID&lt;/span&gt; AppleEnableSwipeNavigateWithScrolls &lt;span class="nt"&gt;-bool&lt;/span&gt; FALSE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Bouns
&lt;/h1&gt;

&lt;p&gt;Okay, I want the gesture back what do I do? Easy, just close your browser. Open your Terminal app, copy and paste the commands below, hit the enter key. Make sure your set the appName to the browser’s name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;appName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"TypeTheNameOfTheChromiumBaseBrowserInstalledOnYourMacHere"&lt;/span&gt;
&lt;span class="nv"&gt;bundleID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'id of app "'&lt;/span&gt;&lt;span class="nv"&gt;$appName&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
defaults write &lt;span class="nv"&gt;$bundleID&lt;/span&gt; AppleEnableSwipeNavigateWithScrolls &lt;span class="nt"&gt;-bool&lt;/span&gt; TRUE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Flutter Grocery Shopping App UI template kit.</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Sun, 01 Sep 2019 10:55:38 +0000</pubDate>
      <link>https://dev.to/ahkohd/flutter-grocery-shopping-app-ui-template-kit-2d5a</link>
      <guid>https://dev.to/ahkohd/flutter-grocery-shopping-app-ui-template-kit-2d5a</guid>
      <description>&lt;p&gt;So I saw a Grocery Shopping App UI design at Uplabs, then I decided to write it in Flutter because I really liked it. ✌&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Design screens are on &lt;a href="https://www.uplabs.com/posts/grocery-shopping-full-app"&gt;Uplabs&lt;/a&gt;. It’s premium, purchase it if you want to use it commercially.&lt;br&gt;
&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am not in anyway in affiliate with the designer of the screens. I just love the UI and decided to code it in Flutter😽&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/ahkohd/FlutterGrocery-ShoppingAppUI/blob/master/app-release.apk"&gt;Download Android App&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🎥 Demo
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/OB2OiXJxQ-A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Don’t forget to &lt;strong&gt;star⭐&lt;/strong&gt; the repo if you like what you see😉. Source code available on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ahkohd/FlutterGrocery-ShoppingAppUI"&gt;https://github.com/ahkohd/FlutterGrocery-ShoppingAppUI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ios</category>
      <category>android</category>
      <category>dart</category>
    </item>
    <item>
      <title>I created Switch - 🦄 A key combo window manager that lets you zap between your favorite apps lightning fast.</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Thu, 29 Aug 2019 20:41:05 +0000</pubDate>
      <link>https://dev.to/ahkohd/i-created-switch-a-key-combo-window-manager-that-lets-you-zap-between-your-favorite-apps-lightning-fast-2l6m</link>
      <guid>https://dev.to/ahkohd/i-created-switch-a-key-combo-window-manager-that-lets-you-zap-between-your-favorite-apps-lightning-fast-2l6m</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;&lt;a href="https://ahkohd.github.io/switch-desktop/"&gt;Switch&lt;/a&gt;&lt;/strong&gt; - A keycombo window manager built with &lt;code&gt;Electron&lt;/code&gt; &amp;amp; &lt;code&gt;Node.js&lt;/code&gt; with some native bindings using &lt;code&gt;N-API&lt;/code&gt;.
&lt;/h1&gt;

&lt;p&gt;Switch between your favorite apps lightning fast. (Windows, macOS - Under development)&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo ⚡
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cysVHi-pcxU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="http://ahkohd.github.io/switch-desktop"&gt;Get It Now 🤞 &amp;gt;&amp;gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;h1&gt;
  
  
  Features 🔥
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Switch fast between apps.&lt;/li&gt;
&lt;li&gt;Favorite apps loadout each mapped to your Num keys 0-9.&lt;/li&gt;
&lt;li&gt;A dock to add favs.&lt;/li&gt;
&lt;li&gt;The convenience of use by both &lt;code&gt;left&lt;/code&gt; and &lt;code&gt;right-handed&lt;/code&gt; users with the use of Alt-left or Alt-right.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Feel free to contribute on &lt;a href="https://github.com/ahkohd/switch-desktop"&gt;Github&lt;/a&gt; 👨‍❤️‍💋‍👨
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: Switch works on Windows, macOS support is under development. All contributions are welcomed. 🙌&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://forthebadge.com"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vgS5lPAl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://forthebadge.com/images/badges/built-with-love.svg" alt="forthebadge"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>electron</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Thoughts On Creating Forms using Angular Pipes</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Sun, 30 Jun 2019 16:01:44 +0000</pubDate>
      <link>https://dev.to/ahkohd/thoughts-on-creating-forms-using-angular-pipes-3a7h</link>
      <guid>https://dev.to/ahkohd/thoughts-on-creating-forms-using-angular-pipes-3a7h</guid>
      <description>&lt;p&gt;While working on my last Angular project. I can’t help but notice how unease I felt with lots of HTML input tags spanning through the component template code I was working on. “There should be a more neat way to abstract these input tags”, I murmured.&lt;/p&gt;

&lt;p&gt;Afterward, I decided to draft some syntax of my idea of what the abstraction should look like. Aha! What could be the perfect tool for the job? &lt;strong&gt;Pipes&lt;/strong&gt;, holy smokes yes! pipes.&lt;/p&gt;

&lt;p&gt;Angular pipes provide a very sleek abstraction, a right tool for the abstraction quest. So I came up with the pipe syntax below, neat uh?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quick Disclaimer: I was just trying to experiment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AX4_9NZTOIYM6tQbnQ1wlSQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AX4_9NZTOIYM6tQbnQ1wlSQ.png" alt="A draft of pipe syntax to be used for pipe forms."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have a valid pipe syntax that contains sufficient parameters needed to create an input tag. It’s time we write a pipe that transforms our syntax to a &lt;strong&gt;pseudo&lt;/strong&gt; HTML tag. The pipe will return a result which contains an input tag syntax wrapped in double square brackets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2Ap6nGiqzmSt807GVrNLl8OQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2Ap6nGiqzmSt807GVrNLl8OQ.png" alt="Example of what pipe-form pipe will return with the provided input."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Here is what the code pipe code looks like.&lt;/em&gt; &lt;strong&gt;pipeform.pipe.ts&lt;/strong&gt;&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;Pipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;PipeTransform&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;@angular/core&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="nd"&gt;Pipe&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PipeForm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FormPipe&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;PipeTransform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// transforms the pipe input and returns a string following this format `[[&amp;lt;input/&amp;gt;]]`&lt;/span&gt;
  &lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&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="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// declare output container..&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// switch between the type if element we want to create&lt;/span&gt;
    &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;// case input tag, &lt;/span&gt;
        &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`[[&amp;lt;input type="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;// loop through the options parameter and format it into the out variable like HTML attributes.&lt;/span&gt;
        &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&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="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&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="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s2"&gt;` &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// append the final, ending string.&lt;/span&gt;
    &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&amp;gt;]]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// we done here ;-)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;out&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;Yes! That works but just returns a dummy string right? Finally, I then realized that I needed some sort of &lt;strong&gt;container&lt;/strong&gt; which I can then use to parse the result returned by the pipe and create the actual input elements then inject them into the &lt;strong&gt;DOM&lt;/strong&gt; using &lt;strong&gt;Renderer2&lt;/strong&gt;. So I needed to update my initial syntax. To use pipe-forms, you have to wrap it inside the &lt;strong&gt;ngx-pipeform&lt;/strong&gt; component which will act as a renderer for the pipe-form. So the updated syntax looks like👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AbRF1VnCBbWrprVc4CuIctw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AbRF1VnCBbWrprVc4CuIctw.png" alt="The updated syntax for pipe-form, here ngx-pipeform wraps the pipeform-input pipe."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s create the component that will serve as a wrapper for pipe-forms. Here is a brief on how it works.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It takes the result returned by &lt;strong&gt;pipeform pipe&lt;/strong&gt;, then parses it.&lt;/li&gt;
&lt;li&gt;Creates the input tag elements and then injects them into the &lt;strong&gt;DOM&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Here is what the code looks like.&lt;/em&gt; &lt;strong&gt;pipeform.component.ts&lt;/strong&gt;&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;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;ViewContainerRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;AfterViewInit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Renderer2&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;@angular/core&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="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ngx-pipeform&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;ng-content&amp;gt;&amp;lt;/ng-content&amp;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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PipeformComponent&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;AfterViewInit&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;viewRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ViewContainerRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;rd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Renderer2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

  &lt;span class="nf"&gt;ngAfterViewInit&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// after view init, lets get things done..&lt;/span&gt;
    &lt;span class="c1"&gt;// filter node type of text..&lt;/span&gt;
    &lt;span class="c1"&gt;// if text matches pipeform syntax, replace it with the input tag&lt;/span&gt;
    &lt;span class="c1"&gt;// the create the element and inject it into the dom with Renderer2.&lt;/span&gt;
    &lt;span class="c1"&gt;// lets travel through the DOM..&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recurseDomChildren&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;viewRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nativeElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;recurseDomChildren&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&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;nodes&lt;/span&gt;&lt;span class="p"&gt;;&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;start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;nodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loopNodeChildren&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodes&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="nf"&gt;loopNodeChildren&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&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;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &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;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&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;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="c1"&gt;// try to parse each node..&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipeFormParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&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;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;childNodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recurseDomChildren&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&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;span class="nf"&gt;pipeFormParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// if the content of this node is a text node&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;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodeType&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// get its text content&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="c1"&gt;// match the occurence of the pipe-form syntax, if found return an array of the result.&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pipeForms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\[\[(&lt;/span&gt;&lt;span class="sr"&gt;.*&lt;/span&gt;&lt;span class="se"&gt;?)&lt;/span&gt;&lt;span class="sr"&gt;]]/gi&lt;/span&gt;&lt;span class="p"&gt;);&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;pipeForms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// strip the double square brackets from all of the results.&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;readyElements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pipeForms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;]]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="c1"&gt;// create a div container with Renderer2&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;elem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// insert the prepaired input tag into the div.&lt;/span&gt;
        &lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;readyElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// replace this current node with the new div node we just created.&lt;/span&gt;
        &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&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;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cheers! It works 😂🍻, but there are still a lot of improvements, questions, and comments we need to go over. I will leave it for you to decide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example hosted on Stackblitz
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/angular-pipe-form?" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;br&gt;
Live demo on Stackblitz - &lt;a href="https://angular-pipe-form.stackblitz.io/" rel="noopener noreferrer"&gt;https://angular-pipe-form.stackblitz.io/&lt;/a&gt; Feel free to check the source code &lt;a href="https://stackblitz.com/edit/angular-pipe-form" rel="noopener noreferrer"&gt;https://stackblitz.com/edit/angular-pipe-form&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;It works, but does it worth the effort?&lt;/li&gt;
&lt;li&gt;What does it cost, I mean performance in the production environment?&lt;/li&gt;
&lt;li&gt;Does the syntax look a bit nicer or cleaner?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Improvements
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Styling the pipe-forms.&lt;/li&gt;
&lt;li&gt;Making it work with Angular Models, I haven’t attempted this.&lt;/li&gt;
&lt;li&gt;Form validations, please!&lt;/li&gt;
&lt;li&gt;Maybe a nice optimization of the DOM traversing logics.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Final Verdict
&lt;/h3&gt;

&lt;p&gt;Very well 😉, My aim here is just to see if we can use pipes to create forms. Yes, we can! But is it a good approach? Isn’t this out of context of what pipes meant for? Amigo, I don’t know, was just trying out new ways to get things done. Express your thoughts in words as comments below.&lt;/p&gt;

&lt;p&gt;Till next time! Peace out.💜&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>VS Code Tweet  - A Twitter client one click away at VS CODE sidebar.</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Thu, 21 Feb 2019 16:24:36 +0000</pubDate>
      <link>https://dev.to/ahkohd/vs-code-tweet---a-twitter-client-one-click-away-at-vs-code-sidebar-45fn</link>
      <guid>https://dev.to/ahkohd/vs-code-tweet---a-twitter-client-one-click-away-at-vs-code-sidebar-45fn</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuctnlgth6uydbdxhou3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuctnlgth6uydbdxhou3n.png" alt="VS CODE Tweet Demo" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I just released VS Code Tweet - A Twitter client one click away at VS CODE sidebar⚡. Code, Tweet, and loop. 😂🤣&lt;br&gt;
No more switching of windows while coding and trying to tweet, do it inside VS CODE🔥.&lt;/p&gt;

&lt;p&gt;Get from VS Code market place&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ahkohd.vscode-tweet" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=ahkohd.vscode-tweet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full walkthrough on how to setup&lt;br&gt;
&lt;a href="https://medium.com/@victoraremu/tweeting-from-your-favorite-text-editor-uhh-vs-code-tweet-94ad484fd7a5" rel="noopener noreferrer"&gt;https://medium.com/@victoraremu/tweeting-from-your-favorite-text-editor-uhh-vs-code-tweet-94ad484fd7a5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git Hub Repo&lt;br&gt;
&lt;a href="https://github.com/ahkohd/vscode-tweet" rel="noopener noreferrer"&gt;https://github.com/ahkohd/vscode-tweet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>extension</category>
      <category>general</category>
    </item>
    <item>
      <title>Search the web faster and smarter with Inline Search Chrome/Firefox extension</title>
      <dc:creator>Victor Aremu</dc:creator>
      <pubDate>Sat, 24 Nov 2018 14:08:16 +0000</pubDate>
      <link>https://dev.to/ahkohd/search-the-web-faster-and-smarter-with-inline-search-chromefirefox-extension-1dg4</link>
      <guid>https://dev.to/ahkohd/search-the-web-faster-and-smarter-with-inline-search-chromefirefox-extension-1dg4</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbnqvibjtql9kfjwqtqk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbnqvibjtql9kfjwqtqk6.png" alt="Inline Search"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently I was reading an article on Wikipedia and I came across this word which I had no idea of want it meant, but I was too famished by the article which made me reluctant to open a new tab to search for the meaning. I can recall soliloquizing “do I have to open a new tab to do this”.&lt;/p&gt;

&lt;p&gt;Spark, an idea just flashed in, why can’t I write an extension for Google Chrome and yes of course for Mozilla Firefox that can make me search stuffs with search engines without leaving the page. “Yeah for sure I would love too”, I said to my self as I continue to read the article.&lt;/p&gt;

&lt;p&gt;After reading I headed up to &lt;strong&gt;Figma&lt;/strong&gt; to make some design on the idea and after that a week rolled by as I eventually developed the extension.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Inline&lt;/strong&gt; search an extension for Chrome and Firefox that allows you to use your favorite search engines on the fly without having to open new tab. Get to search Google, Wikipedia, Bing and Yahoo as quickly as possible, all you just need to do is highlight what to search and hit the shortcut.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have a look at Inline Search in action while writing a post on medium.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZYo0EWe.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZYo0EWe.gif" alt="Inline Search in action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/inline-search/mihhpdfdjlgmpmgbajjfbepmfeedgnnj" rel="noopener noreferrer"&gt;Download Inline Search for Chrome&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/inline-search/" rel="noopener noreferrer"&gt;Download Inline Search for Firefox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inline Search source code is available on &lt;a href="https://github.com/ahkohd/Inline-Search" rel="noopener noreferrer"&gt;Github&lt;/a&gt; for contribution. Thanks!&lt;/p&gt;

</description>
      <category>chrome</category>
      <category>firefox</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
