<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Saket Kumar Mall</title><link>https://saket0187.github.io/</link><description>Recent content on Saket Kumar Mall</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 03 Sep 2026 00:00:00 +0530</lastBuildDate><atom:link href="https://saket0187.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Adding Spatio-Temporal Dataset Support in Data Catalog</title><link>https://saket0187.github.io/projects/grass-stds-datacatalog/</link><pubDate>Tue, 26 May 2026 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/projects/grass-stds-datacatalog/</guid><description>&lt;h2 id="the-problem"&gt;The problem&lt;a class="heading-anchor" href="#the-problem" aria-label="Link to The problem"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;GRASS stores two kinds of thing in two different places. Ordinary maps (rasters,
vectors, 3D rasters) live in the spatial database. &lt;strong&gt;Space-time datasets&lt;/strong&gt;
(STRDS for raster series, STVDS for vector series, STR3DS for 3D raster series)
live in a separate &lt;em&gt;temporal&lt;/em&gt; database, and are managed by the &lt;code&gt;t.*&lt;/code&gt; family of
modules.&lt;/p&gt;</description></item><item><title>Recoup AI Agent</title><link>https://saket0187.github.io/projects/recoup-ai-agent/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/projects/recoup-ai-agent/</guid><description>&lt;p&gt;Subscription businesses lose money in three ways that look different and are
really the same: a card fails, a checkout is abandoned, an invoice goes past due.
Recoup works all three through one loop. It watches for revenue at risk, works
out why each payment failed, prices the cheapest intervention likely to work,
executes it inside hard compliance and stopping rules, and then measures what
that was actually worth.&lt;/p&gt;
&lt;p&gt;There is no language model anywhere in it. Message copy comes from reviewed
templates. The intelligence is in the decision policy and an uplift model, not in
generation, and a given seed replays byte for byte.&lt;/p&gt;</description></item><item><title>ChronoFlow</title><link>https://saket0187.github.io/projects/chronoflow/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/projects/chronoflow/</guid><description>&lt;p&gt;ChronoFlow covers the scheduling side of a team&amp;rsquo;s week: meetings, deadlines,
leave requests, and the approval chain that sits behind all three. I wrote both
halves of it, the Spring Boot service and the browser client, over about two
months in 2025.&lt;/p&gt;
&lt;h2 id="how-it-fits-together"&gt;How it fits together&lt;a class="heading-anchor" href="#how-it-fits-together" aria-label="Link to How it fits together"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The backend exposes a REST API per workflow, each one backed by its own tables
in a MySQL schema I normalized up front. Scheduling data duplicates itself
easily once you allow recurring meetings and shared attendees, and the schema
was the place to stop that happening.&lt;/p&gt;</description></item><item><title>Real-Time YouTube Sentiment Pipeline</title><link>https://saket0187.github.io/projects/youtube-sentiment-pipeline/</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/projects/youtube-sentiment-pipeline/</guid><description>&lt;p&gt;Comment sentiment goes stale fast. A job that runs overnight tells you how an
audience felt yesterday, which is no use if you wanted to catch a reaction
turning while the video was still climbing. So this one streams.&lt;/p&gt;
&lt;h2 id="the-path-a-comment-takes"&gt;The path a comment takes&lt;a class="heading-anchor" href="#the-path-a-comment-takes" aria-label="Link to The path a comment takes"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A Cloud Function pulls comments and drops them onto Pub/Sub, which absorbs the
bursts that arrive whenever a large channel posts. Dataflow reads from there,
classifies each comment, and writes the result out. End to end it stays under a
minute.&lt;/p&gt;</description></item><item><title>ATS Resume Ranking Engine</title><link>https://saket0187.github.io/projects/ats-resume-ranking/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/projects/ats-resume-ranking/</guid><description>&lt;p&gt;Paste in a job description, upload a stack of resumes, get them back in order.
The interesting question is what &amp;ldquo;in order&amp;rdquo; should mean.&lt;/p&gt;
&lt;h2 id="how-it-scores"&gt;How it scores&lt;a class="heading-anchor" href="#how-it-scores" aria-label="Link to How it scores"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Keyword matching answers that question badly. A candidate who writes &amp;ldquo;built
streaming pipelines on GCP&amp;rdquo; scores nothing against a posting that asks for
&amp;ldquo;Dataflow experience&amp;rdquo;, even though they are describing the same work. Term
overlap measures vocabulary, and vocabulary is the thing a good candidate is
least likely to share with whoever wrote the posting.&lt;/p&gt;</description></item><item><title>My GSoC 2026 Journey with GRASS</title><link>https://saket0187.github.io/gsoc-2026/</link><pubDate>Fri, 01 May 2026 00:00:00 +0530</pubDate><guid>https://saket0187.github.io/gsoc-2026/</guid><description>&lt;p&gt;Welcome to my Google Summer of Code 2026 experience blog. I documented my progress here week by week while contributing to &lt;strong&gt;GRASS&lt;/strong&gt; under &lt;strong&gt;NumFOCUS&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="about-the-ecosystem"&gt;About the Ecosystem&lt;a class="heading-anchor" href="#about-the-ecosystem" aria-label="Link to About the Ecosystem"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is GSoC?&lt;/strong&gt; Google Summer of Code is a global program that pairs students with open-source organizations to work for 8-12 weeks on a programming projects, helping students gain real-world experience while improving open-source software.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is GRASS?&lt;/strong&gt; Geographic Resources Analysis Support System (GRASS) is a powerful, free, and open-source Geographic Information System used for geospatial data management, image processing, and spatial modeling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is NumFOCUS?&lt;/strong&gt; NumFOCUS is a non-profit organization that supports open-source scientific computing, providing fiscal, legal, and administrative support to projects like GRASS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="my-project-overview"&gt;My Project Overview&lt;a class="heading-anchor" href="#my-project-overview" aria-label="Link to My Project Overview"&gt;&lt;svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/svg&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; Add Spatio-Temporal Datasets Support to GRASS Data Catalog GUI&lt;/p&gt;</description></item><item><title>About</title><link>https://saket0187.github.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://saket0187.github.io/about/</guid><description>&lt;p&gt;I&amp;rsquo;m a software developer from India. I finished a Bachelor of Computer
Applications at SRM Institute of Science &amp;amp; Technology in June 2026 with a CGPA
of 9.42, and I&amp;rsquo;m now on the Master of Computer Applications there.&lt;/p&gt;
&lt;p&gt;The work I have enjoyed most tends to arrive after a feature already works. On
ChronoFlow that meant tearing up an indexing scheme that looked fine right up
until the schedule views went under load. On the sentiment pipeline it meant
working out what a dashboard should honestly show when a stage is degraded and
the numbers are only half there.&lt;/p&gt;</description></item></channel></rss>