I summarize my NPTEL workshop on vibe coding, sharing over thirty lessons on building apps via natural language. I cover practical prompt frameworks, iterative workflows, and security frameworks like Simon Willison's 'lethal trifecta' for AI development.

For those who missed my Applied Vibe Coding Workshop at NPTEL, here's the video: You can also: Read this summary of the talk Read the transcript Sketchnote of the talk Or, here are the three dozen lessons from the workshop: Definition: Vibe coding is building apps by talking to a computer instead of typing thousands of lines of code. Foundational Mindset Lessons 1. "In a workshop, you do the work" - Learning happens through doing, not watching. 2. "If I say something and AI says something, trust it, don't trust me" - For factual information, defer to AI over human intuition. 3. "Don't ever be stuck anywhere because you have something that can give you the answer to almost any question" - AI eliminates traditional blockers. 4. "Imagination becomes the bottleneck" - Execution is cheap; knowing what to build is the constraint. 5. "Doing becomes less important than knowing what to do" - Strategic thinking outweighs tactical execution. 6. "You don't have to settle for one option. You can have 20 options" - AI makes parallel exploration cheap. Practical Vibe Coding Lessons 1. Success metric: "Aim for 10 applications in a 1-2 hour workshop" - Volume and iteration over perfection. 2. The subscription vs. platform distinction: "Your subscriptions provide the brains to write code, but don't give you tools to host and turn it into a live working app instantly." 3. Add documentation for users: First-time users need visual guides or onboarding flows. 4. Error fixing success rate: "About one in three times" fixing errors works. "If it doesn't work twice, start again-sometimes the same prompt in a different tab works." 5. Planning mode before complex builds: "Do some research. Find out what kind of application along this theme can be really useful and why. Give me three or four options." 6. Ask "Do I need an app, or can the chatbot do it?" - Sometimes direct AI conversation beats building an app. 7. Local HTML files work: "Just give me a single HTML file... opening it in my browser should work" - No deployment infrastructure needed. 8. "The skill we are learning is how to learn" - Specific tool knowledge is temporary; meta-learning is permanent. Vibe Analysis Lessons 1. "The most interesting data sets are our own data" - Personal data beats sample datasets. 2. Accessible personal datasets: WhatsApp chat exports Netflix viewing history (Account > Viewing Activity > Download All) Local file inventory (ls -R or equivalent) Bank/credit card statements Screen time data (screenshot > AI digitization) 3. ChatGPT's hidden built-in tools: FFmpeg (audio/video), ImageMagick (images), Poppler (PDFs) 4. "Code as art form" - Algorithmic art (Mandelbrot, fractals, Conway's Game of Life) can be AI-generated and run automatically. 5. "Data stories vs dashboards": "A dashboard is basically when we don't know what we want." Direct questions get better answers than open-ended visualization. Prompting Wisdom 1. Analysis prompt framework: "Analyze data like an investigative journalist" - find surprising insights that make people say "Wait, really?" 2. Cross-check prompt: "Check with real world. Check if you've made a mistake. Check for bias. Check for common mistakes humans make." 3. Visualization prompt: "Write as a narrative-driven data story. Write like Malcolm Gladwell. Draw like the New York Times data visualization team." 4. "20 years of experience" - Effective prompts require domain expertise condensed into instructions. Security & Governance 1. Simon Willison's "Lethal Trifecta": Private data + External communication + Untrusted content = Security risk. Pick any two, never all three. 2. "What constitutes untrusted content is very broad" - Downloaded PDFs, copy-pasted content, even AI-generated text may contain hidden instructions. 3. Same governance as human code: "If you know what a lead developer would do to check junior developer code, do that." 4. Treat AI like an intern: "The way I treat AI is exactly the way I treat an intern or junior developer." Business & Career Implications 1. "Social skills have a higher uplift on salary than math or engineering skills" - Research finding from mid-80s/90s onward. 2. Differentiation challenge: "If you can vibe code, anyone can vibe code. The differentiation will come from the stuff you are NOT vibe coding." 3. "The highest ROI investment I've made in life is paying $20 for ChatGPT or Claude" - Worth more than 30 Netflix subscriptions in utility. Where Vibe Coding Fails 1. Failure axes: "Large" and "not easy for software to do" - Complexity increases failure rates. 2. Local LLMs (Ollama, etc.): "Possible but not as fast or capable. Useful offline, but doesn't match online experience yet." Final Takeaways 1. "Practice vibe coding every day for one month" - Habit formation requires forced daily practice. 2. "Learn to give up" - When something fails repeatedly, start fresh rather than debugging endlessly. 3. "Share what you vibe coded" - Teaching others cements your own learning. "We learn best when we teach." 4. Tool knowledge is temporary: "This field moves so fast, by the time somebody comes up with a MOOC, it's outdated."

NPTEL Applied Vibe Coding Workshop


Explore 24 real-world examples of GenAI's power, from reverse engineering firmware and automating legal appeals to finding math counterexamples and building digital twins. These Hacker News highlights demonstrate high-leverage automation in coding, security, and specialized research.

Hacker News has a lively thread asking What was your "oh shit" moment with GenAI?. Here are two dozen that gives a sense of what real people find impressive (or worrying) about AI capabilities. 1. Analysis simonw used ChatGPT Code Interpreter to upload a CSV, analyze it, create charts, automating everything a software for journalists would do. 2. Analysis Sobrino saw that a months-long OCR project to read and clean-up PDFs is now just a prompt on ChatGPT. 3. Coding plumefar used Claude and Gemini to modernize 20-30 years of chemistry code in 10 days. 4. Coding veidr used a multi-agent fleet managing coordination, testing, UI feedback loops, etc. with no-human-in-loop coding to build a useful git-submodule GUI. 5. Creativity idopmstuff used Nano Banana Pro to turn a poor iPhone product photo into usable e-commerce product photography and Amazon-style infographics, replacing a photographer/designer workflow. 6. Creativity koreth1 used Suno to generate a K-pop-style anthem about their family dog with a catchy melody and lyrics funny enough to make the family laugh. 7. Education plagasul saw a teacher automate grading feedback emails based on notes and the student list spreadsheet. 8. Education aniviacat watched a non-technical brother build a complex working app with Codex using vague, shallow wording despite not knowing code, git, or technical details. 9. Hardware ivanvanderbyl used Claude to reverse engineer a FujiFilm camera's Bluetooth/Wi-Fi transfer protocol and build a much faster native Mac/iOS transfer app. 10. Hardware shreddude had Claude decompile camper van firmware, document CAN interfaces, and program an ESP32 to control power, HVAC, lighting, and tanks. 11. Health TylerE used Claude as a health adjunct to organize a complex medical profile, screen for drug interactions, log symptoms, and draft portal messages to doctors. 12. Legal bsiverly used AI to prepare a San Francisco property-tax appeal with valuation research, and the city agreed, sending a $12k refund. 13. Legal grumblepeet used AI to fill out complex government-framework enrollment forms and identify the certification steps needed, transforming their business. 14. Personal acosmism used ChatGPT screenshots to understand and operate a 100-year-old home's steam heating system in winter despite knowing nothing about it. 15. Personal andrewthornton used Gemini videos to diagnose a broken furnace during a cold holiday weekend and keep it running until HVAC service arrived. 16. Research angusturner found that Opus does reads papers, does architecture research and creates CUDA kernels... It is AI automating AI research. 17. Research chaoxu used ChatGPT to find a counterexample to a theoretical computer science conjecture they'd been trying for 2 years. 18. Research rochansinha built a physics-based digital twin for an electrolyzer system, covering thermodynamics, fluid dynamics, and electrochemical reactions at a level usually needing expensive specialist software. 19. Security kstrauser used a coding agent to test an open source vulnerability, and in a few minutes, had a tool that could crash any system using this software. 20. Security raesene9 gave an LLM a Linux privilege-escalation PoC and asked whether it could become a container breakout; it generated a working container breakout in one prompt. 21. Society laboring1 read that a character.ai chatbot encouraged a child to commit suicide, making the "oh shit" moment about real-world harm, not capability. 22. Society ozgung realized AI makes large-scale profiling, surveillance, and social-media analysis cheap, fast, and accurate enough to change privacy and power dynamics. 23. Work binarysolo used Gemini to reverse engineer a departed employees' work from their emails/docs/calendar/meetings and create an onboarding document. 24. Work eqmvii built a Slack agent that took over a 30-minute internal business process, handled ambiguity and edits, and eventually killed the old process.

Oh Shit moments with Gen AI


I'm building muscle by adding one extra push-up to my daily routine each day. By using habit pre-stacking before my yoga sessions, I've managed to scale from ten to twenty-three push-ups through sustainable incremental progression.

I'm doing one extra push-up every day. One of my 2026 goals is to build muscles. I haven't done anything about it until May. This month, I figured I would do the absolute minimum, at least to get started, because I seem to have starting trouble more than anything else. I asked ChatGPT: I want to build muscles. What's the most effective thing that I can do that would take no more than one minute that I can practice every day without any equipment and I can do this anywhere and will have the most impact on building muscles? Research, give me the top five options and recommend one for me. It suggested push-ups. So did Claude. Since I do yoga every day, I decided to do push-ups after that. I kept forgetting, so I decided to do push-ups before that. (This worked.) Lesson: Habit stacking works. Habit pre-stacking works better. I remember that story about a boy carrying a young bull as a child, and as they both grew up, he grew into a man strong enough to carry an adult bull. I am applying a similar practice. I started with 10 push-ups a day. Every day, I'm adding one push-up to it. I just finished 23. That is, I have spent the last 16 days (with 3 misses in between) adding one push-up each day to my routine. This seems to be just the right level of incremental difficulty. Every day feels as miserable as the previous one. I began with absolutely not being able to do a single push-up more than 10 push-ups. I just finished my 23 push-up routine, absolutely not able to even one more. And it's felt exactly the same way as every day. Maybe it's because I know the quota and the brain decides that's exactly the limit of what's possible. But still, it feels like one extra push-up a day is reasonable progression. Lesson: Compounding habits seems to work. I'll keep you posted.

One extra push-up every day


I've worn the same ₹500 sandals for eight years, prioritizing comfort over formal dress codes. This preference recently cost me entry to a fancy Singapore rooftop and required changing a meeting venue at the Bangalore Club.

My sandals landed me in trouble twice in December. And that's not uncommon. Mr Krishnan and I were meeting. He suggested: Good morning. Sunday 07/12/25 breakfast at 09:00 am at the Bangalore Club Residency Road (not far from Koramangala)? ... but knowing me, he also added: These clubs are peculiar and may insist on no round necked t-shirt or no open sandals. If you have ideological issues with that, no problem and I will suggest another venue. I shared this in reply... A picture of my foot in sandals ... and we met at Ballal Residency instead. I've been buying the same sandals for 8 years now. About twice a year. 4 Aug 2018 27 Feb 2019 14 Dec 2019 6 Feb 2020 4 Dec 2020 16 Sep 2021 (Hmm.... what happened in 2022?) 4 Feb 2023 23 May 2023 6 Apr 2024 (Bought at a store, not Amazon) 29 Jan 2025 5 Nov 2025 They work remarkably well. Comfortable (no break-in period, good to walk in, doesn't slip off.) Durable (though the bottom center wearing out after 6 months.) Cheap (and staying cheap, around ₹500 over the years.) Maintainable (just wash them.) All-weather (though socks helps when snowing.) Stylish (well, at least to me.) The only hitch is that other people don't always like them. Usually Naveen gives me his spares for important meetings or TV. We even kept a spare for me at our Hyderabad office though I never used them. Where I get into trouble is usually in places with... "too much atmosphere". Remember the Calvin & Hobbes strip where Calvin eats at a restaurant with "too much atmosphere"? On 31 Dec, my wife booked us for a New Year party at Ce La Vi - the tallest spot in Singapore, and with a great view of the fireworks. And a dress code we were not aware of. "Gentlemen must be in a shirt, covered shoes.". After 5 minutes of trying to persuade the gentle yet firm manager, I wished my family a happy new year and walked back home enjoying the fireworks along with thousands of others on the streets. In open air. And open sandals. LinkedIn

Open sandals


AI-native LaTeX editors like Prism dramatically lower the friction of scientific writing, though their document conversion still needs work.

OpenAI launched Prism - an AI LaTeX IDE. It's a boon for anyone writing LaTeX documents. All the nitty-gritty of formatting, syntax, etc. is handled by AI. You can collaborate, too. It brings the power of AI code editors to scientific document editing. It still has some way to go, though. I asked it to convert a portion of this paper into LaTeX. Here's the image I passed: [](https://d1wqtxts1xzle7.cloudfront.net/43007775/2-Chemicalroutesforthetransformationofbiomassintochemicals-libre.pdf) ... and here's the LaTeX output it generated: [](https://prism.openai.com/?u=a0df2c6f-a17a-4c7d-b353-d3f38dd6b363&pg=1&m=main.tex&d=7) The number of errors it made are too many to list. So, it's still some way from being picture-perfect. But for those experimenting, not publishing, it's a useful accelerator. UPDATE: I assumed that (because the chemical formulas looked so different) it had misread the image. But experts tell me that it actually got it right! So, Prism (and the underlying GPT models) may not be perfect but are certainly better than I thought.

OpenAI Prism for LaTeX


Coding agents can automate the tedious middle step of matching downloaded PDF receipts to expenses, making finance workflows much easier to manage.

One of my goals this year is to "Automate finance + tax". Today, I took a baby step by organizing my expenses. This is my current process: STEP 1: Download PDF receipts (from OpenAI, Anthropic, Google, and other cloud/AI services) STEP 2: Organize them, so I know which receipt to upload against which expense STEP 3: Submit on SAP Concur. All steps are manual as of now. I automated STEP 2: Organize them. After downloading my PDF receipts, I used this set of prompts on Codex - GPT 5.3 Codex (High) The result is renamereceipts.py and it works well enough for my receipts over the last 3-4 months. I've partly automated STEP 1 as well. The trickiest bit was converting Google Pay Activity into PDF receipts. This is what it looks like> To convert the right side into PDF receipts, I asked Claude which gave me this script: Now, I can right-click any receipt in Google Pay Activity, select "Inspect", then run this script in the console. It opens a new tab with just that receipt, which I print to PDF. The next step is to automate STEP 3: the Concur submission itself. But that's for next quarter!

Organizing PDF receipts


I highlight a glaring error in Panchayat where the protagonist solves a mixture problem instead of the actual work-rate question shown. I compare this continuity blunder with ChatGPT's confusion when mapping numerical answers to multiple-choice labels.

In Panchayat) Season 1 Episode 7 Ladka Tez Hai Lekin..., at around 17:00, Pradhan asks Abhishek to solve problem 42. The correct answer is (c) 15 days. But interestingly, ChatGPT got it wrong the first time too. It said (a) 15 days instead of (c) 15 days, and required a fact-check to correct itself. But Abhishek's steps have nothing to do with the problem - he proceeds to solve a completely different problem and ends up with the supposedly correct answer of 37/23. Now, the problem I'm trying to solve is, which of these made the bigger mistake: Abhishek, who solved a different problem ChatGPT, who got the answer right but the option wrong The writers of the show, who failed to correct this obvious error

Panchayat solves the wrong problem


I built a WhatsApp export script and used Claude via my Local MCP connector to identify people deserving of thanks. The AI helped me discover hidden support for my workshops, teaching me how to be more human.

I advise people that people skills are important in the AI era. Now, I'm using AI to help me with people skills. This morning, I wrote a script to export my WhatsApp conversations this year. That makes it easy to feed it into AI models. Then I used my Local MCP connector and asked Claude: Who are people in my life that most deserve an unreasonable gesture of thanks and what would that be? It went through my WhatsApp messages -- including threads I had not read. Including a group discussing four 90-minute hands-on AI workshops I'm running for IIM alumni in Singapore on Saturday afternoons: 1. 23 May: Context engineering 2. 20 Jun: AI tools & workflows 3. 25 Jul: Agentic analysis 4. 22 Aug: AI strategy Nayana Jain prepared a series of LinkedIn / WhatsApp posts to promote this workshop series and also created a poster for the workshops - and the best part of it was they were AI-generated. AI didn't do a great job at the logo, so she asked for and got the IIMPACT logo (which isn't public) and fed it to the model to re-generate it. All of this is something I wasn't even aware of until Claude pointed it out. I sent a note thanking her. And, evidently, AI is teaching me how to be human.

People skills with AI


Prototype iterations should improve not just the interface but the narrative around it, because better storytelling can make exploratory tools far more understandable and useful.

I added a narrative story to my LLM Pricing chart. That makes it easier for me and others to tell the story of AI's evolution in the last three years. Video It was vibe-coded over two iterations. In the first version, I prompted it to: Add a scrollytelling narrative. So, when users first visit the page, they see roughly the same thing as now (but prettier). As they scroll down, the page should smoothly move to the earliest month, and then animate month by month on scroll, and explaining the key events and insights in terms of model quality and pricing. Use the data story skill to do this effectively, narrating like Malcolm Gladwell, with the visual style of The New York Times, using the education progression as a framework for measure of intelligence (read prompts.md for context). Store the narrative text in a separate JSON file and read from it. This should control the entire narrative, including what month to jump to next, what models to highlight, what insights to share, and so on. But there were two problems: 1. Conflicting instructions. "... with the visual style of The New York Times" conflicted with my current style. 2. Incomplete instructions. I wanted to begin with the exploration, not the narrative. I wanted to explain the axes first. I wanted smaller cards. Both of them were solved in the second version, because this time, I knew what I wanted. In other words, vibe coding isn't just helping me prototype, it's helping me prototype the prototype! Even if I don't know what I want, I can just ask for something and build on it. This is a known benefit of lower costs. But, like the placebo effect and Hofstadter's Law, I'm surprised by it even when I know it. An aside: Here's the narrative it crafted: How to read this chart: The vertical axis is intelligence — mapped to the academic ladder on the right. Elo 1100 is high school freshman; Elo 1480 is tenured professor. The horizontal axis is cost: one million input tokens — roughly the entire King James Bible — priced from two cents to $75. The upper-left corner is the dream: brilliant and cheap. This is the story of how the world got there. March 2023 — Year Zero: March 2023. The entire AI landscape fits in a small cluster near the bottom of the chart. GPT-3.5 and Claude 1 are the state of the art — high-school-to-college-freshman intelligence that writes a fluent paragraph, then confidently invents a fact. Processing the King James Bible costs 50 cents to $8. These models can hold a conversation. They cannot, reliably, hold an argument. LMSYS Chatbot Arena launches (May 2023) November 2023 — The Leap: November 6, 2023: GPT-4 Turbo. The chart jolts upward. Elo 1313 — college-junior level: coherent research papers, complex reasoning, output worth reading. Price: $10 per million tokens — about $14 to process all seven Harry Potter novels. Expensive, but for the first time the intelligence felt worth it. Enterprises stopped asking whether AI could help. They started asking how much they were willing to pay. OpenAI DevDay announcement February 2024 — The Split: Early 2024: Anthropic launches Claude 3 in three tiers. Opus and Sonnet arrive February 29; Haiku a week later, March 7. Opus: entry-analyst capability at $15. Sonnet: similar quality at $3. Haiku: college-junior reasoning at $0.25. A 60× price spread — same company, same training philosophy. The intelligence market had learned to stratify, and every business began thinking in tiers. Anthropic Claude 3 announcement June 2024 — The Summer Pivot: June 2024 bent the economics permanently. Claude 3.5 Sonnet — strong manager level (Elo 1342) — arrived at $3 per million tokens: five times cheaper than Opus, four months later, at better quality. Meta’s Llama 3.1 405B matched it at $2, or free if self-hosted. Any CFO paying $15 for frontier AI could now pay $3. The question changed from “can we afford AI?” to “what are we waiting for?” Claude 3.5 Sonnet launch, Meta releases Llama 3.1 September 2024 — The Thinking Machine: September 2024: OpenAI o1. It didn’t just answer — it reasoned. Before responding, it ran an internal monologue: checking its own logic, catching its own errors. Elo 1388 — the biggest single-model quality jump since GPT-4. It scored at or above PhD-expert level on GPQA Diamond, a benchmark of graduate-level science questions. Price: $15. For the first time, AI felt less like autocomplete and more like a colleague you’d genuinely consult. OpenAI o1 system card, GPQA Diamond benchmark results January 2025 — The Earthquake: January 20, 2025. DeepSeek R1 matched o1-level reasoning (Elo 1398) at $0.55 per million tokens — a 27× discount. The announcement wiped $600 billion from Nvidia’s market cap in a single day. Silicon Valley assumed expensive compute was a moat. DeepSeek proved it was just a starting point. PhD-approaching reasoning for fifty-five cents per Bible. Reuters: DeepSeek wipes $600B from Nvidia, DeepSeek R1 technical report Mid-2025 — The Race to the Top-Left: By mid-2025, the upper-left corner was filling fast. Gemini 2.5 Pro delivered tenured-professor intelligence (Elo 1476) at $1.25 per million tokens. Flash models handled most enterprise work for 30 cents. Companies that had rationed AI to critical workflows were now running it everywhere. The constraint was no longer cost or capability — it was imagination. Google Gemini 2.5 Pro launch February 2026 — Polymath Scholar: The top models in early 2026 score above 1500 Elo — polymath scholar territory. A 1500-rated model beats a 1300-rated one in 76% of head-to-head matchups. GPT-4 Turbo launched at college-junior level (Elo 1313) in November 2023. Twenty-seven months later, Claude Opus 4.6 and Gemini 3.1 Pro sit at 1500+. What cost $15 in 2024 is now beaten by models at one-seventh the price. LMArena Leaderboard So What Does This Mean?: In 2023, reaching master’s-level AI for 100 analysts meant paying $30/MTok — roughly $135,000 a month. By 2026, models with higher capability cost $1–5/MTok: under $15,000 for better results. For most tasks — analysis, drafting, coding, research — models in the $1–3 range deliver more than enough. Save frontier models for your hardest problems. The question is no longer what AI costs. It’s what you would build if intelligence cost a dime per Bible. McKinsey: The economic potential of generative AI, Sequoia: AI's $600B question Self-referentially, my answer to its last question: "what you would build if intelligence cost a dime per Bible" is "a scrollytelling narrative about intellegince costing a dime per Bible".

Protyping the prototypes


Use Z3 to formally verify code by finding counterexamples, such as integer overflows in midpoint calculations. Combine Z3 with ChatGPT to automate hunting for edge cases and potential bugs in production libraries like xarray and branca.

At the PyCon SG Education Summit today, Melvin's lighting talk on "Writing Proofs in Python" began with a subtle bug in this mid-point calculation (often used in binary search or sort) in languages like Java, C/C++, Go, etc. Since the integers are fixed-width, this triggers an overflow when low + high exceeds the maximum integer value. Even popular libraries like Pandas had this bug until 2019. In fact, even Python's native list.sort() had this sort of bug until 2015! Read the details. Z3 can find counterexamples Melvin showed how to use Z3 - a popular theorem prover library - to prove or find errors in code. The output has found a case where the midpoint is less than low, which is clearly wrong. ChatGPT can run Z3 to find issues I had a conversation with ChatGPT that ran like this: Me: Prove something with Z3 and teach me. ChatGPT: OK. Here's how you find the midpoint overflow error. Me: How can Z3 help me? ChatGPT: Find edge cases, counter-examples, refactor safely, validate rules, write tests, model workflows, etc. Me: Any alternatives to Z3? ChatGPT: Z3 is best, but consider Dafny for production code, Alloy for data, TLA+ for workflows, ... Me: Any popular Python tutorials have Z3-detectable bugs? ChatGPT: Several! GeeksforGeeks' Interpolation search hits a ZeroDivisionError; in Programiz' Bucket sort, the bucket index can exceed the number of buckets, ... Me: Find production Python code with Z3-detectable bugs. ChatGPT: Sure! There are plenty of ZeroDivisionErrors in networkx, rich, seaborn, xarray, plotly, matplotlib, ... Me: Find real errors - not nitpicky ones! ChatGPT: OK, xarray, branca, mizani, shap, matplotlib, ... Me: If these don't have existing bugs filed, write an issue. ChatGPT: Sure! Here they are. Some issues are not bad One issue was quite relevant. I raised #222 on python-visualization/branca which roughly says: LinearColormap(["red", "blue"], vmin=0, vmax=1).tostep(n=1) fails. But there are times when I just have one bucket/class to display, so shouldn't this work? Another looked pretty relevant, too. I raised #11397 on pydata/xarray which roughly says: np.linspace(0, 1, num=1) works. Shouldn't RangeIndex.linspace(0, 1, num=1, dim="x") do the same? But not all issues are worth reporting Maybe not. The branca LinearColorMap issue feels more real to me than the xarray RangeIndex.linspace one - maybe because I've faced it. Maybe we could do this: 1. When you find a bug, use Gen AI to report it. It's a real need. 2. If Gen AI finds a bug, report it only if you'll really need it. Still, Z3 + ChatGPT is quite effective When testing your own code, the ability to prove it correct or find counterexamples is very powerful. Since you don't need to know how to use these tools (AI does it for you), the cost of using these is very low. This adds a useful layer of defense against vibe coded technical debt. UPDATE: 25 Jun 2026: The pull request I submitted to fix it was merged. But this led to a fascinating rabbit hole involving the Bounty-Hunting Agent Ecosystem.

Proving Code Works with Z3


I used 10 years of Open-Meteo data to analyze whether rain follows predictable daily schedules in different cities. While some cities like Caracas have highly concentrated rainy hours, others like Mumbai require keeping an umbrella handy all day.

Karthik Sashidhar shared his AI-generated Bangalore weather blog, which is generated by Hermes listening on Telegram. "The data analysis and stuff is still fairly YOLO but ... skill based on my 10 years of experience," as he put it. That includes critique too. Arjun asked it: Does it rain at specific hours in the day during monsoons? In a few minutes, Pre-monsoon rain is an evening creature emerged. In short, it rains in the evenings: 5 - 6 pm is the peak. That got me curious: how reliable is this advice? I mean, if someone told me, "Carry an umbrella if you're going out between 3-7pm", does that advice change month-on-month? How likely am I to get wet despite following it? [](https://sanand0.github.io/datastories/rainy-seasons/) It turns out that based on 10 years of Open-Meteo data, the answer does change a bit based on the season. In July, when it rains the most, 1 - 7 pm is when you should carry an umbrella. There's a 43% risk of rain in this window, but only 18% outside it. But the city with the clearest advice is Caracas, Venezuala. In August (or almost any month), carry an umbrella between 12 - 6 pm. There's a 57% chance it'll rain then - and only 6% outside. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Caracas) Or Abidjan, Ivory Coast. In October, carry an umbrella between 11 am - 5 pm. 72% chance of rain, 15% outside. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Abidjan) Some cities, like Mumbai, India, are hopeless. In July, always carry an umbrella. 86% chance between 2 - 8 am (when it rains the most), and 80% outside. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Mumbai) In some, like Taichung, Taiwan, it depends. Summer rain is predictable. In winter, it might rain at any time. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Taichung) The opposite is true for Surabaya, Indonesia and Sao Paulo, Brazil. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Surabaya) [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Sao+Paulo) My father often complains about the peculiar weather in Chennai, India. It doesn't rain too much, but in the rainy seasons. there's no fixed schedule. [](https://sanand0.github.io/datastories/rainy-seasons/#?city=Chennai) Maybe that's part of what makes rain forecasts accurate in some cities - just knowing the season is enough to predict rain timings.

Rainy seasons on schedule


Gemini can turn casual screenshots into instant OCR-and-translation aids, making it a practical companion for reading text embedded in everyday media.

I've been reading books using AI. Today, I used Gemini while watching a TV show. (Not to watch TV - just while watching TV.) There's this scene in Iru Dhuruvam Season 2 with a sheet of paper with Tamil text on it. The script was small and I couldn't read it clearly. (I'm pretty slow at reading Tamil anyway.) So I took a screenshot (Linux is great that way - you can record screenshots from any video player) and asked Gemini: (I was eating dinner and had just one hand to type - minimally.) It said: Original Tamil Text: வினைபகை என்றிரண்டின் எச்சம் நினையுங்கால் தீயெச்சம் போலத் தெறும் English Translation: When you consider the remnants of an incomplete action or an unconquered enemy, they will destroy you like the unextinguished remnant of a fire. This is Thirukkural 674, written by the ancient poet Thiruvalluvar. It serves as a stark warning against leaving tasks or conflicts half-finished. Given the gloves and the torn paper, this looks like a classic cinematic trope—a cryptic, high-stakes warning left behind in a thriller, signaling that the job (or the revenge) is far from over. Spot on. The rest of the scene made perfect sense! This is not the first time I've used AI while watching TV. I've passed screenshots to identify cities, transcribe newspapers, and more. But this is the first time I've used it to read Tamil. (BTW, the image in the screenshot above is a Gemini-upscaled with the prompt "Draw the same image, upscaled and sharper".)

Read Tamil on TV with Gemini


A lightweight recording and compression workflow can produce high-quality screencasts cheaply enough to make video a practical medium for demos, teaching, and documentation.

Since WEBM compresses videos very efficiently, I've started using videos more often. For example, in Prototyping the prototypes and in Using game-playing agents to teach. I use a fish script to compress screencasts like this: To record the screencasts, I prefer slightly automated approaches for ease and quality. METHOD 1: Browser scrolling: To uniformly scroll to the bottom of the page at 800 pixels / second (roughly one page per second), I frame the recording window, start recording, and quickly paste this script in the DevTools console: This is what I used in Prototyping the prototypes. METHOD 2: AI Coding Agents: I tell the coding agent to: ... screenshot each step at 1366x768, compressing into video.webm at 1.5 fps, pausing the last frame for 5 seconds. If playwright and ffmpeg are set up, this just works. This is what I used in Using game-playing agents to teach.

Recording screencasts


Your past writing becomes a reusable knowledge base when LLMs can mine it for audience-specific talk ideas and examples.

Recently, I've re-used my own writing / transcripts as context to LLMs. For example, I've used: My meeting transcripts to answer interview questions My blog posts to write news articles My chat history to extract AI-related advice This repurposing can be used for so many things. For example, before delivering a talk to journalists "Review my Feb 2026 LLM posts and generate a single-sentence, ELI15 high-impact use case for journalists." gets me list of use cases. Now, all I have to do is show what I did and share how it's relevant for them, like: 1. I found old friends with Gemini Deep Research. You can trace sources who changed names. 2. I transcribed the entire Dilbert archive. You can transcribe scanned court records for $20. 3. ... and so on. I can do this for any field. The approach is simple. I copy recent blog posts related to LLMs via: ... and ask the LLM: Pick articles with the best application to [FIELD]. For each, write a single-sentence, ELI15 use case DIRECTLY following from the article. Focus on high-impact, common scenarios solving a specific problem (a persona trying to do X but blocked by Y). Skip articles without a clear, practical application. Be ruthlessly concise: 40 words per use case. Format each line as: Article Title: Use case description. Here are a few examples (and they're good ones): See journalist use cases 1. Extracting AI Advice: A journalist who has obtained hundreds of FOI documents or deposition transcripts can use a cheap large-context model to pull one-sentence bullets from each and then ask a stronger model to rank the top patterns -- turning months of reading into an afternoon. 2. Finding Old Friends with Gemini: An investigative journalist can use Gemini Deep Research to trace sources who have changed names, employers, or countries -- surfacing government nomination lists and public records that bridge who someone used to be with who they are now. 3. Gemini 3 Flash OCRs Dilbert Accurately: A journalist who receives a dump of scanned physical documents -- leaked government files, court records -- can make the entire archive full-text searchable for roughly $20, without waiting weeks for manual transcription. 4. Organizing PDF Receipts: An investigative journalist who obtains a dump of expense or procurement PDFs can ask an AI coding tool to parse each one and rename it to a standard format -- making it trivial to spot duplicate amounts, unusual vendors, or suspicious date gaps at a glance. 5. RIP, Data Engineers: A data journalist who obtains the SQL query logs of a public institution can use an AI agent to cluster what questions the database was actually built to answer -- revealing whether an agency is doing tactical monitoring or genuine public-service analysis, which can itself be the story. 6. Transcript AI-ded Interviews: A journalist who has done twenty interviews for a long-form profile can feed all the transcripts to a large-context model and ask it to surface the best quotes on a given angle, or flag contradictions between what different sources said -- without re-reading every word. 7. Using AI for Work News: A beat journalist without a research desk can set up a Google Workspace automation that scans their sources weekly and delivers a single Gemini-written brief -- so nothing from a regulator's filing or a council report slips through unread. 8. Writing Articles from My Blog Posts: A reporter with years of stories on the same beat can feed their archive to an AI, ask it to identify which past pieces form the strongest foundation for a new investigation, and get a draft synthesis written in their own voice -- rather than starting from a blank page. See civic use cases Breaking Rules in the Age of AI: A government adult literacy programme can drop its AI ban and replace it with instant AI-graded feedback -- letting learners ask questions in their own language, fail and retry freely, and delegate tedious steps -- re-engaging adults who had already given up on education. Extracting AI Advice: A city welfare department can transcribe its 300 community consultations into one-sentence bullets and rank the top 10 concerns across meetings in the residents' words -- for a few dollars and hours. Finding Old Friends with Gemini: A social welfare officer can use Gemini Deep Research to trace former programme participants who have moved or changed names, surfacing public records that link old and new identities -- closing the loop on services that were started but never finished. Gemini 3 Flash OCRs Dilbert Accurately: A city archivist can make thousands of scanned land records, court orders, and petitions fully searchable by running them through Gemini Flash at roughly $20 for an entire archive -- no in-person visit required. Organizing PDF Receipts: An NGO finance coordinator can ask an AI coding tool to write a script that reads every vendor PDF, extracts the date, amount, and reference, and renames the file to a standard format -- turning a half-day filing chore into a five-minute step before uploading to a compliance portal. RIP, Data Engineers: A government department can expose its data culture -- and fix silent metric misalignment between teams -- by feeding its SQL query logs to an AI agent that clusters them and proposes a small set of shared standard tables, no data warehouse project required. TDS Comic Generation: A district health office with no design budget can generate multilingual public health comics for low-literacy communities by defining a few recurring characters, writing their dialogue in plain language, and letting Gemini produce each strip in minutes -- at near-zero cost per language. Transcript AI-ded Interviews: A government communications officer can feed all auto-generated meeting transcripts on a topic to a large-context model and get a press-ready 150-word statement grounded in what the department actually said -- in an hour instead of a week of document hunting. Using AI for Work News: A district administrator receiving eight separate departmental reports can set up a 20-minute Google Workspace automation that delivers one weekly email surfacing cross-department clashes -- like a public works delay that will knock out a scheduled health camp -- that no individual report would flag. Writing Articles from My Blog Posts: A civic think tank analyst with 40 research reports can ask AI to pick the strongest op-ed angle for a target publication and draft it from their own words -- in an afternoon, not a week of rewriting from scratch. See community builder use cases Extracting AI Advice: A community manager who has years of recorded Q&A sessions and AMAs can map-reduce all the transcripts to find the top recurring questions members actually ask -- then build a self-serve knowledge base from members' own words rather than guessing what to put in it. Finding Old Friends with Gemini: A community builder trying to re-engage lapsed members can use Gemini Deep Research to find where they are now -- new employer, new city, new name -- and reach out at the right career moment rather than to a dead email address. Using AI for Work News: A community manager can set up a weekly automation that scans public sources for what members have been doing -- new articles, talks, job changes, launches -- and auto-drafts a "members in the news" section for the newsletter that would otherwise go unwritten for lack of time. Transcript AI-ded Interviews: A community builder who runs office hours or mentorship sessions can synthesise all the session transcripts to surface the top recurring problems members raise -- then use that signal to design better programming rather than guessing what the community actually needs. TDS Comic Generation: A community builder can create a recurring comic strip with a few consistent mascots to announce events, explain community norms, or celebrate member milestones -- something memorable and shareable in a way that a plain-text post is not, and producible in minutes with no design budget. When I delivered the Society for Clinical Data Management keynote, they audience was surprised how much I knew about their field because I spoke about Informed Consent Forms and Extracting Schedule of Assessments and so on. Truth is, I know nothing about these. Claude created the slides. I asked it to explain enough so I can talk through it. I didn't get the implication then, but I think I do now, and the implication is stunning. I now have material to deliver a talk to any audience. So far, I've been limiting myself to technical talks. Why bother? I can speak to any audience about using AI in their field. Human Resources & Organizational Design: HR leaders are drowning in qualitative data (interviews, performance reviews, employee sentiment) and are terrified of being left behind by AI. Marketing & Communications: CMOs are under pressure to produce more content with fewer resources. They want to see live workflows of how a single blog post or chat transcript can be repurposed into a full campaign. Finance & Banking: This sector is heavily regulated and drowning in unstructured paperwork. Extract specific clauses from 100-page compliance documents will immediately capture the attention of risk officers. Event Management (MICE): The industry that organizes conferences is itself looking to modernize. Matching attendees, transcribing massive archives of past events, or predict logistical needs is highly relevant. Time to get out of my comfort zone!

Repurposing blog posts for talks


I explain why manual verification of LLM outputs doesn't scale. Instead of 100% inspection, I apply manufacturing principles like statistical sampling, stratified risk management, and model-based augmentation to build quality directly into the production pipeline.

My post "Add a Verify Button" has a problem. When Rohit requested hyperlocal news for every PIN code in Mumbai, we'd need a "verify" button on every Statoistics card - hundreds of PIN codes, every day. Verifying every output introduces new bottleneck: a person inspecting every unit. That's 100% inspection - which you do when you don't yet trust the process. Manufacturing solved this a century ago. At Western Electric's Hawthorne Works (famous for the Hawthorne Effect), quality control meant inspecting finished products and pulling the defective ones. Walter Shewhart sent his boss a one-page memo; about a third of it was a control chart. Deming turned this approach into his third point: "Stop relying on inspection for quality." Build quality in from the start instead of inspecting defects out at the end. His process tells us what to do with a verify button as volume climbs. Measure how often it's right. Don't retire inspection until you know your defect rate. For example, on one classification task I benchmarked, the average model error was about 14%. Until we know that number, "it's probably fine" is just a feeling. Stratify. "The garden has 18 plants" is easy to validate and low-risk if wrong. "This loan is denied" is neither. Verify the risky things carefully, let the cheap things through with low effort. Equal effort on both is waste. Sample. Nobody inspected every artillery shell in the war. Shewhart's Bell Labs colleagues Harold Dodge and Harry Romig put sampling inspection on a statistical basis. Check a sample at known confidence; watch whether the process drifts. The equivalent: verify a random sample of cards, track the rate, and react when the rate moves, not when one card looks off. Augment with other models. When I correlated two models' errors, the correlation was about 20%. If one gets a case wrong, the other usually doesn't miss the same one. So a second model is a cheap, imperfect inspector. Asking AI to generate verifiable output lets another model to spot obvious errors. Also, it's best to avoid overreacting to defects. Deming called this (re-tuning the process after every defect) tampering. It makes the variation worse. It's worth collecting data and finding the real causes before changing the process. That's what Ankor calls the future of verifiable autonomy. It starts with: we are going to have to move beyond testing correctness to standard testing… if we test the pipeline once before deployment, we can trust that every single output produced by that pipeline, unless we make any adjustment to it, can be trusted. His analogy is software. Verification becomes a standard layer in the production loop, like how CI/CD is a standard step before you ship. Over a few years the need for human validation drops, and programmatic checks plus triage take over. Regulated finance has a lot of experience with this. After the GFC, the Fed and OCC issued SR 11-7 in April 2011. Every quantitative model going into production needs independent validation by people separate from the developers, plus ongoing monitoring, before it ships. "Retire the verify button" doesn't mean stop checking. It means have an independent validation layer with an owner. Of course, this incurs cost - at scale. For us, it led to concerns from the Finance team that the token costs overhead was climbing up. But, to quote KG: Token cost cannot be overhead. Token cost is direct cost because you're replacing people. So I now benchmark cost alongside accuracy. A contract-validation demo I run checks a contract against a clause checklist, citing where each clause sits, for about 3 cents and 6 seconds. Pricing it lets me decide whether a reviewer's half-hour is worth more than 3 cents. Usually it is. Sometimes it isn't. Sometimes, this isn't good enough. A client wanted PII scrubbed from 3 million user images with zero leaks. I did the arithmetic out loud: with 99.9%, we're talking about 3,000 images with personally identifiable information potentially slipping through. Is that OK? He said, "No." I told him we couldn't do it. It needs more technology than we had. (Our sales team nearly had a heart attack.) A critical output of measuring is to check if it's even possible. I still manually verify AI output for new stuff. I don't trust every pipeline yet. But when the scale becomes unwieldy, this is the process I switch to.

Retire the Verify Button


AI can already do large-scale SQL pattern analysis that exposes organizational blind spots, shrinking the need for some traditional data-engineering analysis work.

As AI marches along, another role at risk is the data engineer / database administrator. (Data scientists are already feeling the heat.) A common task for data engineers is to analyze SQL queries - to optimize and standardize. Pavan used Antigravity to analyze 1,500 SQL queries and found: 1. 30% of queries are purely headcount / volume related. Much more than revenue (25%) or engagement (15%). That's sign of a tactical culture. 2. 70% of the queries are about What happened yesterday? rather than What will happen tomorrow? - again, tactical culture. Here's the analysis. As a next step, he built a "Middle Layer" - intermediate tables that standardize and optimize queries. Instead of 50 fragile tables, the user can query just 3 robust tables that cover 98% of the SQL queries. For example: A netrevenue field that standardizes net revenue after adjustments, i.e. SUM(facevalue - discount), which is used in 58% of queries. That ensures that Finance (which used to see the GAAP Revenue) and Sales (which used to see the Booked Revenue) are now aligned. A ticketssold field that standardizes distinct count of tickets sold, used in 85% of queries, and is a slow computation. NOTE: Season ticket buyers often bought merchandise as guests (for convenience). Marketing saw these as new customers and spammed them - annoying VIP customers. This standardization created an identity graph - so they can offer discounts instead. The process, which Antigravity figured out mostly by itself, was to parse the SQL into an abstract syntax tree (AST), extract a set of features, map them into clusters (archetypes), and analyze them to create the middle layer tables. [](https://pavankumart18.github.io/sql-analysis/) SQL queries can reveal organizational culture and misalignment - which is cool! But also: This took a few hours. Pavan has no data engineering experience. RIP, Data Engineers.

RIP, Data Engineers


Indian TV series now dominate the highest-rated recent IMDb titles, marking a real shift in where prestige storytelling is happening.

[](https://sanand0.github.io/imdb/#Year=%5E202) If you look at the IMDb titles with a 9+ rating and 50K votes this decade, there are only 4 entries. Every single one of them is an Indian TV series. | Title | Votes | Rating | | --------------------------------------------------------------------------- | ------: | -----: | | Aspirants | 316,390 | 9.1 | | Scam 1992: The Harshad Mehta Story | 166,400 | 9.2 | | Sandeep Bhaiya | 76,586 | 9.1 | | Sapne Vs Everyone | 74,342 | 9.3 | This is a new phenomenon. Last decade, there was only one Indian TV series in the same list: TVF Pitchers. [](https://sanand0.github.io/imdb/#Year=%5E201) | Title | Votes | Rating | | ------------------------------------------------------------------- | --------: | -----: | | Game of Thrones | 2,464,912 | 9.2 | | Chernobyl | 966,693 | 9.3 | | Attack on Titan | 634,731 | 9.1 | | Planet Earth II | 168,129 | 9.4 | | Cosmos: A Spacetime Odyssey | 135,242 | 9.2 | | TVF Pitchers | 76,241 | 9.1 | | The Chosen | 61,014 | 9.1 | | Our Planet | 57,815 | 9.2 | | Blue Planet II | 52,847 | 9.3 | ... and none ever before. Four out of these five are by TFV: The Viral Fever, which seems to have cracked the code for high-quality TV series. They're highly relatable to the digital natives, who are very IMDb rating-sensitive and the fans flock to rate them highly. The growth of the Indian OTT market and high-speed Internet (the Jio effect) has also increased access dramatically. COVID lockdowns helped, too, I guess. Plus, these are available for free on YouTube - no HBO/Hotstar subscription required. This is the decade of Indian TV series, clearly. (And I haven't seen a single one!)

Rise of the Indian TV Series


General-purpose launchers like Rofi can beat more powerful keyboard remappers in day-to-day usefulness because simpler tools often fit real workflows better.

Kanata might be the most useful tool I can't find a use for. It's a cross-platform keyboard mapper. Some cool features: Make any key a modifier. Ctrl, Shift, Alt, etc. are modifiers. But we can make it so that pressing Space + I/J/K/L maps to Up/Left/Down/Right. Chords. You can map any sequence of keys to anything else. For example, Alt + G, then C can type git commit -m"Experimenting" [ENTER]. Ctrl + M, then Down, can reduce the music volume by 10%. Toggles. Double-clicking Caps Lock activates capitalization for the current word, and once you type a non-letter, it turns off. Or double-clicking Ctrl can turn on "gaming mode" where WASD becomes arrow keys, and double-clicking again turns it off. Tap Dance. Double-clicking left-shift can turn on Caps Lock. Triple-clicking turns it off. Quadruple-clicking ... ... and there's lots more. Unfortunately, I have not been able to find a single use in practice. My main bottleneck is that I don't remember the shortcuts. So, instead, I use rofi. Rofi is a programmable menu launcher. The great thing is that I don't need to remember stuff. When I map it to keyboard shortcuts, it pops up a menu and I pick what I need. I use it to: 1: Open any file or browser tab with Ctrl + Alt + F. This is my most used shortcut. It replaces Everything for files, and Chrome Search Tab with a single shortcut. 2: Paste any prompt fragment with Ctrl + Alt + P. This is especially useful when adding a prompt fragment, like Expert Lens in the middle of a prompt, or analyzing call recordings a dozen times a day. 3: Edit the clipboard with Ctrl + Alt + M (for Markdown). This is a killer feature. I often use it to: Copy from email/chat and paste it in ChatGPT as Markdown Copy from ChatGPT and remove the em-dashes and non-ASCII characters Convert Markdown to Unicode for LinkedIn Convert Markdown to rich test for pasting in emails or chat Creating a ChatGPT / Claude / Google AI mode link from a piece of text ... I'm still keen to find a use for Kanata, but for now, my use of Rofi will continue to grow. 19 Mar 2026: The Compose key is meant to combine two keystrokes to create a new character - which Kanata offers as a feature with any key.

Rofi vs Kanata


I built a decision tree classifier to identify regional sambar styles from ingredient datasets. I found that while general accuracy is low, 'sniper' ingredients like kokum or coconut oil provide highly distinct signals for specific regional varieties.

My wife's sambar) tastes different from my mother's. And mine, too. When I cooked as a bachelor, my neighbour would pop by, taste the sambar, and exclaim, "Rasam) super!" Surbhi's Day 5 of the 30-day challenge was about Sambar which inspired me to take her dataset and create a decision tree for which state a sambar recipe is from based on its ingredients. ChatGPT started with 68 recipes and built a tree at 41% accuracy. As we added more recipes: | Recipes | Accuracy | | ------: | -------: | | 68 | 41% | | 293 | 42% | | 361 | 55% | | 406 | 54% | ... the accuracy wasn't improving all that much. Here is the classifier script: sambarfftree.py. You can run it via: But a ingredients are snipers: rare, precise, devastating. Kokum or goda masala -> Maharashtra. 32 for 32 in one run. Perfect. Sesame/gingelly oil -> Tamil Nadu. 28 for 32. Strong. Coconut oil + shallots -> Kerala. 22 for 29. Moong dal + no mustard seeds -> Andhra. 31 for 36. Better than garlic. Byadagi chillies -> Karnataka. 6 for 7. Tiny sample, but clean. But without some of these strong signals, the sambar could be from anywhere. Better to abstain when unsure. Here is the classifier that allows abstentions: sambarfftreeabstain.py and the dataset I used. You can run it via: Only about a third of recipes have a clear signal. Incidentally, Coconut alone is not a Kerala signal. It's more "west coast". | State | Uses grated coconut | | ----------- | ------------------: | | Karnataka | 60% | | Kerala | 58% | | Maharashtra | 32% | | Tamil Nadu | 24% | | Andhra | 14% | Garlic is not Andhra either. In one run, garlic + no coconut was a 50-50 split between Andhra and Maharashtra. Rather than states, it's better to think of styles. | Style | Ingredients | | ------------------------ | ----------------------------------- | | Amti | kokum, goda masala | | Tamil tiffin-sambar | sesame oil, sambar powder, tamarind | | Kerala coconut-tempering | coconut oil, shallots | | Andhra pappu/charu | moong dal, less mustard | | Karnataka sweet-roasted | byadagi, jaggery, coconut | Maharashtra is easy to identify if it's amti style. Without kokum or goda masala, it's generic sambar. Tamil Nadu sambar has two distinctive styles: sesame/gingelly oil; or sambar powder + tamarind. With all of this, we could identify the state only about one-third of the time based on 2,000 recipes. But we can identify the distinctive styles from their ingredients, when it's present. Like my bachelor-days sambar, which was missing dal. (No one told me sambar needs dal.) And my neighbour could identify it instantly. As rasam.

Sambar Styles


Different combinations of scepticism and humility produce distinct thinking styles, each useful in some contexts and damaging in others.

High Scepticism + High Humility = Scientist. Editor. Indecisive. "Let's test it." Good for high-stakes, irreversible decisions. System 2 thinking is slow and effortful. But if you do this too often or too long, you miss the window or other opportunities. High Scepticism + Low Humility = Critic. Troll. Red Hat. "You are wrong." Good for stress-testing and auditing. To prevent/anticipate failures. But it's toxic and demoralizing if you do it too much. Low Scepticism + High Humility = Intern. Follower. Cultist. "Tell me what to do." Good for rapid learning and emergencies. To learn patterns from a master or obey the firefighter's orders. But without scepticism, you're manipulable and a vector for bad ideas. Low Scepticism + Low Humility = Bureaucrat. Visionary. Fanatic. "I know it." Good for action under uncertainty, and sales. Drives a bias for action. Irrational confidence helps transfer beliefs. But fanatics / bureaucrats can accelerate / decelerate dangerously. We are each of these at different times. Each has its place.

Scepticism and Humility


I tested how Gemini and ChatGPT handle complex text in images by prompting for a Scrabble board. Both models failed with nonsensical spelling, incorrect point values, and broken board layouts, highlighting persistent issues in AI image generation.

AI image generation still has a long way to go. Here are two images generated by Gemini and ChatGPT from the same prompt: "Create a funny scrabble board of dysfunctional family relationships!" Gemini It's probably showing off, with coffee stains, and spelling "DYSFUNCTIONAL" right. But "ABLOMY"? "PASSIAVE"? "RGUCTSVA"? "SORDSP"? Most of the vertical letters are wrong. Some horizontals ("DTENSION"?) are off, too. Also: "Z" has 2 points? "C" has "C" points? "DOUBLE STTER SCORE"? "UUT SCORE SCORE" instead of "TRIPLE WORD SCORE"? But one thing is clear, the number of times "DOUBLE STTER SCORE" appears indicates that it does some mental copy-pasting! ChatGPT This is almost as bad. "FAKEHUY"? "MREGSUUEAHL"? The verticals are worse than the horizontals, but some horizontals are off, too. "DISAPPOINTI"? "THERPY"? "INLAWS" are hanging outside the board. The "TRIPLE WORD" at the bottom right and bottom left are not at the corners, and are missing a "SCORE". More importantly, some of the letters aren't printed right. Overall, slightly fewer errors, but slightly poorer style, too. LinkedIn

Scrabble image generation


Self-hosted search infrastructure like SearXNG can give LLM workflows cheap, privacy-preserving web search capabilities without depending on paid search APIs.

While exploring resonant computing tools, I discovered SearXNG, a self-hostable metasearch engine, which aggregates results from multiple search engines. Searching for "Wikipedia" shows a Google-like results page. It lets you search using APIs without needing to buy API keys and without being tracked. Pretty useful for research, people discovery, etc. when combined with LLMs. Setting it up for API use seems easy (thought Gemini got it wrong twice): Now, you can run: ... which returns a JSON like this: There are many public SearXNG instances. Google seems to be blocked on many of these, but Brave, DuckDuckGo, and others seem to work fine. That leads me to Vane which is a self-hostable Perplexity clone! A hosted version is available at Perplexica.io. I tried a few questions and compared with Perplexity / Gemini using GPT-5 nano -- a really cheap model. 🟢 It solves multi-hop queries. Which company acquired the data visualization firm Gramener in late 2023, and what is the current public stock ticker and market capitalization of that acquiring company? A: The data-visualization firm Gramener was acquired in November 2023 by Straive. Straive is a private company owned by BPEA EQT, part of the EQT group. Because Straive is privately held, it does not have a public stock ticker, and its market capitalization is not publicly disclosed. 🟢 It catches wrong questions. Summarize the findings of the April 2025 paper 'Agile Methodologies in High-Latency LLM Architectures' by Dr. Aris Thorne. A: Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else? 🔴 It doesn't get the latest data. Summarize the latest blog post on my website s-anand.net. A: I can do that. To ensure accuracy, I’ll need to fetch the latest post from s-anand.net and summarize it with key takeaways and insights. Would you like me to fetch the latest post directly from the site now, or you provide the post URL or paste the content here? Q: Fetch the latest post directly and give me a 1 para summary A: The latest post on s-anand.net is "Education Blog embeddings map," published on Tue, 17 Mar 2026... Though Vane got the last question wrong, Perplexity and Gemini got it wrong as well! So I guess it's a good, comparable alternative.

SearXNG and Vane


My interactive map story illustrates how Bagmane Capital's stringent security transformed a simple 14-minute walk into an hour-long ordeal. I detail the frustrations of navigating complex campus access, leading to delays and a missed lunch.

A fourteen-minute walk took me over an hour. Scroll inside the map below, or open it full-screen . I was staying at The Curzon Court, Brigade Road. I needed to be at Microsoft Luxor North Tower for a 2 pm workshop. So I came over to Seetharampalya Metro Station and seated myself at Fairfield by Marriott by 11 am. At around 1:10 pm, I thought it best to head to the venue. It was a 14 minute walk. That would give me half an hour to have lunch. I skipped breakfast, too. Unfortunately, the security guard at Bagmane Capital Gate 3 told me that this was the back gate. Visitors must register at the front gate near Sri Vishnu Palace. That's 2 km away. But since I can't go through the campus, it's 4 km away. I called the host and let them know I'll be late. After ordering a Rapido bike, hunting gate after gate for the right one, I managed to get to the Bagmane Capital front gate at 1:50 pm. The bus would arrive at 2 pm. The workshop was at 2 pm. It was a 24 minute walk. Since I brisk-walk 25% faster than Google Maps, I could be there by 2:10 pm by walk. Bus was uncertain. So I brisk-walked. And ended up in my own workshop 15 minutes late. Without breakfast. Or lunch. After the workshop, I walked out via the Gate 3. The security turned me around. I turned around. But after 5 minutes, I turned back. I took off my visitor badge and walked out. He shouted at me to turn around. I kept walking. He followed me, shouting. I kept walking, tiredly. He called the security at the next check, who stood in front of me, blocking me, and asked what I thought I was doing. "I'm just going out," I said, tiredly. And walked around him. He followed me, shouting. I kept walking, tiredly. I had lunch at Bug & Bean Cafe. Unfortunately, their chef was unavailable, so most of the interested dishes were unavailable too. I had a peri peri paneer sandwich.

Security at Bagmane Capital


I discovered hidden LLM capabilities by asking models like Claude to identify creative uses for their built-in tools. This led to generating stunning algorithmic videos using ffmpeg fractal filters, Python L-systems, and complex cellular automata.

Q: "How do we learn what we can do with AI agents?" Me: "Ask them!" I mean, they are probably aware of their abilities. They can search online for how other people are using them. They have access to tools (connect to GMail, write & run code, etc.) which they're aware of, and even if not, can try out. Asking them seems a useful way of figuring out how to use them. For example, I didn't know that ffmpeg (which ChatGPT, Gemini, Claude, etc. can run) can visualize audio using filters. They could create a bunch of stunning visualizations as a video compilation. So, I told Claude: I did not know ffmpeg could visualize audio via filters...\ You have a container environment with a set of tools installed and you can run commands.\ Identify creative ways in which the tools you have access to can be used...\ ...\ Fact-check by cursorily verifying the command options...\ But no need to implement any of these...\ BLOW MY MIND!! It gave me 125 ideas from drum patterns of log timestamps, directory structures as artistic graphs, frequency domains of images via Fourier transforms, morphological image erosion/dilation effects, and a whole bunch of things I've never heard of. It was too much, so I didn't bother. (I'll read later.) Implement the most visually impressive among these. And the result was a stunning video compilation: It generated these 10 purely algorithmic (no external assets) visualizations: 1. Mandelbrot Set via FFmpeg's mandelbrot filter: Deep zoom into the famous seahorse valley, revealing infinite complexity from z² + c 2. Sierpinski Carpet via FFmpeg's sierpinski filter: Recursive self-similar fractal pattern that animates through chaos game iterations 3. Game of Life via FFmpeg's life filter: Conway's cellular automaton with glowing cells and mold trails showing emergent complexity from 4 simple rules 4. Rule 30 via FFmpeg's cellauto filter: Wolfram's elementary cellular automaton that generates apparent randomness from deterministic rules 5. Domain Coloring via Python + NumPy: Complex function visualization where hue represents angle and brightness represents magnitude, morphing through z², z³, and rational functions 6. L-Systems via Python + PIL: Three fractal trees grow algorithmically using Lindenmayer system grammar rules - pure mathematical botany 7. Barnsley Fern via Python chaos game: 500,000 points plotted using an Iterated Function System, emerging from randomness into a perfect fern 8. Julia Set via Python + NumPy: Dancing fractals as the complex parameter c traces a wobbling circle, continuously morphing fractal boundaries 9. Plasma Effect via FFmpeg's geq expression filter: Real-time interference patterns using layered sine waves in RGB channels 10. Gradient Spiral via FFmpeg's gradients filter: Six-color rotating spiral with 8x speed, creating hypnotic color field animation ... with cinematic title cards (fade transitions, credits) in a 1080×1080 square format perfect for social media. I learnt at least a few things from this: 1. The tool side. I now know that ffmpeg has built-in fractal capability. Fractals have fascinated me since I was 12. This is something to explore. 2. The technique side. I'm learning new terms like "temporal slit-scan photography" - used to create time-slice effects like bullet time in The Matrix, using ffmpeg. Or "music chord visualization" using neato, or capturing packet flow data using tcpdump to visualize network traffic, etc. I would never have thought of these, but the capabilities are in my hands. I think there's benefit in just spending time with LLMs, asking them (in different ways) what they can do, and what would help, interest, or even amuse us. PS: ChatGPT's response to this was a bunch of good ideas and a tiny 0.5 second Mandelbrot video. Gemini shared a tiny list of 10 ideas (read them all) but made up with this brilliant Veo-generated video. LinkedIn

Self-discover LLM capabilities


Music-generation tools can personalize ceremonial communication in surprisingly effective ways, turning routine acknowledgments into memorable experiences.

Lyria (Gemini's new "Create Song" feature) is helping me in new ways. Earlier this week, it created a jingle for my talk. Yesterday I ran an AI Workshop for IAS officers. As part of that, I asked Gemini: Create a soulful vote of thanks (with patriotic Indian music playing in the background) naming each of these people. ... and listed each person in the workshop. The song began... (Listen to the song) ... with these lyrics: The morning sun rises over the secretariat corridors,\ illumining the echoes of long nights spent in duty. ... it began. Then, it went on to their names. To Ms. Vatsala Vasudeva, for steady hands in every storm.\ To Shri Shyamal Misra, for the silent strength of leadership. It was in a western accent, but by now, the audience were looking at each other, pointing out as names were mentioned - with surprise and delight. To Shri Amit Rathore, for the vision that breaks through the haze.\ To Shri V. Shashank Shekhar, for the quiet pursuit of excellence.\ To Shri Pankaj Kumar, for building bridges of progress.\ To Shri Robert L. Chongthu, for the pulse of the hills in the heart of the city.\ To Shri Sanjeev Hans, for the clarity of purpose in complex paths.\ To Shri Subodh Kumar Singh, for the resolve that never falters.\ To Shri Asheesh Sharma, for the foundation laid with integrity.\ To Shri Ramesh Kumar Sudhanshu, for the spark that inspires the team.\ To Shri Kaling Tayeng, for the voice of the frontier in our council.\ To Shri Manish Thakur, for the wisdom that informs every decision.\ \ We stand as one, guided by the compass of our republic.\ Each name a pillar, each service a prayer for the nation.\ For the republic we serve, for the people we honor. For a minute, I thought it was done, but we were only mid-way through. To Shri Devesh Kumar, for the dedication beyond the call.\ To Ms. Aradhana Patnaik, for the grace of leadership under fire.\ To Ms. Himani Pande, for the brilliance of thought and action.\ To Shri Rahul Sharma, for the steady hand on the rudder.\ To Shri Rajeev K. Mital, for the legacy of selfless work.\ To Shri Ranjit Singh Deol, for the grit that transforms challenges into victories.\ To Dr. Sirra Karuna Raju, for the healing touch of administration.\ To Shri Anandrao Vishnu Patil, for the roots that hold us to the soil.\ To Shri Sudhir Kumar, for the light that guides through the complexity.\ To Shri Subodh Yadav, for the courage of conviction in every file.\ To Dr. Richa Bagla, for the wisdom that creates space for growth.\ To Ms. Indra Mallo, for the spirit of the Northeast in our hearts.\ To Shri Nilkanth S. Avhad, for the depth of knowledge that serves the many.\ And to Ms. Mugdha Sinha, for the innovation that shapes the future of our service. It had covered them all. In well under three minutes. The comments were personalized and felt accurate, somehow. Not sure if it's real - it might be like fortune-telling, where we find non-existent patterms, and totally enjoy it! Thank you for the years of service. May the path forward be as bright as the morning sun. Jai Hind. At "Jai Hind", I had goosebumps. And the audience broke into an applause. We should all do this sort of thing more often. 🙂 UPDATE: 14 Apr 2026. Here are several ideas on where else we might use songs: Celebrations. Personalized birthday songs. Or anniversary. Or a celebration - like graduation, promotion, closing a deal, delivering a project, thanking team members, etc. Tough situations. Before a difficult conversation / meeting, an apology, firing someone, a couple's argument, a protest anthem, etc. Updates. As an earnings call, status update, project update, contract summary, etc. I used it to narrate a data journalism process using Gemini with this prompt: Narrate a summary of this process for creating Statoistics for the Times of India in a light, engaging way, as if you were explaining it to a friend.\ Think about the most important points, structure it logically so that the narrative is easy to follow, then generate the song. ... followed by: Narrate, don't sing.\ Less music, more focus on the voice.\ Far simpler narrative - EXPLAIN to someone who doesn't understand ANYTHING of the context. The result is pretty good! UPDATE: 16 Apr 2026. This is proving more useful than I thought. A colleague shared a song thanking his team for their contributions. Another colleague converted classroom videos into rap songs summarizing the session - making this more memorable. I created a narrative songs sharing (rhythmic) feedback for teachers based on their transcripts - making this a less scary process.

Singing a Vote of Thanks


Names influence how software feels and spreads, because a tool’s emotional and linguistic resonance can shape adoption as much as its functionality.

Software naming has power. I first became aware of this when a friend commented how much he enjoyed starting Windows 3. "Win," he said. "I just love typing that!" I felt this this again recently with just. Can you feel it? Actually, I just like to say "Just..." Just like Hobbes loves saying "Smock"

Software Naming Has Power


Even when two models can complete the same task, they differ noticeably in narrative quality, visual ambition, and implementation details, so model choice meaningfully affects outcomes.

Based on several (i.e. two) recommendations, I subscribed to MiniMax. At $10/month, you get 1,500 requests every 5 hours and 15,000 every week. That's a LOT! Using the same prompt I had Claude Code generate two data stories: The first paragraph, by Claude Sonnet 4.6 The first paragraph, by MiniMax M2.7 Here's my comparison of the two. It's partly based on Claude Opus 4.6's comparison but I felt the same way. | Dimension | Sonnet 4.6 | MiniMax M2.7 | | ----------------------- | ------------------------------------------- | --------------------------- | | Narrative quality | Immersive | | | Content coverage | Comprehensive | | | Visual design | More varied, ambitious bands, no errors | | | CSS | | Better use of CSS variables | | Tooltips | Richer, comprehensive, data-tip | | | Modals/popups | Richer, more types, more details | | | Animated SVGs | Richer, visually distinctive, sophisticated | | | Slides | Larger readable grid | | | Code samples | XML vs JSON-LD side-by-side | | | External references | Far more authoritative links | | | Accessibility | ARIA, keyboard, alt text | | | Generation quality | Clean, no Chinese character artifacts | | In other words, Sonnet 4.6 is a clear winner on nearly every dimension. But the cost factor is too big a difference to ignore. It feels like a 10x difference. So the question probably is: what can I do with a reasonably good model that can generate 10X the quantity at the same price? (To be fair, GPT 5.4 Mini at 75c/MTok and Gemini 3 Flash at 50c/MTok are not far from MiniMax M2.7 at 30c/MTok - but their code quality seems lower. I generated a Codex - GPT 5.4 Mini version and while it has fewer errors it has even less visual style and narrative quality.) Computer use feels like a candidate. I used Rodney to research what drives my LinkedIn reach & engagement, and update my SKILL.md. I could try experimenting with sub-agents, doing bulk analysis (e.g. of code, transcripts, images), data discovery, etc. The crux of these is parallelization - something I have not explored much. It looks like twe're entering an era where there are two kinds of use cases: high-quality for the best models, large-scale for the cheap models. The question is: how do I make the most of both? Source Code UPDATE: Cheap models (or at least MiniMax M2.7) may be far less useful than I thought. I used MiniMax M2.7 with Claude Code for: 24 Mar 2026: Email analysis. I had it review my 15-year Gramener email archive for key events for a book. But it fetched too few results, so I switched to Codex (GPT 5.4 xhigh). 25 Mar 2026: Capture The Flag. But it couldn't solve problems, so I switched to Codex (GPT 5.4 xhigh). 25 Mar 2026: Songs download. I had it find popular Tamil songs and download them from YouTube. But the metadata was poor, so I switched to my own song collection. 26 Mar 2026: LEAN proofs. It started making too many basic mistakes (spelling errors in code!) I switched to Copilot (GPT 5.4 xhigh). 29 Mar 2026: Calvin & Hobbes image analysis. It couldn't even read the images and confidently saw "Hobbes stuck to a baseball bat with Mom & Dad" in a strip that only featured Calvin & Susie. The main problems are: It errs confidently. It doesn't do ROT13 well. It can't see images. It mis-understands error messages. It assigned my earlier company's incorporation date (NGIMAGE) as Gramener's. It made Vijay Sethupathi a lyricist. When a process failed with just 12% coverage, it just continued. It just reported what's done, not what's missing. It's a slow learner. For picoCTF, it had the pieces but couldn't assemble them. Claude Code resets the cwd, but it never switched to absolute paths. It mixed uv run with python3. It rewrites, resets or waits instead of diagnosing. It's best for simple, single-step tasks. Not where knowledge, accuracy, research matters. When using it, keep tasks small and verify correctness, completeness.

Sonnet 4.6 vs MiniMax M2.7


AI makes it easier to assemble fresh stories quickly, which enables a more spontaneous speaking style and reduces the need for heavily scripted preparation.

I deliver about 3-5 talks a month and usually prepare for them. Thanks to AI (but even otherwise), I have a steady stream of new content. So, I just to assemble the story. For example, in my TEDx Whitefield talk "Prisoners of Birth", I shared the impact of name, gender, lineage, place, and time of birth. I didn't execute any new analysis. I just cherry-picked disparate analyses into a theme. (Took me three days to plan, though.) But repetition bores me. I've known this since 2002 when I tried coaching CAT students. Conventional teaching isn't for me. And talks get boring too. So, often, I ad-lib. Impromptu. Deliberately under-prepared. (Panels are good practice for this. I must try improv next.) This has a surprising benefit. In the pressure of the moment, inspiration can strike. Like it strikes Calvin For example, yesterday, at an internal Straive fireside chat, I went completely off-script and answered a question on the chat about the benefits of Gemini. The sort of things that you can do with Gemini is amazing. And what I do ... is to poke ... what can I do here? What's in here? What's in here? Recently, I saw that it can create music. And some of this music is stunning! Now, I had to think of something interesting to do with the music. Despite weeks of exploring Lyria, I never found a use for it, let alone "stunning". Now I had 3 seconds. Then, inspiration struck! Now, we had music at the beginning of this Zoom call. Why does that need to be something that is unpersonalized? I went to ChatGPT and asked it to create a personalized jingle for the talk I was delivering, providing it my name, title, talk topic, etc. - something the L&D team could replace their stock jingle with. And it was pretty good, actually. That's a novel and a useful idea - something many people can use! It's times like this that I really enjoy delivering talks. This is why I live-code. This is why I pause for questions. This is why I'm thrilled when I have no clue of the answer. Pretending to be know is fun and all that, but the kick of discovery on stage -- that's something else!

Speaking unprepared


AI can help not just draft a conference proposal but also analyze the submission landscape immediately after filing it, which sharpens positioning.

10:20 am. After submitting my VizChitra 2026 talk proposal, did a quick analysis of the submissions. 1. Copy the HTML from the submissions page and paste into Gemini. 2. Ask it: "Given this HTML, share a JS snippet I can copy and paste into DevTools that will return an array of objects containing all the useful information about each submission." 3. Paste the JS snippet into DevTools and get the structured result. Here's the breakdown of submissions (excluding exchibitions): Community Craft Work Tools Talks 10 9 8 3 Workshop 4 2 1 3 Dialogues 1 0 1 1 There's only one whitespace: a Dialogue for "Visualizations as Craft". 10:40 am. Obviously, I have to submit my next proposal. Partly out of fear that my other proposal will be rejected in a the crowded "Visualizations as Craft" category, and partly to see if I can write a cool blog post about "How I used AI to maximize submission acceptance". So, I tasked Gemini 3 Pro, Claude Opus 4.6 - Extended Thinking, and ChatGPT 5.2 Extended Thinking - Web Search: I want to submit a VizChitra 2026 proposal for a Dialogue in the "Visualizations as Craft". Here are the CFP details and other dialogue proposals for your reference Research online for about the latest trends in AI in the craft of visualization and propose 10 topics for a Dialogue in the "Visualizations as Craft" category. Finally rank order these topics along with reason why this would be most useful for the community. Then, rather than read it, I asked each other: Here are the suggestions from other AI agents. Think about their opinion, factor in points that are better than what you suggested, drop what's not as good, and recommend the top 3 topics. Also mention who had the best topics among you and the other two AI agents and why. ChatGPT and Gemini said Claude had the best ideas. Claude said Gemini. "The Curator's Dilemma" bubbled up as the top idea. Then I asked each: Which agent's writing style (you vs the other two) would be best to frame a winning proposal for "The Curator's Dilemma"? Gemini and ChatGPT voted for themselves. Claude said none of these - write your own. The Claude: Structured, thorough, and thoughtful with a poetic sensibility, but can come across as impersonal or overly soft — more like a well-organized conference paper than a passionate human voice. Gemini: Punchy, direct, and provocatively sharp with a pragmatic edge, but can lean too declarative and confident, leaving little room for open-ended exploration. ChatGPT: Highly analytical and structured with reviewer-friendly specificity, but tends toward a generic, corporate tone that lacks warmth, humor, and creative soul. Anyway, I picked Claude and told it: OK, write the proposal in for it, for now in your voice, and then I'll rewrite it in my voice. 11:10 am. I converted the text to ASCII to prevent obvious AI detection like em-dashes, and started editing it the way I'd write it (the content was really good, actually, so editing was easy) 11:30 am. Finished editing. I was pleasantly surprised to find my co-founder Ganes Kesari's Sloan Review article on "The Enduring Power of Data Storytelling in the Generative AI Era" as a reference. I might even have added a sentence or two to it. Small world! It was also impressive how little I had to edit. It think it's because: This is a really good topic that resonates with me. I really have this problem and want to learn about it. It clearly knew how to run a workshop better than I did. E.g. I would have picked 20 visualizations for the participants to review. But it knew we'd run out of time. It writes really well. More verbose than me, but I found it hard to edit out the emotional punch I got from the phrases. Anyway, the proposal will be on the submissions page soon. It takes a little over an hour to come up with a good proposal if you know the topic well. So: experts in any field - you have less excuses not to submit more proposals. (Deep research prompt: As an expert in [TOPIC], suggest where I could submit proposals for talks.)

Submitting an AI-ded VizChitra Proposal


Consistent AI-generated comics can make coursework more engaging when reusable prompts and reference images preserve character continuity.

I use comics to make my course more engaging. Each question has a comic strip that explains what question is trying to teach. For example, here's the comic for the question that teaches students about prompt injection attacks: The Comic For each question, I use this prompt on Nano Banano Pro via Gemini 3 Pro: ... along with this reference image for character consistency: [](https://gemini.google.com/share/2c8da8e3d7c3) (These are based on real classmates!) For other questions, I just replace the bottom part. For example, for the question on prompt debugging, I used: [](https://gemini.google.com/share/e01c29cc12f6) Generating these prompts was quite time-consuming, so I delegated that to GitHub Copilot via Claude 4.5 Sonnet (which has a reasonable sense of humor) by giving it a few prompts as examples and asking it to generate more. markdown ` This generated 3 prompt variants for each of my 30 questions, and at least one of the variants turned out pretty good! I used almost verbatim in my graded assignement. So, the overall process is: 1. Use photos to generate a sample comic strip 2. Use exam questions to generate 3 comic prompts per question Manually select / edit the best prompt 3. Use the comic prompt + reference image on Gemini 3 Pro using Nano Banana Pro to generate the final comic strip Manually review and re-generate if needed The two manual steps are still essential for comics I'm satisfied with and they take the bulk of the time. But honestly, I enjoy reading the strips, so it's not a big deal!

TDS Comic Generation


In an AI-enabled course, released assignments remain fluid because real-world breakage and exploits force rapid iteration even after publication.

Graded Assignment 1 (GA1) for the Tools in Data Science course is released and is due Sun 15 Feb 2026. See If you already started, you might notice some questions have changed. Why is GA1 changing? Because some questions don't work. For example: We replaced Claude Artifacts with a Vercel question because Claude won't allow a proxy anymore. A question had unintentionally wrong instructions.\ (Some questions have intentionally wrong instructions, but those are, ...um... intentional). Someone changed an API key. ... etc. When will GA1 stabilize? Probably by end of day, Sun 9 Feb 2026? Should I wait? Maybe not, since only some questions may change, and submitting early increases scores. Will other exams change similarly? Probably. We'll email the IITM and Public announcement groups. But this is unfair! Exactly what I tell clients when they change scope mid-way. They never listen. If you haven't started, here are more FAQs. Why no study material? Last year, AI wrote most of the study material. Rather than copy-pasting that, I decided to give you the prompts directly. See the "Ask AI" section above each question. When will Project 1 be released? I planned to release it on Fri 6 Feb, but GA1 issues kept me busy. It should be out by Wed 11 Feb 2026.

TDS Jan 2026 GA1 released


In an AI-rich exam environment, question difficulty depends less on traditional rigor and more on whether tasks are designed to resist trivial delegation to models.

Tools in Data Science has a remote online exam (ROE). It has a tough reputation. We conducted one today. Here's how today's ROE unfolded. The TAs had created 13 questions and shared it with me yesterday. This morning, I tried solving them. At first glance, it looked scarily hard! But I just jumpted down a few questions, and found that five questions were trivial, i.e. I just used the "Ask AI" button to copy the question into ChatGPT and it gave me the answer. 🟢 06. Layered Encoding Challenge (2.0) is one-shot: ChatGPT 🟢 07. Region Containing Point (1.0) is one-shot: ChatGPT - see second chat 🟢 10. Fix Broken JSON File (1.0) is one-shot: ChatGPT 🟢 11. Cross-entity disambiguation (1.0) is one-shot: ChatGPT 🟢 13. Record Terminal Session with asciinema (0.5) is one-shot: ChatGPT For another four, I needed to just make sure I uploaded the files or HTML: 🟡 03. Regex Golf Challenge (2.0) is one-shot but it's better to download and upload the text files, maybe, than copy-paste: ChatGPT 🟡 04. Maze Solver with Constraints (2.0) is one-shot but needs you to upload the image and a good vision model: ChatGPT 🟡 05. Cipher Trail (2.0) is one-shot but needs you to provide the secret HTML: ChatGPT 🟡 12. Simple Question (0.5) needs you to provide the secret HTML: ChatGPT Two questions confused ChatGPT a bit, and it needed some nudges. There is real learning here. 🟠 08. Reorganize Files with Shell Commands (1.0) is hard because of Unicode issues and the extra README.md students should delete. Asking for variations is the learning: ChatGPT 🟠 09. Refactor Python Code with VS Code (1.0) takes few attempts (question is imperfect, intentionally) but error messages are excellent, so iterative feedback is the learning: ChatGPT One was pretty hard and ChatGPT struggled with it. 🔴 02. Korean Speech Dataset API Validation (5.0) actually requires work. At first, ChatGPT refused ethically. When reframed, it tried, but the human-in-the-loop (me) was too slow. So I used Codex, which literally hacks towards the solution! It searched online for existing solutions, read the GitHub discussions for this topic, found my browser tab and started testing itself, ... and solved it in 10.5 min! This leaves the one question that AI can't solve: 🔴 01. Collaborative Token Exchange (5.0) asks you to collect "tokens" from other people and share it. I asked Codex to hack it, but after an hour (of logging into my personal account, my IITM account, even my father's account, exhausting my token limits, and totally psyching me), it declared the question unhackable. Based on this, the instructors, teaching assistants and I decided that: This exam is too easy with AI help. Combined with collaboration, it's ultra-easy. Therefore, let's add some old questions: 14. FastAPI Time Series Caching (0.5) 15. AI Video Attendee Extraction (0.5) Thanks to Project 1, people already collaborate at scale. So let's ask for 500 tokens instead of 100. We deployed the exam at 12:00 pm IST, an hour before the scheduled time. The hackers (e.g. who scan the source code, or change their system clocks) could see the questions earliy and started sharing and solving them. The TAs said, "Anand, shall we add more questions to make it tougher?" I said, "No, it's OK. The ROE has built a reputation for difficulty. Let that change. Let them have an easy exam." "If they're going to split this in groups and have coding agents solve it, they'll score full marks in 10-15 minutes," I said to myself. When the exam ended, this was the score distribution. There were several surprises here. Firstly, 9 questions were repeats. Yet, barring one question, they scored lower, though they appeared in equally tough ROEs in the past. | # | Question | % | Previous % | Previous exam | | --: | ------------------------------------------------------------------------------------------------------------------------------- | --: | ---------: | ------------------------------------------------------------------------------------------------------------- | | 14 | ⚪ FastAPI Time Series Caching | 8% | 39% | 2025 Sep ROE | | 15 | ⚪ AI Video Attendee Extraction | 12% | 64% | 2026 Jan GA3 | | 11 | 🟢 Cross-entity disambiguation | 13% | 64% | 2026 Jan GA4 | | 7 | 🟢 Region Containing Point | 15% | 38% | 2025 Sep ROE | | 9 | 🟠 Refactor Python Code with VS Code | 17% | 57% | 2026 Jan GA1 | | 13 | 🟢 Record Terminal Session with asciinema | 21% | 66% | 2026 Jan GA1 | | 10 | 🟢 Fix Broken JSON File | 30% | 64% | 2026 Jan GA1 | | 12 | 🟡 Simple Question | 41% | 64% | 2026 Jan GA1 | | 8 | 🟠 Reorganize Files with Shell Commands | 53% | 38% | 2026 Jan GA1 | Just as surprisingly, they scored higher than these on 3 of the 5 new questions: 59%: 🟡 03. Regex Golf Challenge (2.0) (253 / 430) 59%: 🟡 04. Maze Solver with Constraints (2.0) (252 / 430) 54%: 🟡 05. Cipher Trail (2.0) (233 / 430) One new question ended up being almost the hardest question - despite it being one-shot-table for ChatGPT (GPT 5.4, extended thinking). 2%: 🟢 06. Layered Encoding Challenge (2.0) (9 / 430) The toughest, though, had a 1% success rate. Though Codex could solve it in 10 min, it's a genuinely hard question. 1%: 🔴 02. Korean Speech Dataset API Validation (5.0) (4 / 430) Which leaves us with the collaboration question - the one that AI can't solve. 31%: 🔴 01. Collaborative Token Exchange (5.0) (132 / 430) This question is a whole new dynamic altogether. There were about 5 clear clusters of students, ranging from 5 - 35 students, who were collaborating. They were trading bundles of tokens between themselves. There were a few "super-collaborators" who were doing the bulk lifting. But even with this, the largest correct submission had 84 tokens. The strongest submission was a 51-token submission that 6 students submitted. (I need to study this far more!) Yet, far smaller than even the original 100 token target I had set. Clearly, they aren't collaborating enough. It's surprising how little students were using the "Ask AI" button. 🔴 100 students didn't use it at all. 🟠 100 students clicked on it JUST once. 🟡 100 students used it just 2-5 times. For 15 questions, that's clearly low. 🟢 100 students used it 6-20 times. That's OK 🔵 15 students used it 20+ times. (1 clicked on it 45 times. Clearly loves AI.) Finally, most students saved their results for the first time just before the deadline. The problem is that their system clocks were off, so they got a "late submission" error. BTW, some students used a timing trick for hacking. By setting their system clock late, they can see the exam questions before release. But the submissions are checked only against the server clock. So, waiting until the last minute to save is a terrible idea. That hurt some students. Based on this, here's what I learnt: Pressure makes a difference. In past exams, with similar time pressure, students solved the same questions much better. I think they panic-ed on the first two questions. To be fair, so did I, when I saw them. That's why I started solving from the bottom. LESSON 1: Scan end-to-end. Solve quick-wins (high impact, low effort) problems first. We have no clue what's easy or tough. When different students are using different tools, what's easy for ChatGPT might be hard for Claude and vice versa. Without knowing tool capabilities and usage, this is hard to assess. LESSON 2: With AI, no one knows what's easy or hard. Try for yourself. They aren't using AI enough. Our advice is to use the "Ask AI" button every time. Half the students barely used it once. LESSON 3: Use AI first. Focus on what AI can't do well They aren't collaborating enough. The collaboration question was designed to encourage collaboration. Yet, the largest bundle of tokens shared was 84, far smaller than the 500 token target. LESSON 4: Make friends with classmates. Work together. It helps: now, and in the future. That's worth repeating: 1. Scan end-to-end. Solve quick-wins (high impact, low effort) problems first. 2. With AI, no one knows what's easy or hard. Try for yourself. 3. Use AI first. Focus on what AI can't do well. 4. Make friends with classmates. Work together. It helps: now, and in the future.

TDS Jan 2026 ROE


The project was not just an assignment but a live experiment in how students perform on analytics versus design tasks in an AI era, revealing both strengths and gaps.

TDS Project 1 wasn't just a student project. It was a research and social experiment, too. We tested two skills \- analytics and design. The design tests were diverse -- and students fared worse there. Design may matter more in the AI era, and I'm glad some designs are brilliant. (But not diverse/creative enough.) I also learnt that Gemini beats Midjourney, which beats ChatGPT for image generation. [](https://sanand0.github.io/datastories/tds-2026-01-p1/gallery/) I asked them to contribute to open source. Most PRs were trivial. But five students made a real difference. For example, this PR to Marimo is excellent! Most importantly, they're actively collaborating now - a critical skill in the AI era. One student WhatsApp-ed me: Before this i was not interacting with anyone\ Because of the online nature of this degree\ \ But TDS helped me to connect with everyone\ We are having meet regularly\ We divide questions with each other\ And then we solve and discuss THIS is what I've been trying to teach for 5 years now!

TDS Project 1 was an experiment