<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tools on Techformist</title>
    <link>https://techformist.com/tags/tools/</link>
    <description>Recent content in Tools on Techformist</description>
    <image>
      <url>https://techformist.com/logo.svg</url>
      <link>https://techformist.com/logo.svg</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 25 Mar 2025 06:30:00 +0000</lastBuildDate><atom:link href="https://techformist.com/tags/tools/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introducing utils@techformist - A Developer&#39;s Swiss Army Knife</title>
      <link>https://techformist.com/free-developer-tools/</link>
      <pubDate>Tue, 25 Mar 2025 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/free-developer-tools/</guid>
      <description>&lt;p&gt;Today, I&amp;rsquo;m excited to introduce &lt;strong&gt;utils.techformist.com&lt;/strong&gt; – a collection of client-side web utilities designed to make developers&amp;rsquo; lives easier. Built with speed, simplicity, and privacy in mind, this tool suite aims to be your go-to resource for common development tasks.&lt;/p&gt;
&lt;h2 id=&#34;why-another-utility-site&#34;&gt;Why Another Utility Site?&lt;/h2&gt;
&lt;p&gt;The web is full of utility sites, but many come with drawbacks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intrusive ads and analytics&lt;/li&gt;
&lt;li&gt;Server-side processing of potentially sensitive data&lt;/li&gt;
&lt;li&gt;Slow loading times&lt;/li&gt;
&lt;li&gt;Inconsistent UI/UX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://utils.techformist.com&#34;&gt;utils.techformist.com&lt;/a&gt; addresses these issues by keeping everything client-side, ensuring your data never leaves your browser. The site loads quickly, works offline, and offers a clean, consistent interface for all tools.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today, I&rsquo;m excited to introduce <strong>utils.techformist.com</strong> – a collection of client-side web utilities designed to make developers&rsquo; lives easier. Built with speed, simplicity, and privacy in mind, this tool suite aims to be your go-to resource for common development tasks.</p>
<h2 id="why-another-utility-site">Why Another Utility Site?</h2>
<p>The web is full of utility sites, but many come with drawbacks:</p>
<ul>
<li>Intrusive ads and analytics</li>
<li>Server-side processing of potentially sensitive data</li>
<li>Slow loading times</li>
<li>Inconsistent UI/UX</li>
</ul>
<p><a href="https://utils.techformist.com">utils.techformist.com</a> addresses these issues by keeping everything client-side, ensuring your data never leaves your browser. The site loads quickly, works offline, and offers a clean, consistent interface for all tools.</p>
<p><img loading="lazy" src="/2025/great-developer-tools-free.png" type="" alt="great-developer-tools-free"  /></p>
<h2 id="key-features">Key Features</h2>
<h3 id="1-tools-that-you-want-to-use">1. Tools that you want to use!</h3>
<p>Our collection includes essential utilities that solve real problems :)</p>
<ul>
<li><strong>Calculator</strong>: A simple yet powerful calculator for quick arithmetic operations.</li>
<li><strong>QR Code Generator</strong>: Create QR codes for URLs, WiFi networks, contact details, and more with customizable colors.</li>
<li><strong>Password Generator</strong>: Generate secure, random passwords with options for length, character types, and complexity.</li>
<li><strong>Barcode Generator</strong>: Create various barcode formats with customizable settings for professional or personal use.</li>
<li><strong>Image Converter</strong>: Convert images between different formats without uploading them to any server.</li>
<li><strong>Favicon Generator</strong>: Quickly create favicons for your website from any image.</li>
<li><strong>Color Picker</strong>: Extract and analyze colors from images with support for multiple color formats.</li>
<li><strong>JSON Formatter</strong>: Format, validate, and beautify JSON data with easy-to-use controls and copy functionality.</li>
<li><strong>Base64 Converter</strong>: Encode and decode text or files to and from Base64 format right in your browser.</li>
</ul>
<p>.. and so on. Check out the site for the latest updates.</p>
<h3 id="2-fast-search-and-category-based-organization">2. Fast Search and Category-Based Organization</h3>
<p>A simple tool search is at the heart of the site!
At the same time, tools are organized into logical categories for easy discovery:</p>
<ul>
<li><strong>Code</strong>: Developer tools like JSON Formatter and Base64 Converter for everyday coding tasks</li>
<li><strong>Image</strong>: Tools for working with images, including QR Code Generator, Barcode Generator, Image Converter, and Favicon Generator</li>
<li><strong>Text</strong>: Text manipulation utilities like the Password Generator</li>
<li><strong>Design</strong>: Creative tools such as the Color Picker for design work</li>
<li><strong>File</strong>: File processing tools like the PDF Compressor</li>
<li><strong>Other</strong>: Miscellaneous utilities including the Calculator</li>
</ul>
<p>This categorization ensures you can quickly find the right tool for your current task.</p>
<h3 id="3-responsive-and-accessible-design">3. Responsive and Accessible Design</h3>
<p>All tools feature:</p>
<ul>
<li>Fully responsive layouts that work on devices of any size</li>
<li>Dark/light mode support</li>
</ul>
<h3 id="4-privacy-first-approach">4. Privacy-First Approach</h3>
<p>What sets util.techformist.com apart is its commitment to privacy:</p>
<ul>
<li>No tracking (except essentials)</li>
<li>No server-side processing</li>
<li>No data storage outside of the browser</li>
<li>No data transmission to any external computer outside of your own browser</li>
</ul>
<h2 id="technology-stack">Technology Stack</h2>
<p>Utils.techformist.com is built on modern web technologies:</p>
<ul>
<li><strong>Nuxt 3</strong>: For its excellent developer experience, automatic routing, and performance optimizations</li>
<li><strong>NuxtUI</strong>: Providing a consistent design system and accessible components</li>
<li><strong>Tailwind CSS</strong>: For rapid styling and responsive design</li>
</ul>
<p>The app is client-side only - no database or server processing.</p>
<h2 id="why-client-side-only">Why Client-Side Only?</h2>
<p>The decision to make util.techformist.com entirely client-side was deliberate:</p>
<ol>
<li><strong>Privacy</strong>: Your data never leaves your browser, eliminating privacy concerns.</li>
<li><strong>Performance</strong>: No server roundtrips means instant processing of your tasks.</li>
<li><strong>Availability</strong>: The site works offline once loaded.</li>
<li><strong>Scalability</strong>: Without server costs, the site can scale infinitely.</li>
<li><strong>Simplicity</strong>: The architecture remains clean without databases or APIs.</li>
</ol>
<h2 id="development-approach">Development Approach</h2>
<p>Building the site was straightforward with Nuxt&rsquo;s module system and NuxtUI&rsquo;s component library. The development workflow included:</p>
<ol>
<li>Setting up a Nuxt 3 project with the content and UI modules</li>
<li>Creating a consistent layout and navigation system</li>
<li>Implementing individual utility components</li>
<li>Ensuring responsive design with Tailwind</li>
<li>Optimizing for performance</li>
</ol>
<p>The entire project required no backend infrastructure, making deployment simple through static site hosting.
The site is hosted on Cloudflare Pages.</p>
<h2 id="looking-ahead">Looking Ahead</h2>
<p>Util.techformist.com is just getting started. Future plans include:</p>
<ul>
<li>Adding more utility tools based on user feedback!</li>
<li>Implementing more advanced features like tool chaining :)</li>
<li>Improving keyboard shortcuts and accessibility</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>Util.techformist.com represents my philosophy that web tools should be fast, private, and straightforward. By keeping everything in the browser, I&rsquo;ve created a resource that respects your data while providing genuinely useful functionality.</p>
<p>Give it a try at <a href="https://utils.techformist.com">utils.techformist.com</a> and let me know what you think.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Zoomit - Light-weight presentation and draw tool for Windows</title>
      <link>https://techformist.com/zoomit-annotate-draw-present-tool/</link>
      <pubDate>Sun, 28 May 2023 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/zoomit-annotate-draw-present-tool/</guid>
      <description>&lt;p&gt;I continue to be amazed by the depth of tools created by Sysinternals even after all the tools I have used over years. Zoomit is certainly one of them.&lt;/p&gt;
&lt;p&gt;Now, how many times have you wondered about making things a weebit exciting by drawing something on the screen while you are presenting stuff. Not taking screenshots and pasting in other programs, not using Powerpoint tools and not using video tools - just plain old &lt;code&gt;do things live&lt;/code&gt; and switch context, quickly.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I continue to be amazed by the depth of tools created by Sysinternals even after all the tools I have used over years. Zoomit is certainly one of them.</p>
<p>Now, how many times have you wondered about making things a weebit exciting by drawing something on the screen while you are presenting stuff. Not taking screenshots and pasting in other programs, not using Powerpoint tools and not using video tools - just plain old <code>do things live</code> and switch context, quickly.</p>
<p>Enter Zoomit, a lightweight gem that allows users to effortlessly zoom in, annotate, and draw on their screens, bringing presentations to life.</p>
<ul>
<li>light-weight program, super performant</li>
<li>requires less context switching &amp; shuffling windows</li>
<li>no additional devices needed - all you need is a keyboard &amp; mouse</li>
<li>free</li>
</ul>
<p>ZoomIt&rsquo;s superpower is its ability to annotate anything on your screen with ease. Whether you&rsquo;re giving a coding demo, dissecting complex diagrams, or discussing intricate details, you can effortlessly highlight and explain concepts.</p>
<p>Just hit the shortcut <code>Ctrl + 2</code> and you can -</p>
<ul>
<li>draw lines, shapes, &amp; arrows</li>
<li>Zoom to pointer</li>
<li>write directly on your slides or other applications in real-time</li>
<li>save a screenshot / recording with all the annotations</li>
</ul>
<p>Hit <code>Esc</code> and you can continue the amazing thing that you were doing.</p>
<p><img loading="lazy" src="/2023/annotate-using-zoomit.gif" type="" alt="annotate-using-zoomit"  /></p>
<p>Of course, you take more time when you get started since there is no window to interact with (except for the icon in the system tray). Once you get over that bump, you are going to be as productive as one can be.</p>
<p><a href="https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit">See more / download Zoomit</a> from Microsoft site.</p>
<p>Annoyances -</p>
<ol>
<li>Initial curve may put off people</li>
<li>Getting over the muscle memory of using <code>Ctrl+1</code> / <code>Ctrl+2</code> / etc. in many programs (especially tabs in browsers or in VSCode)</li>
</ol>
<p>Alternatives -</p>
<ul>
<li><a href="https://epicpen.com/">Epic Pen</a> has a free version &amp; looks great. You need a pro version for something basic like drawing rectangles</li>
<li><a href="https://apps.microsoft.com/store/detail/snipping-tool/9MZ95KL8MR0L">Microsoft Snip &amp; Sketch</a>: Comes with windows, or download from Appstore. Free, but the experience is not as pleasant - opens up a new window</li>
</ul>
<p>You can also choose to use <a href="https://support.microsoft.com/en-au/office/draw-and-write-with-ink-in-office-6d76c674-7f4b-414d-b67f-b3ffef6ccf53">Ink tools</a> from Microsoft on supported devices.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Valuable Site of the Month (Dec &#39;20) - Try Simple CSS Frameworks</title>
      <link>https://techformist.com/vsom-dec-2020/</link>
      <pubDate>Wed, 23 Dec 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/vsom-dec-2020/</guid>
      <description>&lt;p&gt;It is no secret that I am a fan of Vue and Vuetify / Quasar. While the styling libraries get stuff done real quick, I often do demo projects or throw-away sites that do not need the heavy hitters. While the project development may be quick and all they enjoy is a couple of hours of show-time, I cannot quite afford to show an app without some basic styling.&lt;/p&gt;
&lt;p&gt;Here are a couple of my favourite CSS libraries to the rescue -&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It is no secret that I am a fan of Vue and Vuetify / Quasar. While the styling libraries get stuff done real quick, I often do demo projects or throw-away sites that do not need the heavy hitters. While the project development may be quick and all they enjoy is a couple of hours of show-time, I cannot quite afford to show an app without some basic styling.</p>
<p>Here are a couple of my favourite CSS libraries to the rescue -</p>
<ul>
<li><a href="https://andybrewer.github.io/mvp/">MVP.css</a></li>
<li><a href="https://milligram.io">Milligram</a></li>
<li><a href="https://ajusa.github.io/lit/">lit.css</a></li>
</ul>
<p>I prefer a &ldquo;class-less&rdquo; approach to styling in quick projects -</p>
<ol>
<li>All I need is HTML and the styling is done</li>
<li>I get a head start and can sprinkle styling as I go deeper in the project</li>
</ol>
<p>While there are quite a few <a href="http://getskeleton.com/">skeleton.css</a> inspired libraries, there are a few challenges that come with them -</p>
<ol>
<li>A few elements that I deem as &ldquo;basic needs&rdquo; may be missing</li>
<li>Grids and the power of grids may vary greatly since most of these libraries are super light weight</li>
<li>Ability to extend the styling may vary</li>
</ol>
<p>In situations like these, and when I have to quickly decide a package to move forward, I turn to this website -
<a href="https://dohliam.github.io/dropin-minimal-css/">https://dohliam.github.io/dropin-minimal-css/</a></p>
<p><img loading="lazy" src="/2020/simple-css-preview-site.jpg" type="" alt="simple-css-preview-site"  /></p>
<p>This is a rather useful tool in your arsenal -</p>
<ul>
<li>get a bird&rsquo;s eye view of how the CSS styles look</li>
<li>get an overview of supported functions</li>
<li>compare different css frameworks quickly</li>
</ul>
<p>While rendering in a few libraries are wierd on the site, it no doubt provides a really good starting point if you are looking to explore and quickly try out &ldquo;simple&rdquo; and light-weight CSS libraries.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The Developer Tools I Use (2021 Edition)</title>
      <link>https://techformist.com/developer-tools-2021/</link>
      <pubDate>Wed, 29 Apr 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/developer-tools-2021/</guid>
      <description>&lt;p&gt;Here are the list of tools that I use in my developer life 🔥🔥.&lt;/p&gt;
&lt;p&gt;Almost all of the tools are free, or reasonably priced. We live in exciting times - a developer in a &amp;ldquo;developing country&amp;rdquo; can do business globally by using the most amazing tools that humankind has produced.&lt;/p&gt;
&lt;p&gt;Note before you scroll -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This will be a WIP post in perpetuity&lt;/li&gt;
&lt;li&gt;I am writing the post in mid 2020 and call it 2021 edition. If that does not convince you to stop reading, I am sure nothing can&lt;/li&gt;
&lt;li&gt;The list is focused on platforms and tools to make a developer&amp;rsquo;s life easier - I code mostly for the web (so YMMV)&lt;/li&gt;
&lt;li&gt;I consider programming platforms and languages &amp;ldquo;tools&amp;rdquo;, but they are covered at the very end so that you can rage quit this page after scrolling all the way down&lt;/li&gt;
&lt;li&gt;This is not an ad and I will gain little from you agreeing with me (maybe affiliate income to make me a millionaire by accumulating pennies - but those will be clearly suffixed with &lt;code&gt;afl&lt;/code&gt;, which stands for &lt;code&gt;affiliate link&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;You may not share my love for these tools and that is ok. Don&amp;rsquo;t waste your precious time to review, comment and try to justify why Pluto is not a planet (it is)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also - there is little of pretty pictures and marketing talk.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Here are the list of tools that I use in my developer life 🔥🔥.</p>
<p>Almost all of the tools are free, or reasonably priced. We live in exciting times - a developer in a &ldquo;developing country&rdquo; can do business globally by using the most amazing tools that humankind has produced.</p>
<p>Note before you scroll -</p>
<ul>
<li>This will be a WIP post in perpetuity</li>
<li>I am writing the post in mid 2020 and call it 2021 edition. If that does not convince you to stop reading, I am sure nothing can</li>
<li>The list is focused on platforms and tools to make a developer&rsquo;s life easier - I code mostly for the web (so YMMV)</li>
<li>I consider programming platforms and languages &ldquo;tools&rdquo;, but they are covered at the very end so that you can rage quit this page after scrolling all the way down</li>
<li>This is not an ad and I will gain little from you agreeing with me (maybe affiliate income to make me a millionaire by accumulating pennies - but those will be clearly suffixed with <code>afl</code>, which stands for <code>affiliate link</code>)</li>
<li>You may not share my love for these tools and that is ok. Don&rsquo;t waste your precious time to review, comment and try to justify why Pluto is not a planet (it is)</li>
</ul>
<p>Also - there is little of pretty pictures and marketing talk.</p>
<h2 id="coding">Coding</h2>
<h5 id="vscode"><a href="https://code.visualstudio.com/">VSCode</a></h5>
<p>It is 2020 and there is no reason for anyone to use any other code editor - except, maybe, if you can&rsquo;t download enough RAM.</p>
<p>I have nothing but gratitude for developers who created VSCode, and for the many many kind souls who created great extensions on it.</p>
<h5 id="github"><a href="https://github.com">Github</a></h5>
<p>Code + version control + some basic actions to automate tasks + host.</p>
<p>Next on my list of admiration - Github has simplified my code version control + backup. And, since I am a lesser mortal - I still do not have an &ldquo;all green&rdquo; <a href="https://github.com/prashanth1k">Github profile</a>.</p>
<p>Alternatives:</p>
<ul>
<li><a href="https://gitlab.com">Gitlab</a></li>
<li><a href="https://gitea.io/en-us/">Gitea</a> if you self-host</li>
</ul>
<h2 id="design">Design</h2>
<h3 id="logos">Logos</h3>
<h5 id="hatchful--shopify"><a href="https://hatchful.shopify.com/">Hatchful @ Shopify</a></h5>
<p>Hatchful was probably the first decent and easy enough logo creator that simply works. There are quite a few tools now but I still go back to Hatchful for every new product I create.</p>
<p>Alternatives:</p>
<ul>
<li><a href="https://www.namecheap.com/logo-maker/">Namecheap&rsquo;s Logo Maker</a>: the hipster variant</li>
<li><a href="https://logodust.com/">Logodust</a>: Open source logos</li>
<li><a href="https://logomakr.com/">LogoMakr</a>: Want to be more flexible and create your own simple logos? Well, use this online logo maker tool to do the right mix of one or more of many available icons, your own images, and a few fonts. It costs money for anything worth downloading though.</li>
<li><a href="https://www.fiverr.com/logo-maker/">Create logo online using the Fiverr logo tool</a></li>
<li><a href="https://www.fiverr.com/categories/graphics-design/creative-logo-design">Avail logo creation services</a></li>
</ul>
<h3 id="icons">Icons</h3>
<ul>
<li><a href="https://material.io/resources/icons/?style=baseline">Material Icons</a>: Because, you can&rsquo;t live without them.. and you are not quite delighted with them.</li>
<li><a href="https://materialdesignicons.com/">Material Design Icons</a>: .. because there aren&rsquo;t enough icons in this world.</li>
<li><a href="flaticon.com">flaticon.com</a>: You can now call me icon freak.</li>
</ul>
<h5 id="icon-generators">Icon Generators</h5>
<p>Generate icons in multitude of standard sizes.</p>
<ul>
<li><a href="https://favicomatic.com/">Favicomatic</a> - because app icon generators have aesthetic sense too</li>
<li><a href="https://www.favicon-generator.org/">Fav/app icon generator</a></li>
</ul>
<h3 id="images">Images</h3>
<p>What does a developer do with images?</p>
<h5 id="many-many-image-sites">Many many image sites</h5>
<ul>
<li><a href="https://www.pexels.com/">pexels.com</a></li>
<li><a href="https://pixabay.com/">pixabay.com</a></li>
</ul>
<h5 id="a-few-illustration-sites">A few illustration sites</h5>
<p>Whoever says no to illustrations.</p>
<ul>
<li><a href="https://undraw.co/illustrations">Undraw</a></li>
</ul>
<h2 id="desktop-power-tools">Desktop Power Tools</h2>
<h3 id="make-peace-with-your-os">Make peace with your OS</h3>
<ul>
<li><a href="https://cmder.net/">Cmder</a>: Saved me from searching from a dozen command line windows - now I can search with tabs instead. Slow to start than the new (in preview) Microsoft Terminal, but the features are far far too many for me to switch.</li>
<li><a href="https://docs.microsoft.com/en-us/windows/wsl/wsl2-install">WSL2</a>: I was holding my breath for the May 2020 release since May 2019 - Linux on Windows, fast Docker.</li>
<li><a href="https://ditto-cp.sourceforge.io/">Ditto Clipboard Manager</a>: Yes, you need that thing called clipboard manager.</li>
</ul>
<h3 id="media--presentation">Media &amp; Presentation</h3>
<ul>
<li>
<p><a href="https://getsharex.com/">ShareX</a>: Take screenshots and rejoice.</p>
</li>
<li>
<p><a href="https://www.cockos.com/licecap/">LICEcap</a>: Record quick demos through GIFs.</p>
</li>
</ul>
<h2 id="vps-website-hosting-and-such">VPS, Website Hosting and such</h2>
<ul>
<li><a href="https://netlify.com">Netlify</a>: The greatest host that the world has seen - for static sites</li>
<li><a href="https://www.hetzner.com/">Hetzner</a>: Cheap, reliable.</li>
<li><a href="https://m.do.co/c/9f3b578e40ef">Digital Ocean</a> <code>aff</code>: Location&rsquo;s everything, and there&rsquo;s certainly one near you. <a href="https://m.do.co/c/9f3b578e40ef">Link</a> gets you $60 credits.</li>
<li><a href="https://jelastic.cloud/">Jelastic</a>: Not in the mood to host? You should totally try out this PaaS.</li>
</ul>
<h5 id="inexpensive-wordpress-hosts">Inexpensive Wordpress Hosts</h5>
<ul>
<li><a href="https://www.a2hosting.com?aid=techformist&amp;bid=3d2e1f68">A2 hosting</a> <code>aff</code></li>
</ul>
<h5 id="domains">Domains</h5>
<ul>
<li><a href="https://www.cloudflare.com/products/registrar/">Cloudflare domains</a></li>
<li><a href="https://www.namesilo.com/?rid=aa26792ms">Namesilo</a> <code>aff</code></li>
</ul>
<p>Find domains and pricing -</p>
<ul>
<li><a href="https://www.domcomp.com/">Domcomp</a></li>
<li><a href="https://tld-list.com/tld/com">tld-list</a></li>
</ul>
<h2 id="website-development">Website Development</h2>
<h5 id="hugo"><a href="https://gohugo.io">Hugo</a></h5>
<p>The static site generator that is rumoured to have changed the speed of earth&rsquo;s rotation also happens to be the best at its job.</p>
<h5 id="gridsome"><a href="http://www.gridsome.com/">Gridsome</a></h5>
<p>And then God said - &ldquo;let there be a SSG that is SPA&rdquo;.</p>
<h5 id="wordpress"><a href="https://wordpress.org">Wordpress</a></h5>
<p>For those times when you need a website within 15 min flat.</p>
<h5 id="other">Other</h5>
<ul>
<li><a href="https://vuepress.vuejs.org/">Vuepress</a>: Create a really quick documentation site</li>
<li><a href="https://www.11ty.dev/">11ty</a>: The SSG that deserves a lot more love</li>
</ul>
<h2 id="programming-languages">Programming Languages</h2>
<p>I would have loved to query everything I admire, but that would have been the next <em><a href="https://en.wikipedia.org/wiki/Mahabharata">Mahabharata</a></em>. So, the list on programming languages (and platforms might I add) is focused on things I use at least six times an year.</p>
<h5 id="javascript"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">Javascript</a></h5>
<p>There is little in the world that makes this much sense.</p>
<h5 id="c"><a href="https://docs.microsoft.com/en-us/dotnet/csharp/">C#</a></h5>
<p>I would love to code everything in C# one day - but that day may never come.</p>
<h5 id="other-1">Other</h5>
<ul>
<li><a href="https://python.org">Python</a>: Oh.. I wish I knew more about this beautiful thing.</li>
<li><a href="http://golang.com/">Go</a>: Makes the world go round and round. Not quite, but it&rsquo;s super cool</li>
</ul>
<h2 id="application-development-frontend">Application Development: Frontend</h2>
<h5 id="vuejs"><a href="http://vuejs.org/">VueJS</a></h5>
<p>The framework that makes a lot of sense.</p>
<h5 id="svelte"><a href="https://svelte.dev/">Svelte</a></h5>
<p>Still on the fence on this one, but I use it anyway.</p>
<h5 id="styling-quasar">Styling: <a href="https://quasar.dev/">Quasar</a>:</h5>
<p>The best styling library + Vue-based UI framework that there is - many, many useful components and utilities</p>
<h5 id="styling-other">Styling: Other</h5>
<ul>
<li><a href="https://vuetifyjs.com/">Vuetify</a>: The most popular library for Vue</li>
<li><a href="https://buefy.org/">Buefy</a>: where performance matters</li>
</ul>
<h5 id="charts-echarts---apache">Charts: <a href="https://www.echartsjs.com/en/index.html">echarts - Apache</a></h5>
<p>You don&rsquo;t need any other charting library.</p>
<h2 id="application-development-backend">Application Development: Backend</h2>
<h5 id="node"><a href="https://nodejs.org/en/">Node</a></h5>
<p>This is the only thing that made sense, and still does :). If there is one thing from this planet that you want to take with you in a <a href="https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy">H2G2</a> situation - I choose Node.</p>
<p>Fast development, many useful libraries, and easy deployments.</p>
<p>Node comes prepackaged with <code>npm</code>, but you have to absolutely try -</p>
<ul>
<li><a href="https://github.com/pnpm/pnpm">pnpm</a> - save space, lots of space.</li>
<li><a href="https://classic.yarnpkg.com/en/">yarn</a> - fast, but headed in a new direction with v2</li>
</ul>
<h5 id="adonisjs"><a href="https://adonisjs.com/">AdonisJS</a></h5>
<p>Fast, light-weight, stable, and well-structured. The development is quite slow, and there is a smaller community - but this absolutely rocks the world (or whoever uses the framework).</p>
<h5 id="feathersjs"><a href="https://feathersjs.com/">FeathersJS</a></h5>
<p>Make service, not MVC.</p>
<h5 id="strapijs"><a href="https://strapi.io/">StrapiJS</a></h5>
<p>Been using it since alpha, one of the best free CMS&rsquo;s out there.</p>
<p>Alternatives:</p>
<ul>
<li><a href="https://www.keystonejs.com/">Keystone</a>: v5 has some great improvements, but I miss the template driven sites)</li>
</ul>
<h5 id="fastify"><a href="https://www.fastify.io/">Fastify</a></h5>
<p>The low-overhead framework.</p>
<h4 id="aspnet"><a href="https://dotnet.microsoft.com/apps/aspnet">ASP.net</a></h4>
<p>Not quite back-end alone. It is &ldquo;blazing&rdquo; its way forward, but I don&rsquo;t use it enough to show more love.</p>
<p>Also - industry-standard for the next twenty years, or until the world ends in 2050.</p>
<h2 id="application-development-supporting-tools">Application Development: Supporting Tools</h2>
<h5 id="chrome"><a href="https://www.google.com/chrome/">Chrome</a></h5>
<p>You didn&rsquo;t expect this - did you?</p>
<p>I may cry about Chrome performance all day, but the fact is simple - my debugging has never been easier.</p>
<p>Alternatives:</p>
<ul>
<li><a href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a> (duh?)</li>
</ul>
<h5 id="laragon"><a href="https://laragon.org/">Laragon</a></h5>
<p>Keep your webserver and databases organised - even when you don&rsquo;t use Laravel. Just like XAMPP and cousins, but much more flexible.</p>
<h5 id="db-tools">DB Tools</h5>
<ul>
<li><a href="https://www.heidisql.com/">HeidiSQL</a>: Small, fast, and invaluable DB client for MySQL. Works on Postgres as well - but with more meh.</li>
</ul>
<h5 id="testing">Testing</h5>
<ul>
<li><a href="https://insomnia.rest/">Insomnia</a>: Test your APIs like there&rsquo;s no tomorrow</li>
</ul>
<h5 id="prettier"><a href="https://prettier.io/">Prettier</a></h5>
<p>Deserves a mention even though it is plugged into the code editor or linter. Has probably saved thousands of hours that would have otherwise been spent on aligning lines, brackets, and educating others on how to <code>tab</code> (and why <code>space</code> is a bad idea; and don&rsquo;t even get me started on lazies who ignore semicolon).</p>
<h5 id="regex-101"><a href="https://regex101.com/">Regex 101</a></h5>
<p>&ldquo;Regex is easy&rdquo;, said no one.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Test Email Functionality During Development</title>
      <link>https://techformist.com/test-email-functionality-development/</link>
      <pubDate>Wed, 12 Feb 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/test-email-functionality-development/</guid>
      <description>&lt;p&gt;Here are a few simple ways and powerful tools to test your email functionality when you are developing your awesome application.&lt;/p&gt;
&lt;h2 id=&#34;the-case-for-email-testing&#34;&gt;The Case for Email Testing&lt;/h2&gt;
&lt;p&gt;After working in CRM and dealing with millions of records, and dozens of fragile&amp;rsquo;ly built systems, I have been through imagined (and a couple of real) scenarios of email fiascos -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sending out emails with wrong templates or to the wrong audience&lt;/li&gt;
&lt;li&gt;Sending emails in bulk from the wrong environment (good luck explaining that to an infuriated CTO)&lt;/li&gt;
&lt;li&gt;Wrong configuration that breaks tracing and you are left wondering whatever happened to the last email blast which did not record a single click&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While many of the systems I deal with are on cloud and we have to figure out intelligent ways to manage emails like domain forwarding, custom whitelisting, or outright ban emails - there are many custom systems that can provide better tooling. We can do quite a lot with free, simple-to-use services that can be deployed locally on a developer machine to fast-forward development.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Here are a few simple ways and powerful tools to test your email functionality when you are developing your awesome application.</p>
<h2 id="the-case-for-email-testing">The Case for Email Testing</h2>
<p>After working in CRM and dealing with millions of records, and dozens of fragile&rsquo;ly built systems, I have been through imagined (and a couple of real) scenarios of email fiascos -</p>
<ol>
<li>Sending out emails with wrong templates or to the wrong audience</li>
<li>Sending emails in bulk from the wrong environment (good luck explaining that to an infuriated CTO)</li>
<li>Wrong configuration that breaks tracing and you are left wondering whatever happened to the last email blast which did not record a single click</li>
</ol>
<p>While many of the systems I deal with are on cloud and we have to figure out intelligent ways to manage emails like domain forwarding, custom whitelisting, or outright ban emails - there are many custom systems that can provide better tooling. We can do quite a lot with free, simple-to-use services that can be deployed locally on a developer machine to fast-forward development.</p>
<p>Here are a few tools that can help.</p>
<h2 id="fakesmtp">FakeSMTP</h2>
<p><a href="http://nilhcem.com/FakeSMTP/index.html">FakeSMTP</a> is a simple and straightforward solution to &ldquo;catch&rdquo; emails locally.</p>
<p>Using the program is simple enough -</p>
<ul>
<li>Download FakeSMTP, a stand-alone <code>jar</code> file, and run it</li>
<li>Start on the server (runs on default SMTP port, but is configurable)</li>
<li>Start sending emails to SMTP and see the flow of emails within the FakeSMTP program. You open emails with the default mail program on your system</li>
</ul>
<p><img loading="lazy" src="/2020/fakesmtp-email-testing.png" type="" alt="fakesmtp-email-testing"  /></p>
<p>At 2 MB and a minimal footprint, catching mails in development does not get better than this.</p>
<h2 id="papercut">Papercut</h2>
<p><a href="https://github.com/ChangemakerStudios/Papercut">Papercut</a> has a better overall UI and pleasing functions.</p>
<p>You install the program and start sending emails to the port. Papercut -</p>
<ol>
<li>Has its own viewer that emulates common email programs to show how your email appears to end user</li>
<li>Displays notifications whenever an email arrives</li>
</ol>
<p><img loading="lazy" src="/2020/papercut-email-test.png" type="" alt="papercut-email-test"  /></p>
<p><em>src:<a href="https://github.com/ChangemakerStudios/Papercut-SMTP">Papercut website</a></em></p>
<p>Papercut is a polished product with well-written documentation and is a pleasure to use.</p>
<h2 id="smtp4dev">SMTP4Dev</h2>
<p>If you don&rsquo;t like either of the above options or want to see an alternative - check out SMTP4Dev.</p>
<p>Don&rsquo;t let that name fool you - it exactly does what the name says, and does a really good job too!</p>
<p>SMTP4Dev is a good &lsquo;mail catcher&rsquo; program with its own viewer, and is well suited for those apps that extensively test emails. The inbuilt viewer makes the process of manual testing fast and you can start failing those email test cases quite efficiently.</p>
<p><img loading="lazy" src="/2020/smtp4dev-email-local-development.png" type="" alt="smtp4dev-email-local-development"  /></p>
<p><em>src: <a href="https://github.com/rnwood/smtp4dev">smtp4dev GitHub page</a></em></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Free Excel Template for Scrum Projects</title>
      <link>https://techformist.com/free-agile-scrum-excel-template/</link>
      <pubDate>Wed, 29 Jan 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/free-agile-scrum-excel-template/</guid>
      <description>&lt;p&gt;Excel is the only program you need to survive in IT. So, how about a template for tracking tasks in an Agile Scrum project?&lt;/p&gt;
&lt;h2 id=&#34;why-scrum&#34;&gt;Why Scrum?&lt;/h2&gt;
&lt;p&gt;If you are looking for the answer on why agile / scrum -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You are in the wrong site&lt;/li&gt;
&lt;li&gt;That is well beyond the scope of this post&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In short: Scrum is a framework to run your project using Agile methodologies. Scrum&amp;rsquo;s objectives are -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Self-organise&lt;/li&gt;
&lt;li&gt;Learn by doing things and through experience&lt;/li&gt;
&lt;li&gt;Continuously improve&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Read more on &lt;a href=&#34;https://www.atlassian.com/agile/scrum&#34;&gt;Atlassian&amp;rsquo;s site.&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Excel is the only program you need to survive in IT. So, how about a template for tracking tasks in an Agile Scrum project?</p>
<h2 id="why-scrum">Why Scrum?</h2>
<p>If you are looking for the answer on why agile / scrum -</p>
<ol>
<li>You are in the wrong site</li>
<li>That is well beyond the scope of this post</li>
</ol>
<p>In short: Scrum is a framework to run your project using Agile methodologies. Scrum&rsquo;s objectives are -</p>
<ol>
<li>Self-organise</li>
<li>Learn by doing things and through experience</li>
<li>Continuously improve</li>
</ol>
<p>Read more on <a href="https://www.atlassian.com/agile/scrum">Atlassian&rsquo;s site.</a></p>
<p>The stated objectives for Scrum need a simple to use, centralised store - which an Excel document is generally not. But, I don&rsquo;t let all that come in the way to create a beautiful template.</p>
<h2 id="download-excel-template">Download Excel Template</h2>
<p>If you like to live on the edge and download from any website -</p>
<p><a href="/misc/scrum_project_template.xlsx">Download free Scrum Excel-template</a>.</p>
<p>If you are not that naive, you can check out what this template can do (or even copy the workbook) on Google Sheets.</p>
<p>See the action on <a href="https://docs.google.com/spreadsheets/d/1RzQTkJvsElzVP1aHj49nfHdmFiedEzAnauqm1dqHCZ8/edit?usp=sharing">Google Docs</a>.</p>
<p>The template is -</p>
<ul>
<li>free to use for any kind of project</li>
<li>released to public domain - see the sole exception in the terms below</li>
</ul>
<p>You can stop reading now, and get back to work in 99.99% of the cases.</p>
<h2 id="why-use-excel-to-track-scrum-and-why-this-template">Why use Excel to track Scrum and why this template?</h2>
<ul>
<li>There are smaller teams that rely on part-time developers who don&rsquo;t want overhead</li>
<li>Small teams may discuss on &ldquo;stuff&rdquo; and move on with work, and don&rsquo;t particularly care about documenting everything</li>
<li>Simple projects may not have the budget to organise things</li>
</ul>
<p>And yes, I know that these are excuses for not creating a &ldquo;usable&rdquo; tool. But organisations continue to live in a bubble.</p>
<p>So, here we are.</p>
<p>Using this template you can -</p>
<ol>
<li>track projects and sprints</li>
<li>track backlog, impediments and retrospective remarks</li>
<li>record effort against tasks (which can relate back to backlog)</li>
<li>summarise effort and show beautiful charts</li>
</ol>
<p>There are no fancy formulae, macros, and automation to take the dog on a walk when you work.</p>
<p>All that said, I think no one should use Excel templates for use cases like this. But I really can&rsquo;t quite preach something else when I have been an ardent fan of their simplicity.</p>
<h2 id="terms-of-use">Terms of Use</h2>
<p>No terms, really. You can do what you want with this template.</p>
<p>But, I would appreciate if you could donate a dollar or more to the nearest charity, or to a person in need.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>No Tracking Information Error in Git</title>
      <link>https://techformist.com/no-tracking-information-error-git/</link>
      <pubDate>Mon, 11 Nov 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/no-tracking-information-error-git/</guid>
      <description>&lt;p&gt;Aren&amp;rsquo;t you following the right way to git? Are you frustrated with the message &amp;ldquo;There is no tracking information for the current branch&amp;rdquo;? Keep calm and read on.&lt;/p&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I create new Git repositories all the time - just like any other developer. I am too stupid to notice the small things and learn my lessons - unlike any other developer.&lt;/p&gt;
&lt;p&gt;Often I mix up creating repositories on the GitHub website and in local computer, thereby confusing Git. I happily create a repository with a README, add remote URL, try to do a &lt;code&gt;pull&lt;/code&gt;..&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Aren&rsquo;t you following the right way to git? Are you frustrated with the message &ldquo;There is no tracking information for the current branch&rdquo;? Keep calm and read on.</p>
<h2 id="the-problem">The Problem</h2>
<p>I create new Git repositories all the time - just like any other developer. I am too stupid to notice the small things and learn my lessons - unlike any other developer.</p>
<p>Often I mix up creating repositories on the GitHub website and in local computer, thereby confusing Git. I happily create a repository with a README, add remote URL, try to do a <code>pull</code>..</p>
<pre tabindex="0"><code>git pull origin master
</code></pre><p>.. and, what do I get? Lo and behold..</p>
<pre tabindex="0"><code>    From https://github.com/techformist/super_hero_project
    * branch            master     -&gt; FETCH_HEAD
    fatal: refusing to merge unrelated histories
</code></pre><p>The solution is simple, but before that - let&rsquo;s see the normal flow.</p>
<h2 id="the-normal-and-abnormal-flows-for-a-new-project">The Normal and Abnormal Flows for a New Project</h2>
<ol>
<li>Create repository on GitHub site, or using GitHub Desktop</li>
<li>Add files like README or license, or don&rsquo;t</li>
<li>Follow the helpful instructions to get the repository setup in local computer</li>
</ol>
<pre tabindex="0"><code>git init
git remote add origin https://github.com/techformist/super_hero_project
git push -u origin master
</code></pre><p>Simple.</p>
<p>Apparently I can&rsquo;t follow instructions.</p>
<p>So, I do -</p>
<ol>
<li>Create project locally. Add a few useless programs, scripts and files</li>
<li>Do a <code>git init</code></li>
<li>Create a repository on GitHub a few days later</li>
<li>Add a README, license directly on GitHub. Because, why not</li>
<li>Add remote to local and try to sync <code>git pull origin master</code></li>
</ol>
<p>Of course, there&rsquo;s an error. Git sees changes on server and changes on local. It cannot just pull server to local.</p>
<p>Almost all the time, I revert to the below simple remedy.</p>
<pre tabindex="0"><code>git pull origin master --allow-unrelated-histories
</code></pre><p>This allows Git to pull stuff from server while retaining the local files. I can add them local files to the master branch and continue like nothing&rsquo;s wrong with the world.</p>
<p>Another way to avoid the error is to create an empty repository on GitHub and avoid creating any files at the very beginning. Push local changes / sync, and from then on you can create files anywhere without antagonising Git.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Email for NodeJS app using separate server on CPanel</title>
      <link>https://techformist.com/email-host-app-server-cpanel/</link>
      <pubDate>Fri, 25 Oct 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/email-host-app-server-cpanel/</guid>
      <description>&lt;p&gt;Configure email server on a third party host using CPanel, while continuing your app server on your favourite VPS.&lt;/p&gt;
&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;Typically I configure email server to be on the same server as my NodeJS / PHP app.&lt;/p&gt;
&lt;p&gt;Bad practice? Sure. But, it works just fine for the kind of applications that I write. I can see how horribly this can go wrong though -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Your app server goes down and you have no way to send communication to your users&lt;/li&gt;
&lt;li&gt;Mail servers simply get more spam, more probes - this keeps the server busy for no reason. This means your main app can suffer&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are simply better ways to design, without breaking the bank or introducing any complexity - we can just shift mail handling to an external party.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Configure email server on a third party host using CPanel, while continuing your app server on your favourite VPS.</p>
<h3 id="background">Background</h3>
<p>Typically I configure email server to be on the same server as my NodeJS / PHP app.</p>
<p>Bad practice? Sure. But, it works just fine for the kind of applications that I write. I can see how horribly this can go wrong though -</p>
<ol>
<li>Your app server goes down and you have no way to send communication to your users</li>
<li>Mail servers simply get more spam, more probes - this keeps the server busy for no reason. This means your main app can suffer</li>
</ol>
<p>There are simply better ways to design, without breaking the bank or introducing any complexity - we can just shift mail handling to an external party.</p>
<h3 id="what-exactly-is-the-architecture">What exactly is the architecture?</h3>
<p>Quite simple.</p>
<ul>
<li>My application on NodeJS continues to reside on VPS (let&rsquo;s call this &ldquo;App IP&rdquo;)</li>
<li>Mail server is shifted to another server</li>
</ul>
<p>I could potentially use another VPS box and run Postfix (&amp; associated paraphernalia). If I had been using Virtualmin or any such tools, I could potentially clone the virtual server and make it easier.</p>
<p>However, I am quite frustrated on the issues maintaining Postfix (and friends) by myself. And, I had a few CPanel based cheaper hosting solutions lying around in my inventory. So, I just took the easy way out.</p>
<p>I went ahead and configured CPanel to accept emails for my app.</p>
<h3 id="why-is-this-a-big-deal">Why is this a big deal?</h3>
<p>There is nothing to this, really. But, it was indeed a learning experience for me - an inexperienced system admin, do-it-all, and mess-it-all guy.</p>
<p>The major issue was with the domain management.</p>
<p>DNS configuration is quite simple for an application with everything on a VPS. I just point the name server to the ones I configured on VPS, or point the A record to the specific VPS IP.</p>
<p>The MX record, which is responsible for receiving mails, just points to fully qualified domain name (FQDN) used by the &lsquo;A&rsquo; record pointing to App IP.</p>
<p>For a domain on any of the popular domain service providers, the configuration looks like this -</p>
<table>
  <thead>
      <tr>
          <th>Host Name</th>
          <th>Type</th>
          <th>Address/Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>domain.com</td>
          <td>A</td>
          <td>105.1.1.1</td>
      </tr>
      <tr>
          <td>domain.com</td>
          <td>MX</td>
          <td>domain.com</td>
      </tr>
  </tbody>
</table>
<p>This will enable mail for <code>@domain.com</code> addresses, and your application serves HTTP requests on ports designated in the web server on App IP.</p>
<p>If you throw an external web server in the mix, you land in a bit of a pickle for DNS configuration -</p>
<ul>
<li>MX cannot point to an IP</li>
<li>You cannot just create another &lsquo;A&rsquo; record pointing to a different IP</li>
</ul>
<p>** Bad configuration **</p>
<table>
  <thead>
      <tr>
          <th>Host Name</th>
          <th>Type</th>
          <th>Address/Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>domain.com</td>
          <td>A</td>
          <td>105.1.1.1</td>
      </tr>
      <tr>
          <td>domain.com</td>
          <td>A</td>
          <td>75.1.1.1</td>
      </tr>
      <tr>
          <td>domain.com</td>
          <td>MX</td>
          <td>domain.com</td>
      </tr>
  </tbody>
</table>
<p>&lsquo;A&rsquo; record will round-robin requests. So your app requests can go to the new &lsquo;Mail IP&rsquo; or your mails can ping &lsquo;App IP&rsquo; for mail handling.</p>
<h3 id="solution">Solution</h3>
<p>There are two parts to the solution.</p>
<ol>
<li>Your DNS configuration will have to revert to a recommended practice of using a prefix to the domain</li>
<li>CPanel on mail server needs to understand that <code>mail.domain.com</code> is an alias for <code>domain.com</code> email address</li>
</ol>
<p>First, configure the DNS using tools provided by your domain name service provider.</p>
<table>
  <thead>
      <tr>
          <th>Host Name</th>
          <th>Type</th>
          <th>Address/Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>domain.com</td>
          <td>A</td>
          <td>105.1.1.1</td>
      </tr>
      <tr>
          <td>mail.domain.com</td>
          <td>A</td>
          <td>75.1.1.1</td>
      </tr>
      <tr>
          <td>domain.com</td>
          <td>MX</td>
          <td>mail.domain.com</td>
      </tr>
  </tbody>
</table>
<p>Next, go to <strong>CPanel</strong> &gt; <strong>Domains</strong> &gt; <strong>Zone Editor</strong> and enable it to manage requests to <code>mail.domain.com</code>.</p>
<table>
  <thead>
      <tr>
          <th>Host Name</th>
          <th>Type</th>
          <th>Address/Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>domain.com</td>
          <td>MX</td>
          <td>mail.domain.com</td>
      </tr>
      <tr>
          <td>mail.domain.com</td>
          <td>A</td>
          <td>75.1.1.1</td>
      </tr>
  </tbody>
</table>
]]></content:encoded>
    </item>
    
    <item>
      <title>Fake GraphQL APIs for Testing</title>
      <link>https://techformist.com/fake-graphql-API-test/</link>
      <pubDate>Mon, 02 Sep 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/fake-graphql-API-test/</guid>
      <description>&lt;p&gt;Speed up your GraphQL learning with fake GraphQL APIs!&lt;/p&gt;
&lt;p&gt;I love &lt;a href=&#34;https://jsonplaceholder.typicode.com/&#34;&gt;JSON Placeholder&lt;/a&gt;, but it serves only REST requests. I had been looking for something similar in GraphQL. Without longer-term, reliable options, I had reverted to &lt;a href=&#34;https://techformist.com/spin-up-your-own-local-graphql-server-within-15-min/&#34;&gt;creating my own fake GraphQL server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While having my own server is certainly useful, it can become a pain to demonstrate or outline a feature to all - either through a video, blog post, or in public forums.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Speed up your GraphQL learning with fake GraphQL APIs!</p>
<p>I love <a href="https://jsonplaceholder.typicode.com/">JSON Placeholder</a>, but it serves only REST requests. I had been looking for something similar in GraphQL. Without longer-term, reliable options, I had reverted to <a href="/spin-up-your-own-local-graphql-server-within-15-min/">creating my own fake GraphQL server</a>.</p>
<p>While having my own server is certainly useful, it can become a pain to demonstrate or outline a feature to all - either through a video, blog post, or in public forums.</p>
<p>Enter <a href="https://graphqlzero.almansi.me">GraphQLZero</a>.</p>
<p>GraphQLZero provides an API playground that you can use to quickly test your GraphQL clients, or put forward a point while demonstrating the client-side code.</p>
<p><img loading="lazy" src="/misc/graphql-faker-app.jpg" type="" alt=""  /></p>
<p>The app features GraphiQL interface that outlines the API documents, taking full advantage of self-documenting abilities of GraphQL.</p>
<p>I understand this is too early to get excited since there have been comparable services in the past. The challenge for the authors/maintainers will be to manage traffic and find ways to sustainably manage the application over a long term.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Modern Desktop UI Using Javascript and Qt</title>
      <link>https://techformist.com/modern-desktop-ui-javascript-qt/</link>
      <pubDate>Sat, 17 Aug 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/modern-desktop-ui-javascript-qt/</guid>
      <description>&lt;p&gt;One of the interesting projects that I came across recently was &lt;a href=&#34;https://github.com/nodegui/nodegui&#34;&gt;NodeGUI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NodeGUI describes itself as an enabler to build cross-platform desktop applications using Javascript (and React) and Qt5.&lt;/p&gt;
&lt;p&gt;Using NodeGUI, you should be able to -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create desktop applications that run on Windows, Linux or MacOS&lt;/li&gt;
&lt;li&gt;Styling with CSS&lt;/li&gt;
&lt;li&gt;Support for desktop events that are listenable from Qt&lt;/li&gt;
&lt;li&gt;Lower CPU/memory footprint&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://techformist.com/misc/nodejs-qt-reactjs-screenshot.png&#34; type=&#34;&#34; alt=&#34;&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;Of course, the comparison with Electron is evident.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One of the interesting projects that I came across recently was <a href="https://github.com/nodegui/nodegui">NodeGUI</a>.</p>
<p>NodeGUI describes itself as an enabler to build cross-platform desktop applications using Javascript (and React) and Qt5.</p>
<p>Using NodeGUI, you should be able to -</p>
<ul>
<li>Create desktop applications that run on Windows, Linux or MacOS</li>
<li>Styling with CSS</li>
<li>Support for desktop events that are listenable from Qt</li>
<li>Lower CPU/memory footprint</li>
</ul>
<p><img loading="lazy" src="/misc/nodejs-qt-reactjs-screenshot.png" type="" alt=""  /></p>
<p>Of course, the comparison with Electron is evident.</p>
<p><a href="https://electronjs.org/">Electron</a> also enables you to create desktop applications using Javascript. It started producing some heavy applications, but has improved leaps and bounds to produce really good applications.</p>
<p>However, Electron still runs within Chromium. Electron applications provide a good user experience, but they are still constrained to run on a heavier base and (theoritically) be constrained on what they could do on the desktop.</p>
<p>Qt on the other hand can go one level down towards the metal. Qt has been there for ever, is popular on Linux-based systems - and more importantly, it has been known to be fast and having an &lsquo;almost&rsquo; native-like experience.</p>
<p>Qt applications can also be compiled, which is a huge thing for IP, so can nw.js but I digress), and they have also been used in devices like TVs and embedded devices, mobile devices, and more.</p>
<p>At a high level, React (or Javascript) + Qt5 seems a really good combination. It remains to be seen whether organizations and product vendors find it a compelling enough case to invest in Qt as a product.</p>
<ul>
<li>There is a commercial company behind Qt (which is excellent, but may not get backing as easily as a completely open source product)</li>
<li>The open source version of Qt is LGPL licensed - not quite comforting to the average industry guy</li>
</ul>
<p>My bigger bet will be on Flutter as of today (or a combination of Flutter and Blazor :)).</p>
<p>I am super hopeful about a bright future for &ldquo;native&rdquo; applications on desktop using platforms that combine the ease of web development + power of desktop. At the same time I am not too sure about whether anyone other than niche application developers care too much about such innovations. As we see more and more of PWAs and web assembly, I would rather build an application that runs across <em>web and all devices</em> rather than just <em>all desktop platforms</em>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Git in VSCode</title>
      <link>https://techformist.com/git-in-vscode/</link>
      <pubDate>Thu, 01 Aug 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/git-in-vscode/</guid>
      <description>&lt;p&gt;I have been a great admirer and user of command line tools. They reduce so much time and energy while getting things done. But, on the other hand I have not been a reasonably good user of Git by itself. I could never come to terms with typing in one too many statements to get to where I was going.&lt;/p&gt;
&lt;p&gt;For example -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compare changes with previous version&lt;/li&gt;
&lt;li&gt;Check who did changes in a specific version&lt;/li&gt;
&lt;li&gt;Revert to previous version&lt;/li&gt;
&lt;li&gt;Check changes to stage / commit, and periodically commit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These and many more require far too many commands. These commands were sometimes coded in batch files and copied/pasted whenever I needed them. I just could not remember everything - probably not as good a user of Git as I would like to believe.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have been a great admirer and user of command line tools. They reduce so much time and energy while getting things done. But, on the other hand I have not been a reasonably good user of Git by itself. I could never come to terms with typing in one too many statements to get to where I was going.</p>
<p>For example -</p>
<ol>
<li>Compare changes with previous version</li>
<li>Check who did changes in a specific version</li>
<li>Revert to previous version</li>
<li>Check changes to stage / commit, and periodically commit</li>
</ol>
<p>These and many more require far too many commands. These commands were sometimes coded in batch files and copied/pasted whenever I needed them. I just could not remember everything - probably not as good a user of Git as I would like to believe.</p>
<p>VSCode changed all that.</p>
<p>VSCode takes GUI for Git to a whole new level. The source code tab along with features offered by a couple of plugins made me appreciate just how productive I could be using the humble version control.</p>
<p><img loading="lazy" src="/misc/git-version-control-vscode.jpg" type="" alt=""  /></p>
<ul>
<li>See changes made since last commit without leaving the main code editor</li>
<li>Check who made changes and when (<a href="https://gitlens.amod.io/">GitLens plugin</a>) with one click or shortcut key</li>
<li>Diff across versions within editor and quickly make changes</li>
<li>Selectively stage changes</li>
</ul>
<p>Previously I have been an infrequent user of GitHub Desktop - could never incorporate the tool in my development flow. VSCode has done an excellent job in keeping developer workflow at the centre of everything. Fast forward 6-8 months of using the Git features, I doubt if I ever go back to the previous way of doing things.</p>
<p>VSCode has been an excellent example of how GUI can supplement the power of command line and make development easier for all.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Create static sites in Vue using Gridsome</title>
      <link>https://techformist.com/create-static-sites-vue-gridsome/</link>
      <pubDate>Sun, 24 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/create-static-sites-vue-gridsome/</guid>
      <description>&lt;p&gt;I love the simplicity, speed and awesomeness of static sites. I also happen to love Vue for its power, simplicity and its feature set that makes development that much easier.&lt;/p&gt;
&lt;p&gt;So, what will happen when Vue is combined with static sites?&lt;/p&gt;
&lt;p&gt;Awesome &lt;a href=&#34;https://gridsome.org&#34;&gt;Gridsome&lt;/a&gt; - that&amp;rsquo;s what.&lt;/p&gt;
&lt;p&gt;Gridsome describes itself as a Vue-powered site generator. Use Vue to design your site on top of Gridsome framework, and write your content in markdown, and generate complete HTML pages for your content that is complete in all respects.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I love the simplicity, speed and awesomeness of static sites. I also happen to love Vue for its power, simplicity and its feature set that makes development that much easier.</p>
<p>So, what will happen when Vue is combined with static sites?</p>
<p>Awesome <a href="https://gridsome.org">Gridsome</a> - that&rsquo;s what.</p>
<p>Gridsome describes itself as a Vue-powered site generator. Use Vue to design your site on top of Gridsome framework, and write your content in markdown, and generate complete HTML pages for your content that is complete in all respects.</p>
<p><img loading="lazy" src="/misc/gridsome-vue-static-sites.png" type="" alt=""  /></p>
<p>The awesomeness includes -</p>
<ul>
<li>Use the ever-developing theme framework of Gridsome to quickly incorporate design elements</li>
<li>Connect to other data sources like Wordpress, Contentful or any other headless CMS. The content is pulled in at the time of site generation (and you could use GraphQL!)</li>
<li>Your sites appear to be faster - navigation is similar to a SPA</li>
<li>Once generated, host your sites anywhere - they are just static files. You can leverage the speed of GitHub pages, or use GitLab, host on Netlify for free, or just use a CDN. Anything&rsquo;s possible.</li>
<li>Your sites will also work offline - thanks to the built-in PWA features</li>
</ul>
<p>I spent some quality time evaluating Gridsome for this very blog, but postponed the decision due to &rsquo;logistical&rsquo; reasons (and because I am a bit lazy). Typically though, you can use Netlify to host your sites, have your content on GitHub, and forget about everything else. Netlify will build your sites and host for free.</p>
<p><img loading="lazy" src="/misc/techformist-gridsome-sample.png" type="" alt=""  /></p>
<h3 id="alternatives">Alternatives</h3>
<p><strong>Static sites in Javascript</strong></p>
<p>There is no beating the fact that <a href="https://www.gatsbyjs.org/">Gatsby</a> is the most popular static site generator in the Javascript world - by a huge margin. The starter sites/themes, community help and plugins are really good.</p>
<p>However, when it comes to Vue, the options come down to Gridsome and Vuepress. Vuepress can be used for general purpose websites and blogs, but that is not its official purpose. Vuepress serves documentation really well. Being the official product, Vuepress may receive more love for generic sites, but that is far away in the future.</p>
<p>Nuxt and Next can do many more things than just generate static sites, but those are a couple of powerful options if you want to use them anyway. Sapper (Svelte ++ ) is also in this territory.</p>
<p>While I do acknowledge <a href="https://www.11ty.io/">11ty</a>, <a href="https://hexo.io/">Hexo</a> et. al. - the more modern frameworks like Gridsome are a class apart IMO.</p>
<p><strong>Other SSGs</strong></p>
<p>Hugo is my favourite SSG at this time - it is dead simple, Go template language is fairly easy to understand, and has quite a few themes that you can get started with.</p>
<p>Jekyll is ancient but active. I would advise against Jekyll unless you are comfortable with Ruby. Don&rsquo;t get me wrong - you can use Jekyll and its various themes (even customize them using the templating features), but sooner or later you would want to do something that is not possible within the templates themselves. The advantage with Jekyll is the ability to create Jekyll sites on GitHub and GitHub pages can compile pages without any additional build setup.</p>
<p>For a full list of other SSGs, go over to <a href="https://www.staticgen.com/">https://www.staticgen.com/</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Create your Own Javascript Playground</title>
      <link>https://techformist.com/create-your-own-javascript-playground/</link>
      <pubDate>Sat, 23 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/create-your-own-javascript-playground/</guid>
      <description>&lt;p&gt;I write quite a bit of Javascript on a day to day basis. But, I have a poor memory and keep forgetting things.&lt;/p&gt;
&lt;p&gt;Things like how I should be using a certain function the right way.&lt;/p&gt;
&lt;p&gt;This is where web applications like &lt;a href=&#34;https://jscomplete.com/playground&#34;&gt;https://jscomplete.com/playground&lt;/a&gt; help. But it is not a pleasant experience to have blocks of incomplete code lying around in jscomplete, and keep executing few other parts of the program.&lt;/p&gt;
&lt;p&gt;I use the following tools to quickly know how to write a piece of functionality, or quickly test parts of code/components.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I write quite a bit of Javascript on a day to day basis. But, I have a poor memory and keep forgetting things.</p>
<p>Things like how I should be using a certain function the right way.</p>
<p>This is where web applications like <a href="https://jscomplete.com/playground">https://jscomplete.com/playground</a> help. But it is not a pleasant experience to have blocks of incomplete code lying around in jscomplete, and keep executing few other parts of the program.</p>
<p>I use the following tools to quickly know how to write a piece of functionality, or quickly test parts of code/components.</p>
<h5 id="use-nodemon">Use Nodemon</h5>
<p>Nodemon automatically restarts node server and enable us to test code changes without the need to restart node manually. I use nodemon to test individual javascript files as well.</p>
<p>Install nodemon globally - <code>npm i -g nodemon</code>.</p>
<p>Start testing:</p>
<ol>
<li>Create hello.js</li>
<li>Open terminal within VS Code. Type <code>nodemon hello.js</code></li>
<li>nodemon will start printing any output statements. Do changes, save and boom - you have the output</li>
</ol>
<p>The only inconvenience is the need for <code>console</code> statements - but I have actually gone <code>console</code> blind.</p>
<h5 id="quokkajs">QuokkaJS</h5>
<p>Quokka JS evaluates your Javascript in real-time and shows the results. Quokka has a VSCode plugin and can play well with Typescript or Javascript files.</p>
<p>Install Quokka plugin and start typing away for real-time evaluation.</p>
<p><img loading="lazy" src="/misc/quokka-js-playground-vscode.gif" type="" alt=""  /></p>
<p>Now, I can have a whole folder of stupid code blocks just because I can.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>VS Code Shortcuts that Level Up Developer Productivity</title>
      <link>https://techformist.com/vs-code-shortcuts-that-level-up-developer-productivity/</link>
      <pubDate>Sat, 09 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/vs-code-shortcuts-that-level-up-developer-productivity/</guid>
      <description>&lt;p&gt;VS Code is the most useful thing discovered after sliced bread. The extension ecosystem kicks up the productivity in VS Code many notches higher. Here are a few shortcuts that you must include in your toolset to get into God-mode.&lt;/p&gt;
&lt;h5 id=&#34;1-prettier-on-save-quicker-format&#34;&gt;1. Prettier on Save: Quicker format&lt;/h5&gt;
&lt;p&gt;Install &lt;a href=&#34;https://github.com/prettier/prettier-vscode&#34;&gt;prettier&lt;/a&gt;. Enable &amp;lsquo;Format on Save&amp;rsquo; in Settings&amp;rsquo;.
Rock and roll.
&lt;img loading=&#34;lazy&#34; src=&#34;https://techformist.com/misc/vscode-shortcut-prettier-on-save.gif&#34; type=&#34;&#34; alt=&#34;&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;I have never seen any tool save so much of my time.&lt;/p&gt;
&lt;h5 id=&#34;2-ctrl--d-select-word-repeat-selection-and-edit-in-one-go&#34;&gt;2. Ctrl + D: Select Word, repeat selection and edit in one go&lt;/h5&gt;
&lt;p&gt;Ctrl + D (repeat to select multiple instances). Multiple edits in one-go if you have selected multiple instances.
&lt;img loading=&#34;lazy&#34; src=&#34;https://techformist.com/misc/vscode-shortcut-ctrl-d.gif&#34; type=&#34;&#34; alt=&#34;&#34;  /&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>VS Code is the most useful thing discovered after sliced bread. The extension ecosystem kicks up the productivity in VS Code many notches higher. Here are a few shortcuts that you must include in your toolset to get into God-mode.</p>
<h5 id="1-prettier-on-save-quicker-format">1. Prettier on Save: Quicker format</h5>
<p>Install <a href="https://github.com/prettier/prettier-vscode">prettier</a>. Enable &lsquo;Format on Save&rsquo; in Settings&rsquo;.
Rock and roll.
<img loading="lazy" src="/misc/vscode-shortcut-prettier-on-save.gif" type="" alt=""  /></p>
<p>I have never seen any tool save so much of my time.</p>
<h5 id="2-ctrl--d-select-word-repeat-selection-and-edit-in-one-go">2. Ctrl + D: Select Word, repeat selection and edit in one go</h5>
<p>Ctrl + D (repeat to select multiple instances). Multiple edits in one-go if you have selected multiple instances.
<img loading="lazy" src="/misc/vscode-shortcut-ctrl-d.gif" type="" alt=""  /></p>
<p>You could also do a Ctrl + F2 to select all instances of any word (not case sensitive).</p>
<h5 id="3-alt--shift--click--drag-select-column-of-content-rather-than-whole-lines">3. Alt + Shift + Click + Drag: Select column of content rather than whole lines.</h5>
<p>Hold Alt + Shift and drag to select a column of content. Multiple edits possible.
<img loading="lazy" src="/misc/vscode-shortcut-alt-shift-drag.gif" type="" alt=""  /></p>
<p>Select a portion of your screen to select a column of content without selecting whole lines.</p>
<h5 id="4-ctrl--shift--alt--direction-arrows-multi-select">4. Ctrl + Shift + Alt + Direction arrows: Multi-select</h5>
<p>Select multiple lines of text that can be edited in one go.
<img loading="lazy" src="/misc/vscode-shortcut-ctrl-shift-direction-select-multiple.gif" type="" alt=""  /></p>
<p>You can also press and hold Alt and click away to achieve the same effect (+ click anywhere to multi-select adhoc words without using direction keys)</p>
<h5 id="5-ctrl--e-quickly-open-files-in-same-project">5. Ctrl + E: Quickly open files in same project</h5>
<p>Projects have confusing structure. Just open the project folder in VSCode, and hit Ctrl + E or Ctrl + P to quickly open files.
For best results, start typing in the file name in the quick open menu.</p>
<p><img loading="lazy" src="/misc/vscode-shortcut-ctrl&#43;e-quick-open.gif" type="" alt=""  /></p>
<h5 id="6-emmet--balance-outward-select-entire-code-block">6. Emmet + Balance Outward: Select entire code block</h5>
<p>One of the powerful features of Vim is to select blocks of code with a single shortcut key. You can emulate the same within VSCode using Emmet - Balance Outward.</p>
<p><img loading="lazy" src="/misc/vscode-shortcut-emmet-balance-outward.gif" type="" alt=""  /></p>
<p>Map this function to a shortcut key if you use this sort of thing often. Btw, I am using Ctrl + Shift + P to open the command menu prompt.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Vim in VS Code</title>
      <link>https://techformist.com/vim-in-vs-code/</link>
      <pubDate>Thu, 07 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/vim-in-vs-code/</guid>
      <description>&lt;p&gt;It has been quite sometime since I used vim or one of its flavours as my main editor for development. Is it time to go back to Vim? I am attracted by Vim&amp;rsquo;s productive usage of keyboard, but not so much about having to sacrifice VS Code or a few important shortcut keys in VSCode that Vim takes over.&lt;/p&gt;
&lt;p&gt;I used Vim on and off - but never as a fully-featured editor. For all its never-gets-old capabilities and the power of Vim scripts, I could never successfully scale the initial curve to fully appreciate its greatness. So my reasoning was to use Vim but stick to VSCode in the meantime so that I don&amp;rsquo;t lose all its features in one go - that is a system shock.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It has been quite sometime since I used vim or one of its flavours as my main editor for development. Is it time to go back to Vim? I am attracted by Vim&rsquo;s productive usage of keyboard, but not so much about having to sacrifice VS Code or a few important shortcut keys in VSCode that Vim takes over.</p>
<p>I used Vim on and off - but never as a fully-featured editor. For all its never-gets-old capabilities and the power of Vim scripts, I could never successfully scale the initial curve to fully appreciate its greatness. So my reasoning was to use Vim but stick to VSCode in the meantime so that I don&rsquo;t lose all its features in one go - that is a system shock.</p>
<p>I focused initially on the most popular extension - <a href="https://marketplace.visualstudio.com/items?itemName=vscodevim.vim">VSCodeVim</a>.</p>
<p>VSCodeVim is a really good extension that brings the power of Vim to my favourite editor. All started well - I was able to have never-before-had power of navigation using Vim. Within a day or two, however, there were issues -</p>
<ul>
<li>Vim takes over shortcuts in VS Code that I really like (e.g. Ctrl + D to iteratively select strings, or even Ctrl + F that has been deeply ingrained in my muscle memory). While there are comparable options within Vim, they were not at the same level as VS Code :)</li>
<li>Unfriendly copy/paste across documents</li>
</ul>
<p>I was really caught in a quagmire -</p>
<ul>
<li>continue using Vim and be a cool guy,</li>
<li>focus on short-term productivity (Vim has a learning/re-learning curve). Rely on VS Code to deliver more usability improvements that negate the need to adopt Vim</li>
</ul>
<p>I found other souls had been in a similar situation and applied much better solutions than what I could conjure.</p>
<p>The result - I am now using a far-less popular, but an interesting plugin - <a href="https://marketplace.visualstudio.com/items?itemName=jpotterm.simple-vim">Simple Vim</a>.</p>
<p>Simple Vim allows me to -</p>
<ul>
<li>Use VIM within VS Code (albeit in an opinionated way)</li>
<li>Quickly go back to VS Code way of doing things by going into &rsquo;edit&rsquo; mode (Esc + I is all you need)</li>
</ul>
<p>I found this approach much better in terms of going back to VS Code defaults, but gradually getting accustomed to more of Vim tools while doing real-world programs.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Cordova for Data Driven Vue Applications</title>
      <link>https://techformist.com/cordova-for-data-driven-vue-applications/</link>
      <pubDate>Sat, 02 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/cordova-for-data-driven-vue-applications/</guid>
      <description>&lt;p&gt;I had to create a mobile app for one of the data driven applications that I recently developed. Cordova has proven to be an excellent choice to reuse my existing code and make life easier for everyone.&lt;/p&gt;
&lt;p&gt;Nature of the web app -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable users to create and track specialised electronic devices&lt;/li&gt;
&lt;li&gt;Track customers who buy these specialised devices and deploy them at their site&lt;/li&gt;
&lt;li&gt;Track usage of deployed devices&lt;/li&gt;
&lt;li&gt;Track issues and manage resolution process&lt;/li&gt;
&lt;li&gt;Enable users to create charts out of device usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The app is hybrid of technologies but the web app was mainly developed using Javascript in the backend. Vue and Vuetify turned out to be highly productive choices for the frontend. Component based development, readily available UI components, and data tables turned out to be life savers.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I had to create a mobile app for one of the data driven applications that I recently developed. Cordova has proven to be an excellent choice to reuse my existing code and make life easier for everyone.</p>
<p>Nature of the web app -</p>
<ul>
<li>Enable users to create and track specialised electronic devices</li>
<li>Track customers who buy these specialised devices and deploy them at their site</li>
<li>Track usage of deployed devices</li>
<li>Track issues and manage resolution process</li>
<li>Enable users to create charts out of device usage</li>
</ul>
<p>The app is hybrid of technologies but the web app was mainly developed using Javascript in the backend. Vue and Vuetify turned out to be highly productive choices for the frontend. Component based development, readily available UI components, and data tables turned out to be life savers.</p>
<p>I received the requirement of a mobile app for Android devices when I was about to complete this application. The requirement carried a separate budget for a &lsquo;fresh&rsquo; use case.</p>
<p>After a day or two of exploring available options, I advised my client not to go the conservative mobile app route - all of the front-end validations were to be repeated for the new mobile UI. Along with the upfront costs came the additional burden of maintaining two code-bases.</p>
<p>My first thought and course of action was to use a PWA directly on Vue. Vuetify follows material design principles and already provides a mobile-friendly UI. I added PWA and with some tweaking could get it to work seamlessly as a stand-alone app. However, it was not quite the experience the non-technical users were comfortable with.</p>
<p>I had two choices to create a mobile app at that point in time -</p>
<ol>
<li>Use Android Studio to package this PWA as an app</li>
<li>Use Cordova on top of Vue</li>
</ol>
<p>I chose the later due to ease of use and the ability to avoid (directly) using Android Studio altogether. The following also helped drive those decisions -</p>
<ul>
<li>Users do similar tasks on browser and mobile devices</li>
<li>No requirements to use mobile device functions like Bluetooth, location-aware features, calling features etc.</li>
<li>The lack of clear requirements on a &lsquo;superior&rsquo; user experience on mobile devices; absolutely no requirements for &lsquo;mobile&rsquo; way of doing things and &lsquo;animations&rsquo;</li>
</ul>
<p>All I had to do to include Cordova was -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm install -g cordova
</span></span><span class="line"><span class="cl">vue add cordova
</span></span></code></pre></div><p>I can now run the mobile app in development mode by -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm run cordova-serve-android
</span></span></code></pre></div><p>My workflow for subsequent development includes two build steps when relevant -</p>
<ol>
<li>Web app for all devices. This is automatically deployed to the server when committed to <code>master</code> branch.
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm run build
</span></span></code></pre></div></li>
<li>Build Android app using Cordova. The APK is automatically signed during build and manually uploaded as a different version in Play store.
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm run cordova-build-android
</span></span></code></pre></div></li>
</ol>
<p>I had to do additional steps to reduce bundle size for initial paint -</p>
<ol>
<li>eCharts library that I used was quite heavy. I just changed all eChart imports to include specific chart types</li>
<li>Document merge functions were less than ideal, but our users had to live with them for now</li>
<li>Use specific components rather than whole imports for custom components (tree shake)</li>
<li>Replace features like image drag &amp; drop and file selection features with more mobile-friendly features (e.g. click and select)</li>
<li>Optimized static images for heavily used screens</li>
</ol>
<p>Some of the above tasks had to be done for web apps anyway. But I could afford to ignore them in a desktop scenario.</p>
<p>I did not quite use any of the advanced functions that Cordova or PWA could offer - I just rely on the default service workers to get everything done. The end product has been highly appreciated by stakeholders -</p>
<ul>
<li>No/ minimal additional costs</li>
<li>Similar user experience on web and mobile app (this was directly related to how users are trained)</li>
<li>Easier and cheaper maintenance</li>
</ul>
<p>Cordova is not the best choice if a superior user experience with the best performance is high on your list of priorities. But it works absolutely fine for simple-medium complexity app that is focused high on data-driven behaviour and acceptable usability on all devices.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Save 1.618 per day developing stuff</title>
      <link>https://techformist.com/save-1.618-per-day-developing-stuff</link>
      <pubDate>Mon, 31 Dec 2018 04:43:00 +0000</pubDate>
      
      <guid>https://techformist.com/save-1.618-per-day-developing-stuff</guid>
      <description>&lt;p&gt;Most of my coding a few years back consisted of the following actions -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Type slowly&lt;/li&gt;
&lt;li&gt;Type (a lot of) mistakes&lt;/li&gt;
&lt;li&gt;Use spaces and tabs to format. Get confused about loops and add ad-hoc spaces and tabs&lt;/li&gt;
&lt;li&gt;Curse my typing skills and the soul who invented spaces and tabs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While formatting code was also becoming an interim &amp;rsquo;thought provoker&amp;rsquo;, it was simply too much typing.&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode&#34;&gt;prettier&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Although my typing is only half as bad, I now have far less stuff to worry about.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Most of my coding a few years back consisted of the following actions -</p>
<ol>
<li>Type slowly</li>
<li>Type (a lot of) mistakes</li>
<li>Use spaces and tabs to format. Get confused about loops and add ad-hoc spaces and tabs</li>
<li>Curse my typing skills and the soul who invented spaces and tabs</li>
</ol>
<p>While formatting code was also becoming an interim &rsquo;thought provoker&rsquo;, it was simply too much typing.</p>
<p>Enter <strong><a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">prettier</a></strong>.</p>
<p>Although my typing is only half as bad, I now have far less stuff to worry about.</p>
<ol>
<li>Type in any way I want - yes, even type entire program in one line if I am feeling particularly stupid</li>
<li>Save file</li>
</ol>
<ul>
<li>Prettier formats code to add spaces and tabs</li>
<li>Prettier adds stuff that I am lazy to type - (e.g. missing semicolons</li>
<li>Changes stuff that I don&rsquo;t do myself - e.g. change single quotes to double quotes</li>
<li>If the formatting does not happen correctly, I look for coding errors (typically a missing/misplaced bracket)</li>
</ul>
<p>The savings from all the avoided actions (despite my poor typing) amounts to 1.618 hours a day. That is thousands of hours in my life that can be invested in coding &lsquo;hello worlds&rsquo; in new programming languages.</p>
<p>Once you start using Prettier ** you will never go back **. Do that first if you have not done that and come back here.</p>
<p>Following are the &lsquo;Prettier&rsquo; settings that I find useful in VS Code (Ctrl + Shift + P &gt; Type &lsquo;prettier&rsquo; to search for related settings).</p>
<ul>
<li>
<p>Editor: Format On Save =&gt; True
Prettier is not that useful if you don&rsquo;t see it in action - <em>at.every.save</em>.</p>
</li>
<li>
<p>Prettier: Eslint Integration =&gt; True
Get ESLint to do its thing. Fall back to prettier if there are no ESLint rules. This is mondo useful in languages that are packed with community ESLint rules. I cannot quite hold everyone accountable for the superior practices that I follow. It is far easier to deploy ESLint (or any supported linting) to the development/deployment workflow to make sure every coder follows the same standards. The above flag takes care of any conflicts by using ESLint first and falling back to Prettier if there are no rules.</p>
</li>
<li>
<p>Prettier: Jsx Bracket Same Line =&gt; True
JSX has a lot of &lsquo;&gt;&rsquo; and it is annoying if that is moved to the next line. Keep JSX clean.</p>
</li>
<li>
<p>Prettier: Semi =&gt; True
Use semicolons. Don&rsquo;t believe the evil people who say otherwise.</p>
</li>
<li>
<p>Prettier: Tslint Integration =&gt; True
Similar to the first item on ESLint described earlier, but for TypeScript. Get TSLint to format, and kick into action for stuff that don&rsquo;t have any TSLint rules.</p>
</li>
</ul>
<p>PS: Yep - the 1.618 is a random number that represents Golden ratio. Did you really think I can ever be so focused on improvements?</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
