RSSAmplifier

Blog

Prasanth Janardhanan

Recent content on Prasanth Janardhanan

/RSS feed ↗25 posts

Latest posts

Building the First ML Model for Grade 2 Braille — And Why It Took Three Tries

Here’s a scenario that plays out in classrooms every day. A visually impaired student finishes a written exam — on paper, in Braille, the way they’ve been taught. The teacher collects it. And then… stares at it. Because the teacher can’t read Braille. 
 This isn’t some edge case. Most teachers of visually impaired students cannot read Braille. They need a way to…

Why Semantic Search Alone Fails on Legal Text (And How Hybrid Search Fixed It)

I was building a RAG pipeline to classify AI systems under the EU AI Act — feed in a plain-English description of your AI system, get back the risk tier, the relevant articles, and a compliance checklist with citations. Classification was working perfectly. All 8 test scenarios nailed the correct risk tier. 
 But the confidence scores were stuck at 36% . 
 The problem wasn’t the LLM.…

Self-Hosted RAG Architecture for Privacy-Sensitive Document Search with Golang

Remember the days of boolean search operators? The frustrating experience of trying to find that one document by guessing the exact keywords it might contain? For decades, our ability to search through documents has been limited by keyword matching—a primitive approach that fails to capture the richness of human language and intent. 
 Traditional search technology has evolved through several…

Lock-Free Data Structures and Wait-Free Algorithms in Go: From Theory to Practice

Have you ever been stuck in a bank line where everyone needs to visit the same teller? Frustrating, right? Now imagine a bank where every customer could magically make their transaction without waiting for others to finish. Sounds like a dream? Well, that’s exactly what lock-free and wait-free programming aims to achieve in the world of concurrent computing! 
 The Concurrent Programming…

Model Context Protocol (MCP): Lets Implement an MCP server in Go

Model Context Protocol (MCP) is rapidly transforming how we interact with computers by enabling natural language instructions to handle complex tasks. As we stand at the beginning of this revolution, we’re witnessing fast-paced development in MCP tools and components. 
 While a detailed introduction to MCP was covered in our previous post, here’s a quick refresher: MCP servers…

Model Context Protocol (MCP): Building Bridges Between AI and Your World

Imagine having a brilliant personal assistant who’s incredibly smart but can only communicate through a mailbox - they can receive your letters and write back, but can’t directly interact with your computer, check your calendar, or access your files. That’s essentially the situation with today’s Large Language Models (LLMs) like Claude or GPT-4. Sure, they’re…

Building a Reliable ETL System with Go and Temporal: When Data Needs to Move Like a Marvel Superhero 🦸‍♂️

Ever tried moving your entire apartment through a drinking straw? That’s basically what building ETL (Extract, Transform, Load) systems feels like sometimes. You’ve got terabytes of data that need to go from Point A to Point B, transform from one shape to another along the way, and arrive without losing a single byte. Oh, and it needs to happen yesterday. 
 As a backend engineer…

Your Legacy System is Trying to Tell You Something (And It's Not 'Please Reboot')

You know that uneasy feeling when your car makes a noise it’s definitely not supposed to make? That moment when you turn down the radio, tilt your head, and think, “Maybe if I ignore it, it’ll go away”? Well, your legacy system is making those noises right now, and trust me – it won’t go away by itself. 
 I’ve spent the last 15 years listening to legacy…

Implementing Saga Pattern with Temporal in Go Microservices: Journey Through Distributed Transactions


 Picture this: You’re standing in line at your favorite coffee shop. You order a complex drink (let’s call it the “Distributed Mocha Supreme”), and the barista starts a carefully choreographed dance between the espresso machine, milk steamer, and various syrup stations. Everything’s going great until—oops!—they’re out of whipped cream. Now what? Do they…

The Evolution of Concurrency Patterns in Go: From Goroutines to Advanced Worker Pools


 Remember when you first dipped your toes into the world of concurrent programming? If you’re like me, it probably felt like trying to juggle while riding a unicycle. But here’s the thing: in today’s tech landscape, mastering concurrency isn’t just a cool party trick—it’s becoming as essential as knowing how to loop. 
 Enter Go (or Golang, if you’re…

ChatGpt 4o, the Rise of Conversational Interfaces and the Shifting Landscape of Human-Computer Interaction

Picture this: You’re a sales manager trying to stay on top of your team’s performance. Instead of navigating through complex menus and dashboards, you simply turn to your computer and say, “Get me the list of all new leads for the last month.” Instantly, your screen displays a neatly organized list of every new lead your team has generated, complete with contact…

The Art of the Algorithm: How AI's Gaming Strategies are Shaping the Future of Innovation

Demis Hassabis is a name you might not have heard before, but trust me, you will. This guy is the real deal when it comes to artificial intelligence (AI). He’s the mastermind behind DeepMind, a company that’s been making waves in the AI world for years now. And recently, he gave a talk that blew my mind. 
 
 
 

 Now, I’ve been around the block a few times…

Exploring Chain-of-Thought: Enhancing Problem-Solving in Large Language Models

LLMs are like enormous digital brains that have read a vast amount of text from the internet—books, articles, websites, and more. By doing so, they learn how to predict what word comes next in a sentence, which in turn helps them write essays, summarize texts, and even create poetry. However, despite their impressiveness in handling language, these models often struggled with tasks that required…

Building a simple query parser using PEG in Go

In another post, Simple Query Parser we had built a simple query parser using Participle - a parser builder for go lang.
 Parsing expression grammar (PEG) is a type of grammar. The advantage of PEG is that it doesn’t tolerate ambiguous grammar definitions and so is better in error reporting. 
 The go language port of PEG is pigeon 
The popular Javascript port of PEG is pegjs . A…

How to support custom Javascript scripting in Go Applications

Why will someone need a Javascript Parser, written natively in Go? Isn’t it a crazy, Architecture Astronauts solution that is looking for a problem? Not necessarily. 
 There was a time when applications allowed some kind of scripting to extend them and to make them fit into any workflow. For example VBScript for Microsoft office products. However, very few Web applications have the…

Let's build a search query parser in Go

Mini languages are great. Makes it easy to express what you want in a concise manner. Sometimes a complex UI can be replaced with a mini-language. Some time back, google used to support a simple language in the search queries. For example: “some phrase” +required -not_required . Alas! they stopped it and Google search is less cool ever since. I would count regular expressions also as a…

How to load from a JSON file to Javascript class object (Javascript/Typescript Serialization)

It is a common requirement to load a nested Javascript class from a JSON file. Sometimes you want to send the JSON across a network and load it back to a Javascript class. 
 For better clarity, let us understand the difference between a Javascript class instance and an Object. Take this class for example: 
 This is a class that draws a rectangle on the canvas 
 class Rectangle { 
…

Creating an isolated cluster - provisioning a cluster and a Bastion host using Ansible

This is the second part of the series on setting up a cluster using Terraform and Ansible. In the first part , we had set up the bare cluster Virtual Machines.
The set up included a virtual private network, a bastion server, and a separately configurable cluster of nodes. 
 The nodes are ready but not software or configuration is done so far. In the next step, we will provision all the…

Setting up a Bastion host and a three-node cluster on Hetzner cloud using Terraform and Ansible

Infrastructure as code has a great benefit - you can make a cluster available in a few minutes. Then, switch the configuration with a few updates to the configuration. If you ever had long hours staring at blinking LEDs while it installed from a stack of CDs, you will know what a relief this is. 
 Terraform makes it possible to declaratively create the cloud infrastructure, supports all major…

Background task processor in Go with persistence support using BadgerDB

Goroutines can run tasks concurrently. However, for most practical scenarios, you have to keep track of the status of those tasks. In case the process exited, killed, or power cycled, a mechanism should restart the unfinished tasks.
For example, imagine you moved order status emailing to a goroutine. If the process was terminated or restarted we have no way to keep track of the tasks that were…

A Simple Wrapper to BadgerDB Key-Value store in Go

BadgerDB is an embeddable key-value store written in Go. It is a persistent store. 
 In this article, we build a wrapper around badgerDB. The purpose of this wrapper is to make it simple to save simple values to the DB in “virtual tables”. The concept is an adaptation from the Sett project. Much of the code -especially the unit tests - are changed though. 
 Usage 
 import (…

Build a very fast, highly customizable static website using Hugo in less than 10 minutes

Hugo is a fast static website builder written in Go language. The advantage of static sites is that the site can be hosted easily since it does not require any server-side scripting like PHP, Ruby, or a database like MySql.
Static sites are very fast since there is very little server-side processing involved. Most importantly, there are several platforms where you can host your website for…

(untitled)

Prasanth Janardhanan 
 15+ years of hands-on software product development experience. Certified Professional Scrum Product Owner. Hands-on full stack coding experience - Go (golang), Typescript, React. Experience working with customers gathering user stories, planning product roadmaps, and delivering value following agile methods. 
 Work Experience 
 Simfatic Solutions 
…

About Prasanth Janardhanan

I’m Prasanth Janardhanan — AI Developer, LLM Systems Architect, and ML Researcher with 15+ years of engineering experience. I specialise in production LLM systems, agentic RAG pipelines, and AI agent infrastructure. 
 Projects 
 gomcpgo — An open-source Go framework for building MCP (Model Context Protocol) servers. MCP is now a Linux Foundation standard under the Agentic AI…

My Projects

EU AI Act Compliance Navigator 
 An agentic RAG system that helps developers and product teams determine the regulatory status of their AI system under the EU AI Act. Given a plain-English description of an AI system, it classifies the risk tier (Prohibited / High-Risk / Limited-Risk / Minimal-Risk), identifies the specific Articles and Annexes that apply, and generates a prioritized,…