<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Inverted Tree</title>
    <link>https://inverted-tree.pages.dev/</link>
    <description>Recent content on Inverted Tree</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 31 May 2026 22:16:16 +0530</lastBuildDate>
    <atom:link href="https://inverted-tree.pages.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About</title>
      <link>https://inverted-tree.pages.dev/about/</link>
      <pubDate>Sat, 30 May 2026 16:08:12 +0530</pubDate>
      <guid>https://inverted-tree.pages.dev/about/</guid>
      <description>&lt;p&gt;Hi there. My name is Navdeep and I&amp;rsquo;m an engineering graduate and early stage engineer from India.&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Get in touch&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using django channels to build real time applications</title>
      <link>https://inverted-tree.pages.dev/posts/using-django-channels-to-build-real-time-applications/</link>
      <pubDate>Tue, 15 Apr 2025 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/using-django-channels-to-build-real-time-applications/</guid>
      <description>&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#main-concepts&#34;&gt;Main Concepts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#asgi&#34;&gt;asgi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#websockets&#34;&gt;Websockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#channel&#34;&gt;Channel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#implementation&#34;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#chat&#34;&gt;Chat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing&#34;&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#final-thoughts&#34;&gt;Final Thoughts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tutorial is for django developers who are comfortable with the primitives and want to build real time applications using django + channels. We&amp;rsquo;ll be building a minimal intercom clone(backend only) to simulate chat support provided to client websites who embed our widget for website visitors as illustrated&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Schematic of channels-chat&#34; loading=&#34;lazy&#34; src=&#34;https://pub-610e38254acb47cea52a77d9d4b58499.r2.dev/blog/d4e16965-18.webp&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Real time systems differ from traditional systems by the constraint of response time - typically they need to respond to changes in state immediately or within a guaranteed time frame, often dictated by the system&amp;rsquo;s operation requirements. Unlike traditional request-response systems, real time systems prioritise timely and predictable execution, often at the expense of throughput or flexibility. For ex in a ticket booking website like Ticketmaster, the typical request-response flow comprises of fetching all the available tickets for the user&amp;rsquo;s search criteria, booking them etc, all of which can tolerate brief delays. Contrast it with a real time system like a trading app where trades have to be executed immediately as soon as a request is made and execution time is a governing factor in the quality and success of this service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lessons from late founding a tech debt ridden online startup</title>
      <link>https://inverted-tree.pages.dev/posts/lessons-from-founding-tech-debt-ridden-startup/</link>
      <pubDate>Mon, 07 Apr 2025 15:25:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/lessons-from-founding-tech-debt-ridden-startup/</guid>
      <description>&lt;p&gt;Note: This post was not reviewed/edited/written by any LLM/&amp;ldquo;AI&amp;rdquo;.&lt;/p&gt;
&lt;h3 id=&#34;prelude&#34;&gt;Prelude&lt;/h3&gt;
&lt;p&gt;Prior to joining Widgetic I was a Java/Android developer turned Node.js / backend developer, had worked at a Swiss cryptocurrency startup as a backend/desktop developer, and had built more than a few MVPs in the years prior(mobile apps, electron apps etc but not a full stack application). At this point I was relatively inexperienced with web technologies and wanted to work at a product company to understand how these skills/eager learning attitude translated into the real world, especially in the challenging world of business/startups. I coveted more learning and responsibility, so when an opportunity came along to work at Widgetic, I was more than happy jump on it!&lt;/p&gt;</description>
    </item>
    <item>
      <title>An adequate neovim config</title>
      <link>https://inverted-tree.pages.dev/posts/an-adequate-neovim-config/</link>
      <pubDate>Wed, 12 Feb 2025 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/an-adequate-neovim-config/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;nvim_perennial&#34; loading=&#34;lazy&#34; src=&#34;https://pub-610e38254acb47cea52a77d9d4b58499.r2.dev/blog/a111564c-nvim_perennial.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: Neovim has come a long way from an experimental vim fork that it was at inception and is veritably, in my opinion, the hotbed for open source editor innovation currently. However customising it can feel daunting especially since things are changing rapidly.&lt;/p&gt;
&lt;p&gt;Having lived through &lt;a href=&#34;https://en.wikipedia.org/wiki/Editor_war&#34;&gt;vi vs emacs&lt;/a&gt; I was a full on emacs person jumping through my ocaml code with the venerable &lt;a href=&#34;https://github.com/ocaml/tuareg&#34;&gt;tuareg mode&lt;/a&gt; which is loved and maintained to this day. At that time, vim support for ocaml didn&amp;rsquo;t exist, thus emacs came out on top for me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resolve merge conflicts like a pro with neovim</title>
      <link>https://inverted-tree.pages.dev/posts/resolve-merge-conflicts-like-a-pro-with-neovim/</link>
      <pubDate>Sun, 09 Feb 2025 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/resolve-merge-conflicts-like-a-pro-with-neovim/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;diffview&#34; loading=&#34;lazy&#34; src=&#34;https://pub-610e38254acb47cea52a77d9d4b58499.r2.dev/blog/312b56e5-diffview.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;(screenshot taken from diffview.nvim repository)&lt;/p&gt;
&lt;p&gt;Over the years, I&amp;rsquo;ve gone through so many merge tools - kdiff3, meld, beyond compare, Kaleidoscope. Nvim being my editor of choice, fortunately, has a rich ecosystem of plugins where I can set up an uber merge workflow using &lt;code&gt;diffview.nvim&lt;/code&gt; and avoid using external tools altogether.&lt;/p&gt;
&lt;h5 id=&#34;getting-started&#34;&gt;Getting started&lt;/h5&gt;
&lt;p&gt;Make sure you have the latest nvim installed (I have v0.10.4). Although I use &lt;a href=&#34;https://lazyvim.org&#34;&gt;lazyvim&lt;/a&gt; as the base to provide the basic (and some advanced) editor features, I have to set recourse to &lt;em&gt;diffview.nvim&lt;/em&gt; to ease my merging process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning haskell and yaml by building a yaml parser</title>
      <link>https://inverted-tree.pages.dev/posts/learning-haskell-and-yaml-by-building-a-yaml-parser/</link>
      <pubDate>Mon, 07 Oct 2024 06:50:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/learning-haskell-and-yaml-by-building-a-yaml-parser/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been learning haskell for some time now and it has been amazing grappling with pure functional programming concepts. Although it&amp;rsquo;s not for everyone, I believe its potential is too much in terms purity.&lt;/p&gt;
&lt;p&gt;The best way for me to learn anything is to just build something and i&amp;rsquo;m quite infatuated with yaml right now, so I suppose i&amp;rsquo;ll build a very basic yaml parser to learn about parsing concepts and how haskell helps with its functional prowess. Since the markup language has just data and no instructions, it&amp;rsquo;s suited for a recursive data definition which Haskell excels in, among other things.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Command line tools for the productive web developer</title>
      <link>https://inverted-tree.pages.dev/posts/cli-tools-web-dev/</link>
      <pubDate>Thu, 29 Dec 2022 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/cli-tools-web-dev/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://inverted-tree.com/command-line-tools-to-make-your-life-easier/&#34;&gt;previous post&lt;/a&gt;, I discussed some general purpose command line utilities that help ease your way around the command line. In this post we&amp;rsquo;ll discuss some command line utilities that are indispensable to my web development workflow, and might come in handy for you too :)&lt;/p&gt;
&lt;h4 id=&#34;pgclimycli&#34;&gt;pgcli/mycli&lt;/h4&gt;
&lt;p&gt;All web apps depend on a database of some kind. Thus, communicating with a database is one of the most common tasks a web developer has to perform. Although MySQL and PostgreSQL come bundled with their own CLI tools, there are options like pgcli/mycli which provide more powerful interfaces to the same databases, with features like auto completion, command history, syntax highlighting and many more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speeding up my zsh prompt: Part 2</title>
      <link>https://inverted-tree.pages.dev/posts/speeding-up-my-zsh-prompt-part-2/</link>
      <pubDate>Mon, 26 Sep 2022 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/speeding-up-my-zsh-prompt-part-2/</guid>
      <description>&lt;p&gt;In the previous &lt;a href=&#34;https://inverted-tree.com/speeding-up-my-zsh-prompt-part-1/&#34;&gt;post&lt;/a&gt; I profiled my zsh load to debug the monumental shell load time which is really annoying for me, since I spend all my time in the shell.&lt;/p&gt;
&lt;p&gt;I think I&amp;rsquo;m gonna get rid of &lt;code&gt;compinit&lt;/code&gt; totally and look at the profiling data. Let&amp;rsquo;s dive in&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#  autoload -Uz compinit
#  if [[ -n ${HOME}/.zcompdump(#qN.mh+24) ]]; then
 #  compinit;
#  else
 #  compinit -C;
#  fi;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Launching the profiler now, the results are-&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speeding up my zsh prompt - part 1</title>
      <link>https://inverted-tree.pages.dev/posts/speeding-up-my-zsh-prompt-part-1/</link>
      <pubDate>Mon, 19 Sep 2022 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/speeding-up-my-zsh-prompt-part-1/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a big fan of the &lt;code&gt;z shell&lt;/code&gt;. I use it with the &lt;a href=&#34;https://github.com/spaceship-prompt/spaceship-prompt&#34;&gt;spaceship prompt&lt;/a&gt; and &lt;a href=&#34;https://github.com/zplug/zplug&#34;&gt;zplug&lt;/a&gt; for plugin management.&lt;/p&gt;
&lt;p&gt;Right now, it takes an uncomfortable amount of time to load up the prompt on terminal emulator launch, which is annoying for me since I like everything to be snappy, at least on the command line.&lt;/p&gt;
&lt;h4 id=&#34;overview-of-my-zshrc&#34;&gt;Overview of my zshrc&lt;/h4&gt;
&lt;p&gt;It&amp;rsquo;s pretty basic, boasts of a &lt;code&gt;zplug&lt;/code&gt; installation for plugin management and some attendant plugins.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Command line tools to make your life easier</title>
      <link>https://inverted-tree.pages.dev/posts/command-line-tools-to-make-your-life-easier/</link>
      <pubDate>Tue, 05 Mar 2019 18:30:00 +0000</pubDate>
      <guid>https://inverted-tree.pages.dev/posts/command-line-tools-to-make-your-life-easier/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re like me, you spend most of your time in the command line, where saving even a few keystrokes can help you become significantly more productive (and happier :). Here are some tools that I&amp;rsquo;ve found to be incredibly helpful and have augmented my love for the command line through their sheer awesomeness&lt;/p&gt;
&lt;h4 id=&#34;bat&#34;&gt;Bat&lt;/h4&gt;
&lt;p&gt;Bat is a successor to the unix &lt;code&gt;cat&lt;/code&gt; command that boasts many superpowers, like preview with a pager, syntax highlighting, and even git changes. It supports most of the programming languages out of the box. You could just alias &lt;code&gt;cat&lt;/code&gt; to point to &lt;code&gt;bat&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
