<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>About on Amita Shukla</title>
    <link>https://amitashukla.in/</link>
    <description>Recent content in About on Amita Shukla</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 18 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://amitashukla.in/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Authentication and Authorization Explained</title>
      <link>https://amitashukla.in/blog/authentication-authorization-mechanisms/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/authentication-authorization-mechanisms/</guid>
      <description>&lt;p&gt;You join a new company. On day 1, you&amp;rsquo;re  asked to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Log into your laptop using a password.&lt;/li&gt;&#xA;&lt;li&gt;Authenticate to the corporate VPN using MFA.&lt;/li&gt;&#xA;&lt;li&gt;Sign in to Jira using Microsoft SSO.&lt;/li&gt;&#xA;&lt;li&gt;Use an SSH key to access a Linux server.&lt;/li&gt;&#xA;&lt;li&gt;Generate a Personal Access Token for GitHub.&lt;/li&gt;&#xA;&lt;li&gt;Call a cloud API using an Access Token.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Suddenly you&amp;rsquo;re surrounded by terms like OAuth, OIDC, JWT, Kerberos, LDAP, SAML, API Keys, Service Accounts, Bearer Tokens, and RBAC. They all seem related, yet each serves a different purpose.&#xA;This post aims to untangle that vocabulary and show how these pieces fit together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When Data Outgrew Databases: Enter Big Data</title>
      <link>https://amitashukla.in/blog/data-evolution-enter-big-data/</link>
      <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/data-evolution-enter-big-data/</guid>
      <description>&lt;p&gt;In my previous post &lt;a href=&#34;https://amitashukla.in/blog/data-evolution-oltp-olap/&#34;&gt;Foundations of Data Systems: OLTP, OLAP, and What Came Next&lt;/a&gt;, I talked about OLTP and OLAP systems, and how they defined the early data landscape. Organizations relied on a combination of OLTP systems for operational workloads and data warehouses for analytics. This model worked well when data was primarily structured, generated at predictable rates, and could be processed in periodic batches.&lt;/p&gt;&#xA;&lt;p&gt;However, the growth of the internet fundamentally changed the nature of data. Organizations were no longer dealing with just transactional records and reporting tables. Websites, mobile applications, sensors, machine logs, clickstreams, and social media platforms began generating data at unprecedented scale.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Foundations of Data Systems: OLTP, OLAP, and What Came Next</title>
      <link>https://amitashukla.in/blog/data-evolution-oltp-olap/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/data-evolution-oltp-olap/</guid>
      <description>&lt;h1 id=&#34;since-time-immemorial&#34;&gt;Since time immemorial…&lt;/h1&gt;&#xA;&lt;p&gt;&amp;hellip; humans have recorded data — we started almost five thousand years ago and never stopped. This data was primarily of 2 types — structured and unstructured data. People were making records of transactions in everyday life, be it trade, ownership, inventory, and events. As societies grew, these records naturally took &lt;strong&gt;structured forms&lt;/strong&gt;: ledgers, tables, and predefined formats that made tracking and reconciliation possible.&lt;/p&gt;&#xA;&lt;p&gt;Fast forward to the era of digitization - with the rise of computing systems, organizations inherited these same assumptions. Early business applications dealt almost exclusively with structured, well-defined data — orders, users, payments, inventory. This data had to be:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CORS</title>
      <link>https://amitashukla.in/blog/cors/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/cors/</guid>
      <description>&lt;p&gt;Whether we&amp;rsquo;re building public APIs, internal tools, or just calling third-party services — understanding and configuring CORS correctly is part of responsible development. Cross-Origin Resource Sharing is a security feature implemented by browsers to restrict how resources are shared between different origins. For example, if site A (hosted on origin a.com) wants to make a direct request to site B (hosted on origin b.com), browsers do not allow that by default. CORS is a way to relax this policy safely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OPTIONS HTTP Method</title>
      <link>https://amitashukla.in/notes/options/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/options/</guid>
      <description>&lt;p&gt;The HTTP OPTIONS method is a request used to inquire about the communication options available for a specific resource or the entire server. It&amp;rsquo;s primarily used for diagnostic purposes, allowing clients to determine which HTTP methods are supported and potentially other CORS (Cross-Origin Resource Sharing) headers.&lt;/p&gt;&#xA;&lt;h3 id=&#34;when-is-options-used&#34;&gt;When is &lt;code&gt;OPTIONS&lt;/code&gt; used?&lt;/h3&gt;&#xA;&lt;h4 id=&#34;1-cors-preflight-request&#34;&gt;1. CORS Preflight Request&lt;/h4&gt;&#xA;&lt;p&gt;When a browser makes a cross-origin request that:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Uses non-simple HTTP methods (like &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, or custom methods),&lt;/li&gt;&#xA;&lt;li&gt;Includes custom headers (like &lt;code&gt;Authorization&lt;/code&gt;, &lt;code&gt;X-Auth-Token&lt;/code&gt;),&lt;/li&gt;&#xA;&lt;li&gt;Uses a &lt;code&gt;Content-Type&lt;/code&gt; other than &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt;, &lt;code&gt;multipart/form-data&lt;/code&gt;, or &lt;code&gt;text/plain&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;…it first sends an &lt;code&gt;OPTIONS&lt;/code&gt; request to the target server to &lt;em&gt;ask for permission&lt;/em&gt;. e.g.,&lt;/p&gt;</description>
    </item>
    <item>
      <title>More on VIM</title>
      <link>https://amitashukla.in/blog/more-on-vim/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/more-on-vim/</guid>
      <description>&lt;p&gt;In my previous post &lt;a href=&#34;https://amitashukla.in/blog/inevitable-vi/&#34;&gt;Inevitable Vi&lt;/a&gt;, I talked about getting started with Vi (or Vim). Since then, vim has become an integral part of my workflow. Who could have thought you&amp;rsquo;d need to open countless files across remote servers, with no fancy text editors to help? It started from there, but I gradually realised the power of Vim &amp;ndash; no need to lift your hand to reach over to the mouse (or trackpad) &amp;ndash; control everything using keyboard. Today, I look for vim anywhere I can. I use it in all my IDEs, command line, browsers, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Undo everything in Git - Part 2</title>
      <link>https://amitashukla.in/blog/undo-everything-in-git-part-2/</link>
      <pubDate>Tue, 08 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/undo-everything-in-git-part-2/</guid>
      <description>&lt;p&gt;In my previous post &lt;a href=&#34;https://amitashukla.in/blog/undo-everything-in-git-part-1/&#34;&gt;Undo everything in Git - Part 1&lt;/a&gt;, I disucussed various undo scenarios on a git repository locally. Now, in this post, we discuss the undo strategies when we have pushed our code to remote already.&lt;/p&gt;&#xA;&lt;h4 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#undo-a-push&#34;&gt;- Undo a Push&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#undo-using-git-revert&#34;&gt;- undo using git revert&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#undo-using-git-reset&#34;&gt;- undo using git reset&lt;/a&gt;&lt;/br&gt;&#xA;&lt;a href=&#34;#undo-a-merge-commit&#34;&gt;- Undo a merge commit&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#a-merge-commit&#34;&gt;- A merge commit&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#revert-and-push&#34;&gt;- revert and push&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#reset-and-force-push&#34;&gt;- reset and force push&lt;/a&gt;&lt;/br&gt;&#xA;&lt;a href=&#34;#undo-a-rebase&#34;&gt;- Undo a Rebase&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#rebase-didnt-finish&#34;&gt;- rebase didn&#39;t finish&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#rebase-completed&#34;&gt;- rebase completed&lt;/a&gt;&lt;/br&gt;&#xA;&lt;a href=&#34;#undo-all-work-in-a-branch&#34;&gt;- Undo all work in a Branch&lt;/a&gt;&lt;/br&gt;&#xA;&lt;a href=&#34;#undo-a-deleted-branch&#34;&gt;- Undo a Deleted Branch&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#if-a-branch-is-available-locally-but-upstream-is-deleted&#34;&gt;- if a branch is available locally but upstream is deleted&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#if-a-branch-exists-remotely-but-deleted-locally&#34;&gt;- if a branch exists remotely but deleted locally&lt;/a&gt;&lt;/br&gt;&#xA;        &lt;a href=&#34;#if-a-branch-is-deleted-both-locally-and-remotely&#34;&gt;- if a branch is deleted both locally and remotely&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Design Patterns In Spring Framework</title>
      <link>https://amitashukla.in/blog/spring-design-patterns/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/spring-design-patterns/</guid>
      <description>&lt;p&gt;Understanding design patterns is best achieved through practical application. However, we often miss how they&amp;rsquo;re built into the frameworks or libraries we use. In Spring Framework, different design patterns are used to make applications flexible and easy to maintain. Sometimes we use these patterns unknowingly. Let&amp;rsquo;s explore the below design patterns to understand how they work in real-world applications.&lt;/p&gt;&#xA;&lt;h3 id=&#34;dependency-injection-di--inversion-of-control-ioc&#34;&gt;Dependency Injection (DI) / Inversion of Control (IoC)&lt;/h3&gt;&#xA;&lt;p&gt;Central to the Spring Framework, DI/IoC allows objects to be constructed and wired together by an external entity (the Spring container), rather than within the objects themselves. IoC is not a design pattern per se, but a design principle, which the Spring framework implements using Dependency Injection. It&amp;rsquo;s so core to the spring&amp;rsquo;s functionality that I thought its worth starting this list with it before proceeding to &amp;lsquo;official&amp;rsquo; patterns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing REST API for Long Running Jobs</title>
      <link>https://amitashukla.in/blog/rest-api-for-long-running-jobs-implementation/</link>
      <pubDate>Wed, 24 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/rest-api-for-long-running-jobs-implementation/</guid>
      <description>&lt;p&gt;In previous post &lt;a href=&#34;https://amitashukla.in/blog/rest-api-for-long-running-jobs/&#34;&gt;Rest API For Long Running Job&lt;/a&gt; we discussed the design of an API exposed to handle long runnining jobs. Such an API decouples the long running process with the actual API, and instead of indefinitely waiting for a response we expose a &lt;code&gt;/status&lt;/code&gt; endpoint to monitor the progress of the running task.&lt;/p&gt;&#xA;&lt;p&gt;In this post we will implement such an API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;simple-api-structure&#34;&gt;Simple API Structure&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s first start with implementing a simple API, when the long running job is not in the picture. I will be using Java with Spring for this purpose. If you wish to directly jump to the implementation of the long runnning API, you can click &lt;a href=&#34;#long-running-impl&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Performance - Concatenated Indexes and Order of Columns</title>
      <link>https://amitashukla.in/notes/database-performance-notes-concatenated-index/</link>
      <pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/database-performance-notes-concatenated-index/</guid>
      <description>&lt;h2 id=&#34;concatenated-indexes&#34;&gt;Concatenated Indexes&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes the primary key of a table may not be unique, defining an index on a single column as such will not be the most optimal use of an index. This is because if we define an index over a non-unique column, it will have to do a less performant RANGE SCAN instead of UNIQUE SCAN to access all the results. In this case, we can define an index over multiple columns over which uniqueness is guaranteed. Such an index is called a &lt;strong&gt;Concatenated Index&lt;/strong&gt;. e.g. we can have our primary key defined as (&lt;code&gt;employee_id + sub_division_id&lt;/code&gt;), and can define an index over these two columns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Performance Notes - Indexes</title>
      <link>https://amitashukla.in/notes/database-performance-notes/</link>
      <pubDate>Sun, 17 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/database-performance-notes/</guid>
      <description>&lt;p&gt;These are my notes from the book &lt;a href=&#34;https://use-the-index-luke.com/sql/table-of-contents&#34;&gt;Database Performance&lt;/a&gt; &lt;a href=&#34;https://use-the-index-luke.com/sql/anatomy&#34;&gt;Chapter 1&lt;/a&gt; by Markus Winand. I found this book fairly simple to read, and it&amp;rsquo;s for free!&lt;/p&gt;&#xA;&lt;h2 id=&#34;anatomy-of-an-index&#34;&gt;Anatomy of an Index&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creating an index does not change the table data; it just creates a new data structure that refers to the table.&lt;/li&gt;&#xA;&lt;li&gt;Searching in a database index is like searching in a printed telephone directory. A database index is, however, more complex than a printed directory because it undergoes constant change. It must process insert, delete and update statements immediately, keeping the index order without moving large amounts of data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;the-index-leaf-nodes&#34;&gt;The Index Leaf Nodes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The logical order of rows is established via a doubly linked list, so on insertion of new rows, their physical order will not matter and only the pointers to the previous and next nodes need to be moved. It is thus possible to insert new entries without moving large amounts of data—it just needs to change some pointers.&lt;/li&gt;&#xA;&lt;li&gt;Each leaf node is saved in a page (or block). Each leaf node will contain the keys in sorted order. Each key here will point to the physical location of the row in table. These leaf nodes saved on blocks are saved in ordered form as well.&lt;/li&gt;&#xA;&lt;li&gt;While the above ordering is maintained in indexes, note that in tables these rows have no connection to each othere and exist in insertion order.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;b-tree.png&#34; alt=&#34;image&#34;&gt;&#xA;&lt;a href=&#34;https://blog.yugabyte.com/a-busy-developers-guide-to-database-storage-engines-the-basics/&#34;&gt;Image-Source&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rate Limter v/s Circuit Breaker in Microservices</title>
      <link>https://amitashukla.in/notes/rate-limiter-vs-circuit-breeaker/</link>
      <pubDate>Sat, 09 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/rate-limiter-vs-circuit-breeaker/</guid>
      <description>&lt;p&gt;A Rate Limiter is a pattern put in place for a service to protect itself from too many calls. A resource-intensive service is always in danger of overloading if triggered multiple times, or it may end up calling other resource-intensive services, bringing the whole system down. If such a service is exposed directly to clients, it is susceptible to DDOS attacks as well. Another use case is that we may want to limit the user to call a request depending on the Pricing Plan they are subscribed to, e.g. a user can be restricted to call a service only ‘n’ times a day depending upon what plan they’ve chosen. All further calls are rejected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Designing REST API for Long Running Jobs</title>
      <link>https://amitashukla.in/blog/rest-api-for-long-running-jobs/</link>
      <pubDate>Wed, 06 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/rest-api-for-long-running-jobs/</guid>
      <description>&lt;p&gt;Consider the case below where we have an API for &amp;lsquo;orders&amp;rsquo;. We want to expose an Order Service for a client to  list all orders, create a new order, or get details for a particular order.&lt;/p&gt;&#xA;&lt;h2 id=&#34;api-design&#34;&gt;API Design&lt;/h2&gt;&#xA;&lt;p&gt;So we create a GET endpoint &lt;code&gt;/orders&lt;/code&gt; to list all orders:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-atom&#34; data-lang=&#34;atom&#34;&gt;GET /orders&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The server responds with:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-atom&#34; data-lang=&#34;atom&#34;&gt;200 OK&#xA;{&amp;#34;orders&amp;#34; : [&#xA;    {&amp;#34;id&amp;#34;: 1, &amp;#34;products&amp;#34;: [&amp;#34;a&amp;#34;, &amp;#34;b&amp;#34;, &amp;#34;c&amp;#34;], &amp;#34;amount&amp;#34; : 100},&#xA;    {&amp;#34;id&amp;#34;: 2, &amp;#34;products&amp;#34;: [&amp;#34;b&amp;#34;, &amp;#34;f&amp;#34;, &amp;#34;x&amp;#34;], &amp;#34;amount&amp;#34; : 200}&#xA;]}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And to get order details for a particular order:&lt;/p&gt;</description>
    </item>
    <item>
      <title>use `git checkout -b &lt;branch-name&gt;` to create a new branch and checkout immediately [end]</title>
      <link>https://amitashukla.in/notes/git-checkout-to-new-branch/</link>
      <pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/git-checkout-to-new-branch/</guid>
      <description></description>
    </item>
    <item>
      <title>REST - POST v/s PUT</title>
      <link>https://amitashukla.in/notes/post-vs-put/</link>
      <pubDate>Tue, 14 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/post-vs-put/</guid>
      <description>&lt;p&gt;Both POST and PUT requests are used to create a resource. The main difference is that a PUT request is &lt;strong&gt;idempotent&lt;/strong&gt; whereas a POST request is not. This means, if I trigger the same POST request multiple times, that resource gets created multiple times. This is not safe. Whereas, if I trigger a PUT request multiple times, only the first time that resource gets created, other times an update is made to the same resource.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git exclude v/s Git ignore</title>
      <link>https://amitashukla.in/notes/git-info-exclude-vs-gitignore/</link>
      <pubDate>Sun, 29 May 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/notes/git-info-exclude-vs-gitignore/</guid>
      <description>&lt;p&gt;If you have files that you wish not to be tracked by git, you need to inform git about it. There are 2 ways to do that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;One is by creating a file named &lt;code&gt;.gitignore&lt;/code&gt;, and adding the path of the file you wish to ignore on it.&lt;/li&gt;&#xA;&lt;li&gt;The other is by appending the file path in file: &lt;code&gt;.git/info/exclude&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;git_info_exclude.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The difference between these two is that the &lt;code&gt;.gitignore&lt;/code&gt; file is part of your source tree, i.e. it is meant to committed and shared across all the clones. So the patterns mentioned in &lt;code&gt;.gitignore&lt;/code&gt; will be applicable to all the developers working on the code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Static Factory Methods</title>
      <link>https://amitashukla.in/blog/understanding-static-factory-methods/</link>
      <pubDate>Sat, 22 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/understanding-static-factory-methods/</guid>
      <description>&lt;p&gt;There is ample material on how we can use constructors to create new objects, but still we can opt out the use of constructors somtimes. In the object oriented world, where everything is an object, some need not be so.&lt;/p&gt;&#xA;&lt;p&gt;It is obvious to use the &lt;code&gt;new&lt;/code&gt; keyword, as the only way to deal with an object. But we may not want that all the time. L&amp;rsquo;ets consider a very common scenario of &lt;code&gt;Boolean&lt;/code&gt;. We know that a boolean value represents one of the two values, &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;. When we attempt to create a boxed type for the same, we can create a &lt;code&gt;Boolean&lt;/code&gt; object like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeping Code Private in a Public Repository</title>
      <link>https://amitashukla.in/blog/keeping-code-private-in-a-public-repo/</link>
      <pubDate>Thu, 22 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/keeping-code-private-in-a-public-repo/</guid>
      <description>&lt;p&gt;In this post I talk about how I manage to keep some of my posts private while keeping everything else part of a public repository.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#lets-begin&#34;&gt;You Can Skip Intro by Clicking Here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A few months before &lt;a href=&#34;https://amitashukla.in/blog/announcing-an-all-new-and-improved-site/&#34;&gt;I launched my blog on a fresh platform&lt;/a&gt;. Instead of using Blogger, I shifted to the Static Site Generator Gatsby, and uploaded all the code, as well as the content on Github. This is the reason that all the activites of this open sourced blog are public. There is nothing wrong with that, except a small issue. I realized I was missing out on the one flexibility offered by Blogger that I was taking for granted, DRAFT POSTS!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Types, Subtypes and Type Variance</title>
      <link>https://amitashukla.in/blog/understanding-type-subtypes-variance/</link>
      <pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/understanding-type-subtypes-variance/</guid>
      <description>&lt;p&gt;Most of us when we just start with programming, get confused with concepts of types, subtypes, inheritance, etc. But just as with the process of learning any language this all starts to come naturally to us, we grow up to casually use subtyping wherever we want in a program. In fact, it becomes almost unimaginable to code without these.&lt;/p&gt;&#xA;&lt;p&gt;Subtyping is nothing but writing one type in terms of another. Only when I started exploring other languages I realized that there are deeper theories to it, and maybe I do not understand subtypes to the extent I thought I did. I am writing this post in order to pass on this programming existential crisis to my fellow readers (but also attempting to develop an understanding along the way). We shall take subtyping a level further and understand how the assignment and substitution behaviour of our types affects our code behaviour (and subsequently ours).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing an All New and Improved Site using GatsbyJS</title>
      <link>https://amitashukla.in/blog/announcing-an-all-new-and-improved-site/</link>
      <pubDate>Thu, 04 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/announcing-an-all-new-and-improved-site/</guid>
      <description>&lt;p&gt;Enough is enough, I have thrown away my older site and have switched to Static Site Generator- GatsbyJS based blog and portfolio. It wasn&amp;rsquo;t so easy as I built this in about 2 months while the older one was running since eternity.&lt;/p&gt;&#xA;&lt;p&gt;I started this blog around 5 years ago, and at that time all I wanted was a place to write and publish. I wanted the easiest way possible, and a quick search on &amp;ldquo;how to blog&amp;rdquo; yielded Blogger. I explored around a bit, and set it up with a free domain, a basic theme and a writing interface.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FP Cheat Sheet For Absolute Beginners</title>
      <link>https://amitashukla.in/blog/fp-cheat-sheet-for-absolute-beginners/</link>
      <pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/fp-cheat-sheet-for-absolute-beginners/</guid>
      <description>&lt;p&gt;Functional Programming languages, in general, turn into a challenging venture at the very start. On one hand, it sounds simple when all you have to do is use functions instead of loads of language constructs. &lt;a href=&#34;https://amitashukla.in/blog/unfolding-folds.html&#34;&gt;Who needs a loop when we have folds&lt;/a&gt;! But there is another problem. Now we don&amp;rsquo;t know which function we need to use when. A lot of times for coding a simple task, I had to rush to the docs, search extensively, only to discover half an hour later that all I had to use was a &lt;code&gt;lift&lt;/code&gt;. or a &lt;code&gt;fold&lt;/code&gt;. or a &lt;code&gt;map&lt;/code&gt;. Aghhh! At this learning level, what comes handy is a pool of functions to refer to first before jumping into the sea of all the libraries and functions ever created. Gradually over time, these functions (and their type signatures) embed themselves on our minds, and then programming becomes a breeze.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NLP 101</title>
      <link>https://amitashukla.in/blog/nlp-101/</link>
      <pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/nlp-101/</guid>
      <description>&lt;p&gt;In this post, I would go over a few commonly used Natural Language Processing techniques. There&amp;rsquo;s a lot of emphasis on what techniques to use for processing data, be it for data analysis, or data science, or big data depending on the scenario. But just like for Physics problems we assume negligible air resistance, friction, etc., for data problems we assume negligible poor quality data. In real life though, poor quality data is not so negligible. In fact, it is substantial and significant effort goes into data preparation before it is ready to be consumed by our data science models.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Undo everything in Git - Part 1</title>
      <link>https://amitashukla.in/blog/undo-everything-in-git-part-1/</link>
      <pubDate>Sat, 14 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/undo-everything-in-git-part-1/</guid>
      <description>&lt;p&gt;I use git for most of my projects now, at work and off work. While I am easily able to save history on git, I need to get back to man pages to be able to manoeuvre through the git history backwards. So I decided to jot down how to rewind your git history, and undo the changes at several stages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;git.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s go bottom-up:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-git-init&#34;&gt;Undo git init&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-unstaged-work&#34;&gt;Undo unstaged work&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-staged-work&#34;&gt;Undo staged work&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#git-rm---cached-vs-git-reset-head-file&#34;&gt;git rm &amp;ndash;cached v/s git reset HEAD &amp;lt;file&amp;gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-commit---change-commit-message-and-other-info&#34;&gt;Undo commit - change commit message and other info&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-a-commit-by-making-another-commit&#34;&gt;Undo a commit by making another commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-a-commit---and-erase-its-history&#34;&gt;Undo a commit - and erase its history&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-the-commit-and-get-your-changes-back-on-staging-area&#34;&gt;Undo the commit and get your changes back on staging area&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-the-commit-and-dont-keep-the-changes&#34;&gt;Undo the commit and don&amp;rsquo;t keep the changes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-not-the-latest-commit&#34;&gt;Undo not the latest commit&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#rebase&#34;&gt;Rebase&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#undo-all-work-in-a-branch&#34;&gt;Delete a branch&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#if-the-branch-has-no-unmerged-changes&#34;&gt;Safe delete&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#if-the-branch-has-unmerged-changes&#34;&gt;Force delete&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;undo-git-init&#34;&gt;Undo git init&lt;/h3&gt;&#xA;&lt;p&gt;I created a git repository inside a directory using the git init command. A git repository can be created in an empty repository or can be created with files already in it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep Dive into Evaluating an Expression in Scala</title>
      <link>https://amitashukla.in/blog/expression-evaluation-strategies-val-def-lazy-scala/</link>
      <pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/expression-evaluation-strategies-val-def-lazy-scala/</guid>
      <description>&lt;p&gt;I have been using Scala for a while now. Coming from a Java background, it was eye soothing to see lesser boilerplate code. However, as I went deeper into more and more code written by Scala devs out there, there were a lot of things I just could not wrap my head around. Wait! This is not going to be a rant on the language. Instead, I will be touching upon the most basic stuff today - &lt;strong&gt;declaring, initializing variables&lt;/strong&gt; (let&amp;rsquo;s call them &amp;lsquo;variable&amp;rsquo;, though they may not necessarily vary) and &lt;strong&gt;evaluating expressions&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Property Based Testing</title>
      <link>https://amitashukla.in/blog/property-based-testing/</link>
      <pubDate>Thu, 05 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/property-based-testing/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s talk about testing today. And testing is &lt;em&gt;hard&lt;/em&gt;. The most common way we have been testing is what is known as &lt;strong&gt;Example Based Testing&lt;/strong&gt;.&#xA;Following steps are followed for writing test cases:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We start by taking a function&lt;/li&gt;&#xA;&lt;li&gt;To write a test for the chosen function, we start by defining a set of inputs and the expected outputs.&lt;/li&gt;&#xA;&lt;li&gt;For each test, we call this function for an input and match it with some expected value.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;How do we practice testing? When given a feature:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unfolding the folds</title>
      <link>https://amitashukla.in/blog/unfolding-folds/</link>
      <pubDate>Sat, 20 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/unfolding-folds/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;fold.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lists can be represented as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;data [a] = [] | a : [a]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Consider the following functions:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-haskell&#34; data-lang=&#34;haskell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; foldl &lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt; (b &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; a &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; [a] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; foldr &lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt; (a &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; [a] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These two functions are used for what we call &lt;em&gt;folding&lt;/em&gt; over a list. What does it mean by folding? In a broad sense, we can say that folds give us the power to evaluate a list by applying an operator between the list elements. First examples that come to mind can be finding the sum on a list of integers, append the elements of a list, etc. To fold, we also need a default value when we come to evaluate the end of list, or over an empty list, hence a seed value. Take a closer look at the type signatures, we can say that folds are much more powerful than these examples, as they also give us the power to change not only the structure of the list, but also the type of list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prepare for GCP Certification Exam - Data Engineer</title>
      <link>https://amitashukla.in/blog/prepare-for-gcp-certification-exam-data/</link>
      <pubDate>Sat, 26 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/prepare-for-gcp-certification-exam-data/</guid>
      <description>&lt;p&gt;Google Cloud Platform (GCP) is fairly new in the cloud market, dominated by the AWS. Though Google has a long way to go in terms of the variety of tools offered in the cloud space, the good part is that its current set is enterprise ready. I had my share of the Google Cloud experience at work, and then while preparing for the Google Could Data Engineer exam. Studying and playing with these tools was so fun and securing the certificate (and a google hoodie) was a sweet award for it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>12 Habits That Will Make You a Smart Programmer</title>
      <link>https://amitashukla.in/blog/12-habits-that-will-make-you-smart-programmer/</link>
      <pubDate>Fri, 28 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/12-habits-that-will-make-you-smart-programmer/</guid>
      <description>&lt;p&gt;It is said that &amp;quot;Master the work you do most often&amp;quot;. So if programming is what we do most often, we should definitely come up with practices that help us to master whatever we do, along with learning new skills.&lt;/p&gt;&#xA;&lt;p&gt;Here are a few habits that I follow to make myself more and more efficient as a programmer, gain knowledge and garner appreciation from others!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;UPSTART.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-use-git&#34;&gt;1. Use Git&lt;/h3&gt;&#xA;&lt;p&gt;Git is an excellent tool for code collaboration. Let&amp;rsquo;s start with the popular advantages. It offers:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing Functional List from Scratch in Scala</title>
      <link>https://amitashukla.in/blog/implement-functional-list-from-scratch-scala/</link>
      <pubDate>Sun, 25 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/implement-functional-list-from-scratch-scala/</guid>
      <description>&lt;p&gt;After studying the &lt;a href=&#34;https://amitashukla.in/blog/why-functional-programming.html&#34;&gt;why&lt;/a&gt; and &lt;a href=&#34;https://amitashukla.in/blog/tail-recursion-in-functional-programming.html&#34;&gt;how&lt;/a&gt; of Functional Programming, the time had come to study the real-life implementation of this paradigm. So, I went on reading Scala source code. And why not? Scala &lt;a href=&#34;https://www.scala-lang.org/what-is-scala.html#functional&#34;&gt;claims&lt;/a&gt; to be a full-blown functional language, and allows an easy migration from imperative to functional. It was plain sailing until I stumbled upon List.scala and saw this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; length&lt;span style=&#34;color:#66d9ef&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Int&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; these &lt;span style=&#34;color:#66d9ef&#34;&gt;=&lt;/span&gt; self&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; len &lt;span style=&#34;color:#66d9ef&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(!&lt;/span&gt;these&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isEmpty&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    len &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;    these &lt;span style=&#34;color:#66d9ef&#34;&gt;=&lt;/span&gt; these&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;tail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  len&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above length method is used to find the number of elements in a list:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Providing Hadoop Configurations to MapReduce Application using ToolRunner</title>
      <link>https://amitashukla.in/blog/providing-hadoop-configurations-to/</link>
      <pubDate>Wed, 19 Apr 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/providing-hadoop-configurations-to/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s talk about Map Reduce Programming. It is simple in the first go. In fact, dealing with distributed systems has never been simpler. Design your job into Map and Reduce tasks. Implement these functions, create a jar, and run the hadoop jar command on your Hadoop cluster. Voila! A whole lot of things done on any amount of data.&#xA;But, Map Reduce runs with its default set of configurations, and these defaults may not fit your particular case. When it comes to dealing with big data over a distributed environment, we need some tweaks every now and then.&lt;/p&gt;</description>
    </item>
    <item>
      <title>(Tail) Recursion in Functional Programming</title>
      <link>https://amitashukla.in/blog/tail-recursion-in-functional-programming/</link>
      <pubDate>Thu, 09 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/tail-recursion-in-functional-programming/</guid>
      <description>&lt;p&gt;In my previous post &lt;a href=&#34;https://amitashukla.in/blog/why-functional-programming.html&#34;&gt;Going The Functional Way&lt;/a&gt;, I discussed the reasons for venturing into functional programming. Taking my explorations further, I soon realised a truth: Functional Programming relies heavily on Recursion.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;rec.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Consider a simple task: Write a function to calculate the factorial of a given number &amp;rsquo;n&amp;rsquo;.&#xA;Let&amp;rsquo;s attempt it with Java.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;factorial&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; n){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fact &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; n; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; 0; i&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;) fact &lt;span style=&#34;color:#f92672&#34;&gt;*=&lt;/span&gt; i;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; fact;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Attempting the same with Scala:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perplexed in the world of Science...</title>
      <link>https://amitashukla.in/blog/perplexed-in-world-of-science/</link>
      <pubDate>Sun, 26 Feb 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/perplexed-in-world-of-science/</guid>
      <description>&lt;p&gt;After a long break, it was time to go through my YouTube Subscriptions, and dive in the world of Science. Science has never stopped to amaze me, and so happened when I was going through this channel - &lt;a href=&#34;https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q&#34;&gt;Kurzgesagt (In a Nutshell)&lt;/a&gt;. After watching each video, I got mixed feelings, of amazement, confusion, sadness, and hope. Giving you a list of some of them so you get the taste!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;There is our Earth, then the Solar System, the Milky Way, The Local Group, and Laniakea Supercluster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Going the Functional Way</title>
      <link>https://amitashukla.in/blog/why-functional-programming/</link>
      <pubDate>Tue, 07 Feb 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/why-functional-programming/</guid>
      <description>&lt;p&gt;2016 ended with me struggling to solve Scala assignments on Coursera. It was a mind-twisting experience, as I was accustomed to writing Java code. My &lt;a href=&#34;https://github.com/amita-shukla/functional-programming&#34;&gt;first assignment&lt;/a&gt; was on the topic Recursion, was a set of three problems, printing the Pascal&amp;rsquo;s Triangle, checking balanced parenthesis, and change given the money. I had practised all these problems, but in Java. Doing these problems in functional programming was baffling, as it has an entirely different approach to solving problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing ORC files using Map Reduce</title>
      <link>https://amitashukla.in/blog/writing-orc-files-using-map-reduce/</link>
      <pubDate>Wed, 04 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/writing-orc-files-using-map-reduce/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s talk about text files first. Storing data as text files is the simplest thing to do. But there are many, many other requirements that just cannot be fulfilled by that. Dealing with text data comes with its challenges&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;hey-why-dont-you-text-me&#34;&gt;Hey, why don&amp;rsquo;t you text me?&lt;/h3&gt;&#xA;&lt;h4 id=&#34;delimiters&#34;&gt;Delimiters.&lt;/h4&gt;&#xA;&lt;p&gt;The delimiters give a hard time. When you have huge data to handle (we are talking about Big Data here), storing them as text files means we need to define a character that separates the data into columns and rows. But what if this special character is a part of the data itself? So, if you think that ^ is a character that is highly unlikely to occur in the data, you will most probably encounter it in the next batch! You do need data munging to make sure the data doesn&amp;rsquo;t get messed up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shell In A Nutshell</title>
      <link>https://amitashukla.in/blog/shell-in-nutshell/</link>
      <pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/shell-in-nutshell/</guid>
      <description>&lt;p&gt;It looks like I am getting quite proverbial these days. For those who didn&amp;rsquo;t understand, I was talking about the title. I am working on automation of my project in office, and it involved a lot of SHELL scripting. Oh yes, you got it now. Please don&amp;rsquo;t kill me.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;m1rI9.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Back a few years I took up shell scripting in college, did some of it and then forgot it. I still have those programs somewhere in my backup drive, with a few loops and a few commands like echoing date, your name, etc. I made another modification that the script asked for your name and then echo,&lt;code&gt;\&amp;quot;Hi &amp;lt;your name&amp;gt; ! Nice to meet you! \&amp;quot;&lt;/code&gt; . Then I got bored, as studying the syntax without any actual purpose did not interest me. But that knowledge definitely helped me understanding how Linux commands work and how I can play around with them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inevitable Vi</title>
      <link>https://amitashukla.in/blog/inevitable-vi/</link>
      <pubDate>Mon, 05 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/inevitable-vi/</guid>
      <description>&lt;p&gt;Ok I confess, I had heard like a hundred times that you just can&amp;rsquo;t escape Vi, the powerful text editor of all times. But even when I had worked on Ubuntu or to say, Linux machine for a while, I never felt that dire need to work on Vi. Oh common, you have GEdit! Or Nano &amp;ndash; I had used it a number of times. And then, of course, I knew a few commands (I know only some even now), and my favourite was &lt;code&gt;:q!&lt;/code&gt; , just in case I accidently get to use Vi.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Read Hive metadata using HCatalog</title>
      <link>https://amitashukla.in/blog/read-hive-metadata-using-hcaltalog/</link>
      <pubDate>Wed, 23 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/read-hive-metadata-using-hcaltalog/</guid>
      <description>&lt;p&gt;Apache Hive is a client side library that is used to provide an abstraction of the data in HDFS, in the form of tables. Hive jobs are internally converted to MR plan, submitted to Hadoop cluster for execution. Now let&amp;rsquo;s move on to know what is the Hive metastore.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-metastore&#34;&gt;The Metastore&lt;/h3&gt;&#xA;&lt;p&gt;The Hive table definitions and mappings are stored in what is called the Hive Metastore. The metastore is nothing but two of its components :&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hadoop 1.0 Architecture</title>
      <link>https://amitashukla.in/blog/hadoop-10-architecture/</link>
      <pubDate>Sat, 06 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/hadoop-10-architecture/</guid>
      <description>&lt;h3 id=&#34;what-is-hadoop&#34;&gt;What is Hadoop?&lt;/h3&gt;&#xA;&lt;p&gt;Hadoop is an open source framework by Apache Foundation for handling the storage, processing of large datasets.&lt;/p&gt;&#xA;&lt;p&gt;Hadoop 1 provides with two components, a distributed storage (HDFS) and distributed computation engine (Map Reduce). These components run their own daemons.&lt;/p&gt;&#xA;&lt;h3 id=&#34;hdfs-hadoop-distributed-file-system&#34;&gt;HDFS (Hadoop Distributed File System)&lt;/h3&gt;&#xA;&lt;p&gt;The Hadoop Distributed File System is designed to provide fault tolerant and scalable storage deployed on commodity hardware. By commodity hardware, we mean that it is based on low-cost hardware. It provides high throughput access to large datasets. It has a master-slave architecture, comprising of master and slave nodes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Decomposition Rules In Databases</title>
      <link>https://amitashukla.in/blog/decomposition-rules-in-databases-lossless-and-dependency-preservation/</link>
      <pubDate>Sat, 09 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/decomposition-rules-in-databases-lossless-and-dependency-preservation/</guid>
      <description>&lt;p&gt;In my previous posts, we discussed the &lt;a href=&#34;http://shuklaamita.blogspot.com/2016/06/relational-database-functional-dependencies-canonical-cover-keys.html&#34;&gt;terms used in database design&lt;/a&gt;, and the &lt;a href=&#34;http://shuklaamita.blogspot.com/2016/07/normalization-in-databases.html&#34;&gt;principles used to design relational databases&lt;/a&gt;. We discussed as to how Normal Forms can be used to determine whether or not to decompose a database, and how to decompose it.&lt;/p&gt;&#xA;&lt;p&gt;We need to be very careful while decomposing a database. Any improper decomposition may lead to errors in database design.&lt;/p&gt;&#xA;&lt;p&gt;To check if a decomposition is proper, we need to satisfy the following properties:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Normalization in Databases</title>
      <link>https://amitashukla.in/blog/normalization-in-databases/</link>
      <pubDate>Sat, 02 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/normalization-in-databases/</guid>
      <description>&lt;p&gt;In my previous &lt;a href=&#34;http://shuklaamita.blogspot.in/2016/06/relational-database-functional-dependencies-canonical-cover-keys.html&#34;&gt;post&lt;/a&gt;, we discussed Relational Database Design. To store data effectively, we must ensure that the data is non-redundant. This reduces conflicts. But how to design such a database that the conflicts are reduced? The answer lies in Normalization.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;&#34;&gt;&lt;/a&gt;&#xA;A database designed keeping in mind normalization techniques leads to a more robust design and avoid the problems that can crop up later. This design is viewed in terms of Functional Dependencies, that we studied in the previous post.&#xA;Remember that a relation containing only 2 attributes is always normalized.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Relational Database Design</title>
      <link>https://amitashukla.in/blog/relational-database-functional-dependencies-canonical-cover-keys/</link>
      <pubDate>Sat, 25 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/relational-database-functional-dependencies-canonical-cover-keys/</guid>
      <description>&lt;p&gt;Database systems are used to manage large bodies of information. For an enterprise, database management is crucial, for purposes such as sales, accounting, manufacturing, banking etc. Almost every institution in today&amp;rsquo;s world needs to maintain a database.&lt;/p&gt;&#xA;&lt;h3 id=&#34;relational-database&#34;&gt;Relational Database&lt;/h3&gt;&#xA;&lt;p&gt;Relational Databases became dominant for commercial applications. Other types of database models that exist are Network, Object, Hierarchical systems. In a relational database, the data is organized in the form of tables (or relations ). These tables are organized into rows and columns. This model is named so because of its underlying theme, it stores &lt;strong&gt;inter-related&lt;/strong&gt; data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JAVA API for recording changes in a directory</title>
      <link>https://amitashukla.in/blog/java-watch-service-api-file-change-notification/</link>
      <pubDate>Sun, 19 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/java-watch-service-api-file-change-notification/</guid>
      <description>&lt;p&gt;While I was making my &lt;a href=&#34;https://github.com/amita-shukla/file-scanner&#34;&gt;File Scanner Project&lt;/a&gt;, the most initial task was to set a watch over given property files. If any change occurred in any of the properties files, it had to be reported.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;JAVA_watch_service_api.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;You may have seen this functionality in the form of &amp;lsquo;file change notification&amp;rsquo;. Suppose you are writing a program, and the file is modified by some other program. You then see a notification saying to load the changes.&#xA;Another time it may happen that you are working on a project with several files and any change in a file in the same project prompts a notification that a file is changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I resized the post image of blog posts</title>
      <link>https://amitashukla.in/blog/change-auto-resize-blogger/</link>
      <pubDate>Sun, 12 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/change-auto-resize-blogger/</guid>
      <description>&lt;p&gt;Maintaining a blog is a real problem. And when using a custom template, it gets really difficult to even make a single change, as it may reflect somewhere else, if any careless action is made.&lt;/p&gt;&#xA;&lt;p&gt;Out of the one change, a major (though it seemed trivial) problem that I faced was to change the default size of the pictures in the posts. Previously, the default behaviour of this blog post was to resize the picture on the home page to the post area.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Programming : Rod Cutting Problem</title>
      <link>https://amitashukla.in/blog/dynamic-programming-rod-cutting-problem/</link>
      <pubDate>Sun, 05 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/dynamic-programming-rod-cutting-problem/</guid>
      <description>&lt;p&gt;One of the most popular problem based on Dynamic Programming is Rod Cutting.&lt;/p&gt;&#xA;&lt;h3 id=&#34;problem-statement&#34;&gt;Problem Statement&lt;/h3&gt;&#xA;&lt;p&gt;Given a rod of n inches and a table of prices, determine the maximum revenue that can be obtained by cutting up the rod and selling the pieces.&lt;/p&gt;&#xA;&lt;p&gt;For example, let the prices be as:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;strong&gt;Length&lt;/strong&gt;&lt;/th&gt;&#xA;          &lt;th&gt;1&lt;/th&gt;&#xA;          &lt;th&gt;2&lt;/th&gt;&#xA;          &lt;th&gt;3&lt;/th&gt;&#xA;          &lt;th&gt;4&lt;/th&gt;&#xA;          &lt;th&gt;5&lt;/th&gt;&#xA;          &lt;th&gt;6&lt;/th&gt;&#xA;          &lt;th&gt;7&lt;/th&gt;&#xA;          &lt;th&gt;8&lt;/th&gt;&#xA;          &lt;th&gt;9&lt;/th&gt;&#xA;          &lt;th&gt;10&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;9&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;17&lt;/td&gt;&#xA;          &lt;td&gt;17&lt;/td&gt;&#xA;          &lt;td&gt;20&lt;/td&gt;&#xA;          &lt;td&gt;24&lt;/td&gt;&#xA;          &lt;td&gt;30&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For further details of the problem, have a look in the CLRS book.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Programming</title>
      <link>https://amitashukla.in/blog/dynamic-programming-introduction/</link>
      <pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/dynamic-programming-introduction/</guid>
      <description>&lt;p&gt;Aah! Its been a long time since I last updated. Sorry my dear readers about that. College has ended, and that brought with it a lot many hassles to deal with.&lt;/p&gt;&#xA;&lt;p&gt;Now back to my home, I thought of writing my notes in this post. And what could be a better topic than Dynamic programming! So lets get started, the Cormen way.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-is-dynamic-programming&#34;&gt;What is Dynamic Programming?&lt;/h3&gt;&#xA;&lt;p&gt;Dynamic programming deals with optimization problems. This implies that this technique was developed to minimize the time, or space, or both of a problem, which, had it been solved in usual way could consume a lot of time/space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ted Talk By Linus Torvalds!</title>
      <link>https://amitashukla.in/blog/ted-talk-by-linus-torvalds/</link>
      <pubDate>Mon, 02 May 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/ted-talk-by-linus-torvalds/</guid>
      <description>&lt;p&gt;Was just browsing some videos on the Ted website that I came across the interview of Linus Torvlads. It is so interesting to have a peek into the lives of people who change the world. How he lead to transform lives of people, with softwares he made but did not went on to commercialize them.&lt;/p&gt;&#xA;&lt;p&gt;And yes, the Linux World Headquarters view is quite amusing! :D&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=o8NPllzkFhE&amp;amp;pp=ygUadGVkIHRhbGsgYnkgbGludXMgdG9ydmFsZHM%3D&#34;&gt;https://www.youtube.com/watch?v=o8NPllzkFhE&amp;amp;pp=ygUadGVkIHRhbGsgYnkgbGludXMgdG9ydmFsZHM%3D&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to set up Git Repository</title>
      <link>https://amitashukla.in/blog/how-to-set-up-git-repository/</link>
      <pubDate>Thu, 28 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/how-to-set-up-git-repository/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;Github.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Its been a while I have been working with git and Github. But I almost forgot how confused I got at the the starting! I could understand all the theory and command, but how to start? This was a big question back then.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I would like to discuss about as to how you can set up your git repository and get going.&#xA;Its simple, you can merge any of your coding activities with git, enjoy a better control over your code and save yourself if anything gets messed up!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cell Arrays in MATLAB</title>
      <link>https://amitashukla.in/blog/cell-arrays-in-matlab/</link>
      <pubDate>Fri, 22 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/cell-arrays-in-matlab/</guid>
      <description>&lt;p&gt;As I dig deeper and deeper into the MATLAB world, I learn new concepts everyday. I must say, MATLAB is very flexible. After working on languages like JAVA and C for long, working on MATLAB has given me a new sense of freedom : I have got rid of the braces ! I am so habitual of defining scope in the form of curly braces {} , that I tend to use them in MATLAB without realizing it to the point of compilation error.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clear all, close all and clc in MATLAB</title>
      <link>https://amitashukla.in/blog/clear-all-close-all-and-clc-in-matlab/</link>
      <pubDate>Wed, 13 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/clear-all-close-all-and-clc-in-matlab/</guid>
      <description>&lt;p&gt;I was studying some machine learning projects I glanced over the following startup lines:&lt;/p&gt;&#xA;&lt;p&gt;clc;&lt;/p&gt;&#xA;&lt;p&gt;close all;&lt;/p&gt;&#xA;&lt;p&gt;clear;&lt;/p&gt;&#xA;&lt;p&gt;I myself have used these commands several times assuming that they clear the workspace, and the command window. But what actually happens?&lt;/p&gt;&#xA;&lt;h4 id=&#34;clc&#34;&gt;clc&lt;/h4&gt;&#xA;&lt;p&gt;As the documentation says, the clc command :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;clc clears all input and output from the Command Window display, giving you a &amp;quot;clean screen.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As the screen is cleared, we can still have a look at the commands used by using the up arrow key.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multiple Inheritance and Mixins</title>
      <link>https://amitashukla.in/blog/multiple-inheritance-mixins/</link>
      <pubDate>Thu, 25 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/multiple-inheritance-mixins/</guid>
      <description>&lt;p&gt;This post discusses about the issues related to multiple inheritance and where it can be useful.&#xA;As the concept goes, we call it multiple inheritance when a class inherits characteristics from more than one parent class.&#xA;Inheritance is a powerful tool in object oriented programming but it should be used with caution. Languages such as Java, C# avoid multiple inheritance (though we can implement multiple interfaces) due to the potential problems it can cause.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How is Authentication different from Authorization?</title>
      <link>https://amitashukla.in/blog/authentication-different-from-authorization/</link>
      <pubDate>Sun, 21 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/authentication-different-from-authorization/</guid>
      <description>&lt;p&gt;We all hear the words &amp;lsquo;authentication&amp;rsquo; and &amp;lsquo;authorization&amp;rsquo; frequently. However, many a times these words are used interchangeably. This post discusses the difference between the two.&lt;/p&gt;&#xA;&lt;h3 id=&#34;authentication&#34;&gt;Authentication&lt;/h3&gt;&#xA;&lt;p&gt;Authentication means verifying the identity of the user. The process of logging in somewhere using your username and password is called Authentication. The user name, and the password are checked against an entry in the database and the user is verified. It is then the user is allowed to enter into his login space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scope Rules In C</title>
      <link>https://amitashukla.in/blog/scope-rules-facts-c/</link>
      <pubDate>Wed, 10 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/scope-rules-facts-c/</guid>
      <description>&lt;p&gt;Variables to programming is the same as words to a language. These are probably the first thing that we start to deal with as soon as we start making programs. But as we go on more and more, we get to face an issue:&#xA;&amp;quot;To what parts of the program is this variable accessible?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Even if we get the answer to the above question, we may not be satisfied.&#xA;What if I want this variable to be accessible to only a few functions of the file?&#xA;What if I want this variable to be accessible outside this file as well?&#xA;What if I want this variable to never change?&#xA;What if I want this variable to be accessed faster?&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I implemented my own Session Mechanism in my project Mail Aggregator</title>
      <link>https://amitashukla.in/blog/implement-own-session-mechanism-java/</link>
      <pubDate>Wed, 03 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/implement-own-session-mechanism-java/</guid>
      <description>&lt;p&gt;While working on my project &lt;a href=&#34;https://github.com/amita-shukla/mail-aggregator/tree/master/src&#34;&gt;Mail Aggregator&lt;/a&gt;, I went on to implement my own session mechanism, which I share in this post.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-is-a-session&#34;&gt;What is a Session?&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&#34;&gt;Http&lt;/a&gt; is a stateless protocol, i.e. it does not remember you the instant you move on to another page.&lt;/p&gt;&#xA;&lt;p&gt;But this poses a problem. Some information needs to be present throughout some or all the pages of a website. For example, the user information. You usually see a message similar &amp;quot;Welcome! Your name&amp;quot; on the top of every page of the website in which you are logged in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to enable clicks on Carousel</title>
      <link>https://amitashukla.in/blog/how-to-enable-clicks-on-carousel/</link>
      <pubDate>Sun, 24 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/how-to-enable-clicks-on-carousel/</guid>
      <description>&lt;p&gt;Yesterday as I was editing my &lt;a href=&#34;http://amita-shukla.github.io/&#34;&gt;Portfolio&lt;/a&gt; which has the carousel functionality, I encountered a peculiar functionality. None of the left clicks on the link worked. However, the links opened on pressing the right click and clicking &amp;quot;open in new tab&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;After a little search, I got the answer at the the life saver &lt;a href=&#34;http://stackoverflow.com/a/23812607/3858467&#34;&gt;Stack Overflow&lt;/a&gt;. It explains that the Carousel API prevents the default functionality of any click using &lt;code&gt;e.preventDefault()&lt;/code&gt;. Hence, none of the clicks are going to work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitwise Operators Cheat Sheet: Little Programming Tricks using Bit Operations</title>
      <link>https://amitashukla.in/blog/bitwise-operators-cheat-sheet/</link>
      <pubDate>Thu, 21 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/bitwise-operators-cheat-sheet/</guid>
      <description>&lt;p&gt;Here is the list that I use when dealing with bit-wise operations.&#xA;Bit-wise operations are considered to be slightly faster than corresponding multiplication/division operations.&#xA;Also, Bit-wise operations make the code cleaner at a few places, such as, when we have to check if a number is even or odd.&lt;/p&gt;&#xA;&lt;p&gt;However, my personal opinion is to code in such a way that it easily showcases your intent. So, one should not use bit-wise operators deliberately as it can make the code a bit vague at some places.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Host Images on the Web conveniently</title>
      <link>https://amitashukla.in/blog/how-to-host-images-on-web-conveniently/</link>
      <pubDate>Sat, 16 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/how-to-host-images-on-web-conveniently/</guid>
      <description>&lt;p&gt;In this post we talk about how to host images on the web so that it can be viewed by everybody.&lt;/p&gt;&#xA;&lt;p&gt;As I was developing my blog, I had to post my photograph for the &amp;lsquo;About Me&amp;rsquo; section.&lt;/p&gt;&#xA;&lt;p&gt;I went on to write my content as:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;textwidget\&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;240\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;margin-bottom:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;10px&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;;\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;240\&amp;#34;&lt;/span&gt; /&amp;gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Hello I am &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;strong&lt;/span&gt;&amp;gt;Amita Shukla&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;strong&lt;/span&gt;&amp;gt;...blah blah blah... This blog is a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; place where I want to share all the things that I learn every now and then.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; blah blah blah...&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;center&lt;/span&gt;&amp;gt; &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;center&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The main problem here was the attribute &amp;lsquo;&lt;strong&gt;src&lt;/strong&gt;&amp;rsquo;. For displaying the image, I needed it to host somewhere on the web, so that I can provide the link here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Made Google Chrome &#39;My Chrome&#39;</title>
      <link>https://amitashukla.in/blog/how-i-made-google-chrome-my-chrome/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/how-i-made-google-chrome-my-chrome/</guid>
      <description>&lt;p&gt;I have been using Google Chrome since many years and I have not found a single reason to choose any other browser over it!&lt;/p&gt;&#xA;&lt;p&gt;Currently, I am working on not Google Chrome but Chromium, open source web browser project from which the Google Chrome draws its source code.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;DncJWGy.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not a fuss about it, that&amp;rsquo;s what you get when you search the Ubuntu Software Center. And I discovered what I was using quite later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s plant a tree!</title>
      <link>https://amitashukla.in/blog/lets-plant-tree/</link>
      <pubDate>Mon, 04 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/lets-plant-tree/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;1ff9c42b-52ba-429d-aaaf-f0c06bc1e894.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Trees seem like an interesting topic but scared to start? Lets start by learning the basics of trees and move on to play with them! Like the trees&amp;rsquo; structure in relevance to computer science, we need to start from the root.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-binary-tree&#34;&gt;What is a Binary Tree?&lt;/h2&gt;&#xA;&lt;p&gt;If you have not read about trees before, this will blow your mind. A recursive definition for trees.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is either empty, or consists of a root node which has its left and right trees, both of which are binary trees.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solve the N queen&#39;s problem using backtracking</title>
      <link>https://amitashukla.in/blog/solve-n-queens-problem-using/</link>
      <pubDate>Thu, 31 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/solve-n-queens-problem-using/</guid>
      <description>&lt;h3 id=&#34;problem-statement&#34;&gt;Problem Statement:&lt;/h3&gt;&#xA;&lt;p&gt;Given a NxN chess board, find a way to place N queens in such a way that no queen is in danger from another.&lt;/p&gt;&#xA;&lt;p&gt;A queen is said to be in danger from another when both the queens share the same row, column or diagonal.&lt;/p&gt;&#xA;&lt;p&gt;One of the solutions to the 4-Queen&amp;rsquo;s Puzzle is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;NQueen.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Solutions to this problem exist for all natural numbers N, with N=2 and N=3 as exception.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Find all possible subsets of a given set</title>
      <link>https://amitashukla.in/blog/find-all-possible-subsets-of-given-set/</link>
      <pubDate>Fri, 25 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/find-all-possible-subsets-of-given-set/</guid>
      <description>&lt;p&gt;The problem is: Given a set of distinct integers, S, return all possible subsets.&lt;/p&gt;&#xA;&lt;p&gt;Elements in a subset must be in non-descending order.&lt;/p&gt;&#xA;&lt;p&gt;The solution set must not contain duplicate subsets.&lt;/p&gt;&#xA;&lt;p&gt;Also, the subsets should be sorted in lexicographic order.&lt;/p&gt;&#xA;&lt;p&gt;For example: For the set &lt;code&gt;[1,2,3]&lt;/code&gt;,&lt;/p&gt;&#xA;&lt;p&gt;The solution would be:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[&#xA;[],&#xA;[1],&#xA;[1, 2],&#xA;[1, 2, 3],&#xA;[1, 3],&#xA;[2],&#xA;[2, 3],&#xA;[3],&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This problem can be approached by visualizing a tree:&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;C&#39;ing again! - Use of double pointer in Linked List Insertion</title>
      <link>https://amitashukla.in/blog/cing-again-use-of-double-pointer-in/</link>
      <pubDate>Tue, 22 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/cing-again-use-of-double-pointer-in/</guid>
      <description>&lt;p&gt;As I was checking out some programming questions on the topic linked list, it was boring to just read the programs without implementing them.&#xA;So, I decided to try out linked list again, trying to devise out some more efficient ways to solve a very simple problem.&#xA;But before playing with the list, I needed to create a list.&lt;/p&gt;&#xA;&lt;p&gt;During the process, I revised an old concept:&#xA;Why do we need to use double pointer whenever we need to change the head pointer?&#xA;The function that I had to write was &lt;code&gt;insbgn()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reinvent the wheel?</title>
      <link>https://amitashukla.in/blog/lets-innovate-we-all-seem-overwhelmed_19/</link>
      <pubDate>Sat, 19 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://amitashukla.in/blog/lets-innovate-we-all-seem-overwhelmed_19/</guid>
      <description>&lt;h2&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We all seem overwhelmed by the technology that has cloistered us. It is easy to get dazzled by large screen TVs, drones, cameras, watches, and our handy smartphones too. With new technologies releasing almost every day, a thought that flashes in my mind if this is what we can call the pinnacle of technology, and the second moment it is followed by disagreement to it. There is a lot yet to happen, and ‘true innovation’ is yet to come. So what is this ‘true innovation’ that I am talking about? Are we not innovating? Well, obviously, we are, as we trace updates to technology every now and then.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
