<?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>Apps on Techformist</title>
    <link>https://techformist.com/tags/apps/</link>
    <description>Recent content in Apps 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>Fri, 29 May 2020 06:30:00 +0000</lastBuildDate><atom:link href="https://techformist.com/tags/apps/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Setup Development Workspace in WSL2</title>
      <link>https://techformist.com/setup-dev-workspace-wsl2/</link>
      <pubDate>Fri, 29 May 2020 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/setup-dev-workspace-wsl2/</guid>
      <description>&lt;p&gt;WSL2 was released yesterday along with Windows10 May 2020 update (v2004). WSL2 enables to work with Linux kernels within Windows, and it brings some crazy possibilities for those of us who refuse to dual boot or switch over completely to Linux.&lt;/p&gt;
&lt;p&gt;I am assuming that you already have installed Windows v2004 through the normal Windows update channel, or through the &lt;a href=&#34;https://support.microsoft.com/en-us/help/3159635/windows-10-update-assistant&#34;&gt;update assistant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you are on Windows10 2004, here&amp;rsquo;s how you can setup a cool WSL2 development environment.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>WSL2 was released yesterday along with Windows10 May 2020 update (v2004). WSL2 enables to work with Linux kernels within Windows, and it brings some crazy possibilities for those of us who refuse to dual boot or switch over completely to Linux.</p>
<p>I am assuming that you already have installed Windows v2004 through the normal Windows update channel, or through the <a href="https://support.microsoft.com/en-us/help/3159635/windows-10-update-assistant">update assistant</a>.</p>
<p>Once you are on Windows10 2004, here&rsquo;s how you can setup a cool WSL2 development environment.</p>
<h2 id="installation">Installation</h2>
<h3 id="wsl2">WSL2</h3>
<p>If you don&rsquo;t have WSL yet, install it from <code>Start</code> &gt; <code>Turn Windows Features On or Off</code>. Check <code>Windows Subsystem for Linux</code>. This should install WSL2. If you had WSL1 in previous Windows versions, the option will remain checked and you don&rsquo;t have to do anything else.</p>
<p><img loading="lazy" src="/2020/wsl-features-windows.jpg" type="" alt="wsl-features-windows"  /></p>
<p>Install <a href="https://www.microsoft.com/en-us/search?q=debian">Debian</a> or Ubuntu from Microsoft Store.</p>
<p>If Debian/Ubuntu/other flavours were already installed on your computer (in WSL1), you would have to upgrade the kernel. Do that by following instructions on this <a href="https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel">page</a>. Future upgrades may not need this manual step.</p>
<p>Verify whether you are running the right version of the kernel -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">wsl -l -v
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  NAME      STATE           VERSION
</span></span><span class="line"><span class="cl">* Debian    Running         2
</span></span></code></pre></div><p>Version 1 will imply that you are still running WSL1, else you should be all set with WSL2.</p>
<h3 id="terminal">Terminal</h3>
<p><a href="https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701?rtc=1">Install Windows Terminal</a> from Microsoft Store if you don&rsquo;t already have it. While this is optional, the app makes for a delightful terminal experience.</p>
<p>Of course, you can always continue to use <a href="https://cmder.net/">Cmder</a>, or any other emulator.</p>
<p>Once Terminal is installed, open Terminal &gt; Click on the dropdown in Toolbar &gt; Open <code>Settings</code>. You add instructions to open command prompt, Powershell or WSL in the settings file. You can also change themes, colors or fonts for Terminal window.</p>
<p>Add an entry for Debian under <code>Profiles</code>-</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;acrylicOpacity&#34;</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;closeOnExit&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;colorScheme&#34;</span><span class="p">:</span> <span class="s2">&#34;One Quarter Dark&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;commandline&#34;</span><span class="p">:</span> <span class="s2">&#34;wsl.exe -d Debian&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;cursorColor&#34;</span><span class="p">:</span> <span class="s2">&#34;#FFFFFF&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;cursorShape&#34;</span><span class="p">:</span> <span class="s2">&#34;bar&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;fontFace&#34;</span><span class="p">:</span> <span class="s2">&#34;Consolas&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;fontSize&#34;</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;guid&#34;</span><span class="p">:</span> <span class="s2">&#34;{58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530}&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;historySize&#34;</span><span class="p">:</span> <span class="mi">9001</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;icon&#34;</span><span class="p">:</span> <span class="s2">&#34;ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Debian&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;padding&#34;</span><span class="p">:</span> <span class="s2">&#34;0, 0, 0, 0&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;snapOnInput&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;useAcrylic&#34;</span><span class="p">:</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span><span class="err">,</span>
</span></span></code></pre></div><p>Note the change in <code>colorScheme</code> - you may use any color scheme that is already part of the settings.</p>
<p>The settings file I use is at <a href="https://gist.githubusercontent.com/prashanth1k/576c1c309c9aad7a8907d06137d219e9/raw/86331481c1d331a06c18c1d98d36c1a143709e44/terminal-settings.json">this Gist</a>.</p>
<p>You are now all set to access WSL2 from your terminal. Just click on the dropdown and select <code>Debian</code> profile to open WSL2.</p>
<h2 id="initial-setup">Initial Setup</h2>
<p>I love to work with <a href="https://fishshell.com/">Fish shell</a> since it has beautiful defaults that includes useful functions like auto complete, and an easy-to-use customiser (among others).</p>
<p>Install Fish.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl"><span class="k">echo</span> &#39;deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_10/ /&#39; <span class="p">|</span> sudo tee /etc/apt/sources.list.d/shells:fish:release:3.list
</span></span><span class="line"><span class="cl">sudo wget -nv https://download.opensuse.org/repositories/shells:fish:release:3/Debian_10/Release.key -O <span class="s2">&#34;/etc/apt/trusted.gpg.d/shells:fish:release:3.asc&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">apt-get update
</span></span><span class="line"><span class="cl">apt-get install fish
</span></span></code></pre></div><p>See <a href="https://software.opensuse.org/download.html?project=shells%3Afish%3Arelease%3A3&amp;package=fish">this page for more detailed instructions</a>.</p>
<h3 id="optional-change-root-password">Optional: Change root password</h3>
<p>If you have setup a non-root user (which you normally do during install) and already logged in as that user, or did not setup root password yet, you an do that now.</p>
<p>First, login to Windows command prompt and set default WSL user.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">debian config --default-user root
</span></span></code></pre></div><p>.. or in case of Ubuntu..</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">ubuntu.exe config --default-user root
</span></span></code></pre></div><p>Open a new terminal to login as root. Change password.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">passwd
</span></span></code></pre></div><p>Reset default user to your user id.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">debian config --default-user <span class="p">&lt;</span>your_userid&gt;
</span></span></code></pre></div><p>Exit from current terminal that is logged in as root and open a new window to just be yourself.</p>
<h3 id="configure-fish-shell">Configure fish shell</h3>
<p>Change default shell to fish.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">chsh -s `which fish`
</span></span></code></pre></div><p>Install <a href="https://github.com/oh-my-fish/oh-my-fish">oh my fish</a> to make your shell beautiful.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">curl -L https://get.oh-my.fish <span class="p">|</span> fish
</span></span></code></pre></div><p>Now you can install themes or add new functions to fish.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">omf list <span class="c1"># list themes &amp; plugins installed</span>
</span></span><span class="line"><span class="cl">omf theme <span class="c1"># list themes</span>
</span></span><span class="line"><span class="cl">omf install clearance <span class="c1"># install clearance theme</span>
</span></span><span class="line"><span class="cl">omf theme default <span class="c1"># change back to default theme</span>
</span></span></code></pre></div><p><img loading="lazy" src="/2020/windows-terminal-wsl2.jpg" type="" alt="windows-terminal-wsl2"  /></p>
<h2 id="setup-your-favourite-programs">Setup Your Favourite Programs</h2>
<h3 id="nvm--node">NVM / Node</h3>
<p>We will not install Node directly, but use NVM.</p>
<p>First install NVM..</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh <span class="p">|</span> bash
</span></span></code></pre></div><p>You have to do an additional step for Fish shell since it not directly supported.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">omf install bass
</span></span><span class="line"><span class="cl">vi ~/.config/fish/functions/nvm.fish
</span></span></code></pre></div><p>Add the following content to file -</p>
<pre tabindex="0"><code>function nvm
    bass source ~/.nvm/nvm.sh --no-use &#39;;&#39; nvm $argv
end
</code></pre><p>Finally, install node.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">nvm install 14.3
</span></span></code></pre></div><p>Set default node version in nvm to always use the latest version.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">nvm alias default node
</span></span></code></pre></div><p>Node is now ready to do great things!</p>
<h3 id="vs-code">VS Code</h3>
<p>Install <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl">Remote WSL extension</a>.</p>
<p>Hit <code>Ctrl + Shift + p</code> &gt; enter <code>New Window using Distro</code>. Select the Linux distro that you are setting up.</p>
<p>VSCode will automatically download and configure server to work within the distro, and open a new window specific to the distro.</p>
<p>You can now use VSCode to work with files within the Linux folders. You will see the default Fish shell when you open a new terminal within VSCode.</p>
<h3 id="docker">Docker</h3>
<p>Docker runs 8-10x faster in WSL2 - there is simply no reason to postpone using Docker in Windows anymore :)</p>
<p>Install <a href="https://www.docker.com/products/docker-desktop">Docker for Desktop</a>.</p>
<p>New installations do not require any additional steps. If you had an older version, <a href="https://docs.docker.com/docker-for-windows/wsl/">follow instructions here</a> to set everything up.</p>
<h2 id="code-away">Code Away</h2>
<p>Start working your magic in Linux in Windows!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Enable SSL for your VPS using VestaCP</title>
      <link>https://techformist.com/ssl-vps-vestacp/</link>
      <pubDate>Wed, 11 Dec 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/ssl-vps-vestacp/</guid>
      <description>&lt;p&gt;VestaCP is an easy to use control panel. You just need to know where to go for what!&lt;/p&gt;
&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;SSLs are de-facto standards for web applications of today. How can you enable SSL for your own web app, preferably for free?&lt;/p&gt;
&lt;h2 id=&#34;the-solution&#34;&gt;The Solution&lt;/h2&gt;
&lt;p&gt;I am no Unix Guru and for the life of me, cannot enable domains, mails, etc. using just the command line. Well, I could some monkey typing to get everything up and running. But that is a lot of typing, Googling and going back and forth. And, as previously mentioned, I am still not a guy comfortable using Ansible and such.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>VestaCP is an easy to use control panel. You just need to know where to go for what!</p>
<h3 id="the-problem">The Problem</h3>
<p>SSLs are de-facto standards for web applications of today. How can you enable SSL for your own web app, preferably for free?</p>
<h2 id="the-solution">The Solution</h2>
<p>I am no Unix Guru and for the life of me, cannot enable domains, mails, etc. using just the command line. Well, I could some monkey typing to get everything up and running. But that is a lot of typing, Googling and going back and forth. And, as previously mentioned, I am still not a guy comfortable using Ansible and such.</p>
<p>So, as one of the first steps I do while creating new VPS is to enable a control panel. A control panel provides a one-step, integrated shop for all the basic things you need.</p>
<p><a href="https://vestacp.com/">VestaCP</a> has been one of my favourite control panels for a few reasons.</p>
<ol>
<li>It gets work done - easily create domains/sub-domains, secure your VPS, create and manage emails, and create and manage DBs.</li>
<li>Fast and light weight. No fluff, just the things you need</li>
<li>VestaCP is free to use. You should support the developer with a Pro plan if you have the means!</li>
</ol>
<p>You are in good hands once you get used to the quirky navigation after setting up VestaCP. (Except for the functionalities that are simply not offered as part of the free plan, that is).</p>
<p>And, one of those simple steps that you do is to enable SSL for your web app.</p>
<ol>
<li>Go to VestaCP control panel &gt; click on Web</li>
</ol>
<p><img loading="lazy" src="/misc/ssl-for-vps-using-vestacp.jpg" type="" alt="enable-ssl-encryption-vps"  /></p>
<ol start="2">
<li>
<p>Hover over your domain and click on &lsquo;Edit&rsquo;</p>
</li>
<li>
<p>Click on the checkbox!</p>
</li>
</ol>
<p><img loading="lazy" src="/misc/ssl-encryption-vestacp.jpg" type="" alt="ssl-for-vps-with-vestacp"  /></p>
<p>That is it!</p>
<p>SSL not working? Or, has the Let&rsquo;s Encrypt certification renewal fail? Just turn off SSL and turn it back on :)</p>
<p>And yes, if you have not realized it by now - this is a joke. A joke as a result of frustrating rebuild because there was a screw-up when trying to solve the certification renewal issue. But that&rsquo;s a discussion for another day!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Host your own site - 2020 edition</title>
      <link>https://techformist.com/host-your-site-2020/</link>
      <pubDate>Mon, 18 Nov 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/host-your-site-2020/</guid>
      <description>&lt;p&gt;Medium, Dev.to, Hashnode, Wordpress? Or, why should you invest in yourself rather than in platforms?&lt;/p&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Developers should write and write often. It may be anything - code snippets, ideas, thoughts, design principles, standards and what not. I have found that writing down things often forces me to solidify abstractions and get more clarity.&lt;/p&gt;
&lt;p&gt;But, where to write?&lt;/p&gt;
&lt;h2 id=&#34;the-options&#34;&gt;The Options&lt;/h2&gt;
&lt;p&gt;Wordpress is the past. Though I continue to host a few of my blogs - it is just laziness preventing me from migrating over to better things. Wordpress is often slow, theme design is frustrating (if you are not in WP/PHP world that is), and in general does not carry itself quite well nowadays.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Medium, Dev.to, Hashnode, Wordpress? Or, why should you invest in yourself rather than in platforms?</p>
<h2 id="the-problem">The Problem</h2>
<p>Developers should write and write often. It may be anything - code snippets, ideas, thoughts, design principles, standards and what not. I have found that writing down things often forces me to solidify abstractions and get more clarity.</p>
<p>But, where to write?</p>
<h2 id="the-options">The Options</h2>
<p>Wordpress is the past. Though I continue to host a few of my blogs - it is just laziness preventing me from migrating over to better things. Wordpress is often slow, theme design is frustrating (if you are not in WP/PHP world that is), and in general does not carry itself quite well nowadays.</p>
<p>Medium is pay-walled in a annoying way, and annoys you more with popups and what not. And, it is not a pleasant thing to port stuff.</p>
<p>Dev.to / Hash.node are better. You can write stuff and copy over/export markdown. You should be easily able to port it elsewhere if it comes to it.</p>
<p>So, what should you choose?</p>
<h2 id="the-answer">The Answer</h2>
<p>None.</p>
<p>This is 2020, and you should not be debating on which platform to write on.</p>
<ul>
<li>Just choose a static site generator - Hugo, Jekyll, or 11ty.</li>
<li>Host your content on Github, Netlify, Gitlab, or Amazon S3</li>
<li>Publish same content/summary on dev.to or other platforms if you are looking forward to involve that community in your discussions</li>
</ul>
<p>Want more? See -</p>
<ul>
<li>Pick one of the <a href="https://themes.gohugo.io/">Hugo themes</a> and get started on the fastest static site generator in seconds</li>
<li>Start with Jekyll using a theme - <a href="https://techformist.com/create-beautiful-performant-sites-free-ebook/">https://techformist.com/create-beautiful-performant-sites-free-ebook/</a></li>
<li>Start with <a href="https://www.11ty.dev/docs/getting-started/">11ty</a> using one of the <a href="https://www.11ty.dev/docs/starter/">starter projects</a></li>
</ul>
<h2 id="why-do-this">Why do this?</h2>
<p>Well.. you own your content and your destiny. It is much,much easier to control all parts of your story and depend on third parties for a larger exposure - only when required.</p>
<p>Platforms can be transient. Your stories should not be. There should be one place to record your thoughts through years, and what better way than putting all your content in one place. It is really easy to play around with all that data 5-6 years down the line rather than extracting data from a third-party site in some obscure format.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Design Emails Using Bootstrap</title>
      <link>https://techformist.com/design-emails-bootstrap/</link>
      <pubDate>Mon, 04 Nov 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/design-emails-bootstrap/</guid>
      <description>&lt;p&gt;Wondering how you could apply modern UI design to emails? Here&amp;rsquo;s the answer.&lt;/p&gt;
&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;I don&amp;rsquo;t know about you - but emails are the last thing that I want to design. I end up sending plain text emails for most of my apps, and that works just fine.&lt;/p&gt;
&lt;p&gt;However, a few projects have more complex requirements. In one such case, I had to send bills as emails and allow a designer (if not a client power-user) to &amp;ldquo;code in&amp;rdquo; the design for the bills.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Wondering how you could apply modern UI design to emails? Here&rsquo;s the answer.</p>
<h3 id="the-problem">The Problem</h3>
<p>I don&rsquo;t know about you - but emails are the last thing that I want to design. I end up sending plain text emails for most of my apps, and that works just fine.</p>
<p>However, a few projects have more complex requirements. In one such case, I had to send bills as emails and allow a designer (if not a client power-user) to &ldquo;code in&rdquo; the design for the bills.</p>
<p>My first thought was to use <a href="https://jsreport.net/">JSReport</a> and send PDFs in emails instead of directly including bills in the email. This should have simplified the design process for the email and keep it aligned to previously applied best practice.</p>
<p>That was not to be.</p>
<ul>
<li>We had to keep emails light</li>
<li>Emails needed to be engaging and direct. 40-60% of the target audience was not in the habit of using emails</li>
<li>Any design that would require storage and linking to files was not acceptable</li>
</ul>
<p>A few curious requirements and the current tech stack presented a simple, but effective solution.</p>
<h2 id="the-solution">The Solution</h2>
<p>I had deployed the server stack on AdonisJS previously. This meant I could use AdonisJS views to merge the template with email design with the actual data at runtime.</p>
<p>But, I still had to provide a good way to design those emails. Not exactly MailChimp and friends, but something decent enough for the first run.</p>
<p>Email design is not exactly caught up with the times -</p>
<ol>
<li>Emails need inline CSS</li>
<li>Using HTML tables to align can take an ugly turn anytime</li>
<li>Responsive emails are a thing and not a thing I necessarily like</li>
</ol>
<p>It was then, and only then, did I come across <a href="https://github.com/stuyam/bootstrap-email/">bootstrap-email</a>.</p>
<p><img loading="lazy" src="/misc/bootstrap-email.jpg" type="" alt="bootstrap-email"  /></p>
<p>Bootstrap Email, as it&rsquo;s name suggests, is a way to design emails using Bootstrap. The best thing - you don&rsquo;t worry about all the email design constraints. The creator/maintainers of Bootstrap Email have done the heavy lifting.</p>
<p>You now design emails (more or less) like a web page to create a responsive email. As simple as that.</p>
<ul>
<li>Emails are responsive and device-agnostic. Emails look like &ldquo;real emails&rdquo; in a browser, on a mobile device, or using apps like Outlook</li>
<li>Create emails using simple bootstrap layouting. No special techniques needed</li>
<li>Simple to design and consistent. No more dealing directly with HTML tables to design emails</li>
</ul>
<p>The creators have kindly made the library open source and provided all this for free. Bootstrap Email is well documented and seems to have adequate maintenance over the two years.</p>
<p>Check out Bootstrap Email on <a href="https://github.com/stuyam/bootstrap-email/">GitHub</a>, or see the <a href="https://bootstrapemail.com/docs/introduction">documentation</a>
Play around with Bootstrap Email using this <a href="https://bootstrapemail.com/editor">online editor</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Valuable Site of the Month (Oct &#39;19) - Online HTML Editor</title>
      <link>https://techformist.com/vsom-oct-2019/</link>
      <pubDate>Thu, 31 Oct 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/vsom-oct-2019/</guid>
      <description>&lt;p&gt;We back with a valuable site of the month after a not-so-brief hiatus. Here&amp;rsquo;s presenting this month&amp;rsquo;s pick - an online HTML editor.&lt;/p&gt;
&lt;h3 id=&#34;no-not-another-editor&#34;&gt;No.. Not another editor&lt;/h3&gt;
&lt;p&gt;HTML editors are aplenty.&lt;/p&gt;
&lt;p&gt;Anyone and everyone can whip up a quick site using TinyMCE, CKEditor and the like, provide a preview and call it a day.&lt;/p&gt;
&lt;p&gt;A bit more effort there and we can have a site-of-the-month editor :)&lt;/p&gt;
&lt;p&gt;Well, recently I had been creating a few HTML emails. I needed a quick, reliable way to preview whatever HTML content and move on with my work.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>We back with a valuable site of the month after a not-so-brief hiatus. Here&rsquo;s presenting this month&rsquo;s pick - an online HTML editor.</p>
<h3 id="no-not-another-editor">No.. Not another editor</h3>
<p>HTML editors are aplenty.</p>
<p>Anyone and everyone can whip up a quick site using TinyMCE, CKEditor and the like, provide a preview and call it a day.</p>
<p>A bit more effort there and we can have a site-of-the-month editor :)</p>
<p>Well, recently I had been creating a few HTML emails. I needed a quick, reliable way to preview whatever HTML content and move on with my work.</p>
<p>It was not to be easy.</p>
<p>My first choice was VSCode, but that workflow was not straight-forward for quick turn around. I could have used preview better, but there were a few things that could be faster. For e.g. -</p>
<ol>
<li>Changing text to bold, italic etc.</li>
<li>Changing fonts or font size</li>
<li>Including tables</li>
<li>Finally, sharing work and getting some quick feedback (yes, I do use GitHub and Gist)</li>
</ol>
<h3 id="oh-do-we-need-another-editor">Oh. Do we need another editor?</h3>
<p>Not really.</p>
<p>I am sure we could use the existing development toolset to establish a better flow (with the same time taken for this post).</p>
<p>However, I was anxious about my current state of work at the time and wanted a really quick and dirty solution in my workflow.</p>
<p>Enter <a href="https://htmlpen.com/">HTMLPen</a>.</p>
<p><img loading="lazy" src="/misc/htmlpen-app.jpg" type="" alt="htmlpen-app"  /></p>
<p>One can use HTMLPen (which is in beta, btw) to -</p>
<ul>
<li>write HTML, CSS and see preview of the final result</li>
<li>use a WYSIWYG editor to include tables, media or change fonts</li>
<li>convert images to Base64</li>
<li>and finally, share projects quickly with others</li>
</ul>
<p>I love what we could do on the Internet today - with zero cost or investment.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Crazy space utilization in VSCode</title>
      <link>https://techformist.com/clean-temporary-storage-vscode/</link>
      <pubDate>Mon, 07 Oct 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/clean-temporary-storage-vscode/</guid>
      <description>&lt;p&gt;Running out of space? You have VSCode and love tinkering with it? Then do this.&lt;/p&gt;
&lt;p&gt;Well the introductory line is cheesy and shows desperation for clicks. So, I had to have them.&lt;/p&gt;
&lt;p&gt;And - no, this is not even a secret. VSCode stays sane until it goes insane with storage space. But somehow I did not know my own drive utilization for a long, long time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Caution: Before you start deleting things.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Running out of space? You have VSCode and love tinkering with it? Then do this.</p>
<p>Well the introductory line is cheesy and shows desperation for clicks. So, I had to have them.</p>
<p>And - no, this is not even a secret. VSCode stays sane until it goes insane with storage space. But somehow I did not know my own drive utilization for a long, long time.</p>
<blockquote>
<p>Caution: Before you start deleting things.</p>
<p>Take note that **<em>I</em>** did not find any problems doing the below remedial actions. Your mileage may vary and for all you know, deleting your folder may destroy civilization as we know it.</p>
</blockquote>
<p>You should see this entire article of 2 lines, delete to recycle bin so that you can recover stuff if things go wrong, and, in general, be a good Internet citizen.</p>
<p>To clean up the storage -</p>
<pre tabindex="0"><code>1. Go to C:\Users\&lt;user&gt;\AppData\Roaming\Code\User\workspaceStorage
2. Delete all folders created before last week
</code></pre><p>See GBs of space recovered within no time. Rejoice.</p>
<h3 id="so-whats-up-with-this-folder">So, what&rsquo;s up with this folder?</h3>
<p>Appears to be a bug but on nobody&rsquo;s radar.</p>
<p>The workspace folder fills up pretty fast if you are using C++ extensions. Even otherwise, for a VSCode enthusiast like me who tries multiple extensions, uses more than one language and uses multiple themes - the folder can become overwhelming.</p>
<p>How overwhelming? I had a 128 GB primary partition and ~9 GB of that was taken by the said folder. One week after the clean up - the space utilization for the sub-folder remains at &lsquo;&lt; 20 MB&rsquo;.</p>
<p>The folder is used as a temporary storage location. Anything you delete should get recreated as you start using the program/extension again.</p>
<h3 id="bug-what-bug">Bug, what bug?</h3>
<p>See -</p>
<ul>
<li><a href="https://github.com/microsoft/vscode/issues/32461">Clean up ExtensionContext.workspaceState when a workspace no longer exists</a></li>
<li><a href="https://github.com/Microsoft/vscode/issues/53552">Why is my workspace storage so big?</a></li>
<li><a href="https://github.com/Microsoft/vscode/issues/39692">Can I clean storage.. ?</a></li>
<li><a href="https://github.com/Microsoft/vscode/issues/22557">Setting to change workspaceStorage location </a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Open source and free URL shorteners</title>
      <link>https://techformist.com/free-open-source-url-shorteners/</link>
      <pubDate>Sat, 14 Sep 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/free-open-source-url-shorteners/</guid>
      <description>&lt;p&gt;URL shorteners shorten your URLs. You have many many products in the market - &lt;a href=&#34;https://bit.ly&#34;&gt;bit.ly&lt;/a&gt; being the most popular. However, with a bit of help from amazing people who have built them, we can use our own URL shorteners. Again, nothing magical here - this was quite an old problem. People wanted to always mask their URL or make it easier for sharing.&lt;/p&gt;
&lt;p&gt;Here are three open source and free URL shorteners that you can use today!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>URL shorteners shorten your URLs. You have many many products in the market - <a href="https://bit.ly">bit.ly</a> being the most popular. However, with a bit of help from amazing people who have built them, we can use our own URL shorteners. Again, nothing magical here - this was quite an old problem. People wanted to always mask their URL or make it easier for sharing.</p>
<p>Here are three open source and free URL shorteners that you can use today!</p>
<p>Host these URL shortening services on your own servers - you can set them up almost instantaneously, shorten URLs prefixed with your domain, keep track of link clicks, and also collect analytics about where your link clicks are coming from.</p>
<h3 id="shlink">Shlink</h3>
<p><a href="https://shlink.io">Shlink</a> appears to be the more modern solution of the lot.</p>
<p>It has docker support, beautiful looking UI on ReactJS, and plays well with both Nginx and Apache. You can use REST APIs and even a CLI tool to create short URLs.</p>
<h3 id="yourls">YOURLS</h3>
<p><a href="https://yourls.org">YOURLS</a> has been there forever. It is a PHP based solution, is quite easy to setup and I have used that before.</p>
<p>YOURLS is also available in CPANEL, and can be setup in your shared hosting with all but a couple of clicks. It just works and keeps working efficiently.</p>
<h3 id="polr">Polr</h3>
<p>[Polr]https://polrproject.org/ is another solution based on PHP.</p>
<p>It supports creating URLs through API requests and is easy to use.</p>
<h3 id="the-trigger">The Trigger</h3>
<p>What triggered me to write this gem of an article (yes, sarcasm) was seeing an instance of this age-old problem was being analysed.</p>
<p>Use AWS or Azure for 301/302 redirects? Quickly create a beautiful solution in your favourite programming language that does not buckle under pressure to show off beautiful charts? Shave-off milliseconds while doing URL redirection by writing everything in Assembly?</p>
<p>Let&rsquo;s say I am a tech guy in a company and someone asks whether I can create this app in a day. This is my thought process -</p>
<ol>
<li>Search internet to check on what other people are doing to solve the same (or a similar) problem</li>
<li>Search for the easiest solution that&rsquo;s not a pain to implement or maintain. Also check whether I can use existing infrastructure and keep costs reasonable</li>
<li>Get approvals for the stack/cost. Work with other teams to enable supporting infrastructure and develop/deploy solution</li>
</ol>
<p>To think that I would have to develop this solution ground-up will be the last thing to cross my mind.</p>
<p>This world is beautiful and exciting, and also thankfully - not everyone thinks like me. And probably, I am doing way-too-boring &lsquo;stuff&rsquo; to think better and be on the &lsquo;cutting edge&rsquo;.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>VSCode file shortcuts I can&#39;t live without</title>
      <link>https://techformist.com/vscode-file-shortcuts-i-cant-live-without/</link>
      <pubDate>Tue, 27 Aug 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/vscode-file-shortcuts-i-cant-live-without/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a set of VSCode shortcuts that are part of my daily workflow for working with files!&lt;/p&gt;
&lt;p&gt;We have seen a &lt;a href=&#34;https://techformist.com/vs-code-shortcuts-that-level-up-developer-productivity/&#34;&gt;few VSCode shortcuts earlier&lt;/a&gt;, but none ever said -&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I had enough of them shortcuts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So, here goes.&lt;/p&gt;
&lt;h3 id=&#34;1-search-text-in-all-files&#34;&gt;1. Search text in all files&lt;/h3&gt;
&lt;p&gt;Search text in within all files in workspace using ..&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Ctrl + Shift + F
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://techformist.com/misc/vscode-shortcut-file-find.gif&#34; type=&#34;&#34; alt=&#34;vscode-shortcut-file-find&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;I used Explorer and &lt;a href=&#34;https://www.voidtools.com/&#34;&gt;Everything&lt;/a&gt; before incorporating this extension in my workflow. The biggest advantage is having to to search within the workspace folder - have all other files open in context of current work.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Here&rsquo;s a set of VSCode shortcuts that are part of my daily workflow for working with files!</p>
<p>We have seen a <a href="/vs-code-shortcuts-that-level-up-developer-productivity/">few VSCode shortcuts earlier</a>, but none ever said -</p>
<blockquote>
<p>I had enough of them shortcuts.</p>
</blockquote>
<p>So, here goes.</p>
<h3 id="1-search-text-in-all-files">1. Search text in all files</h3>
<p>Search text in within all files in workspace using ..</p>
<pre tabindex="0"><code>Ctrl + Shift + F
</code></pre><p><img loading="lazy" src="/misc/vscode-shortcut-file-find.gif" type="" alt="vscode-shortcut-file-find"  /></p>
<p>I used Explorer and <a href="https://www.voidtools.com/">Everything</a> before incorporating this extension in my workflow. The biggest advantage is having to to search within the workspace folder - have all other files open in context of current work.</p>
<p>Of course, it helps immensely that you can also replace the searched text with something else. You can replace text by revealing the hidden field as depicted in the picture, or just do a <code>Ctrl + Shift + H</code> to directly open find/replace dialog.</p>
<h3 id="2-copy-path-of-current-file">2. Copy path of current file</h3>
<p>Copy file path of the file currently being edited (while in editor).</p>
<pre tabindex="0"><code>Shift + Alt + C
</code></pre><p>Sometimes (and specifically on one of my machines) this does not work. And, I could not figure out why.</p>
<p>There are two quick ways to work-around -</p>
<ul>
<li>Use alternative.
<pre tabindex="0"><code>Ctrl + K P
</code></pre>Do not press <code>P</code> while still holding <code>Ctrl</code>.</li>
<li>Use command palette
<pre tabindex="0"><code>Ctrl + Shift + P &gt; Start typing &#34;copy path&#34;
</code></pre></li>
<li>Go through file explorer
<pre tabindex="0"><code>Ctrl + Shift + E ... and then..
Shift + Alt + C
</code></pre></li>
</ul>
<p>Or, you could right click on tab of the file and copy the file path.</p>
<h3 id="3-reopen-closed-editor">3. Reopen closed editor</h3>
<p>I become anxious when too many editors are open - that is a direct indication of &ldquo;not in control&rdquo; mode. I tend to close editors quickly recklessly and the extension to reopen closed editor is quite handy.</p>
<pre tabindex="0"><code>Ctrl + Shift + T
</code></pre><p><img loading="lazy" src="/misc/vscode-shortcut-file-reopen-tab.gif" type="" alt="vscode-shortcut-file-reopen-tab"  /></p>
<h3 id="4-reveal-current-file-in-explorer">4. Reveal current file in Explorer</h3>
<p>There are just too many times I need to explore the folder of currently edited file. Use this shortcut to the parent folder in Explorer.</p>
<pre tabindex="0"><code>Ctrl + K R
</code></pre><p><img loading="lazy" src="/misc/vscode-shortcut-file-reveal-in-explorer.gif" type="" alt="vscode-shortcut-file-reveal-in-explorer"  /></p>
<h3 id="5-close-all-open-files">5. Close all open files</h3>
<p>For all those times when you are frustrated and just want to close everything..</p>
<pre tabindex="0"><code>Ctrl + K W
</code></pre><p>You can always open tabs one by one by hitting <code>Ctrl + Shift + T</code> :). Handy when you have to show yourself how busy you are and make some noise with the keyboard.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Install Scoop for Command-line Nirvana</title>
      <link>https://techformist.com/2019/05/06/install-scoop-for-command-line-nirvana/</link>
      <pubDate>Mon, 06 May 2019 10:04:00 +0000</pubDate>
      
      <guid>https://techformist.com/2019/05/06/install-scoop-for-command-line-nirvana/</guid>
      <description>&lt;p&gt;Command line in Windows.&lt;/p&gt;
&lt;p&gt;You love it when there are Powershell, Cmder and friends. And, you hate it when you cannot install simple programs quickly.&lt;/p&gt;
&lt;p&gt;Well, hate may be a strong word - but you get the gist.&lt;/p&gt;
&lt;p&gt;I have tried chocolatey and have a like-dislike relationship with that program. I have also experimented with VMs and anything that exposes more of the command line. None of the programs stuck in my day-to-day flow. For a few projects, I dedicatedly use WSL - but could not quite switch over everywhere.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Command line in Windows.</p>
<p>You love it when there are Powershell, Cmder and friends. And, you hate it when you cannot install simple programs quickly.</p>
<p>Well, hate may be a strong word - but you get the gist.</p>
<p>I have tried chocolatey and have a like-dislike relationship with that program. I have also experimented with VMs and anything that exposes more of the command line. None of the programs stuck in my day-to-day flow. For a few projects, I dedicatedly use WSL - but could not quite switch over everywhere.</p>
<p>In the meantime, I now use <a href="https://github.com/lukesampson/scoop">Scoop</a>. Scoop is different.</p>
<ul>
<li>Install Scoop</li>
<li>Install developer apps/configurations (e.g. curl)</li>
<li>Use apps</li>
</ul>
<p>I faced installation issues to begin with - but none that could stand the test of a good Google search.</p>
<p>Here&rsquo;s what you do -</p>
<ol>
<li>
<p>Open Powershell in Windows 10. Execute the following command to bypass the execution policy for the session.</p>
<p>Set-ExecutionPolicy Bypass -Scope Process</p>
</li>
<li>
<p>Set directory for Scoop and install it.</p>
</li>
</ol>
<pre tabindex="0"><code>   $env:SCOOP=&#39;e:\scoop&#39;
       [environment]::setEnvironmentVariable(&#39;SCOOP&#39;,$env:SCOOP,&#39;User&#39;)
   iex (new-object net.webclient).downloadstring(&#39;https://get.scoop.sh&#39;)
</code></pre><ol start="3">
<li>Install apps using <code>scoop install curl</code> or install apps globally. You can set directory for global apps using Powershell admin</li>
</ol>
<pre tabindex="0"><code>   $env:SCOOP_GLOBAL=&#39;c:\apps&#39;
       [environment]::setEnvironmentVariable(&#39;SCOOP_GLOBAL&#39;,$env:SCOOP_GLOBAL,&#39;Machine&#39;)
   scoop install -g curl
</code></pre><p>Now, just hit commands in Powershell to install local/global apps.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Most Valuable Site of the Month - May 2019</title>
      <link>https://techformist.com/movsom-may-2019/</link>
      <pubDate>Sat, 04 May 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/movsom-may-2019/</guid>
      <description>&lt;p&gt;Featured for the millionth time as a most valuable website - a site that generates all icons for free, and for real.&lt;/p&gt;
&lt;p&gt;I am sick of tired of Google results returning &amp;ldquo;free&amp;rdquo; sites that collect all information including my dog&amp;rsquo;s name and the declare that I need to pay $99 to get darn icon with the darn size.&lt;/p&gt;
&lt;p&gt;I need to be able to get anything for free. So, why should I pay to generate icons that would take an hour to resize in a free program like &lt;a href=&#34;https://www.getpaint.net/&#34;&gt;Paint.NET&lt;/a&gt; or &lt;a href=&#34;https://www.irfanview.com/&#34;&gt;IrfanView&lt;/a&gt;? After all, I need to feed this ego that I create value and people totally should pay me for the value delivered through the free for all programs.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Featured for the millionth time as a most valuable website - a site that generates all icons for free, and for real.</p>
<p>I am sick of tired of Google results returning &ldquo;free&rdquo; sites that collect all information including my dog&rsquo;s name and the declare that I need to pay $99 to get darn icon with the darn size.</p>
<p>I need to be able to get anything for free. So, why should I pay to generate icons that would take an hour to resize in a free program like <a href="https://www.getpaint.net/">Paint.NET</a> or <a href="https://www.irfanview.com/">IrfanView</a>? After all, I need to feed this ego that I create value and people totally should pay me for the value delivered through the free for all programs.</p>
<p>Well, that&rsquo;s that. But featured today is this super awesome website called &ldquo;<a href="http://www.favicomatic.com/">favic-o-matic</a>&rdquo;.</p>
<p><img loading="lazy" src="/misc/favicomatic-awesome-website.jpg" type="" alt="favicomatic-awesome-site-shot"  /></p>
<p>Favicomatic is so awesome that I started this whole new series to feature the most awesome websites out there (including the one here - I do an bloody awesome job if I may say so myself). And, I decided to crown Favicomatic since I am sure I will not meet such an web for the rest of this month.</p>
<h3 id="what-is-it">What is it?</h3>
<p>If you are creating a mobile app, a desktop app, or a progressive web application, you would surely need icons. You know - those thingies on which you expect your users to click.</p>
<p>It turns out that different companies want you to use different sizes of icons so that you can look good on them - because they can. You could potentially start resizing them to fit every whimsical need, but who has the time when there are so many video games lying around and so much stuff to get that.</p>
<p>Enter favomatic.</p>
<h3 id="how-to-work-with-it">How to work with it?</h3>
<ul>
<li>Feed in your icon image</li>
<li>Get 19 different formats of your image that are correctly sized for different uses. You can use all 19 in one go in a PWA :)</li>
</ul>
<p>The files are zipped and accompanied by a text file with the include statements.</p>
<h3 id="why-so-valuable">Why so valuable?</h3>
<ul>
<li>Free to use (<a href="http://www.favicomatic.com/donate">do donate</a>)</li>
<li>Consistent - always available</li>
<li>Fast</li>
</ul>
<p>It is just what every doctor would order if the doctor was a web app engineer.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Can a clipboard editor save the day?</title>
      <link>https://techformist.com/ditto-clipboard-editor/</link>
      <pubDate>Tue, 30 Apr 2019 06:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/ditto-clipboard-editor/</guid>
      <description>&lt;p&gt;A clipboard editor of all the things? How can it be useful in this day and age?&lt;/p&gt;
&lt;p&gt;I have tried to automate some of the most common things that I do on a regular basis. There are a bunch of tools that I use to do just that - these save keystrokes (AutoHotkey), automate regular tasks (e.g. take a screenshot, optimize size and upload to imgur), or connect my one useless social media account to the other (IFTTT).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A clipboard editor of all the things? How can it be useful in this day and age?</p>
<p>I have tried to automate some of the most common things that I do on a regular basis. There are a bunch of tools that I use to do just that - these save keystrokes (AutoHotkey), automate regular tasks (e.g. take a screenshot, optimize size and upload to imgur), or connect my one useless social media account to the other (IFTTT).</p>
<ul>
<li><a href="https://www.autohotkey.com/">AutoHotkey</a></li>
<li><a href="https://ifttt.com/">IFTTT</a></li>
<li><a href="https://getsharex.com/">ShareX</a></li>
</ul>
<p>But for all my life, I could never think that I would need a clipboard editor. Sure, an editor can provide powerful functions to remember the last one million strings I had copied, but what&rsquo;s the point?</p>
<p>I will just copy the thing again if at all I lose it. How can I lose something that I copied a second ago anyway?</p>
<p>Without answering all those smart questions, I installed me-self <a href="https://ditto-cp.sourceforge.io/">Ditto</a>. Ditto promises to hold the text or image content you copied a while back. That&rsquo;s all there is to it - no more.</p>
<p>And, it turned out that&rsquo;s what was missing in my life.</p>
<p>Searching for and re-copying content that I had copied 25 seconds back can shave whole minutes in your super productive day.</p>
<p><img loading="lazy" src="/misc/ditto-clipboard.jpg" type="" alt=""  /></p>
<p>I can now -</p>
<ul>
<li>Press <code>Ctrl + Shift + `</code> to access clipboard</li>
<li>Do a <code>Ctrl + 1</code> to <code>Ctrl + 0</code> to quickly recopy the last 10 strings / images</li>
<li>Start typing in after pressing the shortcut key to quickly filter whatever stuff you had copied to clipboard</li>
<li>Hit enter or click to copy the content again</li>
</ul>
<p>Ditto also has this feature to sync between computers over network (which I don&rsquo;t use). Since the application maintains your clipboard entries in a SQLite DB, you can also put the DB on a shared drive if you want to live dangerously in your LAN.</p>
<p>Ditto is free and open source (GPLv3 if you care for such a thing), very light on resources, and very very quick to use. Try it by all means, but be warned - you will get addicted.</p>
<p><a href="https://ditto-cp.sourceforge.io/">Download Ditto</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Spin up your own local GraphQL server within 15 min</title>
      <link>https://techformist.com/spin-up-your-own-local-graphql-server-within-15-min/</link>
      <pubDate>Thu, 21 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/spin-up-your-own-local-graphql-server-within-15-min/</guid>
      <description>&lt;p&gt;Create your own GraphQL APIs in 15 min flat using Postgres database and a bit of help from PostGraphile. No GraphQL server configuration needed.&lt;/p&gt;
&lt;p&gt;No frontend beginner developer ever said - &amp;ldquo;I want to play around with servers to understand their internals byheart before I venture forth with my beautiful Vue application&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;If you are building on REST APIs, you have public services like &lt;a href=&#34;https://jsonplaceholder.typicode.com/&#34;&gt;JSONPlaceholder&lt;/a&gt;. These services provide quick access to much loved sample APIs for to-do, posts, users etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Create your own GraphQL APIs in 15 min flat using Postgres database and a bit of help from PostGraphile. No GraphQL server configuration needed.</p>
<p>No frontend beginner developer ever said - &ldquo;I want to play around with servers to understand their internals byheart before I venture forth with my beautiful Vue application&rdquo;.</p>
<p>If you are building on REST APIs, you have public services like <a href="https://jsonplaceholder.typicode.com/">JSONPlaceholder</a>. These services provide quick access to much loved sample APIs for to-do, posts, users etc.</p>
<p>There are not a lot of choices if you are building on GraphQL. There have been efforts towards providing such an API in the past but none last long. The solution - create them locally.</p>
<p>Local GraphQL can be cumbersome.</p>
<p>When you start, one may be left wondering on Express + GraphQL + a bit of configuration + write more than few lines of code to get started to serve any new API. There are tools like <a href="https://github.com/marmelab/json-graphql-server">json-graphql-server</a> that claim to speed up this process. However, they are not kept up to date, and seemingly are not meant for Windows(?).</p>
<p>So, I did the next logical thing that was easy and quick. Create an environment of your own using <a href="https://www.postgresql.org/">PostgreSQL</a> and <a href="https://www.graphile.org/postgraphile/">PostGraphile</a>.</p>
<h3 id="initial-setup">Initial Setup</h3>
<ol>
<li>
<p><a href="https://www.postgresql.org/download/">Download and install PostgreSQL</a>.<br>
Alternatively use <a href="https://laragon.org/download/">Laragon with Postgres</a> - it is a really good control centre for local development.</p>
</li>
<li>
<p>Open pgAdmin - the DB admin application for Postgres. Use an existing database or create a new one. Right click on Schema &gt; Tables and click on &lsquo;New Table&rsquo;. I will assume that you will use a database called &rsquo;test&rsquo;. Create a table called &rsquo;todo&rsquo;.
<img loading="lazy" src="/misc/postgres-create-table.png" type="" alt=""  /></p>
</li>
<li>
<p>Create few columns
<img loading="lazy" src="/misc/pgadmin-create-table-columns.png" type="" alt=""  /></p>
</li>
<li>
<p>Start your very own GraphQL server. The server uses port 5000 by default, but we will change it to 5050 for the heck of it (also because 5000 is used by a few other front-end apps)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npx postgraphile -c test --watch -p 5050
</span></span></code></pre></div><p><img loading="lazy" src="/misc/postgraphile-server-start.png" type="" alt=""  /></p>
</li>
</ol>
<h3 id="start-playing-around">Start playing around</h3>
<p>Go to [http://localhost:5050/graphiql]. Copy/paste the GraphQL statements to perform different operations.</p>
<h5 id="query-data">Query data</h5>
<p>Query for data. Of course you will not find anything at this time.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-graphql" data-lang="graphql"><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="py">allTodos</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="py">nodes</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">title</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">done</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>The output will be -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-graphql" data-lang="graphql"><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="s">&#34;data&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;allTodos&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="s">&#34;nodes&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p><img loading="lazy" src="/misc/graphiql-graphql-server-simple.png" type="" alt=""  /></p>
<h5 id="insert-data">Insert data</h5>
<p>Insert &rsquo;to-do&rsquo; data in your database.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-graphql" data-lang="graphql"><span class="line"><span class="cl"><span class="kd">mutation</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nc">createTodo</span><span class="p">(</span><span class="kd">input</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nc">todo</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nc">title</span><span class="p">:</span><span class="w"> </span><span class="s">&#34;Create GraphQL server&#34;</span><span class="p">,</span><span class="w"> </span><span class="nc">done</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nc">todo</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">title</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="py">done</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>This statement will create a single to-do, query back <code>id</code>, <code>title</code>, &amp; <code>done</code> fields, and display them at the right hand side of the screen.</p>
<p><img loading="lazy" src="/misc/graphiql-graphql-mutation.png" type="" alt=""  /></p>
<p>Output -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-graphql" data-lang="graphql"><span class="line"><span class="cl"><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="s">&#34;data&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;createTodo&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="s">&#34;todo&#34;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="s">&#34;id&#34;</span><span class="p">:</span><span class="w"> </span><span class="nc">10</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="s">&#34;title&#34;</span><span class="p">:</span><span class="w"> </span><span class="s">&#34;Create GraphQL server&#34;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="s">&#34;done&#34;</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>You can repeat the <code>query</code> operation and find that it can display data too!</p>
<h3 id="configure-additional-apis">Configure additional APIs</h3>
<p>By now you have a full-fledged server that is serving to-dos. You can add filters, do magic on inserts/updates using functions, and eventually find that the world is the limit.</p>
<p>But, what about additional APIs? Similar to to-dos, you can start creating entities and find them available to your GraphQL without any additional effort. That is the magic of PostGraphile.</p>
<h3 id="why-use-this-setup-for-local-graphql-environment">Why use this setup for local GraphQL environment?</h3>
<ul>
<li>Quicker setup. Type in a few commands + configure DB table - and you are done</li>
<li>Minimal effort to setup new APIs - you are not limited to standard APIs but can go all wild</li>
<li>You can take this to your production environment too. I have used Postgraphile for projects and it rocks!</li>
<li>PostGraphile uses your friendly, neighbourhood Javascript. So we are right at home</li>
</ul>
<h3 id="comments">Comments..?</h3>
<p>What do you say about this folks? Super..? Stupid? Somewhere in between?
Or, simply &ldquo;what am I doing on this planet when people like this exist&rdquo;..?</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Optimize Images for Web</title>
      <link>https://techformist.com/optimize-images-for-web/</link>
      <pubDate>Mon, 18 Feb 2019 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/optimize-images-for-web/</guid>
      <description>&lt;p&gt;I had been a big user of SmushIt! Wordpress plugin in its heyday. After slowing down my sites too often, I switched to offline solutions.&lt;/p&gt;
&lt;p&gt;None of the tools I used have been as easy to use as &lt;a href=&#34;https://nikkhokkho.sourceforge.io/static.php?page=FileOptimizer&#34;&gt;FileOptimizer&lt;/a&gt;. Also: find this handy &lt;a href=&#34;https://sourceforge.net/projects/nikkhokkho/files/FileOptimizer/&#34;&gt;download link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://techformist.com/misc/file-optimizer-image-optimization-for-web-windows.jpg&#34; type=&#34;&#34; alt=&#34;&#34;  /&gt;&lt;/p&gt;
&lt;p&gt;FileOptimizer is a free, open-source tool to optimize files. It is in fact a wrapper for a bunch of open source tools that work great individually, but absolutely rock as a collection.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I had been a big user of SmushIt! Wordpress plugin in its heyday. After slowing down my sites too often, I switched to offline solutions.</p>
<p>None of the tools I used have been as easy to use as <a href="https://nikkhokkho.sourceforge.io/static.php?page=FileOptimizer">FileOptimizer</a>. Also: find this handy <a href="https://sourceforge.net/projects/nikkhokkho/files/FileOptimizer/">download link</a>.</p>
<p><img loading="lazy" src="/misc/file-optimizer-image-optimization-for-web-windows.jpg" type="" alt=""  /></p>
<p>FileOptimizer is a free, open-source tool to optimize files. It is in fact a wrapper for a bunch of open source tools that work great individually, but absolutely rock as a collection.</p>
<p>While FileOptimizer site does not look all shiny, I can vouch for it after about ~5 years of usage (as if that matters - go figure).</p>
<p>I primarily use it for JPG and PNG images that are intended for consumption over web. It can do lossy compression of image files individually or in batch.</p>
<p>Ordinarily, I combine FileOptimizer with <a href="https://getsharex.com/">ShareX</a> - a great, under-appreciated screenshot taking tool. Configure ShareX to allow editing of images after taking a screenshot and later, run FileOptimizer to compress edited images.</p>
<p>Now, just using the default shortcut keys I can take screenshot, manipulate image, and optimize it in one go.</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>Platforms for Creating Courses</title>
      <link>https://techformist.com/platforms-for-creating-courses/</link>
      <pubDate>Sun, 28 Oct 2018 13:37:00 +0000</pubDate>
      
      <guid>https://techformist.com/platforms-for-creating-courses/</guid>
      <description>&lt;p&gt;&amp;ldquo;Be a teacher to become a better student&amp;rdquo;, said none. But it is true to a large extent. It certainly helps the guru, if not the student :)&lt;/p&gt;
&lt;p&gt;While I have created a few short courses in my lifetime, there was nothing substantial. I had been trying to investigate available options for an immediate requirement and my deep PhD level research is outlined below.&lt;/p&gt;
&lt;h1 id=&#34;trends-of-the-day&#34;&gt;Trends of the Day&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Structure your courses - students today are exposed to some really good platforms (Udemy, FreeCodeCamp, Datacamp, Coursera, Salesforce Trailhead etc.)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;Be a teacher to become a better student&rdquo;, said none. But it is true to a large extent. It certainly helps the guru, if not the student :)</p>
<p>While I have created a few short courses in my lifetime, there was nothing substantial. I had been trying to investigate available options for an immediate requirement and my deep PhD level research is outlined below.</p>
<h1 id="trends-of-the-day">Trends of the Day</h1>
<ul>
<li>
<p>Structure your courses - students today are exposed to some really good platforms (Udemy, FreeCodeCamp, Datacamp, Coursera, Salesforce Trailhead etc.)</p>
</li>
<li>
<p>Video is big</p>
</li>
<li>
<p>Interactivity is highly preferred. Test students, grade on what they do in addition to what they answer</p>
</li>
<li>
<p>Mix content. Videos, reading material, Podcasts, Webinars / real-time interaction with a human</p>
</li>
<li>
<p>Link up to external content. You fail if you try to create an island</p>
</li>
</ul>
<h2 id="do">Do</h2>
<ol>
<li>
<p>Think through what students expect and plan your course of action</p>
</li>
<li>
<p>Start small
There are plenty of options - just choose one, set a minimal budget and roll.</p>
</li>
<li>
<p>Keep your options open to scale
Consider paid vs. free options available today. Keep in mind that the platform can change its mind, get acquired, or go out of business.</p>
</li>
<li>
<p>Decide the general direction, but don&rsquo;t overthink.
If you are a one-person shop and you have 4 hours to spend on the course - select Udemy or Udacity, and run. You can always create the brand elsewhere as you scale in the future</p>
</li>
</ol>
<h2 id="dont">Don&rsquo;t</h2>
<ol>
<li>
<p>Don&rsquo;t plonk money first and think later</p>
<p>Although everyone is tempted to do this at one time or the other: don&rsquo;t throw money at the requirement (or problem).</p>
<p>You can start small, and scale later. You will be more capable of taking decisions about the business after the first two, five or ten courses.</p>
</li>
<li>
<p>Don&rsquo;t be afraid to mix and match
There is no one perfect solution for everyone. You could host LMS, create private videos on YouTube, create a few more password protected videos on Vimeo - that should work just fine in the beginning while you are testing the ropes.</p>
</li>
</ol>
<h1 id="your-options">Your Options</h1>
<p>We will divide this into multiple categories.</p>
<h2 id="self-hosted-lms">Self-hosted LMS</h2>
<p>Choose this option if you have written content to host. Evaluate solutions to host videos separately (see below) and link everything up.</p>
<p><strong><a href="https://moodle.org/">Moodle</a></strong></p>
<p>Grand-daddy of LMS is still going strong. Moodle is known for its standards, has good UI, and a passable user experience. It also has regular releases and a helpful community.</p>
<p>You can create and manage courses, manage course contents, provide access to faculty and students, share teaching material, share students to share their work, grade students, and provide forums for everyone to collaborate.</p>
<p>On the flip side, you have a bunch of things to configure.</p>
<p><strong><a href="https://chamilo.org/en/">Chamilo</a></strong></p>
<p>Actively maintained. Is a bit easier to manage, has comparable feature set and similar high standards as Moodle.</p>
<h3 id="advantages-of-self-hosted-option">Advantages of Self-hosted Option</h3>
<ul>
<li>
<p>You are in complete control</p>
</li>
<li>
<p>Free of cost (and open source)</p>
</li>
<li>
<p>PHP based solutions. Provided by every cheap host out there. Cost effective infrastructure.</p>
</li>
<li>
<p>Seamlessly integrates with your website</p>
</li>
</ul>
<h3 id="limitations">Limitations</h3>
<ul>
<li>
<p>Not as &ldquo;modern&rdquo;</p>
</li>
<li>
<p>Configuration - not difficult, but not easy either</p>
</li>
<li>
<p>You should not host video on cheap hosting, external services may not be as seamlessly integrated in the application process flow</p>
</li>
</ul>
<h2 id="video-platforms">Video Platforms</h2>
<p>Provisioning a video by itself for teaching someone may not make sense, but it is surprisingly viable.</p>
<p>You can create a series of tutorials, create one-off videos, or create other premium content. You can manually provide approvals for access, or provide a secret URL on Patreon or some such site that can be accessed by subscribers.</p>
<p><strong><a href="https://youtube.com">YouTube</a></strong></p>
<p>Create public or private videos on YouTube is as easy as flagging a video as &lsquo;private&rsquo;. You can change the privacy settings at any time.</p>
<p><strong><a href="https://vimeo.com">Vimeo</a></strong></p>
<p>Next cost effective option. Upload videos and password protect them.</p>
<p><strong><a href="https://www.zenler.com/">Zenler</a></strong></p>
<p>Zenler allows you to create a custom domain, a basic marketing page, and host your videos.</p>
<p>This is better than just hosting content (especially if you don&rsquo;t have a dedicated website), and completely white-label your offering.</p>
<h2 id="integrated-lms--videos--private-label-in-select-options">Integrated LMS + Videos (+ Private Label in select options)</h2>
<p>This is the ideal solution and best of all worlds. Provide video, which is the most preferred teaching medium now, and an integrated LMS. You can link to your domain at anytime and build your brand as well.</p>
<p><strong><a href="https://teachable.com">Teachable</a></strong></p>
<p>A free plan at Teachable should be good to start with. Later you graduate to $39/mo + 5% transaction fee at a minimum.</p>
<ul>
<li>
<p>Widely accepted by tutors as a standard, easy-to-manage platforms</p>
</li>
<li>
<p>pleasant UX.</p>
</li>
<li>
<p>Ceate your entire site on Teachable - not just host tutorials. Or, integrate existing site as a link</p>
</li>
<li>
<p>ability to scale - any no. of courses (free courses do not cost anything), custom domains, etc.</p>
</li>
<li>
<p>drip course content</p>
</li>
<li>
<p>ability to provide quizzes</p>
</li>
<li>
<p>email &amp; affiliate marketing</p>
</li>
</ul>
<p><strong><a href="https://www.learnworlds.com">LearnWorlds</a></strong></p>
<p>Starts at $24 + $5 per sale.</p>
<ul>
<li>
<p>Has good UX, a good community of learners but not as popular</p>
</li>
<li>
<p>scale well - custom domains, affiliate marketing enabled</p>
</li>
</ul>
<p><strong><a href="https://eliademy.com/">Eliademy</a></strong></p>
<p>A full-blown MOOC, this is a good hosted alternative to self-hosted solutions like Moodle.</p>
<p>Create your courses, manage students, grade them, integrate external content (presentations, videos, etc.).</p>
<p>Eliademy charges a 30% of your student fee. If you go premium (~$12/mo), that will be reduced to 10%.</p>
<p>They have a marketplace but not directly comparable to Udemy.</p>
<p><strong><a href="https://udemy.com">Udemy</a></strong></p>
<p>A large captive audience keeps the fires of Udemy burning. The platform probably has millions of courses and thousands of instructors.</p>
<p>You can start for free, and remain free. <a href="https://support.udemy.com/hc/en-us/articles/229605008">Udemy fees</a> varies from 3% to 75% depending on the acquisition channel.</p>
<p>On the downside, Udemy has lost quite a lot of respect due to poor quality training (attributed to the low bar of entry?), jacked up pricing, and sheer numbers can be a disadvantage here.</p>
<p>Udemy is really good if you are willing to work on your brand-building outside Udemy :)</p>
<p><strong><a href="https://www.thinkific.com/">Thinkific</a></strong></p>
<p>Start for free. Graduate to a min of $49/mo.
Very similar in features to Teachable.</p>
<h3 id="advantages">Advantages</h3>
<ul>
<li>
<p>Less admin overhead</p>
</li>
<li>
<p>Focus on course, not on administering the course and maintaining servers</p>
</li>
<li>
<p>Exposure to a large audience. Leverage learners and build an audience globally</p>
</li>
<li>
<p>Create entire websites through drag &amp; drop. Build your business around the sites hosted on the platforms</p>
</li>
<li>
<p>Leverage marketing capabilities offered by platform. That may include discounts, paid ads for a better converting audience, and featured courses/instructors</p>
</li>
</ul>
<h3 id="limitations-1">Limitations</h3>
<ul>
<li>
<p>You will be one in another thousand instructors and courses - unless the platform allows white-labelling. More difficult to stand out as a brand</p>
</li>
<li>
<p>Discounts often devalue the course. Think Udemy - 90% discounts are the norm</p>
</li>
<li>
<p>Expensive as compared to the self-hosted options (but also provide significant advantages)</p>
</li>
</ul>
<h1 id="recommendations-of-integrated-learning-platforms">Recommendations of Integrated Learning Platforms</h1>
<p>There is no one right solution.</p>
<p><strong>If you are a one-person / small shop starting now:</strong></p>
<ul>
<li>Get on Teachable free plan</li>
<li>Get on Udemy</li>
<li>Release free videos on YouTube. Market yourself, build a brand, and link up to the courses.</li>
</ul>
<p>Of course, everyone and their dog is also doing this. You can only stand out by building out quality material.</p>
<p><strong>If you are a subject matter expert or a small-medium sized shop trying to create your own business around tutoring students:</strong></p>
<ul>
<li>
<p>Get on Teachable paid plan, and teach away</p>
</li>
<li>
<p>Build website and plan marketing on the Teachable platform itself</p>
</li>
</ul>
<p><strong>If you are a large-sized shop with 100s of employees:</strong></p>
<ul>
<li>
<p>Stop reading through articles like this, and get back to work. Marketing has made the decisions for you.</p>
</li>
<li>
<p>If you <em>are</em> the marketing person in a large shop, you will see these recommendations but not be serious about them anyway. Good luck.</p>
</li>
</ul>
<p>Well, that&rsquo;s about all I had to say. What are your plans to earn the next million dollars - which platform do you choose?</p>
<p>(PS: I have made this rule to minimize pictures and videos as much as possible on this site, sorry! Hopefully I could communicate what I wanted to tell you through good ol&rsquo; text.)</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Collaboration Tools for Developers</title>
      <link>https://techformist.com/collaboration-tools-for-developers/</link>
      <pubDate>Sat, 27 Oct 2018 11:11:00 +0000</pubDate>
      
      <guid>https://techformist.com/collaboration-tools-for-developers/</guid>
      <description>&lt;p&gt;There are two primary things of interest from a communication perspective -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;One to one/many collaboration with team&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One to many collaboration with the world&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The tools outlined here are great from both perspectives, but choose your poison carefully.&lt;/p&gt;
&lt;h3 id=&#34;1-team&#34;&gt;1. Team&lt;/h3&gt;
&lt;p&gt;I am sure you have a bunch of tools from your organization - but let&amp;rsquo;s be honest. Most of the &amp;ldquo;org approved&amp;rdquo; tools are redundant by the time they get approved by the security team.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>There are two primary things of interest from a communication perspective -</p>
<ol>
<li>
<p>One to one/many collaboration with team</p>
</li>
<li>
<p>One to many collaboration with the world</p>
</li>
</ol>
<p>The tools outlined here are great from both perspectives, but choose your poison carefully.</p>
<h3 id="1-team">1. Team</h3>
<p>I am sure you have a bunch of tools from your organization - but let&rsquo;s be honest. Most of the &ldquo;org approved&rdquo; tools are redundant by the time they get approved by the security team.</p>
<p>A note about emails: just hang anyone who writes emails about code, bugs, and issues. Ask questions later.</p>
<p>Here are our saviors in the harsh world -</p>
<ol>
<li>
<p><a href="https://products.office.com/en-us/microsoft-teams/group-chat-software">Microsoft Teams</a>
The first real competition to Slack :). It promises a lot, has delivered on a lot - the future is sure exciting.</p>
<p>I, unfortunately, have not tried a lot of Teams. It has been the niche territory for the teams I work with.</p>
</li>
<li>
<p><a href="https://slack.com/">Slack</a>
Needs no mention. Moving on then.</p>
<p>Greatest strength: integration and the resulting automation that can be done anywhere.</p>
</li>
</ol>
<p>If you are in smaller groups that do not qualify for the free preview of Teams, and you find Slack is expensive - read on.</p>
<h3 id="2-world">2. World</h3>
<p>By &ldquo;world&rdquo; I do not essentially refer to every Tom out there. I am looking for public or private communities that gets our message out, and allow us to work in peace in our own shell.</p>
<p>I would still carry some hope of using Slack in our daily lives, but there are more interesting platforms as well.</p>
<ol>
<li>
<p><a href="https://spectrum.chat/">Spectrum.chat</a>
I am excited about Spectrum. I was led there through the NextJS community, but stayed there for all of the other communities as well.</p>
<p>Note that Spectrum does not have voice capabilities today.</p>
</li>
<li>
<p><a href="https://discordapp.com/">Discord</a>
Discord can be for gaming - certainly. But the feature set is invaluable to developers. Single/group chat, group calls, screen sharing, and a cool, dark theme.</p>
</li>
<li>
<p>Reddit
Create private or public communities on Reddit, and collaborate away. I have written a <a href="https://techformist.com/use-free-private-forums-2019/">thesis about collaborating on Reddit before</a>.</p>
</li>
</ol>
<p>If you don&rsquo;t all that care about collaborating faster but love to build influence posing as a developer: you always have <a href="https://www.facebook.com/groups/">Facebook Groups</a> or <a href="https://www.linkedin.com/groups/">LinkedIn groups</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>3 Great Programs to Access your Databases</title>
      <link>https://techformist.com/3-great-programs-to-access-your-databases/</link>
      <pubDate>Thu, 25 Oct 2018 09:46:00 +0000</pubDate>
      
      <guid>https://techformist.com/3-great-programs-to-access-your-databases/</guid>
      <description>&lt;p&gt;I worked with Oracle DB for a long time. Later I switched to MySQL, MariaDB, and a tiny bit of MongoDB.&lt;/p&gt;
&lt;p&gt;All the SQL databases I worked did not quite boast about exciting developer experiences.&lt;/p&gt;
&lt;p&gt;Oracle had SQLPlus, which was foresaken by everyone but a few diehards. Fortunately, we also had SQLDeveloper or Toad (to those who could afford that).&lt;/p&gt;
&lt;p&gt;Unfortunately, Oracle was actively used at my work place. MySQL and friends were not.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I worked with Oracle DB for a long time. Later I switched to MySQL, MariaDB, and a tiny bit of MongoDB.</p>
<p>All the SQL databases I worked did not quite boast about exciting developer experiences.</p>
<p>Oracle had SQLPlus, which was foresaken by everyone but a few diehards. Fortunately, we also had SQLDeveloper or Toad (to those who could afford that).</p>
<p>Unfortunately, Oracle was actively used at my work place. MySQL and friends were not.</p>
<p>There had to be a light-weight, fast program to access DB than the all powerful phpMyAdmin could not provide.</p>
<p>Following are my go-to tools to access local/remote databases.</p>
<ol>
<li>
<p><a href="https://www.heidisql.com/">HeidiSQL</a>
Gets work done for MySQL / MariaDB, Postgre SQL and MSSQL!</p>
</li>
<li>
<p><a href="https://dbeaver.io/">DBeaver</a>
Supports MySQL, PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, and my grandfather&rsquo;s databases on Sybase, MS Access, and Teradata.</p>
</li>
<li>
<p><a href="https://teamsql.io/">TeamSQL</a>
New addition to the toolset that promises to support all databases in this Universe. Electron based - so YMMV.</p>
</li>
</ol>
<p>If you happen to work a lot with SQLite - you should try <a href="https://sourceforge.net/projects/sqliteman/">sqliteman</a>. You have one window to create &amp; manage multiple databases, and perform CRUD operations.</p>
<p>I use the web browser or Atlas whenever I am working on MongoDB, and that&rsquo;s not a lot.</p>
<p>All great tools, but do remember the adage - &ldquo;A tool is as good as the user.&rdquo; :)</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Backup - Your Life Depends on It</title>
      <link>https://techformist.com/backup-your-life-depends-on-it/</link>
      <pubDate>Wed, 24 Oct 2018 09:04:00 +0000</pubDate>
      
      <guid>https://techformist.com/backup-your-life-depends-on-it/</guid>
      <description>&lt;p&gt;Backing up has been historically a pain.&lt;/p&gt;
&lt;p&gt;Most of the times I lacked the resources - either I don&amp;rsquo;t have the hardware or could not quite setup everything seamlessly.&lt;/p&gt;
&lt;h3 id=&#34;previous-setup&#34;&gt;Previous Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://sourceforge.net/projects/synchronicity/&#34;&gt;Create Synchronicity&lt;/a&gt;
Light-weight, backup and synchronise.
I include any folder that needs to be backed up to CS. Schedule the program to run every fortnight or so.&lt;/p&gt;
&lt;p&gt;The files are backed up an attached hard-drive, some folders go to OneDrive, Dropbox, Box, or Google Drive folders.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Backing up has been historically a pain.</p>
<p>Most of the times I lacked the resources - either I don&rsquo;t have the hardware or could not quite setup everything seamlessly.</p>
<h3 id="previous-setup">Previous Setup</h3>
<ol>
<li>
<p><a href="https://sourceforge.net/projects/synchronicity/">Create Synchronicity</a>
Light-weight, backup and synchronise.
I include any folder that needs to be backed up to CS. Schedule the program to run every fortnight or so.</p>
<p>The files are backed up an attached hard-drive, some folders go to OneDrive, Dropbox, Box, or Google Drive folders.</p>
</li>
<li>
<p><a href="https://tools.stefankueng.com/CryptSync.html">CryptSync</a>
Light-weight program to synchronize two folders - while encrypting one of them.
This was useful to backup sensitive data to OneDrive and its cousins.</p>
</li>
<li>
<p><a href="https://www.backup-utility.com/download.html">AOMEI Backupper</a>
Create system backups in an attached hard-drive.</p>
</li>
</ol>
<h3 id="problem">Problem</h3>
<p>The setup looks ok - on paper. I was not delighted since -</p>
<ol>
<li>I had multiple backups running for some folders - it was messy, and I could (did) not spend enough time to untangle the wires</li>
<li>Encryption is great, but not quite friendly. I had to download, decrypt (learnt to store passwords in LastPass after I lost the password once), and only then reach to the data</li>
<li>I also had folders in the cloud backup providers that were directly updated</li>
<li>Light weight or otherwise - the convoluted structure is not a good arrangement</li>
</ol>
<h3 id="solution">Solution</h3>
<p>Move to <a href="https://www.duplicati.com/">Duplicati</a>.</p>
<ol>
<li>One platform to backup to NAS, FTP or to OneDrive and friends</li>
<li>Built-in encryption</li>
<li>One (browser) window to rule them all (well almost, exceptions apply)</li>
</ol>
<p>I still use AOMEI Backupper (am still amazed each time I type the name) for scheduled system backups.</p>
<p>My hard-drive misbehaved a couple of times in the last six months, and I did not see myself reaching out to AOMEI System Backup for help. As of now, I have scheduled reminders in Google Calendar to remind me to create (or test) a recovery drive twice an year.</p>
<p>I have learnt to live with this arrangement until I invest in better software (queued up task to purchase either Acronis Backup and Recovery, AOMEI Backupper Pro, or Ashampoo Backup Pro).</p>
<p>Caution: Duplicati is still running Beta on v2.0.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Invaluable Presentation Tools for a Developer</title>
      <link>https://techformist.com/invaluable-presentation-tools-for-a-developer/</link>
      <pubDate>Sun, 21 Oct 2018 04:36:00 +0000</pubDate>
      
      <guid>https://techformist.com/invaluable-presentation-tools-for-a-developer/</guid>
      <description>&lt;p&gt;I am a developer (or an imposter who thinks he is a developer).&lt;/p&gt;
&lt;p&gt;A developer has to figure out solutions to problems, and sometimes carry the rest of the humanity along for the ride.&lt;/p&gt;
&lt;p&gt;I am unique in that - rest of the developers do that 99.99xxx99% of the time, and I fill in the gap.&lt;/p&gt;
&lt;p&gt;For that communication to be effective with my fellow humans: I prefer to structure the information, use any means within my reach and in general, not be known as a snob.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I am a developer (or an imposter who thinks he is a developer).</p>
<p>A developer has to figure out solutions to problems, and sometimes carry the rest of the humanity along for the ride.</p>
<p>I am unique in that - rest of the developers do that 99.99xxx99% of the time, and I fill in the gap.</p>
<p>For that communication to be effective with my fellow humans: I prefer to structure the information, use any means within my reach and in general, not be known as a snob.</p>
<p>I need presentation tools to do all those preferences to happen in the real world.</p>
<p>Here are my favourite tools to present my invaluable ideas to the world. I work on a PC using Windows 10 - so, feel free to banish this site if you are a Mac&rsquo;er. Most of the tools are free - thank you all, you are awesome.</p>
<h1 id="helpers">Helpers</h1>
<p>Helpers come first since these are omni present and are useful regardless of the medium of presentation (well, almost).</p>
<ol>
<li>
<p><a href="https://getsharex.com/">ShareX</a></p>
<p>Using ShareX for a million years now, never let me down. I was a fan of <a href="http://www.donationcoder.com/software/mouser/popular-apps/screenshot-captor">Screenshot Captor</a> before but I have moved on.<br>
ShareX can automate post screenshot flow - e.g. open Greenshot Editor to resize screenshot, upload the screenshot to a target host, copy the image or shortcut to clipboard, and take the dog out for a walk in the mean time.</p>
</li>
<li>
<p><a href="https://www.inputdirector.com/">InputDirector</a>
I don&rsquo;t have a multi-monitor setup. But I do have an extra laptop. When I am doing presentations, or referring to too many materials at one go - InputDirector stands by for the rescue.</p>
<p>I can seamlessly transition from my desktop to my laptop and back - all using a single keyboard and mouse combination.</p>
</li>
<li>
<p><a href="https://www.yworks.com/products/yed">yeED</a>
Write UMLs, simple flows, and stuff.</p>
</li>
<li>
<p><a href="https://pencil.evolus.vn/">Pencil</a>
Create prototypes, mockups and simple diagrams.</p>
</li>
<li>
<p><a href="https://www.glassbrick.org/">GlassBrick</a>
Zoom in, zoom out, and be done.
You never knew you wanted this program until you have started using it.</p>
</li>
<li>
<p><a href="https://office.live.com/start/PowerPoint.aspx">PowerPoint</a>
I use Powerpoint (an offline version) - there that&rsquo;s out in the open.\</p>
</li>
</ol>
<h1 id="screencast">Screencast</h1>
<ol>
<li>
<p><a href="https://www.techsmith.com/video-editor.html">Camtasia</a>
I have tried many screencasting software - but Camtasia works best for developers. Period.
Record, edit sound in Audacity - and you are done.</p>
</li>
<li>
<p><a href="https://www.vb-audio.com/Voicemeeter/">Voicemeeter</a></p>
<p>Do some sound processing magic in real-time - do live streaming, record, or just about anything else.</p>
<p>Having a weak voice ain&rsquo;t keeping us from speaking. Even the strongest of alphas will have doubts about who&rsquo;s on the other side when you use Voicemeeter. All hail computers.</p>
<p>Combine this with <a href="https://www.vb-audio.com/Cable/index.htm">VB-Cable virtual audio device</a>.</p>
</li>
<li>
<p><a href="https://epic-pen.com/">Epic-pen</a>
Highlight certain areas of the screen during a presentation.</p>
</li>
<li>
<p><a href="https://www.cockos.com/licecap/">LiceCAP</a></p>
<p>If you are not doing anything bombastic, you should consider GIFs rather than a video. LiceCAP is good enough software to record GIFs fast.</p>
</li>
</ol>
<h1 id="podcast">Podcast</h1>
<p>I am not into podcasts and only did test runs so far. This will be my resort when there are zombies around and I cannot communicate through books, blog posts or videos.</p>
<p>I am ready with the below tools when it is time.</p>
<ol>
<li>
<p><a href="https://www.audacityteam.org/">Audacity</a>
Greatest sound recorder, processor ever.</p>
</li>
<li>
<p>Voicemeeter
Yes, again.</p>
</li>
</ol>
<h1 id="writing">Writing</h1>
<p>Many of you will feel disappointed that I present through writing. But I can&rsquo;t help it if I am a terrific author.</p>
<h2 id="blogs">Blogs</h2>
<ol>
<li>
<p>Wordpress Post / Page Editor</p>
<p>I tried a lot of software including the <a href="https://apps.wordpress.com/desktop/">Wordpress offline editor</a>, but none of them provide the same seamless experience as the inbuilt editor.</p>
<p>Don&rsquo;t use Gutenberg though - that has to be killed by fire as of Y2018.</p>
</li>
<li>
<p>Markdown editors on <a href="https://www.netlifycms.org/">Netlify CMS</a> and <a href="https://www.siteleaf.com/">Siteleaf</a></p>
<p>If you are getting started or in a hurry to write posts (who isn&rsquo;t?) - these work fine. Choose one depending on your preference.</p>
</li>
<li>
<p>Offline markdown editing on <a href="https://code.visualstudio.com/">VS Code</a></p>
<p>I can put all my stupid preferences in VS Code, write and commit to Git. For e.g. I can Emmet something like typing a <code>{:target=&quot;_blank&quot;}</code> after links in Jekyll markdown files.</p>
<p>I could do something similar using <a href="https://www.phraseexpress.com/">PhraseExpress</a> in all applications, but there is only so much productivity to improve on an yearly basis.</p>
</li>
</ol>
<h2 id="books">Books</h2>
<ol>
<li>
<p><a href="https://pandoc.org/">Pandoc</a></p>
<p>You can write what you want but you are not getting anywhere without providing that in a thousand formats. Pandoc has you covered.</p>
</li>
<li>
<p><a href="https://typora.io">Typora</a></p>
<p>Write markdown, see magical rendering as you type, apply themes, and save/export in popular formats.</p>
<p>Have a look at my <a href="https://techformist.com/create-ebook-from-multiple-markdown-files/">book writing process flow</a></p>
</li>
<li>
<p>Did I mention VS Code for markdown?</p>
<p>I think I am in love with that tool.</p>
</li>
</ol>
<p>Well, that&rsquo;s about my tool-set; get back to work.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Two eBook Selling Platforms for the Casual Author</title>
      <link>https://techformist.com/two-ebook-selling-platforms-for-the-casual-author/</link>
      <pubDate>Sat, 20 Oct 2018 13:39:00 +0000</pubDate>
      
      <guid>https://techformist.com/two-ebook-selling-platforms-for-the-casual-author/</guid>
      <description>&lt;p&gt;I have written less than five eBooks in my life. I used Amazon to self-publish the book and have it for sale for two weeks now.&lt;/p&gt;
&lt;p&gt;The above statements by themselves should be a good indicator of how much I know about the topic of selling eBooks.&lt;/p&gt;
&lt;p&gt;But, I being me, cannot really &amp;ldquo;not write&amp;rdquo; about my fantastic research in the two weeks hence. I go deep in all kinds of useless topics, and this as &amp;ldquo;mildly interesting&amp;rdquo;. I see a ready-invite to invest my time in such topics - find stuff people say, write about, and what folks end up using.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have written less than five eBooks in my life. I used Amazon to self-publish the book and have it for sale for two weeks now.</p>
<p>The above statements by themselves should be a good indicator of how much I know about the topic of selling eBooks.</p>
<p>But, I being me, cannot really &ldquo;not write&rdquo; about my fantastic research in the two weeks hence. I go deep in all kinds of useless topics, and this as &ldquo;mildly interesting&rdquo;. I see a ready-invite to invest my time in such topics - find stuff people say, write about, and what folks end up using.</p>
<p>Why should you trust me on the recommendations given the above fact? Well, no reason. Don&rsquo;t trust me - I says. If you are a risk taker, follow along.</p>
<p>My objectives are simple -</p>
<ol>
<li>
<p>Host my PDF / ePUB eBook and allow me to charge money. The lower the charge, the better - I am in no illusions about what I offer.</p>
</li>
<li>
<p>It will be awesome if the platform has any kind of authoring or conversion tools</p>
</li>
<li>
<p>I would also like to offer the eBook for free for my &ldquo;fans&rdquo;. Who am I kidding - let&rsquo;s just refer them as people who want to just take a look at another free eBook for the heck of it.</p>
</li>
</ol>
<p><a href="https://leanpub.com">LeanPub</a> is of course what comes to one&rsquo;s mind with the above requirements. Though LeanPub has a minimum $4.99 cost of the eBook, it wasn&rsquo;t a deal breaker.</p>
<p>What was a problem, however, was the markdown and interplay between the need to keep content open to all (on GitHub), and the structural requirements of LeanPub. I wrote about <a href="https://techformist.com/create-ebook-from-multiple-markdown-files/">how I found an alternate solution to LeanPub</a> before. That made me take this &ldquo;road seldom taken&rdquo; in the first place.</p>
<p>I started with exploration of sites like <a href="https://www.patreon.com/">Patreon</a>, <a href="https://ko-fi.com">ko-fi</a>, and <a href="https://www.buymeacoffee.com/">BuyMeACoffee</a>.</p>
<p>These sites allowed me to easily upload files that I could offer to paying subscribers. I could scale the business model in the future to build tiers of premium content (what&rsquo;s wrong in dreaming the wild dream?).</p>
<p>While BuyMeACoffee has something akin to what I want, it needed a link and not files (looking at the free plan). Patreon was stuck with me in verification or something like that, and ko-fi had the option to offer files as rewards in their paid model. I am half-broke at the time and paying a subscription fee to offer free rewards did not make much sense to my financial health.</p>
<p>Next, I explored sites like <a href="https://www.smashwords.com/">Smashwords</a>, <a href="http://www.blurb.com/">Blurb, </a>, <a href="https://www.kobo.com/writinglife">Kobo</a>,<a href="https://www.nookpress.com/ebooks">Nook</a> and <a href="https://play.google.com/books/publish">even Google</a>. Google is looking for premium authors and publishers at this time, while the others -</p>
<ul>
<li>looked not so exciting (don&rsquo;t ask)</li>
<li>demanded money for the simple objective I had in mind</li>
<li>would be restrictive and more complex than they need to be</li>
</ul>
<p>Further, I explored affiliate-loving websites like <a href="http://www.e-junkie.com/">e-Junkie</a> and <a href="http://www.clickbank.com/">ClickBank</a>, but decided against them. They would not look as professional and developer-oriented :|</p>
<p>I had discounted sites like BookBaby, Gumroad or Shopify - I consider them premium at what I was set to do.</p>
<p>So it was to be. Finally, there were three options, which were kept away from you so far to keep the tension going thus far.</p>
<h3 id="1-payhip">1. <a href="https://payhip.com/">Payhip</a></h3>
<p>Create a simple eBook sale page. Upload your PDF / ePUB and you are done.</p>
<p><img loading="lazy" src="/misc/payhip.jpg" type="" alt="Payhip"  /></p>
<ul>
<li>Payhip&rsquo;s cut is 5% of the price</li>
<li>No limits on size/bandwidth - can scale to software, design assets etc.</li>
<li>Offer membership or digital goods</li>
</ul>
<h3 id="2-selz">2. <a href="https://selz.com">Selz</a></h3>
<p>A platform that is loved by affiliates, Selz has been in business a long time and is a more generic online store as compared to Payhip.</p>
<p><img loading="lazy" src="/misc/selz.jpg" type="" alt="Selz"  /></p>
<ul>
<li>Has a cut around 5% of the product price</li>
<li>Can set a zero price as well. Allows anyone to create discounts</li>
<li>Track orders with better customer analytics</li>
<li>Has better integration with multiple platforms, and geo restrictions</li>
</ul>
<p>And, here&rsquo;s a bonus :)</p>
<h3 id="3-memberful">3. <a href="https://memberful.com/">Memberful</a></h3>
<p>Memberful is more of a membership site rather than a eBook hosting platform. The idea was to potentially leverage interest in the book to push towards a membership plan and continuously push premium content every week.</p>
<p><img loading="lazy" src="/misc/Memberful.jpg" type="" alt="Memberful"  /></p>
<p>This did not stand on firm ground - contributing premium content weekly is a <strong>big</strong> commitment. More over, I did not have a solid subscriber base that I can convert right now.</p>
<h3 id="in-conclusion">In Conclusion</h3>
<p>Ultimately a combination of factors pushed me to chose Selz and Payhip for two distinct objectives I have today. Let&rsquo;s see on how that journey goes - will have an update here for anything that is exciting.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Free Logo Maker for Real</title>
      <link>https://techformist.com/free-logo-maker-for-real/</link>
      <pubDate>Wed, 17 Oct 2018 07:18:00 +0000</pubDate>
      
      <guid>https://techformist.com/free-logo-maker-for-real/</guid>
      <description>&lt;p&gt;If you are like me: you will be creating dime-a-dozen websites that no one is going to read.
.. or, care about.&lt;/p&gt;
&lt;p&gt;If you are like me, you would want to do that anyway. because.. why the hell not?&lt;/p&gt;
&lt;p&gt;All my websites (almost, all) have a logo associated. I am no designer and creating logos is a pain in the neck.&lt;/p&gt;
&lt;p&gt;If you Google, you will be inundated with many &amp;ldquo;free&amp;rdquo; logo creators that just ask money at the very end. You created the logo for free, but that does not mean you don&amp;rsquo;t pay for the download.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>If you are like me: you will be creating dime-a-dozen websites that no one is going to read.
.. or, care about.</p>
<p>If you are like me, you would want to do that anyway. because.. why the hell not?</p>
<p>All my websites (almost, all) have a logo associated. I am no designer and creating logos is a pain in the neck.</p>
<p>If you Google, you will be inundated with many &ldquo;free&rdquo; logo creators that just ask money at the very end. You created the logo for free, but that does not mean you don&rsquo;t pay for the download.</p>
<p>So, imagine my surprise at this website - <a href="https://hatchful.shopify.com">https://hatchful.shopify.com</a>.</p>
<p><img loading="lazy" src="/misc/hatchful-logo-creator-review.jpg" type="" alt="hatchful-logo-creator-review.jpg"  /></p>
<p>Shopify is a respected player, but I have had my share of surprises in the past.</p>
<p>I started as I do with any website. &ldquo;Designed a quick logo&rdquo; - which meant:</p>
<ol>
<li>Select a design that catches the eye</li>
<li>Recolor</li>
<li>Change font</li>
</ol>
<p>I now half-expected to see &ldquo;pay up, and I will show you the way to paradise&rdquo;.</p>
<p>And.. nope, that was not to be. I was prompted for an email, which I responded to with my beloved email address.</p>
<p>I received a zip file that not only has the single logo file but brand assets for popular social media.
I mean.. I have tears in my eyes, guys.</p>
<p>Way to go - Shopify!</p>
<p>Get your own logo at <a href="https://hatchful.shopify.com">https://hatchful.shopify.com</a></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Free Private Forums in 2019</title>
      <link>https://techformist.com/free-private-forums-in-2019/</link>
      <pubDate>Tue, 16 Oct 2018 18:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/free-private-forums-in-2019/</guid>
      <description>&lt;p&gt;I was setting up content for a professional training company that I consult for. We have to do &amp;ldquo;something different&amp;rdquo; as compared to many others in the space. One such idea was to setup a closed user group for the course students.&lt;/p&gt;
&lt;p&gt;The said forum will enable students to discuss the course, ask questions, and connect with other students/faculty.&lt;/p&gt;
&lt;p&gt;The company is profitable but bearly and had its share of expenses lined up. Being a small, bootstrapped company has its advantages, but strong finances is not one of them.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was setting up content for a professional training company that I consult for. We have to do &ldquo;something different&rdquo; as compared to many others in the space. One such idea was to setup a closed user group for the course students.</p>
<p>The said forum will enable students to discuss the course, ask questions, and connect with other students/faculty.</p>
<p>The company is profitable but bearly and had its share of expenses lined up. Being a small, bootstrapped company has its advantages, but strong finances is not one of them.</p>
<p>There are more than few options to setup a forum for free/ or with minimal costs -</p>
<ol>
<li>Use Yammer (or Salesforce.com Chatter)</li>
<li>Closed facebook groups (hmm) / private LinkedIn groups</li>
<li>Host forums on my own server - we already host the site, so this should not be an issue</li>
<li>Just go with Microsoft Teams or Slack, and avoid the idea of full blown forum software</li>
<li>Host something like a StackExchange for Enterprises (we don&rsquo;t have money), or look at Reddit</li>
<li>StackExchange for enterprises</li>
</ol>
<h1 id="the-completely-ludicrous-evaluation">The Completely Ludicrous Evaluation</h1>
<p>Although Yammer is still under consideration, we wanted to use something that can be exposed to students. Yammer will want us to create business email ids for everyone. This is an unnecessary burden. I found out later that Teams had a similar requirement, and so does Chatter - all of them were pushed off the table.</p>
<p>My quick scan of the many PHP-based forum software was satisfying, but not exciting. I am lazy - wanted to avoid maintaining an additional forum software when necessary. Also, none of them really looked appealing to the millenial generation walking in to the course.</p>
<p>Facebook and LinkedIn have their appeal. Almost everyone have the apps on their mobile phones, the groups are really accessible, and that would give us more than enough cred. The main reason to not consider them was to align to the inherent developer syndrome.</p>
<p>I&rsquo;ve been part of LinkedIn and Facebook since time immemorial. Although we could easily sell this, it will still be difficult to showcase that as a differentiator. LinkedIn and Facebook groups are numerous - one was started by the friendly neighbour dog recently.</p>
<p>Although StackExchange really appealed to the developer in me, the logic of using a business email and why pay for something when it can be free stuck.</p>
<p>So, Reddit it was.</p>
<h2 id="pros-of-reddit-private-community">Pros of Reddit Private Community</h2>
<ul>
<li>I also had this strong, completely unjustified opinion about developers gravitate towards Reddit. Open, democratic, community-driven, and exuding a charm of its own, Reddit appeals to the internet crowd.</li>
<li>Students can enroll with any email id. Even use the forum at work (he he)</li>
<li>Absolutely no doubts about how the platform can scale. All I need is more moderators</li>
</ul>
<p>I do have my reservations though.</p>
<h2 id="cons">Cons</h2>
<ol>
<li>Reddit is a bit old school. I can get people by droves and make them excited about using Reddit, but whether that can be sustained is another story. Reddit UI does not help at all.</li>
<li>Difficult (= no) integration with in-house platforms</li>
</ol>
<h2 id="the-decision">The Decision</h2>
<p>Well, I told myself - screw the cons. I am from the largest democrazy (yes, &lsquo;z&rsquo;), and I support democratic forums like Reddit.</p>
<h2 id="setting-up-a-private-community">Setting up a Private Community</h2>
<p>It is nothing really.</p>
<p>Click on the white button on the Reddit home page. You are off to <a href="https://www.reddit.com/subreddits/create">https://www.reddit.com/subreddits/create</a>, filling in fields and stuff. Just mark the community as private, and you are done. You are the default moderator - so congratulations.</p>
<p>If an anonymous user, or a Reddit user with no privileges navigate to your community URL, they will see a glorious message.</p>
<p><img loading="lazy" src="/misc/private-reddit-community.jpg" type="" alt="reddit-private-community-unauthorised-access"  /></p>
<p>All I have to do now is to wait for the zombies to come in. Will it convert them to humanity and/or enlighten them? Watch this space.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
