<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Varun Pant</title><link>https://varunpant.com/</link><description>Recent content on Varun Pant</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 25 May 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://varunpant.com/feed.xml" rel="self" type="application/rss+xml"/><item><title>Cloud composer orchestration via cloud build</title><link>https://varunpant.com/posts/cloud-composer-orchestration-via-cloud-build/</link><pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/cloud-composer-orchestration-via-cloud-build/</guid><description>
&lt;h3 id="cloud-composer-orchestration-via-cloud-build"&gt;
Cloud composer orchestration via cloud build
&lt;a href="#cloud-composer-orchestration-via-cloud-build" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Google cloud composer is a managed &lt;a href="https://airflow.apache.org/"&gt;apache airflow&lt;/a&gt; service that helps create, schedule, monitor and manage workflows.Cloud Composer automation helps you create Airflow environments quickly and use Airflow-native tools, such as the powerful Airflow web interface and command line tools, so you can focus on your workflows and not your infrastructure.&lt;/p&gt;
&lt;p&gt;In this article I will descibe how an engineering team can manage, develop and publish &lt;a href="https://airflow.apache.org/docs/stable/concepts.html"&gt;DAGS&lt;/a&gt; after running a full CI/CD build pipeline using google cloud build .&lt;/p&gt;</description></item><item><title>Simple Forecasting</title><link>https://varunpant.com/posts/simple-forecasting/</link><pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/simple-forecasting/</guid><description>
&lt;h1 id="timeseries-financial-forecasting"&gt;
Timeseries financial forecasting
&lt;a href="#timeseries-financial-forecasting" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Recently , I have been looking into various ways to forecast a time series dataset. This is an old pursuit in the field of statistics and there are many well known ways to achieve this.&lt;/p&gt;
&lt;p&gt;In this post I will demonstrate a very basic (&lt;strong&gt;Naive&lt;/strong&gt;) approach of forecasting a quarterly dataset of sales figure, by using previous 4 years (16 quarters) and forecasting/predicting the next 1 year of sales aggregate.&lt;/p&gt;</description></item><item><title>how to install the latest python 3 on mac</title><link>https://varunpant.com/posts/how-to-install-the-latest-python-3-on-mac/</link><pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-install-the-latest-python-3-on-mac/</guid><description>
&lt;p&gt;Here is a quick guide on installing Python3 on a mac&lt;/p&gt;
&lt;h3 id="installation"&gt;
Installation
&lt;a href="#installation" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /usr/local/Frameworks
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chown -R &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;whoami&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; /usr/local/*
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install python3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew link python3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew doctor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="aliasing"&gt;
Aliasing
&lt;a href="#aliasing" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;alias python=/usr/local/bin/python3.7&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;alias python=/usr/local/bin/python3.7&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You could probably have just done this as well&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias python&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;python3&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias pip&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;pip3&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I hope this is useful&lt;/p&gt;</description></item><item><title>how to play apple music on alexa in uk</title><link>https://varunpant.com/posts/how-to-play-apple-music-on-alexa-in-uk/</link><pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-play-apple-music-on-alexa-in-uk/</guid><description>
&lt;p&gt;You can now use Alexa to play Apple Music on Amazon Echo speakers.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s just available for Echo devices and now customers in UK can also connect their apple music account with Alexa.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the Alexa app then sign into your Amazon account and make sure that your Echo device is connected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Menu (top left icon), then select settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select Music.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &amp;ldquo;Link New Service&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tap, Apple music Icon&lt;/p&gt;</description></item><item><title>download file using webdriver firefox and python selenium</title><link>https://varunpant.com/posts/download-file-using-webdriver-firefox-and-python-selenium/</link><pubDate>Sun, 24 Feb 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/download-file-using-webdriver-firefox-and-python-selenium/</guid><description>
&lt;p&gt;Selenium is one of my favourite tool for automation.&lt;/p&gt;
&lt;p&gt;In this post, I will demonstrate some basic code to download a file from a website in a headless mode , and also provide a docker file to make things simpler.&lt;/p&gt;
&lt;h3 id="python-code"&gt;
Python Code
&lt;a href="#python-code" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Here is some basic code which will make an attempt to download a **7zip exe. **&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; pyvirtualdisplay &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Display
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; selenium &lt;span style="color:#f92672"&gt;import&lt;/span&gt; webdriver
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; selenium.webdriver.support.ui &lt;span style="color:#f92672"&gt;import&lt;/span&gt; WebDriverWait
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; selenium.webdriver.support &lt;span style="color:#f92672"&gt;import&lt;/span&gt; expected\_conditions &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; EC
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; selenium.webdriver.common.by &lt;span style="color:#f92672"&gt;import&lt;/span&gt; By
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; time
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(&lt;span style="color:#e6db74"&gt;&amp;#34;******************************** STARTING ********************************&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;display &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Display(visible&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1024&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;768&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;display&lt;span style="color:#f92672"&gt;.&lt;/span&gt;start()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# To prevent download dialog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile &lt;span style="color:#f92672"&gt;=&lt;/span&gt; webdriver&lt;span style="color:#f92672"&gt;.&lt;/span&gt;FirefoxProfile()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#39;browser.download.folderList&amp;#39;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;) &lt;span style="color:#75715e"&gt;# custom location&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#39;browser.download.manager.showWhenStarting&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#39;browser.download.dir&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/srv/download&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#34;browser.download.manager.alertOnEXEOpen&amp;#34;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#34;browser.download.manager.closeWhenDone&amp;#34;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#34;browser.download.manager.focusWhenStarting&amp;#34;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#application/octet-stream,application/vnd.ms-excel &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;profile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;set\_preference(&lt;span style="color:#e6db74"&gt;&amp;#39;browser.helperApps.neverAsk.saveToDisk&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;application/x-msdownload,application/octet-stream&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    browser &lt;span style="color:#f92672"&gt;=&lt;/span&gt; webdriver&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Firefox(profile)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    browser&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(&lt;span style="color:#e6db74"&gt;&amp;#39;https://www.7-zip.org/&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    download\_button &lt;span style="color:#f92672"&gt;=&lt;/span&gt; WebDriverWait(browser, &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;until(EC&lt;span style="color:#f92672"&gt;.&lt;/span&gt;element\_to\_be\_clickable((By&lt;span style="color:#f92672"&gt;.&lt;/span&gt;CSS\_SELECTOR, &lt;span style="color:#e6db74"&gt;&amp;#39;td.Item a&amp;#39;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    download\_button&lt;span style="color:#f92672"&gt;.&lt;/span&gt;click()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    print(&lt;span style="color:#e6db74"&gt;&amp;#34;clicked...&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    time&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sleep(&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;) 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    print (os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;listdir(&lt;span style="color:#e6db74"&gt;&amp;#34;/srv/download&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Exception&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; ex:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    print(ex)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;browser&lt;span style="color:#f92672"&gt;.&lt;/span&gt;close()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;display&lt;span style="color:#f92672"&gt;.&lt;/span&gt;stop()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(&lt;span style="color:#e6db74"&gt;&amp;#34;******************************** FINITO ********************************&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The code is fairly simple , we need&lt;/p&gt;</description></item><item><title>About</title><link>https://varunpant.com/about/</link><pubDate>Fri, 25 Jan 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/about/</guid><description>
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;My name is Varun, I occasionally write about tech stuff that I find interesting.&lt;/p&gt;
&lt;p&gt;I can also be found at:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://stackoverflow.com/users/95967"&gt;Stack-overflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/varunpant"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="mailto:varun@varunpant.com"&gt;Email&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/varunpant"&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://varunpant.com/img/varunpant.jpeg" alt="Varun Pant" title="Varun"&gt;&lt;/p&gt;</description></item><item><title>Showcase</title><link>https://varunpant.com/showcase/</link><pubDate>Fri, 18 Jan 2019 00:00:00 +0000</pubDate><guid>https://varunpant.com/showcase/</guid><description/></item><item><title>web crawling or scraping using scrapy in python</title><link>https://varunpant.com/posts/web-crawling-or-scraping-using-scrapy-in-python/</link><pubDate>Sun, 02 Dec 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/web-crawling-or-scraping-using-scrapy-in-python/</guid><description>
&lt;p&gt;Scrapy is a very popular web scraping/crawling framework, I have been using it for quite some time now.&lt;/p&gt;
&lt;p&gt;In this post, I will demonstrate creating a very basic web crawler.&lt;/p&gt;
&lt;h3 id="install-scrapy"&gt;
Install Scrapy
&lt;a href="#install-scrapy" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Installation is via pip pip install scrapy&lt;/p&gt;
&lt;h3 id="minimalistic-code"&gt;
Minimalistic Code
&lt;a href="#minimalistic-code" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;A very simple scraper is created like this&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-import" data-lang="import"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To &lt;strong&gt;Run&lt;/strong&gt; , simply type scrapy runspider scraper.py&lt;/p&gt;
&lt;p&gt;Running, above code will output something like below&lt;/p&gt;</description></item><item><title>integration testing with apache beam using pubsub and bigtable emulators and direct runner</title><link>https://varunpant.com/posts/integration-testing-with-apache-beam-using-pubsub-and-bigtable-emulators-and-direct-runner/</link><pubDate>Fri, 03 Aug 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/integration-testing-with-apache-beam-using-pubsub-and-bigtable-emulators-and-direct-runner/</guid><description>
&lt;h3 id="summary"&gt;
Summary
&lt;a href="#summary" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Recently I have been looking into ways to test my &lt;strong&gt;Apache Beam&lt;/strong&gt; pipelines at work. Most common use cases of Beam generally involves either batch reading data from GCS and writing to analytical platforms such as Big Query or stream reading data from Pubsub and writing to perhaps Bigtable.&lt;/p&gt;
&lt;p&gt;A pipelines consists of transforms and its generally easy to test them in isolation as a independent unit test per stage, however I am personally a big fan of &amp;ldquo;end-to-end&amp;rdquo; testing or “Integration testing” and this is where things can sometimes get tricky.&lt;/p&gt;</description></item><item><title>gdal 2 on mac with homebrew</title><link>https://varunpant.com/posts/gdal-2-on-mac-with-homebrew/</link><pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/gdal-2-on-mac-with-homebrew/</guid><description>
&lt;p&gt;GDAL is one of the most frequently used utility in my toolkit. I am writing this post to make it easier for others to install it from scratch on their macs.&lt;/p&gt;
&lt;h3 id="setting-up-gdal"&gt;
Setting up GDAL
&lt;a href="#setting-up-gdal" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The traditional way has always been to visit the dear old &lt;a href="http://www.kyngchaos.com/software/frameworks"&gt;kyngchaos.com&lt;/a&gt;, and install “GDAL Complete” Framework vi deb installer. Do make sure that GDAL Framework is in your path otherwise something like this always helps&lt;/p&gt;</description></item><item><title>how to print bar chart in chrome browser console</title><link>https://varunpant.com/posts/how-to-print-bar-chart-in-chrome-browser-console/</link><pubDate>Mon, 05 Feb 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-print-bar-chart-in-chrome-browser-console/</guid><description>
&lt;p&gt;This post doesn&amp;rsquo;t really have anything valuable to contribute, just some cool console trick.&lt;/p&gt;
&lt;p&gt;Have you ever wanted to plot out a chart, very quickly ? Did you ever had an urge to visualise a bunch of numbers without having to use a charting api or copy pasting the data in a spreadsheet ? If you did then you might even learn something today :)&lt;/p&gt;
&lt;p&gt;Here is a simple , yet neat way to plot out bunch of numbers in chrome console as a** horizontal bar chart.**&lt;/p&gt;</description></item><item><title>how to make https requests with python httplib2 ssl</title><link>https://varunpant.com/posts/how-to-make-https-requests-with-python-httplib2-ssl/</link><pubDate>Fri, 02 Feb 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-make-https-requests-with-python-httplib2-ssl/</guid><description>
&lt;p&gt;Here are few snippets to make &lt;strong&gt;secure&lt;/strong&gt; &lt;strong&gt;http&lt;/strong&gt; requests using various python libraries.&lt;/p&gt;
&lt;h3 id="httplib2"&gt;
httplib2
&lt;a href="#httplib2" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; httplib2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;https://example.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;h &lt;span style="color:#f92672"&gt;=&lt;/span&gt; httplib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Http(&lt;span style="color:#e6db74"&gt;&amp;#34;.cache&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;r, content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; h&lt;span style="color:#f92672"&gt;.&lt;/span&gt;request(link, &lt;span style="color:#e6db74"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="another-exmaple"&gt;
another exmaple
&lt;a href="#another-exmaple" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; httplib2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;h &lt;span style="color:#f92672"&gt;=&lt;/span&gt; httplib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Http(&lt;span style="color:#e6db74"&gt;&amp;#34;.cache&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;h&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_credentials(&lt;span style="color:#e6db74"&gt;&amp;#39;user&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;pass&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;r, content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; h&lt;span style="color:#f92672"&gt;.&lt;/span&gt;request(&lt;span style="color:#e6db74"&gt;&amp;#34;https://api.github.com&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print r[&lt;span style="color:#e6db74"&gt;&amp;#39;status&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print r[&lt;span style="color:#e6db74"&gt;&amp;#39;content-type&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="urllib2"&gt;
Urllib2
&lt;a href="#urllib2" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Here is a simmilar example using &lt;strong&gt;urlib2&lt;/strong&gt; for comparison and lines of code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; urllib2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gh_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;https://example.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;auth_handler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;HTTPBasicAuthHandler()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;auth_handler&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_password(&lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;, gh_url, &lt;span style="color:#e6db74"&gt;&amp;#39;user&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;opener &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;build_opener(auth_handler)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;urllib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;install_opener(opener)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;handler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlopen(gh_url)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print handler&lt;span style="color:#f92672"&gt;.&lt;/span&gt;getcode()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print handler&lt;span style="color:#f92672"&gt;.&lt;/span&gt;headers&lt;span style="color:#f92672"&gt;.&lt;/span&gt;getheader(&lt;span style="color:#e6db74"&gt;&amp;#39;content-type&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="requests"&gt;
Requests
&lt;a href="#requests" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The easiest, has always been &lt;strong&gt;requests&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>how to read json from web http request of url via python urllib</title><link>https://varunpant.com/posts/how-to-read-json-from-web-http-request-of-url-via-python-urllib/</link><pubDate>Tue, 30 Jan 2018 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-read-json-from-web-http-request-of-url-via-python-urllib/</guid><description>
&lt;p&gt;I generally am looking for a quick snippet to issue an http request using urllib2 lib.&lt;/p&gt;
&lt;p&gt;Here is a quick snippet to do so&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-url" data-lang="url"&gt;
import urllib2
import json
from pprint import pprint
req = urllib2.Request(url)
opener = urllib2.build\_opener()
f = opener.open(req)
#data varibale recieves the parsed json
data = json.loads(f.read())
print len(data)
for r in data:
pprint(r)
print &amp;#34;-&amp;#34;*50
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hope this helps&lt;/p&gt;</description></item><item><title>minimum insertions to form a palindrome</title><link>https://varunpant.com/posts/minimum-insertions-to-form-a-palindrome/</link><pubDate>Sun, 15 Oct 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/minimum-insertions-to-form-a-palindrome/</guid><description>
&lt;h3 id="brute-force-approach"&gt;
Brute-force approach
&lt;a href="#brute-force-approach" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Here I present a few approaches to deduce &amp;ldquo;minimum insertions&amp;rdquo; required to convert a string into a palindrome.&lt;/p&gt;
&lt;p&gt;The basic brute force approach is quite simple, given a string with length L, start comparing, the first character from left and the last character while scanning inwards.&lt;/p&gt;
&lt;p&gt;Here is a basic test for a palindrome.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-def" data-lang="def"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; L &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; for i in range(L):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if s[i] !&lt;span style="color:#f92672"&gt;=&lt;/span&gt; s[L &lt;span style="color:#f92672"&gt;-&lt;/span&gt; i &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return False,i,L&lt;span style="color:#f92672"&gt;-&lt;/span&gt;i &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return True,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above code returns &lt;strong&gt;True&lt;/strong&gt; if the string is a palindrome or returns &lt;strong&gt;False&lt;/strong&gt; with &lt;strong&gt;mismatching&lt;/strong&gt; indices.&lt;/p&gt;</description></item><item><title>Inverse weighted distance interpolation in golang</title><link>https://varunpant.com/posts/inverse-weighted-distance-interpolation-in-golang/</link><pubDate>Thu, 07 Sep 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/inverse-weighted-distance-interpolation-in-golang/</guid><description>
&lt;p&gt;&lt;strong&gt;Inverse distance weighting&lt;/strong&gt; (IDW) is a type of deterministic method for multivariate &lt;strong&gt;interpolation&lt;/strong&gt; with a known scattered set of points. The assigned values to unknown points are calculated with a &lt;strong&gt;weighted&lt;/strong&gt; average of the values available at the known points.&lt;/p&gt;
&lt;p&gt;This technique, explicitly makes the assumption that things that are close to one another are more alike than those that are farther apart. To predict a value for any unmeasured location, IDW uses the measured values surrounding the prediction location. The measured values closest to the prediction location have more influence on the predicted value than those farther away. IDW assumes that each measured point has a local influence that diminishes with distance. It gives greater weights to points closest to the prediction location, and the weights diminish as a function of distance, hence the name inverse distance weighted.&lt;/p&gt;</description></item><item><title>basic sorting algorithms implemented in golang</title><link>https://varunpant.com/posts/basic-sorting-algorithms-implemented-in-golang/</link><pubDate>Mon, 04 Sep 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/basic-sorting-algorithms-implemented-in-golang/</guid><description>
&lt;p&gt;This post includes go-lang based implementation of some of the classic sorting algorithms.&lt;/p&gt;
&lt;p&gt;This article primarily, has been written, as an academic exercise, to not forget the basic principles of sorting.&lt;/p&gt;
&lt;h3 id="bubble-sort"&gt;
Bubble Sort
&lt;a href="#bubble-sort" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Bubble_sort"&gt;wiki&lt;/a&gt; &lt;img src="https://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Bubble sort is perhaps the simplest of all sorting algorithms, the basic principle is to bubble up the largest (or the smallest) and then the second largest and then the third largest and so on. Each bubble takes the full sweep of the list, hence best-case, average-case as well as the worst-case performance are all O(n2)&lt;/p&gt;</description></item><item><title>reading and writing binary files in go lang</title><link>https://varunpant.com/posts/reading-and-writing-binary-files-in-go-lang/</link><pubDate>Tue, 29 Aug 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/reading-and-writing-binary-files-in-go-lang/</guid><description>
&lt;p&gt;Reading and writing binary files can often be a fast and very efficient alternatives to csv. They obviously have their challenges, however in this post I intent to present a very basic example of saving models (struct) into binary file and later reading it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;package main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;os&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;encoding/binary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;bytes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;math/rand&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;//&lt;/span&gt;this type represnts a record &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; three fields
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;type payload struct {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; One float32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Two float64
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Three uint32
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func main() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; writeFile()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; readFile()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func readFile() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; file, err &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Open(&lt;span style="color:#e6db74"&gt;&amp;#34;test.bin&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; defer file&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Close()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; err &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; nil {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Fatal(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; m &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; payload{}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;; i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; i&lt;span style="color:#f92672"&gt;++&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; readNextBytes(file, &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; buffer &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; bytes&lt;span style="color:#f92672"&gt;.&lt;/span&gt;NewBuffer(data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; err &lt;span style="color:#f92672"&gt;=&lt;/span&gt; binary&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Read(buffer, binary&lt;span style="color:#f92672"&gt;.&lt;/span&gt;BigEndian, &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;m)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; err &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; nil {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Fatal(&lt;span style="color:#e6db74"&gt;&amp;#34;binary.Read failed&amp;#34;&lt;/span&gt;, err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fmt&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Println(m)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func readNextBytes(file &lt;span style="color:#f92672"&gt;*&lt;/span&gt;os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;File, number int) []byte {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bytes &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; make([]byte, number)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; \_, err &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; file&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Read(bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; err &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; nil {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Fatal(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func writeFile() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; file, err &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Create(&lt;span style="color:#e6db74"&gt;&amp;#34;test.bin&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; defer file&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Close()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; err &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; nil {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Fatal(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; rand&lt;span style="color:#f92672"&gt;.&lt;/span&gt;New(rand&lt;span style="color:#f92672"&gt;.&lt;/span&gt;NewSource(time&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Now()&lt;span style="color:#f92672"&gt;.&lt;/span&gt;UnixNano()))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;; i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;; i&lt;span style="color:#f92672"&gt;++&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;payload{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Float32(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Float64(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Uint32(),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; var bin\_buf bytes&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Buffer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; binary&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Write(&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;bin\_buf, binary&lt;span style="color:#f92672"&gt;.&lt;/span&gt;BigEndian, s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;//&lt;/span&gt;b &lt;span style="color:#f92672"&gt;:=&lt;/span&gt;bin\_buf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Bytes()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;//&lt;/span&gt;l &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; len(b)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;//&lt;/span&gt;fmt&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Println(l)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; writeNextBytes(file, bin\_buf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Bytes())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;func writeNextBytes(file &lt;span style="color:#f92672"&gt;*&lt;/span&gt;os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;File, bytes []byte) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; \_, err &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; file&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Write(bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; err &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; nil {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; log&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Fatal(err)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The code presented above will randomly populate 10 records of type payload and save it to a binary file, then it will read those 10 records as well.&lt;/p&gt;</description></item><item><title>Create linear color gradient in go</title><link>https://varunpant.com/posts/create-linear-color-gradient-in-go/</link><pubDate>Mon, 28 Aug 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/create-linear-color-gradient-in-go/</guid><description>
&lt;p&gt;Go doesn&amp;rsquo;t have any builtin gradient functions to paint/fill the background of a raster, however it has all the required primitives one needs to create a very basic linear gradient.&lt;/p&gt;
&lt;p&gt;Here is a basic code which defines a 256 x 256 image, then calculates the value of each pixel in the raster based on a linear interpolation formula.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-package" data-lang="package"&gt;
import (
&amp;#34;image&amp;#34;
&amp;#34;image/color&amp;#34;
&amp;#34;image/png&amp;#34;
&amp;#34;log&amp;#34;
&amp;#34;os&amp;#34;
&amp;#34;os/exec&amp;#34;
)
var(
colorB = [3]float64{248, 54, 0}
colorA = [3]float64{254, 140, 0}
)
var(
width = 256
height = 256
max = float64(width)
)
func linearGradient(x, y float64) (uint8, uint8, uint8) {
d := x/max
r := colorA[0] + d * (colorB[0] - colorA[0])
g := colorA[1] + d * (colorB[1] - colorA[1])
b := colorA[2] + d * (colorB[2] - colorA[2])
return uint8(r), uint8(g), uint8(b)
}
func main() {
var w, h int = width, height
dst := image.NewRGBA(image.Rect(0, 0, w, h)) //*NRGBA (image.Image interface)
for x := 0; x &amp;lt; w; x++ {
for y := 0; y &amp;lt; h; y++ {
r, g, b := linearGradient(float64(x), float64(y))
c := color.RGBA{
r,
g,
b,
255,
}
dst.Set(x, y, c)
}
}
img, \_ := os.Create(&amp;#34;new.png&amp;#34;)
defer img.Close()
png.Encode(img, dst) //Encode writes the Image m to w in PNG format.
Show(img.Name())
}
// show a specified file by Preview.app for OS X(darwin)
func Show(name string) {
command := &amp;#34;open&amp;#34;
arg1 := &amp;#34;-a&amp;#34;
arg2 := &amp;#34;/Applications/Preview.app&amp;#34;
cmd := exec.Command(command, arg1, arg2, name)
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is how the generated image looks like&lt;/p&gt;</description></item><item><title>merge sort in python</title><link>https://varunpant.com/posts/merge-sort-in-python/</link><pubDate>Sun, 23 Jul 2017 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/merge-sort-in-python/</guid><description>
&lt;p&gt;Many useful algorithms are recursive in structure: to solve a given problem, they call themselves recursively one or more times to deal with closely related subproblems. &lt;br&gt;
These algorithms typically follow a divide-and-conquer approach: they break the problem into several subproblems that are similar to the original problem but smaller in size, solve the subproblems recursively, and then combine these solutions to create a solution to the original problem.&lt;/p&gt;
&lt;p&gt;The divide-and-conquer paradigm involves three steps at each level of the recursion:&lt;/p&gt;</description></item><item><title>Using Geotiff as datasource via gdal</title><link>https://varunpant.com/posts/using-geotiff-as-datasource-via-gdal/</link><pubDate>Wed, 21 Dec 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/using-geotiff-as-datasource-via-gdal/</guid><description>
&lt;p&gt;&lt;img src="https://varunpant.com/media/image_377996742841482328085822.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Recently, I have been working on algorithms which needs elevation data as well as Land Cover data, with world coverage. Google has an excellent elevation API however free usage comes with a limit.&lt;/p&gt;
&lt;p&gt;While searching, I came across a dataset in &lt;a href="https://en.wikipedia.org/wiki/GeoTIFF"&gt;geotiff&lt;/a&gt; format for &lt;a href="http://landcover.usgs.gov/global_climatology.php"&gt;landcover&lt;/a&gt; as well as a &lt;a href="http://www.cgiar-csi.org/data/srtm-90m-digital-elevation-database-v4-1"&gt;processed version&lt;/a&gt; of &lt;a href="https://drive.google.com/drive/folders/0B_J08t5spvd8VWJPbTB3anNHamc"&gt;world elevation&lt;/a&gt;. Elevation data comes in various resolution (250m,500m,1km), landcover is 500m .&lt;/p&gt;
&lt;p&gt;So how do we read it ? In python its quite easy to use&lt;a href="https://pypi.python.org/pypi/GDAL/"&gt; osgo/gdal&lt;/a&gt; library and read all bands. Geotiff is a rster file and values can be packed in every band (which is basically a 2d array).&lt;/p&gt;</description></item><item><title>How to create fishnets or geospatial grids</title><link>https://varunpant.com/posts/how-to-create-fishnets-or-geospatial-grids/</link><pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-create-fishnets-or-geospatial-grids/</guid><description>
&lt;p&gt;There are many use cases in GIS world, where the information has to be aggregated, an easy way to achieve this is via gridding or binning, where the area of interest is divided into small sections called grids or bins.&lt;/p&gt;
&lt;p&gt;These sections are mostly of rectangular form (which can be easily converted into geotiffs), but in some cases even circles or hexagons are also used.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://varunpant.com/media/image_963791002841481453621913.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;You can read a good tutorial from &lt;a href="https://www.mapbox.com/"&gt;mapbox&lt;/a&gt; using &lt;a href="http://www.qgis.org/en/site/"&gt;Qgis&lt;/a&gt; with a &lt;a href="http://michaelminn.com/linux/mmqgis/"&gt;mmqgis&lt;/a&gt; plugin &lt;a href="https://www.mapbox.com/blog/binning-alternative-point-maps/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How to transform projections between Spherical Mercator and EPSG 4326</title><link>https://varunpant.com/posts/how-to-transform-projections-between-spherical-mercator-and-epsg-4326/</link><pubDate>Sat, 10 Dec 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-transform-projections-between-spherical-mercator-and-epsg-4326/</guid><description>
&lt;p&gt;Projections in GIS are commonly referred to by their “EPSG” codes, these are identifiers managed by the European Petroleum Survey Group.&lt;/p&gt;
&lt;p&gt;One common identifier is “&lt;a href="#ZgotmplZ"&gt;EPSG:4326&lt;/a&gt;”, which describes maps where latitude and longitude are treated as X/Y values.&lt;/p&gt;
&lt;p&gt;Spherical Mercator has an official designation of &lt;a href="#ZgotmplZ"&gt;EPSG:3857.&lt;/a&gt; However, before this was established, a large amount of software used the identifier &lt;a href="#ZgotmplZ"&gt;EPSG:900913.&lt;/a&gt; This is an unofficial code, but is still the commonly usedin many GIS systems.&lt;/p&gt;</description></item><item><title>How to Query a Shape file for Point inside a polygon using ogr python</title><link>https://varunpant.com/posts/how-to-query-a-shape-file-for-point-inside-a-polygon-using-ogr-python/</link><pubDate>Thu, 01 Sep 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-query-a-shape-file-for-point-inside-a-polygon-using-ogr-python/</guid><description>
&lt;p&gt;Recently I was trying to build a quick geo lookup service in python, which could be used like an &amp;ldquo;info tool&amp;rdquo; in QGIS. This task is trivial in almost all geospatial databases, however I wasn&amp;rsquo;t able to find much online around querying a shape file.&lt;/p&gt;
&lt;p&gt;In this post I will demonstrate a simple python code to query a shape file which contains world countries. The file can be downloaded from &lt;a href="https://github.com/RandomEtc/shapefile-js/tree/master/thematicmapping"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How to read a csv file in go</title><link>https://varunpant.com/posts/how-to-read-a-csv-file-in-go/</link><pubDate>Tue, 30 Aug 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-read-a-csv-file-in-go/</guid><description>
&lt;p&gt;One of the most common task for a programmer is either to read or write a csv file&lt;/p&gt;
&lt;h3 id="read-a-csv-file"&gt;
Read a csv file
&lt;a href="#read-a-csv-file" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;package main
import (
&amp;#34;bufio&amp;#34;
&amp;#34;encoding/csv&amp;#34;
&amp;#34;os&amp;#34;
&amp;#34;fmt&amp;#34;
&amp;#34;io&amp;#34;
)
func main() {
// Load a csv file.
f, \_ := os.Open(&amp;#34;/path/to/my/csv/file.csv&amp;#34;)
// Create a new reader.
r := csv.NewReader(bufio.NewReader(f))
//define seperator
r.Comma = &amp;#39;,&amp;#39;
for {
record, err := r.Read()
// Stop at EOF.
if err == io.EOF {
break
}
// Display record.
fmt.Println(record)
// ... Display record length.
fmt.Println(len(record))
// ... Display all individual elements of the slice.
for value := range record {
fmt.Printf(&amp;#34; %v\n&amp;#34;, record[value])
}
}
}
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>How to integrate Google container engine with Stackdriver with kubernaties</title><link>https://varunpant.com/posts/how-to-integrate-google-container-engine-with-stackdriver-with-kubernaties/</link><pubDate>Thu, 04 Aug 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-integrate-google-container-engine-with-stackdriver-with-kubernaties/</guid><description>
&lt;p&gt;Most folks have been using &lt;a href="http://grafana.org/"&gt;Grafana&lt;/a&gt; or something &lt;a href="http://kubernetes.io/docs/user-guide/monitoring/"&gt;similar&lt;/a&gt; to monitor &lt;a href="http://kubernetes.io/"&gt;Kubernaties&lt;/a&gt; cluster.&lt;/p&gt;
&lt;p&gt;If you are using &lt;a href="https://cloud.google.com/container-engine/"&gt;Google cloud container engine&lt;/a&gt; , then the standard unified place to monitor all your application and services is &lt;a href="https://cloud.google.com/monitoring/"&gt;Slackdriver&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;According to googles documentation, when you create a new container cluster using GUI or gcloud, &lt;a href="https://app.google.stackdriver.com/"&gt;Slackdriver&lt;/a&gt; is automatically configured with a sink, however It did not work out of the box for me hence this post :)&lt;/p&gt;
&lt;p&gt;Well, the easiest way to check if &lt;a href="https://app.google.stackdriver.com/"&gt;Slackdriver&lt;/a&gt; is configured is to issue a command&lt;/p&gt;</description></item><item><title>Binary Search Tree in python</title><link>https://varunpant.com/posts/binary-search-tree-in-python/</link><pubDate>Mon, 01 Aug 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/binary-search-tree-in-python/</guid><description>
&lt;p&gt;BST data structure supports many dynamic-set operations including&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Minimum&lt;/li&gt;
&lt;li&gt;Maximum&lt;/li&gt;
&lt;li&gt;Predecessor&lt;/li&gt;
&lt;li&gt;Successor&lt;/li&gt;
&lt;li&gt;Insert&lt;/li&gt;
&lt;li&gt;Delete&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These basic operations allow us to treat this data structure both as a dictionary and as a priority queue.&lt;/p&gt;
&lt;p&gt;Basic operations on a binary tree takes time proportional to the height of the tree, O(lg n) [worst case] and even O(n) if the tree is a linear chain.&lt;/p&gt;
&lt;p&gt;If you want to learn more about practical application of these trees check &lt;a href="https://stackoverflow.com/questions/2130416/what-are-the-applications-of-binary-trees"&gt;this&lt;/a&gt; post out.&lt;/p&gt;</description></item><item><title>Heap Sort in python</title><link>https://varunpant.com/posts/heap-sort/</link><pubDate>Mon, 25 Jul 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/heap-sort/</guid><description>
&lt;p&gt;The (binary) heap data structure is an array object that we can view as a nearly complete binary tree. &lt;br&gt;
Each node of the tree corresponds to an element of the array. &lt;br&gt;
The tree is completely filled on all levels except possibly the lowest, which is filled from the left up to a point. &lt;br&gt;
An array A that represents a heap is an object with two attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;length, which (as usual) gives the number of elements in the array.&lt;/p&gt;</description></item><item><title>Insertion sort in python</title><link>https://varunpant.com/posts/insertion-sort-in-python/</link><pubDate>Fri, 22 Jul 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/insertion-sort-in-python/</guid><description>
&lt;p&gt;Insertion sort, is an efficient algorithm for sorting a small number of elements.&lt;/p&gt;
&lt;p&gt;Insertion sort works the way many people sort a hand of playing cards. We start with an empty left hand and the cards face down on the table. We then remove one card at a time from the table and insert it into the correct position in the left hand.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://varunpant.com/media/Insertion-Sort.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;To find the correct position for a card, we compare it with each of the cards already in the hand, from right to left.&lt;/p&gt;</description></item><item><title>How to install Ubuntu bash on windows</title><link>https://varunpant.com/posts/how-to-install-ubuntu-bash-on-windows/</link><pubDate>Thu, 07 Apr 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-install-ubuntu-bash-on-windows/</guid><description>
&lt;p&gt;&lt;img src="http://www.varunpant.com/static/resources/uow/uow.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Microsoft announced at Build 2016 , about the new feature to run native Bash and GNU/Linux command-line tools&lt;/p&gt;
&lt;p&gt;Gabriel Aul has just &lt;a href="https://twitter.com/GabeAul/status/717759462258249728"&gt;announced the release&lt;/a&gt; of the Windows 10 build #14316 to the Windows Insiders Fast-Ring&lt;/p&gt;
&lt;p&gt;This build contains the first public release of Bash on Ubuntu on Windows and the underlying Windows Subsystem for Linux.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Turn on Developer Mode: Settings | Update &amp;amp; Security | For Developers | Check the Developer Mode radio button:&lt;br&gt;
&lt;img src="http://www.varunpant.com/static/resources/uow/screen1.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;From the start menu, open “Turn Windows Features on or off”:&lt;br&gt;
&lt;img src="http://www.varunpant.com/static/resources/uow/screen2.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Scroll down and check the “Windows Subsystem for Linux (Beta)” feature:&lt;br&gt;
&lt;img src="http://www.varunpant.com/static/resources/uow/screen3.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Hit okay and reboot (required step)&lt;/li&gt;
&lt;li&gt;Once rebooted, open a PowerShell/command prompt and run “Bash” and follow the simple prompts to accept Canonical’s license and kick-off the download of the Ubuntu image:&lt;br&gt;
&lt;img src="http://www.varunpant.com/static/resources/uow/screen4.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;After download has completed, you’ll be able to start “Bash on Ubuntu on Windows” from the Start menu:&lt;br&gt;
&lt;img src="http://www.varunpant.com/static/resources/uow/screen5.png" alt=""&gt; &lt;img src="http://www.varunpant.com/static/resources/uow/screen6.png" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>How to use Google Appengine Remote API for Java</title><link>https://varunpant.com/posts/how-to-use-google-appengine-remote-api-for-java/</link><pubDate>Tue, 22 Mar 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-use-google-appengine-remote-api-for-java/</guid><description>
&lt;p&gt;Google App Engine Remote API enables programmers to access Google DataStore remotely from any python script or a Java Program.&lt;/p&gt;
&lt;p&gt;Remote api essentially is a generic web service, which allows datastore to be accessed from outside the app engine&amp;rsquo;s environment therefore using this mechanism, users can either bulk insert data or modify existing data from their servers.&lt;/p&gt;
&lt;p&gt;With the help of remote api, data from one datastore can be copied to data on another app engine instance as well.&lt;/p&gt;</description></item><item><title>Read GAE Admin Backups fromLevelDB format and export GAE Entities using bulkloader</title><link>https://varunpant.com/posts/read-gae-admin-backups-fromleveldb-format-and-export-gae-entities-using-bulkloader/</link><pubDate>Mon, 11 Jan 2016 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/read-gae-admin-backups-fromleveldb-format-and-export-gae-entities-using-bulkloader/</guid><description>
&lt;p&gt;Google datastore is pretty awesome when one needs a quick no-sql data storage. However recently I have experienced a problem in exporting my GAE Datastore as csv and in certain cases as a line delimited Json file. Its not very hard to do so and perhaps the easiest way to handle such thing is to write an export handler in you web app, however, there are alternative ways which I have highlighted below.
2. One of the easiest alternative is by using &lt;a href="https://console.cloud.google.com/project/_/datastore/settings?_ga=1.52544424.12031260.1450181862"&gt; Datastore Admin .&lt;/a&gt; This tool will easily let you backup you GAE DataStore Entities to google cloud storage in the same project which can later be downloaded locally, by using cloud console or gsutil like this gsutil cp -R /gs/your_bucket_name/your_path /local_target
4. Then there is &lt;a href="https://cloud.google.com/appengine/docs/python/tools/remoteapi"&gt;Remote API for python and Java&lt;/a&gt;, which perhaps was created to modify the datastore directly via code from your local machine
6. Finally there is a python utility called bulkloader.py which is coupled with &lt;strong&gt;remote_api&lt;/strong&gt;i , this utility does require python sdk to be installed and added to your system path.&lt;/p&gt;</description></item><item><title>Serving raster layers on Google Cloud Platform</title><link>https://varunpant.com/posts/serving-raster-layers-on-google-cloud-platform/</link><pubDate>Mon, 21 Sep 2015 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/serving-raster-layers-on-google-cloud-platform/</guid><description>
&lt;p&gt;In this blog post, I will write about using &lt;a href="https://cloud.google.com/storage/"&gt;Google cloud storage&lt;/a&gt; as a Raster Tile Server for static imagery.&lt;/p&gt;
&lt;p&gt;In the GIS domain, various techniques are used to add custom raster overlay on top of a base maps, or to even use custom imagery, as a base map itself.&lt;/p&gt;
&lt;p&gt;This approach is also useful if you have a large quantity of satellite or aerial imagery, that you need to serve at scale onto a Google map or any other GIS tool.&lt;/p&gt;</description></item><item><title>Install all Go project dependencies in one command</title><link>https://varunpant.com/posts/install-all-go-project-dependencies-in-one-command/</link><pubDate>Tue, 25 Aug 2015 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/install-all-go-project-dependencies-in-one-command/</guid><description>
&lt;p&gt;So if you are looking to compile you go project on your server, you would probably need to worry about any third party dependencies.&lt;/p&gt;
&lt;p&gt;Here is quick recursive way to do that&lt;/p&gt;
&lt;p&gt;go get ./&amp;hellip;&lt;/p&gt;
&lt;p&gt;Hope this helps&lt;/p&gt;</description></item><item><title>Bubble-sort in python</title><link>https://varunpant.com/posts/bubble-sort-in-python/</link><pubDate>Thu, 23 Jul 2015 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/bubble-sort-in-python/</guid><description>
&lt;p&gt;Bubble sort is a sorting algo that repeatedly steps through the list to be sorted, compares each pair of adjacent items and &lt;a href="https://en.wikipedia.org/wiki/Swap_%28computer_science%29" title="Swap (computer science)"&gt;swaps&lt;/a&gt; them if they are in the wrong order.&lt;/p&gt;
&lt;p&gt;It is a popular, but inefficient sorting algo, it has worst-case and average complexity both &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Big_o_notation" title="Big o notation"&gt;О&lt;/a&gt;&lt;/em&gt;(&lt;em&gt;n&lt;/em&gt;2), where &lt;em&gt;n&lt;/em&gt; is the number of items being sorted.&lt;/p&gt;
&lt;p&gt;Here is an implementation in python&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/0/06/Bubble-sort.gif" alt=""&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-def" data-lang="def"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; count &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(B)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; for i in xrange(count):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; for j in xrange(count&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,i,&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;#&lt;/span&gt;print &lt;span style="color:#e6db74"&gt;&amp;#34;compairing %i with %i&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;%&lt;/span&gt;(B[j],B[j&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if B[j] &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; B[j &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; temp &lt;span style="color:#f92672"&gt;=&lt;/span&gt; B[j]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; B[j] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; B[j &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; B[j &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; temp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;#&lt;/span&gt;print &lt;span style="color:#e6db74"&gt;&amp;#34;Swapping %i with %i&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;%&lt;/span&gt;(B[j],B[j&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;#&lt;/span&gt;print &lt;span style="color:#e6db74"&gt;&amp;#34;Transformed Array: &amp;#34;&lt;/span&gt; , B
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;B &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print &lt;span style="color:#e6db74"&gt;&amp;#34;Unsorted: &amp;#34;&lt;/span&gt;, B
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bubbleSort(B)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print &lt;span style="color:#e6db74"&gt;&amp;#34;Bubble Sorted: &amp;#34;&lt;/span&gt;, B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hope this helps&lt;/p&gt;</description></item><item><title>ultimate developer and power users tool list for mac and linux</title><link>https://varunpant.com/posts/ultimate-developer-and-power-users-tool-list-for-mac-and-linux/</link><pubDate>Sat, 07 Feb 2015 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/ultimate-developer-and-power-users-tool-list-for-mac-and-linux/</guid><description>
&lt;p&gt;This is a collection of tools and utilities which I have found indispensable as an engineer. Each has a distinct purpose, and I probably touch each at least a few times a week. These tools save me time and I hope that you will find some of them useful as well.&lt;/p&gt;
&lt;h3 id="productivity"&gt;
Productivity
&lt;a href="#productivity" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://amanusk.github.io/s-tui/"&gt;s-tui&lt;/a&gt; s-tui is a terminal UI for monitoring your computer. s-tui allows to monitor CPU temperature, frequency, power and utilization in a graphical way from the terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cockpit-project.org/running.html#ubuntu"&gt;Cockpit&lt;/a&gt; is a server manager that makes it easy to administer your GNU/Linux servers via a web browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="security"&gt;
Security
&lt;a href="#security" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.tinc-vpn.org/"&gt;https://www.tinc-vpn.org/&lt;/a&gt; Virtual Private Network (VPN) daemon that uses tunnelling and encryption to create a secure private network between hosts on the Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fun"&gt;
Fun
&lt;a href="#fun" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/abishekvashok/cmatrix"&gt;https://github.com/abishekvashok/cmatrix&lt;/a&gt; Matrix digital rain with CMatrix on a Linux or Unix terminal .&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="automation"&gt;
Automation
&lt;a href="#automation" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://members.funnelscripts.com/amazing-headline-scripts/"&gt;FunnelScripts&lt;/a&gt; Facebook Adverts.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Creating Isochrones and Isodistances using Googles Direction Search API</title><link>https://varunpant.com/posts/creating-isochrones-and-isodistances-using-googles-direction-search-api/</link><pubDate>Mon, 29 Dec 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/creating-isochrones-and-isodistances-using-googles-direction-search-api/</guid><description>
&lt;h3 id="introduction"&gt;
Introduction
&lt;a href="#introduction" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/varunpant/Google_Isochrone/master/ScreenShot.png" alt="Isochrone"&gt; &lt;a href="http://en.wikipedia.org/wiki/Isochrone_map"&gt;Isochrones&lt;/a&gt; are curves of equal travel time from a certain point of origin, another way of saying this would be that an Isochrone is an isoline for travel time, if the weighting factor is changed form time to distance, then the resulting curve us called an Isodistance.&lt;/p&gt;
&lt;p&gt;In this post I will present a rough way to create an Isochrone and an Isodistance using &lt;a href="https://developers.google.com/maps/documentation/directions/"&gt;google&amp;rsquo;s directions API.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Tilestache on google maps</title><link>https://varunpant.com/posts/tilestache-on-google-maps/</link><pubDate>Fri, 26 Dec 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/tilestache-on-google-maps/</guid><description>
&lt;h3 id="introduction"&gt;
Introduction
&lt;a href="#introduction" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;In this post I will demonstrate how to add custom TileStache map tiles on google maps, using google maps JavaScript API V3. TileStache has emerged as one of the easiest way to render your own map .There are many examples out there on creating basic tiles and then adding them on top of Leaftlet or Openlayers. In this post I will add them as an overlay on Google Maps.&lt;/p&gt;</description></item><item><title>Merge multiple Shapefiles using OGR2OGR in windows Linux or OSX</title><link>https://varunpant.com/posts/merge-multiple-shapefiles-using-ogr2ogr-in-windows-linux-or-osx/</link><pubDate>Mon, 22 Dec 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/merge-multiple-shapefiles-using-ogr2ogr-in-windows-linux-or-osx/</guid><description>
&lt;h3 id="introduction"&gt;
Introduction
&lt;a href="#introduction" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;This post is aimed at providing assistance to folks who are trying to merge many shapefiles into one single file in either windows or linux environment. Stuff like this may seem obvious to power users of GDAL/OGR, but not to those that are just new to using these great free tools.&lt;/p&gt;
&lt;h3 id="merging-shape-shp-files-on-windows"&gt;
Merging Shape (*.shp) Files on Windows
&lt;a href="#merging-shape-shp-files-on-windows" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Essentially, these commands will grab every shapefile in a directory, and merge them into a single file called “merged.shp”.&lt;/p&gt;</description></item><item><title>HTML Geolocation and Altitude</title><link>https://varunpant.com/posts/html-geolocation-and-altitude/</link><pubDate>Sun, 21 Dec 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/html-geolocation-and-altitude/</guid><description>
&lt;p&gt;HTML5 Geolocation is a feature which allows the browser on a computer or a mobile phone, to acquire the position from the wifi,2g/3g/4g network or GPS.&lt;/p&gt;
&lt;p&gt;The HTML Geolocation API is used to get the geographical position of a user. Since this can compromise user privacy, the position is not available unless the user approves it. The simplest way to use it through navigator.geolocation object ```
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);&lt;/p&gt;</description></item><item><title>Classes and Inheritance in EcmaScript 6 (ES6 Harmony)</title><link>https://varunpant.com/posts/classes-and-inheritance-in-ecmascript-6-es6-harmony/</link><pubDate>Sun, 30 Nov 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/classes-and-inheritance-in-ecmascript-6-es6-harmony/</guid><description>
&lt;p&gt;So if you are a JavaScript geek and haven&amp;rsquo;t yet heard,(if every one is listening to ECMA announcements, who&amp;rsquo;s gonna drink beer :) ) ECMA 6 feature set has been drafted,its &lt;a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts"&gt;feature set &lt;/a&gt; is frozen, it is mostly being refined now. You can already program in it and compile it to current JavaScript . The JavaScript frameworks AngularJS and Ember.js will be based on it (with ways to opt out). Again, via cross-compilation.&lt;/p&gt;</description></item><item><title>longest palindrome in a string</title><link>https://varunpant.com/posts/longest-palindrome-in-a-string/</link><pubDate>Wed, 15 Oct 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/longest-palindrome-in-a-string/</guid><description>
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;isPailenDrome&lt;/span&gt;(s):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(s)&lt;span style="color:#f92672"&gt;==&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; L &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(L):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; s[i] &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; s[L&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;i]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;longestPalindrome&lt;/span&gt;(s):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; L &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(s)&lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; isPailenDrome(s):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; p &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; u &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(L):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; v &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(u&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,L&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; k &lt;span style="color:#f92672"&gt;=&lt;/span&gt; s[u:v]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# print k,isPailenDrome(k)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; isPailenDrome(k):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; p[len(k)] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; k
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(p) &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; p[sorted(p,reverse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;)[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; s[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>print two-dimensional array in spiral order</title><link>https://varunpant.com/posts/print-two-dimensional-array-in-spiral-order/</link><pubDate>Wed, 15 Oct 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/print-two-dimensional-array-in-spiral-order/</guid><description>
&lt;p&gt;So I saw this problem in a book today about printing a 2d matrix in spiral order&lt;/p&gt;
&lt;p&gt;Here are two solutions to it&lt;/p&gt;
&lt;h3 id="solution-one"&gt;
Solution one.
&lt;a href="#solution-one" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;printSpiralTL&lt;/span&gt;(m,x1,y1,x2,y2):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(x1,x2):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print m[y1][i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; j &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(y1&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,y2&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print m[j][x2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; x2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;x1 &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printSpiralBL(m, x1, y1 &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, x2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, y2)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;printSpiralBL&lt;/span&gt;(m,x1,y1,x2,y2):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(x2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,x1&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print m[y2][i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; j &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(y2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,y1&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print m[j][x1]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; x2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;x1 &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printSpiralTL(m, x1&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, y1, x2, y2&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Output:&lt;/p&gt;</description></item><item><title>merge two sorted arrays in python</title><link>https://varunpant.com/posts/merge-two-sorted-arrays-in-python/</link><pubDate>Sat, 11 Oct 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/merge-two-sorted-arrays-in-python/</guid><description>
&lt;p&gt;Here is a quick code snippet to merge two sorted arrays in python&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-def" data-lang="def"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; merged &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; l &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; for i in range(len(a)&lt;span style="color:#f92672"&gt;+&lt;/span&gt;len(b) ):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lval &lt;span style="color:#f92672"&gt;=&lt;/span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rval &lt;span style="color:#f92672"&gt;=&lt;/span&gt; None
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if l &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(a):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lval &lt;span style="color:#f92672"&gt;=&lt;/span&gt; a[l]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if r &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(b):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rval &lt;span style="color:#f92672"&gt;=&lt;/span&gt; b[r]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if (lval &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; rval and rval and lval) or rval &lt;span style="color:#f92672"&gt;==&lt;/span&gt; None:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; merged.append(lval)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; l&lt;span style="color:#f92672"&gt;+=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; elif (lval &lt;span style="color:#f92672"&gt;&amp;gt;=&lt;/span&gt; rval and rval and lval)or lval &lt;span style="color:#f92672"&gt;==&lt;/span&gt; None:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; merged.append(rval)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r&lt;span style="color:#f92672"&gt;+=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return merged
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;print merge([3,5],[2,4])&lt;/p&gt;</description></item><item><title>Update the locate DB on OS X</title><link>https://varunpant.com/posts/update-the-locate-db-on-os-x/</link><pubDate>Wed, 10 Sep 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/update-the-locate-db-on-os-x/</guid><description>
&lt;p&gt;Apparently out OS X does not have an updatedb command like linux has, so I was stumped on how to update the locate database.&lt;/p&gt;
&lt;p&gt;I have quickly added this command here, incase I need to use it again.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /usr/libexec/locate.updatedb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How to print the Fibonacci Sequence in Python</title><link>https://varunpant.com/posts/how-to-print-the-fibonacci-sequence-in-python/</link><pubDate>Sat, 09 Aug 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-print-the-fibonacci-sequence-in-python/</guid><description>
&lt;p&gt;The Fibonacci numbers are the sequence of numbers &lt;img src="http://mathworld.wolfram.com/images/equations/FibonacciNumber/Inline1.gif" alt="{F_n}_(n=1)^infty"&gt; defined by the &lt;a href="http://mathworld.wolfram.com/LinearRecurrenceEquation.html"&gt;linear recurrence equation&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ![ F_n=F_(n-1)+F_(n-2) ](http://mathworld.wolfram.com/images/equations/FibonacciNumber/NumberedEquation1.gif) with ![F_1=F_2=1](http://mathworld.wolfram.com/images/equations/FibonacciNumber/Inline2.gif) and ![F_0=0](http://mathworld.wolfram.com/images/equations/FibonacciNumber/Inline3.gif)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So in simple terms a method to compute fibonacci number for nth place looks like this&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-def" data-lang="def"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if n &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; or n &lt;span style="color:#f92672"&gt;==&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; else:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return fibonacci(n&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)&lt;span style="color:#f92672"&gt;+&lt;/span&gt;fibonacci(n&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;here is quick test&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-for" data-lang="for"&gt; print i,&amp;#34; : &amp;#34;,fibonacci(i)
#This will print
0 : 0
1 : 1
2 : 1
3 : 2
4 : 3
5 : 5
6 : 8
7 : 13
8 : 21
9 : 34
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or an inline method like this print [fibonacci(i) for i in range(11)] will result&lt;/p&gt;</description></item><item><title>Using ElasticSearch for Spatial Search tutorial</title><link>https://varunpant.com/posts/using-elasticsearch-for-spatial-search-tutorial/</link><pubDate>Sun, 20 Jul 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/using-elasticsearch-for-spatial-search-tutorial/</guid><description>
&lt;p&gt;In this post I will demonstrate using &lt;a href="http://www.elasticsearch.org/"&gt;ElasticSearch&lt;/a&gt; to spatially query records and filter them by attributes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.elasticsearch.org/"&gt;ElasticSearch&lt;/a&gt; is built on top of &lt;a href="http://lucene.apache.org/"&gt;Lucence&lt;/a&gt; which in version 4.0 supports Spatial query features, for those interested here is an &lt;a href="http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java?view=markup"&gt;example&lt;/a&gt; and &lt;a href="http://lucene.apache.org/core/4_0_0/spatial/index.html"&gt;link&lt;/a&gt; to javadocs.&lt;/p&gt;
&lt;p&gt;You will need to install &lt;a href="http://www.elasticsearch.org/"&gt;ElasticSearch&lt;/a&gt;, read about installing it &lt;a href="http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_installing_elasticsearch.html"&gt;here&lt;/a&gt;, also install &lt;a href="http://www.elasticsearch.org/guide/en/marvel/current/"&gt;marvel&lt;/a&gt; plugin for configuration and testing.&lt;/p&gt;
&lt;p&gt;For this demonstration I have used data from &lt;a href="http://download.geofabrik.de/"&gt;Geofabrik&lt;/a&gt;. I have used &lt;strong&gt;point.shp&lt;/strong&gt; file from &lt;a href="http://download.geofabrik.de/europe/great-britain.html"&gt;Great Britan&lt;/a&gt; but you can use data from any other country as well.&lt;/p&gt;</description></item><item><title>CCS3 only Loading Icon</title><link>https://varunpant.com/posts/ccs3-only-loading-icon/</link><pubDate>Sun, 13 Jul 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/ccs3-only-loading-icon/</guid><description>
&lt;p&gt;I generally have been using loading gifs in my work most of the time to inform the user that the resources are being fetched asynchronously from the server.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ajaxload.info/"&gt;Ajaxload&lt;/a&gt; website is perhaps one of the most used site to download a suitable gif.&lt;/p&gt;
&lt;p&gt;In this post I will demonstrate a css3 only way to create a nice loading simulation&lt;/p&gt;
&lt;h3 id="basic-code"&gt;
Basic Code
&lt;a href="#basic-code" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;We will use nested divs to create the loading animation control ```&lt;/p&gt;</description></item><item><title>How to install and configure grunt on mac Osx</title><link>https://varunpant.com/posts/how-to-install-and-configure-grunt-on-mac-osx/</link><pubDate>Sat, 12 Jul 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-install-and-configure-grunt-on-mac-osx/</guid><description>
&lt;p&gt;This post is intended to assist folks who are trying to install and work with grunt on mac osx&lt;/p&gt;
&lt;h3 id="install-nodejs-and-npm-with-homebrew"&gt;
Install Node.js and npm with Homebrew
&lt;a href="#install-nodejs-and-npm-with-homebrew" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;First, install Homebrew by typing in the following command ruby -e &amp;ldquo;$(curl -fsSL &lt;a href="https://raw.github.com/Homebrew/homebrew/go/install%29%22"&gt;https://raw.github.com/Homebrew/homebrew/go/install)"&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then, type in brew update to ensure your Homebrew is up to date.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew doctor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to make sure your system is all good.&lt;/p&gt;
&lt;p&gt;Follow any other recommendations from brew doctor.&lt;/p&gt;</description></item><item><title>Normalizing Ranges of Numbers</title><link>https://varunpant.com/posts/normalizing-ranges-of-numbers/</link><pubDate>Wed, 09 Jul 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/normalizing-ranges-of-numbers/</guid><description>
&lt;p&gt;Range Normalization is a &lt;a href="http://www.heatonresearch.com/wiki/Normalization"&gt;normalization&lt;/a&gt; technique that allows you to map a number to a specific range.&lt;/p&gt;
&lt;p&gt;Lets say that we have a data set where the values are in a range of 1 to 10, however we wish to normalise it to a range between 0 and 5&lt;/p&gt;
&lt;p&gt;Mathematically speaking the equation comes down to&lt;/p&gt;
&lt;p&gt;&lt;a href="http://varunpant.com/static/resources/eq1_2.png"&gt;&lt;img src="http://varunpant.com/static/resources/eq1_thumb.png" alt="eq1" title="eq1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://varunpant.com/static/resources/eq2_2.png"&gt;&lt;img src="http://varunpant.com/static/resources/eq2_thumb.png" alt="eq2" title="eq2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;translated to Python&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-from" data-lang="from"&gt;class Normaliser:
def \_\_init\_\_(self,dH,dL,nH,nL):
self.dH = dH
self.dL = dL
self.nH = nH
self.nL = nL
def normalize(self,x):
return ((x - self.dL) / (self.dH - self.dL)) * (self.nH - self.nL) + self.nL
def denormalize(self,x):
return ((self.dL - self.dH) * x - self.nH * self.dL + self.dH * self.nL) / (self.nL - self.nH)
if \_\_name\_\_ == &amp;#34;\_\_main\_\_&amp;#34;:
norm = Normaliser(10,1,5,0);
for a in range(1,11):
x = norm.normalize(a);
y = norm.denormalize(x);
print str(a) + &amp;#34; : &amp;#34; + str(x) + &amp;#34; : &amp;#34; + str(y)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The results&lt;/p&gt;</description></item><item><title>Install tile-stache on OsX Mavericks</title><link>https://varunpant.com/posts/install-tile-stache-on-osx-mavericks/</link><pubDate>Tue, 08 Jul 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/install-tile-stache-on-osx-mavericks/</guid><description>
&lt;p&gt;This is quick tutorial about installing &lt;a href="http://tilestache.org/"&gt;Tilestache&lt;/a&gt; library in OSX Mavericks.&lt;/p&gt;
&lt;h3 id="step-1"&gt;
Step 1
&lt;a href="#step-1" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Make sure Developer tools are installed xcode-select &amp;ndash;install&lt;/p&gt;
&lt;p&gt;Then add these flags to tell xcode to use python like rest of the world does&lt;/p&gt;
&lt;p&gt;export CFLAGS=-Qunused-arguments&lt;/p&gt;
&lt;p&gt;export CPPFLAGS=-Qunused-arguments&lt;/p&gt;
&lt;p&gt;Finally type in sudo easy_install tilestache&lt;/p&gt;
&lt;p&gt;Thats it all done, you might see some warnings but thats fine ignore them .&lt;/p&gt;
&lt;p&gt;Read the introduction &lt;a href="http://mike.teczno.com/notes/tilestache.html"&gt;here&lt;/a&gt; to get started&lt;/p&gt;
&lt;p&gt;Hope it helps.&lt;/p&gt;</description></item><item><title>how to make a web crawler in python</title><link>https://varunpant.com/posts/how-to-make-a-web-crawler-in-python/</link><pubDate>Sat, 01 Feb 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-make-a-web-crawler-in-python/</guid><description>
&lt;p&gt;Here is a very simple web crawler in python&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; sys&lt;span style="color:#f92672"&gt;,&lt;/span&gt; thread&lt;span style="color:#f92672"&gt;,&lt;/span&gt; Queue&lt;span style="color:#f92672"&gt;,&lt;/span&gt; re&lt;span style="color:#f92672"&gt;,&lt;/span&gt; urllib&lt;span style="color:#f92672"&gt;,&lt;/span&gt; urlparse&lt;span style="color:#f92672"&gt;,&lt;/span&gt; time&lt;span style="color:#f92672"&gt;,&lt;/span&gt; os&lt;span style="color:#f92672"&gt;,&lt;/span&gt; sys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dupcheck &lt;span style="color:#f92672"&gt;=&lt;/span&gt; set()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;q &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Queue&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Queue(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;q&lt;span style="color:#f92672"&gt;.&lt;/span&gt;put(&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.varunpant.com&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;queueURLs&lt;/span&gt;(html, origLink):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; url &lt;span style="color:#f92672"&gt;in&lt;/span&gt; re&lt;span style="color:#f92672"&gt;.&lt;/span&gt;findall(&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&amp;#39;]+href=[&amp;#34;&amp;#39;](.[^&amp;#34;&amp;#39;]+)[&amp;#34;&amp;#39;]&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;, html, re&lt;span style="color:#f92672"&gt;.&lt;/span&gt;I):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; url&lt;span style="color:#f92672"&gt;.&lt;/span&gt;split(&lt;span style="color:#e6db74"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;] &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; url&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#e6db74"&gt;&amp;#34;http&amp;#34;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{uri.scheme}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;://&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{uri.netloc}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;format(uri&lt;span style="color:#f92672"&gt;=&lt;/span&gt;urlparse&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlparse(origLink)) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; url&lt;span style="color:#f92672"&gt;.&lt;/span&gt;split(&lt;span style="color:#e6db74"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; link &lt;span style="color:#f92672"&gt;in&lt;/span&gt; dupcheck:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dupcheck&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add(link)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(dupcheck) &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;99999&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dupcheck&lt;span style="color:#f92672"&gt;.&lt;/span&gt;clear()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q&lt;span style="color:#f92672"&gt;.&lt;/span&gt;put(link)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getHTML&lt;/span&gt;(link):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; html &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlopen(link)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print link
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# open(str(time.time()) + &amp;#34;.html&amp;#34;, &amp;#34;w&amp;#34;).write(&amp;#34;&amp;#34; % link + &amp;#34;\n&amp;#34; + html) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; queueURLs(html, link)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;KeyboardInterrupt&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;SystemExit&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;raise&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Exception&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; thread&lt;span style="color:#f92672"&gt;.&lt;/span&gt;start_new_thread( getHTML, (q&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(),))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; time&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sleep(&lt;span style="color:#ae81ff"&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Ternary search tree</title><link>https://varunpant.com/posts/ternary-search-tree/</link><pubDate>Sun, 26 Jan 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/ternary-search-tree/</guid><description>
&lt;p&gt;In &lt;a href="http://en.wikipedia.org/wiki/Computer_science"&gt;computer science&lt;/a&gt;, a &lt;strong&gt;ternary search tree&lt;/strong&gt; is a type of &lt;a href="http://en.wikipedia.org/wiki/Trie"&gt;prefix tree&lt;/a&gt; where nodes are arranged as a &lt;a href="http://en.wikipedia.org/wiki/Binary_search_tree"&gt;binary search tree&lt;/a&gt;. Like other prefix trees, a ternary search tree can be used as an &lt;a href="http://en.wikipedia.org/wiki/Associative_map"&gt;associative map&lt;/a&gt; structure with the ability for incremental &lt;a href="http://en.wikipedia.org/wiki/String_search"&gt;string search&lt;/a&gt;. However, ternary search trees are more space efficient compared to standard prefix trees, at the cost of speed. Common applications for ternary search trees include &lt;a href="http://en.wikipedia.org/wiki/Spell-check"&gt;spell-checking&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Auto-completion"&gt;auto-completion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As with other trie data structures, each node in a ternary search tree represents a prefix of the stored strings. All strings in the middle subtree of a node start with that prefix.&lt;/p&gt;</description></item><item><title>Gheat Java – Heat maps</title><link>https://varunpant.com/posts/gheat-java-heat-maps/</link><pubDate>Fri, 24 Jan 2014 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/gheat-java-heat-maps/</guid><description>
&lt;p&gt;&lt;a href="http://varunpant.com/static/resources/heat_map_2.jpg"&gt;&lt;img src="http://varunpant.com/static/resources/heat_map_thumb.jpg" alt="heat_map" title="heat_map"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;heat map&lt;/strong&gt; is a graphical representation of data where the individual values contained in a &lt;a href="http://en.wikipedia.org/wiki/Matrix_%28mathematics%29"&gt;matrix&lt;/a&gt; are represented as colors.&lt;/p&gt;
&lt;p&gt;This article will attempt to explain the process or creating and using &lt;a href="https://github.com/varunpant/GHEAT-JAVA"&gt;GHEAT-JAVA&lt;/a&gt;, which is a port of famous aspen based &lt;a href="https://code.google.com/p/gheat/"&gt;gheat&lt;/a&gt; and took great inspiration from &lt;a href="http://www.codeproject.com/Articles/88956/GHeat-NET"&gt;Gheat.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Writing a service which would serve heat map tiles is a bit tricky,there are three major components involved&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;The client part i.e. some kind of mapping library which has a concept of layer, I chose Google maps.&lt;/li&gt;
&lt;li&gt;The data source part, i.e. a spatially aware database or an in memory data structure, I have used postgres ,an in memory quad tree and a flat file as data sources.&lt;/li&gt;
&lt;li&gt;The renderer part or basically the code which excepts requests , parses tile bounds, fetches data and then renders gradients on the tile and later colorizes them.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="the-tiling-layer-client-part"&gt;
The Tiling layer (Client part)
&lt;a href="#the-tiling-layer-client-part" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Google maps allows developers to add a custom layer , the code looks like this&lt;/p&gt;</description></item><item><title>Raphael-js-tutorial-part-II</title><link>https://varunpant.com/posts/raphael-js-tutorial-part-ii/</link><pubDate>Wed, 25 Dec 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/raphael-js-tutorial-part-ii/</guid><description>
&lt;p&gt;This is second part of the tutorial about getting started with &lt;a href="http://raphaeljs.com/"&gt;Raphael.js&lt;/a&gt;. To see this first part go &lt;a href="http://www.varunpant.com/posts/raphael-js-tutorial-part-i"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="writing-text-with-raphael"&gt;
Writing Text with Raphael
&lt;a href="#writing-text-with-raphael" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;Some code first ;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;canvas&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Raphael&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;250&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;250&lt;/span&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;t1&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;canvas&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;text&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Some text Goes here&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;*&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;t2&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;canvas&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;text&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;60&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;First line \n Second Line \n Third line&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;t3&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;canvas&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;text&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;214&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;140&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;1079&amp;#34;&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;attr&lt;/span&gt;({&lt;span style="color:#e6db74"&gt;&amp;#34;text-anchor&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;middle&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;font-size&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;font-family&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;arial&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;fill&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;#fff&amp;#34;&lt;/span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the above examples canvas.text will create a simple text element at 50,50. Strangely VML /SVG do not have Line breaks therefore the programmer is responsible for creating new lines,in most cases appending** &amp;lsquo;\n&amp;rsquo;** does the trick.&lt;/p&gt;</description></item><item><title>Turn Off Autocomplete for Input</title><link>https://varunpant.com/posts/turn-off-autocomplete-for-input/</link><pubDate>Sun, 01 Dec 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/turn-off-autocomplete-for-input/</guid><description>
&lt;p&gt;The autocomplete attribute specifies whether or not an input field should have autocomplete enabled.&lt;/p&gt;
&lt;p&gt;Autocomplete allows the browser to predict the value from locally saved history/cache. When a user starts to type in a field, the browser should display options to fill in the field, based on earlier typed values.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The autocomplete attribute works with the following &lt;!-- raw HTML omitted --&gt; types: text, search, url, tel, email, password, datepickers, range, and color.&lt;/p&gt;</description></item><item><title>Embedding Flash,Quicktime,Windows Media,Silverlight or HTML5 Video</title><link>https://varunpant.com/posts/embedding-flash-quicktime-windows-media-silverlight-or-html5-video/</link><pubDate>Tue, 01 Oct 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/embedding-flash-quicktime-windows-media-silverlight-or-html5-video/</guid><description>
&lt;h3 id="flash-object"&gt;
Flash Object
&lt;a href="#flash-object" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;This is quick Snippet which demonstrate how to embed flash object in a web page.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;object&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;application/x-shockwave-flash&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;data&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;path-to-my-flash-file.swf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;width&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;height&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;movie&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;your-flash-file.swf&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;quality&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;high&amp;#34;&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;object&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="quicktime"&gt;
Quicktime
&lt;a href="#quicktime" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;This is quick Snippet which demonstrate how to embed quicktime object in a web page&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;object&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;classid&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;codebase&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.apple.com/qtactivex/qtplugin.cab&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;width&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;height&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;16&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;src&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;pathToMyMovie.mov&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;autoplay&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;pluginspage&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.apple.com/quicktime/download/&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;controller&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!--[if !IE]&amp;gt; &amp;lt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;object&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;data&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;movie.mov&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;width&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;height&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;video/quicktime&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;pluginurl&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.apple.com/quicktime/download/&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;param&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;controller&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#f92672"&gt;object&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!--&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;object&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="windows-media"&gt;
Windows Media
&lt;a href="#windows-media" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;This is quick Snippet which demonstrate how to embed Windows Media object in a web page.&lt;/p&gt;</description></item><item><title>Mod Proxy equivalent in IIS using ARR and URL Rewrite Module</title><link>https://varunpant.com/posts/mod-proxy-equivalent-in-iis-using-arr-and-url-rewrite-module/</link><pubDate>Sun, 25 Aug 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/mod-proxy-equivalent-in-iis-using-arr-and-url-rewrite-module/</guid><description>
&lt;p&gt;IIS7 is quite modular, it is &lt;a href="http://blogs.iis.net/bills/archive/2008/06/02/how-iis-ships-software.aspx"&gt;shipped&lt;/a&gt; with lots of goodies as separate modules and together it is now one of the most powerful and flexible web server.&lt;/p&gt;
&lt;p&gt;In this post I intent to cover how we can easily configure &lt;a href="http://www.iis.net/downloads/microsoft/application-request-routing"&gt;ARR&lt;/a&gt; and &lt;a href="http://www.microsoft.com/en-gb/download/details.aspx?id=7435"&gt;URL Rewrite Module&lt;/a&gt; to get a similar functionality as of &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html"&gt;Mod Proxy&lt;/a&gt; in Apache.&lt;/p&gt;
&lt;p&gt;Here I will demonstrate configuration of a reverse proxy which according to the &lt;a href="http://en.wikipedia.org/wiki/Reverse_proxy"&gt;definition&lt;/a&gt; is&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reverse proxy&lt;/strong&gt; is a type of &lt;a href="http://en.wikipedia.org/wiki/Proxy_server"&gt;proxy server&lt;/a&gt; that retrieves resources on behalf of a &lt;a href="http://en.wikipedia.org/wiki/Client_%28computing%29"&gt;client&lt;/a&gt; from one or more &lt;a href="http://en.wikipedia.org/wiki/Server_%28computing%29"&gt;servers&lt;/a&gt;. A general use case to configure such proxies could be to handle cross domain Ajax requests, so basically if I would like to call a service hosted as &lt;a href="http://anotherdomain.com/service"&gt;http://anotherdomain.com/service&lt;/a&gt; from &lt;a href="http://localdomain/service"&gt;http://localdomain/service&lt;/a&gt; I would need to configure a proxy which will request resources from anotherdomain.com/service on behalf of localdomain ### Configuration&lt;/p&gt;</description></item><item><title>Signing android release apk from the command line (via ant)</title><link>https://varunpant.com/posts/signing-android-release-apk-from-the-command-line-via-ant/</link><pubDate>Sun, 25 Aug 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/signing-android-release-apk-from-the-command-line-via-ant/</guid><description>
&lt;p&gt;This post is probably out too late ,as almost all IDE&amp;rsquo;s these days (which support android development) ,probably have an Integrated &lt;strong&gt;release signing&lt;/strong&gt; or &lt;strong&gt;debug signing&lt;/strong&gt; utility/wizard built in, but if somebody is using an old IDE or perhaps want to integrate release in a CI(continues integration) environment , this tutorial might come in handy.&lt;/p&gt;
&lt;p&gt;Basically one has to sign an apk either with a debug key (which is generally present in your .android folder) or a create a fresh application specific keystore , to know more go &lt;a href="http://developer.android.com/tools/publishing/app-signing.html"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Importing CSV File Into SQL SERVER Database using BULK INSERT</title><link>https://varunpant.com/posts/importing-csv-file-into-sql-server-database-using-bulk-insert/</link><pubDate>Mon, 11 Mar 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/importing-csv-file-into-sql-server-database-using-bulk-insert/</guid><description>
&lt;p&gt;Importing data into a database from a delimited file is perhaps one of the most common tasks that one might have to perform. SQL server gives us an import utility which supports various data sources and has an intutive interface as well,however there is another way which can be utilized to quickly get the job done, its called &lt;a href="http://msdn.microsoft.com/en-us/library/aa225968%28v=sql.80%29.aspx"&gt;BULK INSERT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BULK INSERT is a SQL command which can be typed in management console,takes various parameters to control the import and is very simple to use.&lt;/p&gt;</description></item><item><title>Importing Exporting CSV Files in PostgreSQL Databases via COPY</title><link>https://varunpant.com/posts/importing-exporting-csv-files-in-postgresql-databases-via-copy/</link><pubDate>Mon, 11 Mar 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/importing-exporting-csv-files-in-postgresql-databases-via-copy/</guid><description>
&lt;p&gt;This is going to be a short article which will illustrate importing and exporting a table from or to a csv file using PostgreSQL &lt;a href="http://www.postgresql.org/docs/9.1/static/sql-copy.html"&gt;COPY&lt;/a&gt; command.&lt;/p&gt;
&lt;h4 id="importing-a-table-from-csv"&gt;
Importing a table from CSV
&lt;a href="#importing-a-table-from-csv" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;Assuming you already have a table in place with the right columns, the command is as follows&lt;/p&gt;
&lt;p&gt;COPY &lt;!-- raw HTML omitted --&gt; &lt;strong&gt;FROM&lt;/strong&gt; &amp;lsquo;/path/to/csv/SourceCSVFile.csv&amp;rsquo; DELIMITERS &amp;lsquo;&lt;strong&gt;,&lt;/strong&gt;&amp;rsquo; CSV;&lt;/p&gt;
&lt;h4 id="exporting-a-csv-from-a-table"&gt;
Exporting a CSV from a table.
&lt;a href="#exporting-a-csv-from-a-table" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;COPY &lt;!-- raw HTML omitted --&gt; &lt;strong&gt;TO&lt;/strong&gt; &amp;lsquo;/path/to/csv/TargetCSVFile&amp;rsquo; DELIMITERS &amp;lsquo;&lt;strong&gt;,&lt;/strong&gt;&amp;rsquo; CSV;&lt;/p&gt;</description></item><item><title>Raphael JS Tutorial - Part I</title><link>https://varunpant.com/posts/raphael-js-tutorial-part-i/</link><pubDate>Sun, 10 Mar 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/raphael-js-tutorial-part-i/</guid><description>
&lt;p&gt;&lt;a href="http://raphaeljs.com/"&gt;Raphael.JS&lt;/a&gt; is a SVG/VML library which helps you to create quick vector shapes and images. Its very small and compact (only 86kb),easy to use,well documented and works in all browsers and yes even IE. Here is a list of all major browsers this library works on: &lt;a href="http://en.wikipedia.org/wiki/Chrome_browser"&gt;Chrome&lt;/a&gt; 5.0+ &lt;a href="http://en.wikipedia.org/wiki/Firefox"&gt;Firefox&lt;/a&gt; 3.0+, &lt;a href="http://en.wikipedia.org/wiki/Safari_%28web_browser%29"&gt;Safari&lt;/a&gt; 3.0+, &lt;a href="http://en.wikipedia.org/wiki/Opera_%28web_browser%29"&gt;Opera&lt;/a&gt; 9.5+ and &lt;a href="http://en.wikipedia.org/wiki/Internet_Explorer"&gt;Internet Explorer&lt;/a&gt; 6.0+&lt;/p&gt;
&lt;p&gt;,finally its distributed under &lt;a href="http://raphaeljs.com/license.html"&gt;MIT license&lt;/a&gt;. In this tutorial ,I intend to introduce basics of this library and help you get started.&lt;/p&gt;</description></item><item><title>How to configure Apache mod_wsgi</title><link>https://varunpant.com/posts/how-to-configure-apache-mod_wsgi/</link><pubDate>Tue, 26 Feb 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-configure-apache-mod_wsgi/</guid><description>
&lt;p&gt;I am a big fan and user of python. one of the most popular ways to create quick web app in python is via using mod wsgi.&lt;/p&gt;
&lt;p&gt;The aim of mod_wsgi is to implement a simple to use &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt; module which can host any &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; application which supports the Python &lt;a href="http://www.wsgi.org/"&gt;WSGI&lt;/a&gt; interface.&lt;/p&gt;
&lt;p&gt;The module would be suitable for use in hosting high performance production web sites, as well as your average self managed personal sites running on web hosting services.&lt;/p&gt;</description></item><item><title>Serve the contents of any directory with Python's SimpleHTTPServer</title><link>https://varunpant.com/posts/serve-the-contents-of-any-directory-with-python-s-simplehttpserver/</link><pubDate>Fri, 08 Feb 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/serve-the-contents-of-any-directory-with-python-s-simplehttpserver/</guid><description>
&lt;p&gt;Generally, when I am in a middle of prototyping a concept or in a need of quickly executing Ajax requests or using browser features which would need the page to be hosted on a web server, I use Python&amp;rsquo;s &lt;a href="http://docs.python.org/2/library/simplehttpserver.html"&gt;SimpleHTTPServer&lt;/a&gt; module.&lt;/p&gt;
&lt;p&gt;Python&amp;rsquo;s SimpleHTTPServer is a great way of serve the contents of the current directory,all one needs to do is change directory and execute a command which will expose all contents as if they were hosted in a web page.&lt;/p&gt;</description></item><item><title>Avoid console errors in browsers that lack a console</title><link>https://varunpant.com/posts/avoid-console-errors-in-browsers-that-lack-a-console/</link><pubDate>Wed, 30 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/avoid-console-errors-in-browsers-that-lack-a-console/</guid><description>
&lt;p&gt;I love JavaScript and code a lot in it .Since I code, I also encounter problems and bugs from time to time and therefore need a Debugger and a debug mechanism to view whats going on.&lt;/p&gt;
&lt;p&gt;In good old days when I learned this language, I used JavaScript&amp;rsquo;s inbuilt alert mechanism to view the value of a variable or a property of an object. This was a terrible mechanism, calling alert was blocking, one had to press OK to continue and if you had to take a look inside an array then well it was emotionally an overwhelming task is all I would say here.&lt;/p&gt;</description></item><item><title>sqlite3 Bulk Import CSV from command line</title><link>https://varunpant.com/posts/sqlite3-bulk-import-csv-from-command-line/</link><pubDate>Tue, 29 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/sqlite3-bulk-import-csv-from-command-line/</guid><description>
&lt;p&gt;I absolutely love &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;, be it windows, linux or mac, this light weight database never stops to amaze me.&lt;/p&gt;
&lt;p&gt;Few days ago I wanted to import a chunk of CSV data, which was 4 GB in size into a table in SQLite.&lt;/p&gt;
&lt;p&gt;I generally use Firefox &amp;rsquo;s &lt;a href="https://addons.mozilla.org/en-us/firefox/addon/sqlite-manager/"&gt;sqlite-manager&lt;/a&gt; plug-in for usual tasks with SQLite database ,hence decided to use the import interface .&lt;/p&gt;
&lt;p&gt;I have had a very good experience with this GUI tool and it has rarely failed me, but this time I was disappointed.&lt;/p&gt;</description></item><item><title>Install Apache Cassandra</title><link>https://varunpant.com/posts/install-apache-cassandra/</link><pubDate>Sun, 27 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/install-apache-cassandra/</guid><description>
&lt;p&gt;&lt;a href="http://cassandra.apache.org"&gt;Cassandra&lt;/a&gt; is an Open Source Distributed Data Persistence system which is designed for storing and managing large amounts of data across servers.&lt;/p&gt;
&lt;p&gt;To quote elevator pitch by &lt;em&gt;Eben Hewitt&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Position div in the center of the page using css</title><link>https://varunpant.com/posts/position-div-in-the-center-of-the-page-using-css/</link><pubDate>Sun, 27 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/position-div-in-the-center-of-the-page-using-css/</guid><description>
&lt;p&gt;When I first started web programming, creating a center aligned div was one of the most common task that I saw myself doing.&lt;/p&gt;
&lt;p&gt;since div is a block element, i.e. it takes up the full width available, and has a line break before and after it, it can easily be centered using relative styling&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-.center" data-lang=".center"&gt;{
margin-left:auto;
margin-right:auto;
width:70%;
background-color:#b0e0e6;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;However lately I have preferred using absolute positioning technique over relative, this works for all browsers and is best for login screens or alert messages over a translucent shim.&lt;/p&gt;</description></item><item><title>A guide to hosting in Red Hats OpenShift PaaS</title><link>https://varunpant.com/posts/a-guide-to-hosting-in-red-hats-openshift-paas/</link><pubDate>Fri, 25 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/a-guide-to-hosting-in-red-hats-openshift-paas/</guid><description>
&lt;p&gt;In this post,I am going to write about &lt;a href="https://openshift.redhat.com/app/"&gt;OpenShift&lt;/a&gt;, which is Red hat&amp;rsquo;s free, auto-scaling Platform as a Service (&lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/a&gt;) for applications.&lt;/p&gt;
&lt;p&gt;OpenShift to me is very similar to &lt;a href="https://developers.google.com/appengine/"&gt;Google&amp;rsquo;s app engine&lt;/a&gt; in some ways,but openshift&amp;rsquo;s offerings are quite diverse, for instance support for ruby, php, Perl, node.js, etc..&lt;/p&gt;
&lt;p&gt;Openshift is not like a traditional VPS hosting , although once registered with them, user does get a shell access,but its quite limited , instead OpenShift has a concept of gears and cartridges.&lt;/p&gt;</description></item><item><title>Basic authentication in web.py via attribute</title><link>https://varunpant.com/posts/basic-authentication-in-web-py-via-attribute/</link><pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/basic-authentication-in-web-py-via-attribute/</guid><description>
&lt;p&gt;Here I demonstrate the process of &lt;a href="http://en.wikipedia.org/wiki/Basic_access_authentication"&gt;Basic Authentication&lt;/a&gt; in &lt;a href="http://webpy.org/"&gt;web.py&lt;/a&gt; python web framework.&lt;/p&gt;
&lt;p&gt;There is a proof of concept article &lt;a href="http://webpy.org/cookbook/userauthbasic"&gt;provided&lt;/a&gt; in the main site,however I just thought doing the same via an attribute might be a cleaner solution.&lt;/p&gt;
&lt;p&gt;HTTP Basic authentication implementation is one of the easiest ways to secure web pages because it doesn&amp;rsquo;t require cookies, session handling, or the development of login pages. Rather, HTTP Basic authentication uses static headers which means that no handshakes have to be done in anticipation,however the n the credentials are passed as &lt;a href="http://en.wikipedia.org/wiki/Plaintext"&gt;plain-text &lt;/a&gt;and could be intercepted.&lt;/p&gt;</description></item><item><title>Cross browser drop shadow with CSS3</title><link>https://varunpant.com/posts/cross-browser-drop-shadow-with-css3/</link><pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/cross-browser-drop-shadow-with-css3/</guid><description>
&lt;p&gt;When &lt;strong&gt;css3&lt;/strong&gt; arrived, one of the goodies that I found was, the inclusion of &lt;strong&gt;Drop Shadow effect&lt;/strong&gt;, namely **Box Shadow **and &lt;strong&gt;Text Shadow&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Here I present a cross browser utility css class which can be used for a drop shadow effect, without any image.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;shadow&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* For IE 8 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;-ms-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;filter&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color=&amp;#39;#000000&amp;#39;)&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* For IE 5.5 - 7 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;filter&lt;/span&gt;: progid&lt;span style="color:#f92672"&gt;:&lt;/span&gt;DXImageTransform&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Microsoft&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Shadow&lt;/span&gt;(Strength&lt;span style="color:#960050;background-color:#1e0010"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, Direction&lt;span style="color:#960050;background-color:#1e0010"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;135&lt;/span&gt;, Color&lt;span style="color:#960050;background-color:#1e0010"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;#000000&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;-moz-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;box-shadow&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;#000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;-webkit-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;box-shadow&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;#000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;box-shadow&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;#000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For cross browser &lt;strong&gt;text shadow&lt;/strong&gt; effect ,I found a nice article &lt;a href="http://www.workingwith.me.uk/examples/css-drop-shadows.html#final_example"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Cross browser CSS3 border-radius (rounded corners)</title><link>https://varunpant.com/posts/cross-browser-css3-border-radius-rounded-corners/</link><pubDate>Tue, 22 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/cross-browser-css3-border-radius-rounded-corners/</guid><description>
&lt;p&gt;When I started programming and had to begin designing my first user interface in HTML, I was always puzzled as to why are all visual elements in HTML rectangular. I soon learned that in those days if one would want a circle to be drawn on a page, then the only way possible was using an image, the same was true for drawing elements with rounded corners.&lt;/p&gt;
&lt;p&gt;Thankfully HTML5/CSS3 guys were listening and the latest css3 standard supports defining the corner radius of a circle, this can be used to make an element look like a circle too if you want.&lt;/p&gt;</description></item><item><title>Cross Browser Opacity or Transparency</title><link>https://varunpant.com/posts/cross-browser-opacity-or-transparency/</link><pubDate>Tue, 22 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/cross-browser-opacity-or-transparency/</guid><description>
&lt;p&gt;Css has a very useful property called Opacity, which basically is a measure of transparency of an element.&lt;/p&gt;
&lt;p&gt;All modern browsers &lt;em&gt;Yes yes even &lt;strong&gt;IE&lt;/strong&gt;&lt;/em&gt; has support for it.&lt;/p&gt;
&lt;p&gt;In most browsers the value is between &lt;strong&gt;0&lt;/strong&gt; &lt;em&gt;minimum [transparent] i.e not visible&lt;/em&gt; to &lt;strong&gt;1&lt;/strong&gt; &lt;em&gt;maximum [opaque] i.e. completely visible&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;IE&lt;/strong&gt; the value is between 0 and 100 &lt;em&gt;,don&amp;rsquo;t ask why they just like to make us unhappy.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here I present a helper css class which will work in all browsers.&lt;/p&gt;</description></item><item><title>Installing Redis on Ubuntu</title><link>https://varunpant.com/posts/installing-redis-on-ubuntu/</link><pubDate>Sun, 20 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/installing-redis-on-ubuntu/</guid><description>
&lt;p&gt;&lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; is an open source, advanced key-value store. Installing it on Linux debian platforms is pretty easy.&lt;/p&gt;
&lt;p&gt;There are two ways of getting this done, one is perhaps an easy and less verbose method and it involves using an alternative repository &lt;a href="http://www.dotdeb.org/"&gt;Dotdeb.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A while ago I had posted a &lt;a href="http://www.varunpant.com/posts/how-to-set-up-redis-in-ubuntu-linux"&gt;tutorial&lt;/a&gt; about installing redis from the &lt;a href="http://redis.googlecode.com/files/redis-2.2.4.tar.gz"&gt;googlecode&lt;/a&gt; repo, but things have changed since then and here I post a fairly latest way of installing it.&lt;/p&gt;</description></item><item><title>gzip compression in apache using mod_deflate</title><link>https://varunpant.com/posts/gzip-compression-in-apache-using-mod_deflate/</link><pubDate>Sat, 19 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/gzip-compression-in-apache-using-mod_deflate/</guid><description>
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/HTTP_compression"&gt;HTTP Compression&lt;/a&gt; is a very simple and effective way to save bandwidth and improve web applications performance over network.&lt;/p&gt;
&lt;p&gt;Output compression is basically a process of compressing web servers response by using a loss-less compression algorithm called &lt;a href="http://en.wikipedia.org/wiki/Deflate"&gt;gzip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This technique is fairly modern and almost all modern browsers honor it, however if a page is requested from a browser which does not send a header Accept-Encoding: gzip,deflate then the response comes back uncompressed.&lt;/p&gt;</description></item><item><title>Start Stop Restart Apache 2 Web Server</title><link>https://varunpant.com/posts/start-stop-restart-apache-2-web-server/</link><pubDate>Sat, 19 Jan 2013 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/start-stop-restart-apache-2-web-server/</guid><description>
&lt;p&gt;I have been using Linux environment a lot lately, particularly for hosting my web experiments and other application. One of the biggest and most searched question for newbies have been&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How do I restart Apache 2 Web Server under Debian / Ubuntu Linux or UNIX operating systems?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this post I simply attempt to lay this down for my and their benifit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Start Apache2&lt;/strong&gt; # sudo /etc/init.d/apache2 start&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stop Apache2&lt;/strong&gt; # sudo /etc/init.d/apache2 stop&lt;/p&gt;</description></item><item><title>Factorial in python</title><link>https://varunpant.com/posts/factorial-in-python/</link><pubDate>Tue, 14 Aug 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/factorial-in-python/</guid><description>
&lt;p&gt;Mathematically, the formula for the factorial is as follows. If n is an integer greater than or equal to 1, then n ! = n ( n - 1)( n - 2)( n - 3) &amp;hellip; (3)(2)(1) If p = 0, then p ! = 1 by convention.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;factorial&lt;/span&gt;(n):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; n &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; n &lt;span style="color:#f92672"&gt;*&lt;/span&gt; factorial(n&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hope this helps&lt;/p&gt;</description></item><item><title>Auto Complete with Redis (Python)</title><link>https://varunpant.com/posts/auto-complete-with-redis-python/</link><pubDate>Sun, 06 May 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/auto-complete-with-redis-python/</guid><description>
&lt;p&gt;This is a quick port of &lt;a href="http://antirez.com/post/autocomplete-with-redis.html"&gt;auto complete&lt;/a&gt; implementation in ruby using &lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; by &lt;a href="http://invece.org/"&gt;antirez&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I like python and had little time to burn today, so here goes:&lt;/p&gt;
&lt;p&gt;The file used for input is &lt;a href="http://antirez.com/misc/female-names.txt"&gt;female-names.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hope it helps :)&lt;/p&gt;</description></item><item><title>How To Install and use Python Web.py framework on Windows</title><link>https://varunpant.com/posts/how-to-install-and-use-python-webpy-framework-on-windows/</link><pubDate>Sun, 06 May 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-install-and-use-python-webpy-framework-on-windows/</guid><description>
&lt;p&gt;&lt;a href="http://webpy.org/"&gt;Web.py&lt;/a&gt; has been one of my favorite web frameworks as its pretty easy to get cracking on it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s super quick to install and one can come up with a prototype and rapid web services in matter of minutes.&lt;/p&gt;
&lt;h2 id="install-on-windows"&gt;
Install on windows
&lt;a href="#install-on-windows" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you haven&amp;rsquo;t configured easy_install on windows, then read &lt;a href="http://www.varunpant.com/posts/how-to-setup-easy_install-on-windows"&gt; this &lt;/a&gt; article.&lt;/p&gt;
&lt;p&gt;Once easy_install has been configured believe it or not, all you have to do is open a command prompt and type&lt;/p&gt;</description></item><item><title>How to setup easy_install on Windows</title><link>https://varunpant.com/posts/how-to-setup-easy_install-on-windows/</link><pubDate>Sun, 06 May 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-setup-easy_install-on-windows/</guid><description>
&lt;p&gt;If one has been using python, then installing various libraries and modules is basically a breeze using easy_install utility, however for folks using windows, easy_install utility has to be setup properly before using it.&lt;/p&gt;
&lt;p&gt;First lets make sure that python is properly installed and PYTHON_HOME environment variable is configured:&lt;/p&gt;
&lt;h4 id="install-python-on-windows"&gt;
Install Python on Windows
&lt;a href="#install-python-on-windows" class="h-anchor" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;If not already installed download python installer from &lt;a href="http://python.org/download/"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After it&amp;rsquo;s done downloading, double click to run the installer, and select default options (unless you have other custom needs of course ).&lt;/p&gt;</description></item><item><title>Find Longitude and Latitude in Google Maps</title><link>https://varunpant.com/posts/find-longitude-and-latitude-in-google-maps/</link><pubDate>Sun, 15 Apr 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/find-longitude-and-latitude-in-google-maps/</guid><description>
&lt;p&gt;This post is basically a way of quick appreciation to the &lt;strong&gt;Google maps Team&lt;/strong&gt;, they are obviously a bunch of caring, loving people ,who make useful (although &lt;strong&gt;surreptitious&lt;/strong&gt;) tools for the betterment of Geek Kind.&lt;/p&gt;
&lt;p&gt;So as most of you may have accidently clicked a mysterious looking link at the bottom of your Google maps page ( on the left hand panel)&lt;a href="http://varunpant.com/static/resources/google_latlon_tool1_4.png"&gt;&lt;img src="http://varunpant.com/static/resources/google_latlon_tool1_thumb_1.png" alt="google_latlon_tool1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This awesome looking link opens up a popup which lets you choose wonderful goodies which makes your Google maps page more useful than it already is:&lt;/p&gt;</description></item><item><title>How to set up Redis in Ubuntu Linux</title><link>https://varunpant.com/posts/how-to-set-up-redis-in-ubuntu-linux/</link><pubDate>Sat, 14 Apr 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/how-to-set-up-redis-in-ubuntu-linux/</guid><description>
&lt;p&gt;&lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; is an open source, advanced key-value store, and is quickly picking up momentum in real-time software development , it is now a well known and trusted product and can be used in various problem scenarios as a No SQL implementation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.&lt;/p&gt;
&lt;p&gt;Here is quick guide to Install &lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; in Ubuntu 10.04, and it should be similar for higher versions and similar deb environment.&lt;/p&gt;</description></item><item><title>Installing Ubuntu Linux in VMware and VMwareTools</title><link>https://varunpant.com/posts/installing-ubuntu-linux-in-vmware-and-vmwaretools/</link><pubDate>Mon, 09 Jan 2012 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/installing-ubuntu-linux-in-vmware-and-vmwaretools/</guid><description>
&lt;p&gt;I have been using Ubuntu for last two years as a deployment environment for my pet projects, however recently, after having installed “Natty Narwhal” on one of my old ‘HP’ laptop I moved into using Ubuntu as a full time development environment.&lt;/p&gt;
&lt;p&gt;There are times when I need more than one deployment units and since I use &lt;a href="http://www.linode.com/"&gt;Linode&lt;/a&gt;as my primary deployment VPS host, I sometime need to test the perf of my software locally thus there came a need of replicating an exact or close to exact “Deployment Environment”&lt;/p&gt;</description></item><item><title>LIMBO Game Review</title><link>https://varunpant.com/posts/limbo-game-review/</link><pubDate>Wed, 19 Oct 2011 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/limbo-game-review/</guid><description>
&lt;p&gt;&lt;a href="http://varunpant.com/static/resources/limbo_psn_4.jpg"&gt; &lt;img src="http://varunpant.com/static/resources/limbo_psn_thumb_1.jpg" alt="limbo_psn" title="limbo_psn"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LIMBO is a horrifically beautiful, monochrome or rather a gray-scale purgatory painted perhaps while watching Tim burton movie on the side. It was published initially in Jul 2010 by &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Game_Studios"&gt;Microsoft Game Studios&lt;/a&gt;(XBLA) and &lt;a href="http://en.wikipedia.org/wiki/Playdead"&gt;Playdead&lt;/a&gt;(PSN, Windows), and then later released for Windows platform by &lt;a href="http://en.wikipedia.org/wiki/Steam_%28software%29"&gt;Steam&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The primary character of the game is a boy, who wakes up right at the beginning of the game i.e while you are trying to figure out WTF is happening or wonder if you graphics driver (windows platform) screwed up or something, but there as you are fiddling with the movement buttons in keyboard you will see pair of bright white eyes flickering, and that’s when you start falling in love with the game and the care of detail added in a game which is totally unlike other in its league.&lt;/p&gt;</description></item><item><title>VPS Hosting Past and Present</title><link>https://varunpant.com/posts/vps-hosting-past-and-present/</link><pubDate>Tue, 27 Sep 2011 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/vps-hosting-past-and-present/</guid><description>
&lt;p&gt;I had been hosting this blog in the past for an extremely competitive (read cheap) price &lt;a href="http://www.arvixe.com/asp_net_web_hosting"&gt;here&lt;/a&gt; at &lt;a href="http://www.arvixe.com/"&gt;Arvixe&lt;/a&gt; . I was using ASP.net based blogging software called &lt;a href="http://www.dotnetblogengine.net/"&gt;BlogEngine&lt;/a&gt;. over and all I will describe my experience as pleasant. Arvixe is a great Hosting Provider, has good up time and has plans which are easy on the pocket, and does almost all the common stuff like emails and cpanel ,blah blah that other hosting provider do, but kinda does it on a low price. I was a happy blogger for an year although I could only manage close to 8 post and and few &lt;a href="http://varunpant.com/lab"&gt;demos&lt;/a&gt; in that time.&lt;/p&gt;</description></item><item><title>Web Sockets in HTML 5</title><link>https://varunpant.com/posts/web-sockets-in-html-5/</link><pubDate>Mon, 10 Jan 2011 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/web-sockets-in-html-5/</guid><description>
&lt;p&gt;HTML5 &lt;a href="http://en.wikipedia.org/wiki/WebSockets"&gt;WebSockets&lt;/a&gt;, defines a full-duplex communication channel that operates through a single socket over the web. &lt;strong&gt;WebSocket&lt;/strong&gt; is not just another incremental enhancement to conventional HTTP communications, it represents a large advance, especially for real-time, &lt;a href="http://en.wikipedia.org/wiki/Event-driven_programming"&gt;event driven&lt;/a&gt; web applications.&lt;/p&gt;
&lt;p&gt;Normally when a browser visits a web page, an HTTP request is sent to the web server that hosts that page. The web server acknowledges this request and sends back the response. In many cases—for example, for stock prices, news reports, ticket sales, traffic patterns, medical device readings, and so on—the response could be stale by the time the browser renders the page.&lt;/p&gt;</description></item><item><title>Water Simulation</title><link>https://varunpant.com/posts/water-simulation/</link><pubDate>Sat, 25 Sep 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/water-simulation/</guid><description>
&lt;p&gt;Its been a while since my last post, had been busy with office work…sigh!!!&lt;/p&gt;
&lt;p&gt;Anyways, I was poking around web to come up with interesting water simulation techniques, as you could see in many games these days, so I did find a reference to an old C-based technique, after little refinement, what I have is a water simulation which uses a very old algorithm based on two &lt;a href="http://en.wikipedia.org/wiki/Heightmap"&gt;heightmaps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As always it’s a grid based animation which divides the screen into a mesh(more slices better this simulation looks), I use a jagged array in c# to do this (load it with a texture of 640 X 480 dimension ), to animate I use another array of same dimensions, now to make every thing move I kinda do something like this&lt;/p&gt;</description></item><item><title>Liquid Particles</title><link>https://varunpant.com/posts/liquid-particles/</link><pubDate>Sat, 03 Jul 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/liquid-particles/</guid><description>
&lt;p&gt;After ages of constantly being one of the most used browser as well as a serious pain in Butt!!! IE is finally about to mature into something good and perhaps a useful software , with its support to &lt;a href="http://www.quirksmode.org/blog/archives/2010/06/more_ie9_goodne.html"&gt;most&lt;/a&gt; of the standards being used today , IE will join back the league of web 3.0 browsers, hopefully very soon&lt;/p&gt;
&lt;p&gt;So I was going through various experiments done with Canvas and came across a great example on &lt;a href="http://spielzeugz.de/html5/liquid-particles.html"&gt;Liquid Particle physics simulation&lt;/a&gt;, which amazingly is written in JavaScript and Canvas element, I was so mesmerized by the application that I had to port it to &lt;a href="http://msdn.microsoft.com/en-us/bb187358.aspx"&gt;SilverLight&lt;/a&gt;, using &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx"&gt;WritableBitmap&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Image Carousel</title><link>https://varunpant.com/posts/image-carousel/</link><pubDate>Tue, 29 Jun 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/image-carousel/</guid><description>
&lt;p&gt;Here is another of many JavaScript based Image Carousel, I had seen many similar to these made in SilverLight and Flash, I came across a wonderful &lt;a href="http://www.shinedraw.com/animation-effect/flash-vs-silverlight-image-carousel/"&gt;carousel&lt;/a&gt; made in SilverLight sometimes back which was very fluid in behavior and could easily be customized and configured to take various shape and form.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.varunpant.com/static/resources/carousel.png"&gt;&lt;img src="http://www.varunpant.com/static/resources/carousel_thumb.png" alt="carousel" title="carousel"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have managed to port it to JavaScript, it works best on chrome or FF, hope this would be fun to play with.&lt;/p&gt;</description></item><item><title>I-Phone Scroll</title><link>https://varunpant.com/posts/i-phone-scroll/</link><pubDate>Fri, 18 Jun 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/i-phone-scroll/</guid><description>
&lt;p&gt;One of the amazing features of i-phone user interface is smooth panning/scrolling animation.&lt;/p&gt;
&lt;p&gt;I-phone “List Scrolling” perhaps gives a very funky and usable List –View to its users and allows them to scroll up and down the interface without any need of a scroll bar.&lt;/p&gt;
&lt;p&gt;This interface is sensitive to the push speed and also shows traces of resilience.&lt;/p&gt;
&lt;p&gt;I have been experimenting with various techniques to bring out similar effect using JavaScript and HTML, I am not quite sure if this would be useful in its present form but with some modifications may be this sample could prove its worthiness somewhere.&lt;/p&gt;</description></item><item><title>Data URI and IE</title><link>https://varunpant.com/posts/data-uri-and-ie/</link><pubDate>Tue, 15 Jun 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/data-uri-and-ie/</guid><description>
&lt;p&gt;Few days ago I was experimenting with a nifty technique of embedding images in web pages by base64 encoding them first and then using a standard known as &lt;a href="http://en.wikipedia.org/wiki/Data_URI_scheme"&gt;Data URI Scheme&lt;/a&gt;, which basically defines a method of assigning a ‘src’ of an image tag as a base64 serialized string, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;background-image&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;url&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUBAMAAACKWYuOAAAAMFBMVEX///92dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYvD4PNAAAAD3RSTlMAACTkfhvbh3iEewTtxBIFliR3AAAAUklEQVQY02NgIBMwijgKCgrAef5fkHnz/y9E4kn+/4XEE6z/34jEE///A4knev7zAwQv7L8RQk40/7MiggeUQpjJff+zIpINykbIbhFSROIRDQAWUhW2oXLWAQAAAABJRU5ErkJggg==&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Although this technique could save some server round trips, however Microsoft ver. (IE &amp;lt; 8). does not support this scheme even though its a &lt;a href="http://tools.ietf.org/html/rfc2397"&gt;standard&lt;/a&gt;, which then makes this technique unfavorable to use as its not cross browser.&lt;/p&gt;</description></item><item><title>Notepad++ with Python</title><link>https://varunpant.com/posts/notepad-with-python/</link><pubDate>Tue, 15 Jun 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/notepad-with-python/</guid><description>
&lt;p&gt;After reading an excellent article by &lt;a href="http://weblogs.asp.net/rashid/"&gt;Kazi Manzur Rashid&lt;/a&gt;on setting up a development environment for Iron Ruby using &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt;, I was immediately struck with an idea of using the same excellent tool with Python 2.6.&lt;/p&gt;
&lt;p&gt;Now don’t get me wrong here, theoretically there is nothing wrong with IDLE, but having a light weight IDE for those who don’t want to use &lt;a href="http://pydev.org/"&gt;Pydev&lt;/a&gt;plugin for &lt;a href="http://www.aptana.com/"&gt;Aptana&lt;/a&gt;or &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;, I think Notepad++ is indeed a nice little dev tool.&lt;/p&gt;</description></item><item><title>Hello World!</title><link>https://varunpant.com/posts/hello-world/</link><pubDate>Sat, 12 Jun 2010 00:00:00 +0000</pubDate><guid>https://varunpant.com/posts/hello-world/</guid><description>
&lt;p&gt;After long period of wait, here it is my very first and personal Blogging Space.&lt;/p&gt;
&lt;p&gt;I have been hoping to go online for about an year now, but then there always were events happening around to prevent this immense desire of mine.&lt;/p&gt;
&lt;p&gt;I intend to blog about .net in general , JavaScript, Silverlight, Animation and maybe some other cool stuff .&lt;/p&gt;
&lt;p&gt;Hope to update this space again.&lt;/p&gt;
&lt;p&gt;Cheers!!!&lt;/p&gt;
&lt;p&gt;&amp;ndash; Varun&lt;/p&gt;</description></item><item><title>Archive</title><link>https://varunpant.com/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://varunpant.com/archives/</guid><description/></item></channel></rss>