<!DOCTYPE html><html lang="en" class="scroll-smooth"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="sitemap" href="/sitemap-index.xml"><link rel="alternate" type="application/rss+xml" title="Dipankar's build and hack" href="/rss.xml"><title>Dipankar&#39;s build and hack</title><meta name="description" content="Blog by Dipankar Sarkar — AI agents, software architecture, self-hosted infrastructure, and startup lessons from two decades of building."><meta name="author" content="Dipankar Sarkar"><link rel="canonical" href="https://www.desinerd.com/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://www.desinerd.com/"><meta property="og:title" content="Dipankar's build and hack"><meta property="og:description" content="Blog by Dipankar Sarkar — AI agents, software architecture, self-hosted infrastructure, and startup lessons from two decades of building."><meta property="og:site_name" content="Dipankar's build and hack"><meta property="og:locale" content="en_US"><meta property="og:image" content="https://www.desinerd.com/img/og-default.png"><!-- Twitter --><meta name="twitter:card" content="summary"><meta name="twitter:site" content="@dipankarsarkar"><meta name="twitter:creator" content="@dipankarsarkar"><meta name="twitter:title" content="Dipankar's build and hack"><meta name="twitter:description" content="Blog by Dipankar Sarkar — AI agents, software architecture, self-hosted infrastructure, and startup lessons from two decades of building."><meta name="twitter:image" content="https://www.desinerd.com/img/og-default.png"><!-- Article metadata --><!-- Plausible Analytics --><script defer data-domain="desinerd.com" src="https://plausible-app.skelfresearch.uk/js/script.file-downloads.hash.outbound-links.pageview-props.tagged-events.js"></script><script>
      window.plausible = window.plausible || function () {
        (window.plausible.q = window.plausible.q || []).push(arguments);
      };
    </script><!-- Theme initialization (prevent flash) --><script>
      (function () {
        const stored = localStorage.getItem('theme');
        if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
          document.documentElement.classList.add('dark');
        }
      })();
    </script><!-- plausible --><script defer data-domain="www.desinerd.com" src="https://plausible-app.skelfresearch.uk/js/script.js"></script><!-- /plausible --><link rel="stylesheet" href="/_astro/BaseLayout.B9-gKfw_.css"></head> <body class="min-h-screen bg-[var(--color-bg)] text-[var(--color-text)] dark:bg-[var(--color-bg-dark)] dark:text-[var(--color-text-dark)]"> <header class="border-b border-[var(--color-border)] dark:border-[var(--color-border-dark)]"> <nav class="mx-auto flex max-w-4xl items-center justify-between px-4 py-4 sm:px-6"> <a href="/" class="text-lg font-bold tracking-tight text-[var(--color-accent)] dark:text-[var(--color-accent-dark)]">
desinerd
</a> <div class="flex items-center gap-6"> <a href="/" class="text-sm text-[var(--color-muted)] transition-colors hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)]"> Home </a><a href="/writing/" class="text-sm text-[var(--color-muted)] transition-colors hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)]"> Writing </a><a href="/projects/" class="text-sm text-[var(--color-muted)] transition-colors hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)]"> Projects </a><a href="/about/" class="text-sm text-[var(--color-muted)] transition-colors hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)]"> About </a> <a href="/search/" class="text-sm text-[var(--color-muted)] transition-colors hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)]" aria-label="Search"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="11" cy="11" r="8"></circle> <path d="m21 21-4.3-4.3"></path> </svg> </a> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="Z2pgtVq" component-url="/_astro/ThemeToggle.bFQcLvEr.js" component-export="default" renderer-url="/_astro/client.svelte.BuEu-VVE.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;ThemeToggle&quot;,&quot;value&quot;:true}" await-children><!--[--><button class="text-[var(--color-muted)] hover:text-[var(--color-text)] dark:text-[var(--color-muted-dark)] dark:hover:text-[var(--color-text-dark)] transition-colors" aria-label="Toggle dark mode"><!--[-1--><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><!--]--></button><!--]--><!--astro:end--></astro-island> </div> </nav> </header> <main class="mx-auto max-w-4xl px-4 py-8 sm:px-6">  <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Dipankar's build and hack","alternateName":"Desinerd","description":"Blog by Dipankar Sarkar — AI agents, software architecture, self-hosted infrastructure, and startup lessons from two decades of building.","url":"https://www.desinerd.com","inLanguage":"en-US","author":{"@type":"Person","name":"Dipankar Sarkar","url":"https://www.desinerd.com/about/","sameAs":["https://www.dipankar.name","https://www.dipankar.org","https://www.dipankar.cc","https://www.dipankar.co","https://www.linkedin.com/in/dipankarsarkar","https://github.com/dipankar","https://github.com/sarkar-dipankar","https://twitter.com/dipankarsarkar","https://orcid.org/0000-0001-5431-6367","https://scholar.google.com/citations?user=t_ikr2UAAAAJ&hl=en","https://www.crunchbase.com/person/dipankar-sarkar"]},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.desinerd.com/?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script> <section class="mb-12"> <h1 class="text-2xl font-bold sm:text-3xl">Hey, I'm Dipankar.</h1> <p class="mt-3 text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] leading-relaxed max-w-xl">
I build things with software and write about whatever catches my interest &mdash;
      AI agents, self-hosted infrastructure, startup war stories, and the odd deep dive
      into something nobody asked for. Been at it since 2007.
</p> </section> <section> <h2 class="mb-4 text-lg font-semibold">Recent writing</h2> <div class="divide-y divide-[var(--color-border)] dark:divide-[var(--color-border-dark)]"> <article class="group py-4"> <a href="/p/apollo-io-cli-sales-intelligence-meets-terminal/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2026-04-07T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Apr 7, 2026 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Apollo.io CLI: Sales Intelligence Meets the Terminal </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> A Rust CLI that wraps the entire Apollo.io API into 50+ operations you can run from your terminal or pipe into AI agent workflows — with dual human and machine interfaces, JSON everywhere, and stdin streaming. </p> </a> </article><article class="group py-4"> <a href="/p/gdelt-cli-global-news-intelligence-terminal/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2026-03-31T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 31, 2026 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> GDELT CLI: Global News Intelligence From Your Terminal </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> A Rust-based command-line tool that puts the entire GDELT global news monitoring database at your fingertips — with local DuckDB analytics, smart caching, and an MCP server so your AI assistant can read the world&#39;s news too. </p> </a> </article><article class="group py-4"> <a href="/p/mastering-github-actions-arm-servers-comprehensive-guide/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2024-10-21T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Oct 21, 2024 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Mastering GitHub Actions for ARM Servers: A Comprehensive Guide </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> A detailed guide on creating efficient GitHub Actions workflows for ARM servers, covering setup, building, testing, deployment, and optimization techniques for ARM-based CI/CD pipelines. </p> </a> </article><article class="group py-4"> <a href="/p/streamlining-cicd-docker-hub-automated-builds-efficient-deployment/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2024-09-21T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Sep 21, 2024 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Streamlining CI/CD: Leveraging Docker Hub Automated Builds for Efficient Deployment </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Explore how to optimize CI/CD pipelines by offloading Docker image builds to Docker Hub, reducing resource consumption and improving scalability across various deployment platforms. </p> </a> </article><article class="group py-4"> <a href="/p/mastering-file-uploads-cloudflare-r2-python-comprehensive-guide/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2024-08-21T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Aug 21, 2024 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Mastering File Uploads to Cloudflare R2 with Python: A Comprehensive Guide </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Learn how to efficiently upload files to Cloudflare R2 using Python, including setting up the environment, creating a reusable upload function, and integrating with FastAPI. </p> </a> </article><article class="group py-4"> <a href="/p/unseen-opportunity-lesson-open-mindedness-oyo-journey/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2022-06-13T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Jun 13, 2022 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> The Unseen Opportunity: A Lesson in Open-Mindedness from OYO&#39;s Journey </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> A personal reflection on meeting OYO&#39;s founder Ritesh Agarwal and the valuable lessons learned about open-mindedness, business acumen, and recognizing transformative opportunities in the startup world. </p> </a> </article><article class="group py-4"> <a href="/p/kwippy-forgotten-indian-twitter-rival/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2022-06-06T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Jun 6, 2022 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Kwippy: The Forgotten Indian Twitter Rival That Almost Made It Big </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Discover the untold story of Kwippy, India&#39;s homegrown Twitter rival that pioneered innovative features and growth hacks a decade before Koo, competing with Silicon Valley giants from a small room in New Delhi. </p> </a> </article><article class="group py-4"> <a href="/p/migrate-wordpress-multisite-to-single-wordpress-no-code/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2021-01-08T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Jan 8, 2021 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Migrating from WordPress Multisite to Single WordPress: A Simple No-Code Guide </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Learn how to migrate from WordPress Multisite to a single WordPress installation without writing any code or SQL queries. A step-by-step guide for a smooth transition. </p> </a> </article><article class="group py-4"> <a href="/p/troubleshooting-huginn-installation-ubuntu-20-04/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2021-01-03T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Jan 3, 2021 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Troubleshooting Huginn Installation on Ubuntu 20.04: A Developer&#39;s Guide </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Learn how to overcome common installation hurdles when setting up Huginn on Ubuntu 20.04, including resolving runit-related issues for a smooth deployment. </p> </a> </article><article class="group py-4"> <a href="/p/geeksphone-keon-unboxing-firefox-os-review/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-05-24T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> May 24, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Geeksphone Keon: Unboxing and First Impressions of Firefox OS </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> An in-depth unboxing and initial review of the Geeksphone Keon, a developer-focused smartphone running Firefox OS. Explore the hardware, packaging, and early impressions of this open-source mobile platform. </p> </a> </article><article class="group py-4"> <a href="/p/spacex-grasshopper-autonomous-rocket-milestone-flight/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-12T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 12, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> SpaceX&#39;s Grasshopper: Pioneering Autonomous Rocket Technology </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Discover how SpaceX&#39;s autonomous &#39;Grasshopper&#39; rocket is revolutionizing space travel with its milestone flight, and Elon Musk&#39;s vision for the future of space exploration. </p> </a> </article><article class="group py-4"> <a href="/p/ten-crucial-lessons-for-startup-founders/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-12T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 12, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> 10 Crucial Lessons for Startup Founders: What I Wish I Knew Two Years Ago </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Discover ten invaluable insights about being a startup founder, managing a team, and developing products that I&#39;ve learned through experience over the past two years. </p> </a> </article><article class="group py-4"> <a href="/p/reid-hoffman-career-pivot-academia-to-tech-entrepreneurship/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-11T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 11, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Reid Hoffman&#39;s Career Pivot: From Academia to Tech Entrepreneurship </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Discover how LinkedIn&#39;s billionaire founder Reid Hoffman transitioned from aspiring academic to tech industry pioneer, and the valuable lessons his journey offers for career pivots and entrepreneurship. </p> </a> </article><article class="group py-4"> <a href="/p/websocket-protocol-revolutionizing-real-time-web-communication/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-11T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 11, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> WebSocket Protocol: Revolutionizing Real-Time Web Communication </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Dive into RFC 6455 and discover how the WebSocket Protocol is transforming browser-based applications with efficient two-way communication, surpassing traditional HTTP methods. </p> </a> </article><article class="group py-4"> <a href="/p/firefox-os-release-web-centric-mobile-future/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-09T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 9, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Firefox OS: A Visionary Leap Towards a Web-Centric Mobile Future </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Explore the groundbreaking release of Firefox OS, its potential to challenge iOS, and how it aligns with the vision of a web-centric mobile ecosystem. </p> </a> </article><article class="group py-4"> <a href="/p/switching-kaspersky-to-avast-tech-review/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-06T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 6, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Switching from Kaspersky to Avast: A Tech Enthusiast&#39;s Journey </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Discover why I switched from Kaspersky to Avast Free Antivirus, and how this decision improved my system&#39;s performance without compromising security. </p> </a> </article><article class="group py-4"> <a href="/p/airtel-vs-mtnl-bandwidth-battle/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-03-05T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Mar 5, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Airtel vs MTNL: A Tech Enthusiast&#39;s Bandwidth Battle </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> An open-source hacker&#39;s frustrating experience with Airtel&#39;s bandwidth discrepancies and the surprising reliability of MTNL in the NCR region. </p> </a> </article><article class="group py-4"> <a href="/p/mysql-csv-export-windows-compatibility-guide/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2013-01-09T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Jan 9, 2013 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> Solving MySQL CSV Export Issues for Windows: A Developer&#39;s Guide </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Learn how to overcome encoding challenges when exporting MySQL tables to CSV for Windows, ensuring compatibility with various spreadsheet readers. </p> </a> </article><article class="group py-4"> <a href="/p/perception-management-tech-organizations-lessons/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2012-10-10T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Oct 10, 2012 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> The Hidden Power of Perception Management in Tech Organizations </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> Uncover the surprising impact of perception management in tech companies and startups, and learn valuable lessons for navigating complex organizational dynamics. </p> </a> </article><article class="group py-4"> <a href="/p/aliexpress-experiences-global-marketplace-open-source-enthusiast/" class="block"> <div class="flex items-baseline gap-3"> <time datetime="2012-09-02T00:00:00.000Z" class="shrink-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] tabular-nums"> Sep 2, 2012 </time> <h3 class="text-base font-medium group-hover:text-[var(--color-accent)] dark:group-hover:text-[var(--color-accent-dark)] transition-colors"> AliExpress: Navigating the Global Marketplace as an Open Source Enthusiast </h3> </div> <p class="mt-1 ml-0 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)] line-clamp-2 sm:ml-[calc(7rem+0.75rem)]"> An open source hacker&#39;s journey through AliExpress: Exploring the pros and cons of ordering tech parts internationally, with insights on shipping methods and tracking systems. </p> </a> </article> </div> <div class="mt-6"> <a href="/writing/" class="text-sm text-[var(--color-accent)] dark:text-[var(--color-accent-dark)] hover:underline">
All posts &rarr;
</a> </div> </section>  </main> <footer class="border-t border-[var(--color-border)] dark:border-[var(--color-border-dark)] mt-16"> <div class="mx-auto max-w-4xl px-4 py-8 sm:px-6"> <div class="flex flex-col items-center gap-2 text-sm text-[var(--color-muted)] dark:text-[var(--color-muted-dark)]"> <p>&copy; 2007&ndash;2026 Dipankar</p> <p>Writing about the internet</p> <div class="flex gap-4 mt-2"> <a href="https://github.com/dipankar" class="hover:text-[var(--color-text)] dark:hover:text-[var(--color-text-dark)] transition-colors">GitHub</a> <a href="https://twitter.com/dipankarsarkar" class="hover:text-[var(--color-text)] dark:hover:text-[var(--color-text-dark)] transition-colors">Twitter</a> <a href="/rss.xml" class="hover:text-[var(--color-text)] dark:hover:text-[var(--color-text-dark)] transition-colors">RSS</a> </div> </div> </div> </footer> </body></html>