<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Shamsuddin Ahmed · Writing</title><description>Shamsuddin Ahmed, senior software engineer in Dhaka: agent harnesses, LLM serving infrastructure, and machine learning for biology. Long-form notes on all three.</description><link>https://shamspias.com/</link><language>en-gb</language><copyright>© 2026 Shamsuddin Ahmed</copyright><atom:link href="https://shamspias.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>Kinetix: An Agent Harness Inside a Clinical System</title><link>https://shamspias.com/posts/2026/08/kinetix-clinical-agent/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/08/kinetix-clinical-agent/</guid><description>Sixty tools, twenty-nine of them mutating, inside a system holding injury records. The Go that enforces one rule: the agent inherits the caller.</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><category>agent harness</category><category>Go</category><category>clinical software</category><category>biomechanics</category><category>validation</category><category>measurement</category></item><item><title>An Agent Is Data, Not Code</title><link>https://shamspias.com/posts/2026/08/an-agent-is-data-not-code/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/08/an-agent-is-data-not-code/</guid><description>Store agents as versioned, validated rows instead of writing them as classes, and rollback, diffs, audit, teams and lessons come free. Here is the bill.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><category>agent harness</category><category>LLM</category><category>architecture</category><category>system design</category><category>AI engineering</category></item><item><title>What the System Refuses to Measure</title><link>https://shamspias.com/posts/2026/07/what-it-refuses-to-measure/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/07/what-it-refuses-to-measure/</guid><description>Three measured refusals in a markerless movement pipeline, the gaps that are still open, and why a clinician should prefer software that says not measured.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>validation</category><category>measurement</category><category>clinical software</category><category>agent harness</category></item><item><title>Finding Sick Plants From the Sky: DINOv2, a Linear Probe, and a Farmer With a Drone</title><link>https://shamspias.com/posts/2026/07/crop-disease-from-the-sky/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/07/crop-disease-from-the-sky/</guid><description>A frozen vision backbone, a linear probe trained on forty photos, and a three-tier fallback so that a drone survey works on day one.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>computer vision</category><category>agriculture</category><category>DINOv2</category><category>linear probing</category><category>transfer learning</category><category>deep learning</category></item><item><title>Triangulation, and How Many Cameras You Actually Need</title><link>https://shamspias.com/posts/2026/06/triangulation-and-cameras/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/06/triangulation-and-cameras/</guid><description>The multi-view path: DLT in enough detail to implement, how many cameras earn their place, and three lessons about evaluating a solver whose truth you cannot see.</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>multi-view</category><category>triangulation</category><category>calibration</category><category>validation</category></item><item><title>From 26 Keypoints to Clinical Metrics</title><link>https://shamspias.com/posts/2026/06/keypoints-to-clinical-metrics/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/06/keypoints-to-clinical-metrics/</guid><description>Two calibrated cameras, DLT triangulation, trajectory filtering, and honest uncertainty intervals: what turns a pose demo into a record a clinician will sign.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>RTMPose</category><category>sports science</category><category>system design</category><category>multi-view</category></item><item><title>Teaching a Camera to Grade Its Own Footage</title><link>https://shamspias.com/posts/2026/05/camera-grades-its-own-footage/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/05/camera-grades-its-own-footage/</guid><description>Camera obliquity is invisible to one lens, so the system infers it from anatomy. Banding its own error by that estimate beats banding by ground truth.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>RTMPose</category><category>validation</category><category>measurement</category><category>sports science</category></item><item><title>Angles Don&apos;t Lie: Measuring a Cricket Bowler&apos;s Action With a Webcam</title><link>https://shamspias.com/posts/2026/05/bowling-biomechanics-pose/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/05/bowling-biomechanics-pose/</guid><description>Joint angles from pose estimation, event detection inside a 100-millisecond delivery swing, and the frame rate that decides what you are allowed to claim.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>MediaPipe</category><category>sports science</category><category>cricket</category></item><item><title>Facing, Sign, and the Error That Mirrors Everything</title><link>https://shamspias.com/posts/2026/04/facing-and-sign/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/04/facing-and-sign/</guid><description>Which way an athlete faces sets the sign of every sagittal angle at once. One bit, 100 out of 100 on 919 comparisons, and why sign errors are not small.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>RTMPose</category><category>validation</category><category>measurement</category><category>sports science</category></item><item><title>Molecular Docking Without the Jargon: A Key, a Lock, and Both of Them Wobble</title><link>https://shamspias.com/posts/2026/04/docking-without-jargon/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/04/docking-without-jargon/</guid><description>What a docking score really is, why the pose matters more than the number, six ways docking lies to you, and where 2026 co-folding models fit.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><category>drug discovery</category><category>molecular docking</category><category>cheminformatics</category><category>structural biology</category><category>bioinformatics</category><category>beginner</category></item><item><title>Why 2D Beat 3D on the Angles That Matter</title><link>https://shamspias.com/posts/2026/03/why-2d-beat-3d/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/03/why-2d-beat-3d/</guid><description>Lifting one camera to 3D sounds strictly better than measuring in the image plane. On sagittal flexion it is worse, and the reason is a free parameter.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>measurement</category><category>validation</category><category>sports science</category><category>multi-view</category></item><item><title>From 400,000 Natural Products to 20 Candidates</title><link>https://shamspias.com/posts/2026/03/screening-400k-natural-products/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/03/screening-400k-natural-products/</guid><description>A funnel from every catalogued natural product down to twenty compounds worth testing, and why the split and the base rate matter more than the model.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><category>drug discovery</category><category>virtual screening</category><category>COCONUT</category><category>cheminformatics</category><category>machine learning</category><category>bioinformatics</category></item><item><title>From Pixels to a Knee Angle</title><link>https://shamspias.com/posts/2026/02/pixels-to-joint-angles/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/02/pixels-to-joint-angles/</guid><description>The whole monocular pipeline for one number, and what the detector&apos;s pixel error costs once you express it in degrees instead of in average precision.</description><pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>RTMPose</category><category>measurement</category><category>validation</category><category>sports science</category></item><item><title>Your Negatives Decide Your Accuracy: 92% That Means Nothing</title><link>https://shamspias.com/posts/2026/02/honest-negatives-peptide-benchmark/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/02/honest-negatives-peptide-benchmark/</guid><description>Random UniProt negatives quietly turn peptide prediction into short versus long. Here is what an honest benchmark costs, and why it is worth paying.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate><category>bioinformatics</category><category>peptides</category><category>benchmarking</category><category>machine learning</category><category>research integrity</category><category>dataset design</category></item><item><title>What &quot;Accurate&quot; Means For a Joint Angle</title><link>https://shamspias.com/posts/2026/01/joint-angle-accuracy/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/01/joint-angle-accuracy/</guid><description>A percentage without a tolerance is not a claim. The full scorecard for a video biomechanics system, by configuration, and why 10 degrees settles it.</description><pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate><category>biomechanics</category><category>computer vision</category><category>pose estimation</category><category>RTMPose</category><category>sports science</category><category>validation</category><category>measurement</category></item><item><title>What ESM-2 Learned That Letter-Counting Couldn&apos;t</title><link>https://shamspias.com/posts/2026/01/protein-language-models/</link><guid isPermaLink="true">https://shamspias.com/posts/2026/01/protein-language-models/</guid><description>A 650-million-parameter protein language model, what its embeddings really encode, and why twenty lines of letter counting still beat it on 13-residue peptides.</description><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><category>bioinformatics</category><category>protein language models</category><category>ESM-2</category><category>embeddings</category><category>transfer learning</category><category>machine learning</category></item><item><title>Safe by Default: Building Agents That Can&apos;t Wreck Your Data</title><link>https://shamspias.com/posts/2025/12/safe-by-default-agents/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/12/safe-by-default-agents/</guid><description>Read/write enforcement, principal scoping, approval gates, sandboxes and budgets: five safety properties, every one enforced in code, not in a prompt.</description><pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate><category>agent harness</category><category>LLM</category><category>security</category><category>prompt injection</category><category>AI engineering</category><category>human in the loop</category></item><item><title>LLM Security in Practice: A Checklist and the Mindset Behind It</title><link>https://shamspias.com/posts/2025/11/llm-security-best-practices/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/11/llm-security-best-practices/</guid><description>The whole series as a checklist, plus the one habit that generates it: assume the model is compromised, and design so that assumption is survivable.</description><pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>agents</category><category>best practices</category></item><item><title>Turning a Peptide Into Numbers: A Tour of the Descriptor Zoo</title><link>https://shamspias.com/posts/2025/11/peptide-feature-engineering/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/11/peptide-feature-engineering/</guid><description>AAC, DPC, DDE, CKSAAP, CTD, PAAC and QSO: every way I know to turn a peptide into a fixed-length vector, and what each one throws away.</description><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate><category>bioinformatics</category><category>peptides</category><category>feature engineering</category><category>machine learning</category><category>computational biology</category></item><item><title>Give the Model Your Verbs, Not Your Tables</title><link>https://shamspias.com/posts/2025/10/verbs-not-tables/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/10/verbs-not-tables/</guid><description>Why intent-named operations beat database schemas, auto-generated OpenAPI specs and one-command MCP servers when you hand an application to a model.</description><pubDate>Sat, 11 Oct 2025 00:00:00 GMT</pubDate><category>agent harness</category><category>LLM</category><category>tool use</category><category>text-to-SQL</category><category>api design</category><category>AI engineering</category></item><item><title>Exfiltration Through the Model&apos;s Mouth: Output Is an Attack Surface</title><link>https://shamspias.com/posts/2025/10/exfiltration-through-model-output/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/10/exfiltration-through-model-output/</guid><description>The model&apos;s output came from your trusted system, so it feels safe. It is not: untrusted input shaped it, and one rendered image can carry your data to the attacker.</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>exfiltration</category><category>prompt injection</category></item><item><title>Peptides 101: The Tiny Molecular Sentences Your Body Writes</title><link>https://shamspias.com/posts/2025/09/peptides-101/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/09/peptides-101/</guid><description>What a peptide actually is, why order and side chains carry the information, and why 13 residues is a different modelling problem from 300.</description><pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate><category>bioinformatics</category><category>peptides</category><category>computational biology</category><category>machine learning</category><category>drug discovery</category><category>beginner</category></item><item><title>Sensitive Data: Masking PII and Keeping Secrets Out of the Model</title><link>https://shamspias.com/posts/2025/09/sensitive-data-pii-secrets/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/09/sensitive-data-pii-secrets/</guid><description>The safest data is the data the model never sees. Masking PII, keeping secrets out of context, and stopping leaks into logs, training, and other users.</description><pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>pii</category><category>privacy</category></item><item><title>What Is an Agent Harness? The Part Everyone Skips</title><link>https://shamspias.com/posts/2025/08/what-is-an-agent-harness/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/08/what-is-an-agent-harness/</guid><description>The five parts of an agent harness: capability surface, meaning, policy, approval and audit. Only two of them are about power.</description><pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate><category>agent harness</category><category>LLM</category><category>AI engineering</category><category>tool use</category><category>architecture</category><category>beginner</category></item><item><title>The Agent&apos;s Blast Radius: Giving a Confused Deputy Hands</title><link>https://shamspias.com/posts/2025/08/agent-blast-radius/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/08/agent-blast-radius/</guid><description>A chatbot that is wrong is embarrassing. An agent that is wrong took an action. The security of a tool-calling agent is the security of what you connected it to.</description><pubDate>Wed, 13 Aug 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>agents</category><category>agent harness</category></item><item><title>The Slowest Kid Problem: How a Super Captain Solves MoE&apos;s Biggest Headache</title><link>https://shamspias.com/posts/2025/07/slowest-kid-moe-straggler/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/07/slowest-kid-moe-straggler/</guid><description>Why a mixture-of-experts layer runs at the speed of its busiest expert, how to measure it, and when predictive prefetching actually helps.</description><pubDate>Fri, 18 Jul 2025 00:00:00 GMT</pubDate><category>mixture of experts</category><category>neural networks</category><category>performance</category><category>straggler problem</category><category>AI</category><category>machine learning</category><category>simple explanations</category></item><item><title>Prompt Injection: Direct, Indirect, and Why Filtering Fails</title><link>https://shamspias.com/posts/2025/07/prompt-injection/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/07/prompt-injection/</guid><description>The signature attack on language models. How instructions hide in the text a model reads, why you cannot filter your way out, and what containment looks like.</description><pubDate>Wed, 02 Jul 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>prompt injection</category><category>agents</category></item><item><title>Why AI Security Is a New Problem: The Model Has No Data Channel</title><link>https://shamspias.com/posts/2025/06/why-ai-security-is-different/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/06/why-ai-security-is-different/</guid><description>Every security bug in the last series was data mistaken for code. A language model makes that its whole way of working: to it, all text is instructions.</description><pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate><category>security</category><category>llm security</category><category>prompt injection</category><category>agents</category></item><item><title>Green Padlock, Zero Headache: Let’s Encrypt SSL for Self-Hosted Dify</title><link>https://shamspias.com/posts/2025/05/dify-ssl-zero-to-green/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/05/dify-ssl-zero-to-green/</guid><description>Let&apos;s Encrypt certificates on a self-hosted Dify behind Nginx: the ACME flow, the nginx reload everyone forgets, and how to test without burning rate limits.</description><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><category>dify</category><category>SSL</category><category>Let&apos;s Encrypt</category><category>Docker</category><category>DevOps</category><category>self-hosting</category><category>beginner</category></item><item><title>A Field Guide &amp; Benchmark for Similarity Search in RAG</title><link>https://shamspias.com/posts/2025/05/rag-retrieval-benchmark/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/05/rag-retrieval-benchmark/</guid><description>How to benchmark sparse, dense, hybrid and late-interaction retrieval on your own corpus, and how to read the numbers without fooling yourself.</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><category>retrieval-augmented generation</category><category>similarity search</category><category>dense vectors</category><category>BM25</category><category>hybrid retrieval</category><category>evaluation</category><category>benchmarks</category><category>AI foundations</category></item><item><title>LexSubLM-Lite: Lightweight Lexical Substitution That Runs Anywhere</title><link>https://shamspias.com/posts/2025/04/lexsublm-lite/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/04/lexsublm-lite/</guid><description>A laptop-sized toolkit for context-aware lexical substitution, and an honest look at what tiny models actually score on it.</description><pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate><category>NLP</category><category>open-source</category><category>machine learning</category><category>python</category><category>lexical substitution</category></item><item><title>From One Brain to Many: Understanding Mixture of Experts (MoE) Like You&apos;re 12</title><link>https://shamspias.com/posts/2025/02/moe-explained-simply/</link><guid isPermaLink="true">https://shamspias.com/posts/2025/02/moe-explained-simply/</guid><description>How sparse mixture-of-experts really works: per-token routing, top-k gating, load balancing, and the memory bill you pay for the compute you save.</description><pubDate>Sat, 08 Feb 2025 00:00:00 GMT</pubDate><category>mixture of experts</category><category>neural networks</category><category>AI basics</category><category>machine learning</category><category>simple explanations</category><category>educational</category><category>MoE fundamentals</category></item><item><title>Network Security: Who Are You Actually Talking To?</title><link>https://shamspias.com/posts/2024/10/network-security-and-tls/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/10/network-security-and-tls/</guid><description>On a network the confusion is not data and code but identity. What HTTPS really guarantees, what it does not, and why a padlock is about the pipe, not the site.</description><pubDate>Tue, 15 Oct 2024 00:00:00 GMT</pubDate><category>security</category><category>network security</category><category>tls</category><category>cryptography</category></item><item><title>Binary Exploitation: When Data Overwrites Code&apos;s Own Bookkeeping</title><link>https://shamspias.com/posts/2024/09/binary-exploitation-basics/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/09/binary-exploitation-basics/</guid><description>The oldest confusion of data and code, at the lowest level. How writing past a buffer can hijack a program, and the four defences that made it hard.</description><pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate><category>security</category><category>binary exploitation</category><category>memory safety</category><category>c</category></item><item><title>Retrieval Metrics Demystified: From BM25 Baselines to EM@5 &amp; Answer F1</title><link>https://shamspias.com/posts/2024/08/retrieval-metrics/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/08/retrieval-metrics/</guid><description>What BM25, Recall@k, answer-in-context rate and token F1 actually measure, which number to fix first, and how to compute them without fooling yourself.</description><pubDate>Thu, 15 Aug 2024 00:00:00 GMT</pubDate><category>information retrieval</category><category>RAG</category><category>evaluation</category><category>BM25</category><category>dense retrieval</category><category>question answering</category><category>metrics</category><category>beginner</category></item><item><title>Broken Access Control: Logged In Is Not the Same as Allowed</title><link>https://shamspias.com/posts/2024/07/broken-access-control/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/07/broken-access-control/</guid><description>The most common serious web bug is also the most boring: the server checks who you are, then forgets to check whether you may touch this particular thing.</description><pubDate>Tue, 09 Jul 2024 00:00:00 GMT</pubDate><category>security</category><category>web security</category><category>access control</category><category>authorization</category></item><item><title>Cross-Site Request Forgery: Making the Victim&apos;s Browser Do It</title><link>https://shamspias.com/posts/2024/06/cross-site-request-forgery/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/06/cross-site-request-forgery/</guid><description>The attacker never steals the session. They get the victim&apos;s own browser to send an authenticated request, using cookies the browser attaches for them.</description><pubDate>Tue, 11 Jun 2024 00:00:00 GMT</pubDate><category>security</category><category>web security</category><category>csrf</category><category>cookies</category></item><item><title>Cross-Site Scripting: Running Your Code in Someone Else&apos;s Browser</title><link>https://shamspias.com/posts/2024/05/cross-site-scripting/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/05/cross-site-scripting/</guid><description>The same bug as SQL injection, moved to the browser. How attacker text becomes attacker script in your users&apos; sessions, the three flavours, and the layered fix.</description><pubDate>Tue, 14 May 2024 00:00:00 GMT</pubDate><category>security</category><category>web security</category><category>xss</category><category>browsers</category></item><item><title>SQL Injection: When Your Query Is Written by the Attacker</title><link>https://shamspias.com/posts/2024/04/sql-injection/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/04/sql-injection/</guid><description>The clearest case of data becoming code. How a login form ends up running the attacker&apos;s SQL, why escaping is the wrong fix, and the one that actually ends it.</description><pubDate>Tue, 09 Apr 2024 00:00:00 GMT</pubDate><category>security</category><category>web security</category><category>sql injection</category><category>databases</category></item><item><title>What Security Actually Is: Trust Boundaries and the Two Master Bugs</title><link>https://shamspias.com/posts/2024/03/what-security-actually-is/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/03/what-security-actually-is/</guid><description>Security is not a product you add. It is a property of where you decide to trust, and almost every vulnerability is one of two confusions crossing that line.</description><pubDate>Tue, 12 Mar 2024 00:00:00 GMT</pubDate><category>security</category><category>web security</category><category>threat modelling</category><category>trust boundaries</category></item><item><title>Brains Behind the Bots: Classical Planning from Ground Up</title><link>https://shamspias.com/posts/2024/02/classical-planning/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/02/classical-planning/</guid><description>PDDL, heuristics that sometimes do nothing, HTN, temporal and multi-agent planning, with real planner numbers on Towers of Hanoi.</description><pubDate>Fri, 09 Feb 2024 00:00:00 GMT</pubDate><category>classical planning</category><category>search</category><category>PDDL</category><category>HTN</category><category>multi-agent systems</category><category>knowledge representation</category><category>AI foundations</category><category>beginner</category></item><item><title>Classical Planning 101: From STRIPS Blocks to Graphplan Magic</title><link>https://shamspias.com/posts/2024/01/classical-planning/</link><guid isPermaLink="true">https://shamspias.com/posts/2024/01/classical-planning/</guid><description>How STRIPS turns a to-do list into an algorithm: factored states, progression and regression, delete relaxation, planning graphs, and modern planners.</description><pubDate>Mon, 15 Jan 2024 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>planning</category><category>strips</category><category>state-space search</category><category>planning graph</category><category>hierarchical planning</category><category>beginner</category></item><item><title>First-Order Logic Made Friendly: From ‘Socrates Is Mortal’ to Automatic Proofs</title><link>https://shamspias.com/posts/2023/12/first-order-logic/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/12/first-order-logic/</guid><description>Quantifiers, unification, forward and backward chaining, and resolution, from Socrates to a solver that finds the proof for you.</description><pubDate>Mon, 25 Dec 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>first-order logic</category><category>unification</category><category>forward chaining</category><category>backward chaining</category><category>resolution</category><category>beginner</category></item><item><title>Logical Agents 101: Slaying the Wumpus with Pure Reason</title><link>https://shamspias.com/posts/2023/12/logical-agents/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/12/logical-agents/</guid><description>Knowledge bases, entailment, resolution and SAT solving, learned by staying alive in the Wumpus World, with runnable PySAT code.</description><pubDate>Sat, 02 Dec 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>knowledge representation</category><category>propositional logic</category><category>theorem proving</category><category>sat solver</category><category>wumpus world</category><category>beginner</category></item><item><title>Constraint Satisfaction 101: From Sudoku Logic to Map-Coloring Zen</title><link>https://shamspias.com/posts/2023/09/csp-basics/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/09/csp-basics/</guid><description>Arc consistency, backtracking with MRV and min-conflicts, explained through Sudoku and map colouring, plus what you would actually use today.</description><pubDate>Sat, 16 Sep 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>constraint satisfaction</category><category>csp</category><category>backtracking</category><category>arc consistency</category><category>sudoku</category><category>beginner</category></item><item><title>Adversarial Search 101: From Minimax to AlphaZero, How AI Plans When an Opponent Fights Back</title><link>https://shamspias.com/posts/2023/08/adversarial-search/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/08/adversarial-search/</guid><description>Minimax, alpha-beta pruning, expectiminimax and MCTS: how a program plans when something is planning against it, and what neural evaluation changed.</description><pubDate>Sat, 05 Aug 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>game ai</category><category>adversarial search</category><category>minimax</category><category>alpha-beta pruning</category><category>monte carlo tree search</category><category>beginner</category></item><item><title>Beyond Classical Search: Hill-Climbers, Hidden Worlds &amp; Agents That Learn on the Fly</title><link>https://shamspias.com/posts/2023/07/beyond-search/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/07/beyond-search/</guid><description>Hill climbing, simulated annealing, belief states and online search: what to do when A* is the wrong tool, the world hides half of itself, or there is no map yet.</description><pubDate>Wed, 26 Jul 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>search algorithms</category><category>local search</category><category>stochastic</category><category>partial observability</category><category>online learning</category><category>beginner</category></item><item><title>Backend Best Practices: The Tricks That Keep a Service Boring</title><link>https://shamspias.com/posts/2023/05/backend-best-practices/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/05/backend-best-practices/</guid><description>Boring is the highest compliment a backend can earn. The layering, config, jobs, and observability habits that stop the phone call at three in the morning.</description><pubDate>Tue, 16 May 2023 00:00:00 GMT</pubDate><category>backend</category><category>best practices</category><category>software engineering</category><category>architecture</category></item><item><title>Intelligent Agents &amp; Search: A Baby-Steps Tour from ‘What is Rational?’ to ‘How do we find the goal?’</title><link>https://shamspias.com/posts/2023/04/ai-agents-search/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/04/ai-agents-search/</guid><description>What an agent actually is, how to turn a problem into a search problem, and why changing one line of priority code turns breadth-first search into A*.</description><pubDate>Wed, 26 Apr 2023 00:00:00 GMT</pubDate><category>artificial intelligence</category><category>intelligent agents</category><category>search algorithms</category><category>heuristic</category><category>beginner</category><category>python</category></item><item><title>Machine Learning 101: PyTorch, TensorFlow &amp; Decision Trees</title><link>https://shamspias.com/posts/2023/02/ml-101-pytorch-tf-decision-tree/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/02/ml-101-pytorch-tf-decision-tree/</guid><description>What a deep-learning framework actually does for you, how a decision tree picks its questions, and which of the three to reach for on real data.</description><pubDate>Mon, 13 Feb 2023 00:00:00 GMT</pubDate><category>machine learning</category><category>deep learning</category><category>pytorch</category><category>tensorflow</category><category>decision tree</category><category>beginner</category><category>python</category></item><item><title>Math for AI Made Simple: The Linear-Algebra Lego Set Behind Every Model</title><link>https://shamspias.com/posts/2023/01/math-for-ai-linear-algebra-basics/</link><guid isPermaLink="true">https://shamspias.com/posts/2023/01/math-for-ai-linear-algebra-basics/</guid><description>Scalars, vectors, matrices and tensors, the five operations every neural network is made of, and the shape rules that cause most of the bugs.</description><pubDate>Mon, 23 Jan 2023 00:00:00 GMT</pubDate><category>math</category><category>AI</category><category>linear algebra</category><category>beginner</category><category>python</category></item><item><title>gRPC: How Services Talk When the Client Is Another Server</title><link>https://shamspias.com/posts/2022/10/grpc-between-services/</link><guid isPermaLink="true">https://shamspias.com/posts/2022/10/grpc-between-services/</guid><description>REST is built for the browser. When both ends are your own servers, a typed binary contract with generated code is often faster and safer. That is gRPC.</description><pubDate>Tue, 11 Oct 2022 00:00:00 GMT</pubDate><category>backend</category><category>grpc</category><category>microservices</category><category>protobuf</category></item><item><title>From Chaos to Focus: Understanding Transformers &amp; Attention</title><link>https://shamspias.com/posts/2022/06/transformers-attention-made-simple/</link><guid isPermaLink="true">https://shamspias.com/posts/2022/06/transformers-attention-made-simple/</guid><description>Attention and the transformer block from first principles, plus what changed by 2026: pre-norm, RMSNorm, RoPE, grouped-query attention and the KV cache.</description><pubDate>Mon, 06 Jun 2022 00:00:00 GMT</pubDate><category>AI</category><category>transformers</category><category>deep learning</category><category>attention</category><category>beginner</category><category>education</category></item><item><title>Real-Time: Polling, WebSocket, WebRTC, and What Is on the Wire</title><link>https://shamspias.com/posts/2022/02/real-time-polling-websocket-webrtc/</link><guid isPermaLink="true">https://shamspias.com/posts/2022/02/real-time-polling-websocket-webrtc/</guid><description>HTTP is a client asking and a server answering. Real-time is the server needing to speak first. Here is the ladder of ways to do that, and what to pick when.</description><pubDate>Tue, 15 Feb 2022 00:00:00 GMT</pubDate><category>backend</category><category>websocket</category><category>webrtc</category><category>networking</category></item><item><title>Memory: Why the Array Wins Even When the Step Count Says Otherwise</title><link>https://shamspias.com/posts/2021/11/memory-and-why-arrays-win/</link><guid isPermaLink="true">https://shamspias.com/posts/2021/11/memory-and-why-arrays-win/</guid><description>Big-O counts steps and assumes every step costs the same. It does not. A cache miss costs a hundred steps, and that is why a linked list loses to an array.</description><pubDate>Sat, 20 Nov 2021 00:00:00 GMT</pubDate><category>algorithms</category><category>memory</category><category>cache</category><category>performance</category><category>problem solving</category></item><item><title>Machine Learning Algorithms by Hand</title><link>https://shamspias.com/posts/2021/07/ml-algorithms-by-hand/</link><guid isPermaLink="true">https://shamspias.com/posts/2021/07/ml-algorithms-by-hand/</guid><description>Four algorithms in forty lines each, with no library. k-nearest neighbours, linear and logistic regression, k-means, and a decision tree, plus what each one assumes.</description><pubDate>Sat, 24 Jul 2021 00:00:00 GMT</pubDate><category>algorithms</category><category>machine learning</category><category>regression</category><category>k-means</category><category>decision trees</category></item><item><title>Designing a REST API That Ages Well</title><link>https://shamspias.com/posts/2021/06/rest-api-that-ages-well/</link><guid isPermaLink="true">https://shamspias.com/posts/2021/06/rest-api-that-ages-well/</guid><description>An API is a contract you have to keep. Resources and verbs, the status codes that matter, idempotency, pagination, versioning, and errors that a client can act on.</description><pubDate>Tue, 15 Jun 2021 00:00:00 GMT</pubDate><category>backend</category><category>rest api</category><category>api design</category><category>http</category></item><item><title>Fenwick Trees and Segment Trees: When Updates and Queries Interleave</title><link>https://shamspias.com/posts/2021/03/fenwick-and-segment-trees/</link><guid isPermaLink="true">https://shamspias.com/posts/2021/03/fenwick-and-segment-trees/</guid><description>Prefix sums break the moment an element changes. Two structures answer range questions and point updates in logarithmic time, and one of them is twenty lines.</description><pubDate>Sat, 27 Mar 2021 00:00:00 GMT</pubDate><category>algorithms</category><category>data structures</category><category>fenwick tree</category><category>segment tree</category><category>problem solving</category></item><item><title>Homomorphic Encryption (HE) Explained: A Beginner’s Guide to Secure AI on Encrypted Data</title><link>https://shamspias.com/posts/2021/03/homomorphic-encryption-guide/</link><guid isPermaLink="true">https://shamspias.com/posts/2021/03/homomorphic-encryption-guide/</guid><description>What homomorphic encryption really does, which scheme to pick, what a ciphertext costs in bytes and depth, and where it still loses to a trusted enclave.</description><pubDate>Sat, 06 Mar 2021 00:00:00 GMT</pubDate><category>privacy</category><category>encryption</category><category>machine learning</category><category>homomorphic encryption</category><category>AI security</category></item><item><title>Strings: Hashing, KMP, and the Z-Function</title><link>https://shamspias.com/posts/2020/11/strings-hashing-kmp-z/</link><guid isPermaLink="true">https://shamspias.com/posts/2020/11/strings-hashing-kmp-z/</guid><description>Where does this pattern occur? Three answers in linear time, each with a different trade: one is easy and probabilistic, two are exact and need a table.</description><pubDate>Sat, 14 Nov 2020 00:00:00 GMT</pubDate><category>algorithms</category><category>strings</category><category>hashing</category><category>kmp</category><category>problem solving</category></item><item><title>SQL or NoSQL: Just Use Postgres, and the Cases Where You Should Not</title><link>https://shamspias.com/posts/2020/09/sql-or-nosql/</link><guid isPermaLink="true">https://shamspias.com/posts/2020/09/sql-or-nosql/</guid><description>NoSQL was sold as the future and is really a specialised tool. What each kind buys, why relational is the right default, and the real cases for reaching past it.</description><pubDate>Tue, 15 Sep 2020 00:00:00 GMT</pubDate><category>backend</category><category>databases</category><category>nosql</category><category>postgresql</category></item><item><title>The Number Theory You Actually Need</title><link>https://shamspias.com/posts/2020/07/number-theory-you-need/</link><guid isPermaLink="true">https://shamspias.com/posts/2020/07/number-theory-you-need/</guid><description>Sieves, greatest common divisors, modular arithmetic and inverses. Five tools, each about ten lines, that cover almost every number theory problem you will meet.</description><pubDate>Sun, 19 Jul 2020 00:00:00 GMT</pubDate><category>algorithms</category><category>number theory</category><category>modular arithmetic</category><category>primes</category><category>problem solving</category></item><item><title>Databases and ACID: What a Transaction Actually Promises</title><link>https://shamspias.com/posts/2020/04/databases-and-acid/</link><guid isPermaLink="true">https://shamspias.com/posts/2020/04/databases-and-acid/</guid><description>A transaction is a promise the database makes when two things happen at once. What ACID guarantees, the anomalies it prevents, and the race it does not.</description><pubDate>Tue, 21 Apr 2020 00:00:00 GMT</pubDate><category>backend</category><category>databases</category><category>acid</category><category>postgresql</category></item><item><title>Game Theory: Nim, Losing Positions, and the Grundy Number</title><link>https://shamspias.com/posts/2020/03/game-theory-nim-and-grundy/</link><guid isPermaLink="true">https://shamspias.com/posts/2020/03/game-theory-nim-and-grundy/</guid><description>Two players, perfect information, no luck. Who wins? The answer comes from labelling positions, and one theorem collapses any such game into a single number.</description><pubDate>Sun, 08 Mar 2020 00:00:00 GMT</pubDate><category>algorithms</category><category>game theory</category><category>nim</category><category>grundy</category><category>problem solving</category></item><item><title>Disjoint Sets, and the Cheapest Way to Connect Everything</title><link>https://shamspias.com/posts/2019/11/disjoint-sets-and-mst/</link><guid isPermaLink="true">https://shamspias.com/posts/2019/11/disjoint-sets-and-mst/</guid><description>Twelve lines of code, two operations, and a running time so close to constant that nobody bothers with the difference. Then minimum spanning trees for free.</description><pubDate>Sun, 03 Nov 2019 00:00:00 GMT</pubDate><category>algorithms</category><category>graphs</category><category>union find</category><category>minimum spanning tree</category><category>problem solving</category></item><item><title>Django or FastAPI: How the Framework Shapes the Code You Write</title><link>https://shamspias.com/posts/2019/10/django-or-fastapi/</link><guid isPermaLink="true">https://shamspias.com/posts/2019/10/django-or-fastapi/</guid><description>One gives you everything and an opinion; the other gives you speed and a blank page. The choice is about how much you want the framework to decide for you.</description><pubDate>Tue, 08 Oct 2019 00:00:00 GMT</pubDate><category>backend</category><category>django</category><category>fastapi</category><category>python</category></item><item><title>Shortest Paths: Dijkstra, Bellman-Ford, Floyd-Warshall</title><link>https://shamspias.com/posts/2019/06/shortest-paths/</link><guid isPermaLink="true">https://shamspias.com/posts/2019/06/shortest-paths/</guid><description>Three algorithms, three different jobs. Which one to reach for depends on negative edges, on how many sources you have, and on nothing else.</description><pubDate>Sun, 09 Jun 2019 00:00:00 GMT</pubDate><category>algorithms</category><category>graphs</category><category>shortest paths</category><category>dijkstra</category><category>problem solving</category></item><item><title>Design Patterns You Actually Use, and the Ones You Should Not Reach For</title><link>https://shamspias.com/posts/2019/05/design-patterns-you-actually-use/</link><guid isPermaLink="true">https://shamspias.com/posts/2019/05/design-patterns-you-actually-use/</guid><description>The pattern books list twenty-three. You reach for about six. Here are those six, the problem each solves, and why naming a pattern is a tool, not a trophy.</description><pubDate>Tue, 14 May 2019 00:00:00 GMT</pubDate><category>backend</category><category>design patterns</category><category>software engineering</category><category>python</category></item><item><title>Depth-First Search: Cycles, Components, and Topological Order</title><link>https://shamspias.com/posts/2019/02/dfs-cycles-topological-order/</link><guid isPermaLink="true">https://shamspias.com/posts/2019/02/dfs-cycles-topological-order/</guid><description>BFS goes wide, DFS goes deep, and the difference is not stylistic. DFS answers questions about structure that a queue simply cannot see.</description><pubDate>Sun, 17 Feb 2019 00:00:00 GMT</pubDate><category>algorithms</category><category>graphs</category><category>dfs</category><category>topological sort</category><category>problem solving</category></item><item><title>Graphs: How to Store One, and Breadth-First Search</title><link>https://shamspias.com/posts/2018/10/graphs-and-bfs/</link><guid isPermaLink="true">https://shamspias.com/posts/2018/10/graphs-and-bfs/</guid><description>Half of all algorithm problems are graph problems in disguise. Here is how to represent a graph, and the search that finds shortest paths for free.</description><pubDate>Sun, 21 Oct 2018 00:00:00 GMT</pubDate><category>algorithms</category><category>graphs</category><category>bfs</category><category>problem solving</category></item><item><title>The Knapsack Family, and When the State Is a Set</title><link>https://shamspias.com/posts/2018/06/knapsack-and-bitmask-dp/</link><guid isPermaLink="true">https://shamspias.com/posts/2018/06/knapsack-and-bitmask-dp/</guid><description>Knapsack is one recurrence with a dozen disguises. Learn the family, then learn to put a set of items in the state with a bitmask when n is small.</description><pubDate>Sun, 17 Jun 2018 00:00:00 GMT</pubDate><category>algorithms</category><category>dynamic programming</category><category>knapsack</category><category>bitmask</category><category>problem solving</category></item><item><title>Dynamic Programming Is a Table You Fill In</title><link>https://shamspias.com/posts/2018/02/dp-as-a-table/</link><guid isPermaLink="true">https://shamspias.com/posts/2018/02/dp-as-a-table/</guid><description>Four questions turn a problem into a dynamic program: what is the state, what is the answer for a state, what is the base, and in what order do you fill it.</description><pubDate>Sun, 25 Feb 2018 00:00:00 GMT</pubDate><category>algorithms</category><category>dynamic programming</category><category>problem solving</category><category>tabulation</category></item><item><title>Memoisation: Paying Once for an Answer</title><link>https://shamspias.com/posts/2017/11/memoisation/</link><guid isPermaLink="true">https://shamspias.com/posts/2017/11/memoisation/</guid><description>The cheapest optimisation in programming: remember what you already worked out. One dictionary turns an exponential recursion into a linear one.</description><pubDate>Sun, 12 Nov 2017 00:00:00 GMT</pubDate><category>algorithms</category><category>memoisation</category><category>dynamic programming</category><category>problem solving</category></item><item><title>Recursion and Backtracking: Trusting a Function You Have Not Finished Writing</title><link>https://shamspias.com/posts/2017/07/recursion-and-backtracking/</link><guid isPermaLink="true">https://shamspias.com/posts/2017/07/recursion-and-backtracking/</guid><description>Recursion is hard because everyone traces it. The habit that makes it mechanical: write the contract, trust the smaller call, never trace the stack.</description><pubDate>Sun, 30 Jul 2017 00:00:00 GMT</pubDate><category>algorithms</category><category>recursion</category><category>backtracking</category><category>problem solving</category></item><item><title>Greedy: When Taking the Best Now Is Provably Right</title><link>https://shamspias.com/posts/2017/04/greedy-when-it-works/</link><guid isPermaLink="true">https://shamspias.com/posts/2017/04/greedy-when-it-works/</guid><description>A greedy rule that passes the samples and fails the tests is the most common way to lose a contest. Here is how to tell a correct greedy rule from a plausible one.</description><pubDate>Sat, 08 Apr 2017 00:00:00 GMT</pubDate><category>algorithms</category><category>greedy</category><category>problem solving</category><category>proofs</category></item><item><title>Binary Search, and Binary Search on the Answer</title><link>https://shamspias.com/posts/2017/01/binary-search-on-the-answer/</link><guid isPermaLink="true">https://shamspias.com/posts/2017/01/binary-search-on-the-answer/</guid><description>Searching a sorted array is the easy half. The useful half is guessing the answer and asking a monotone yes-or-no question, with no array in sight.</description><pubDate>Sat, 21 Jan 2017 00:00:00 GMT</pubDate><category>algorithms</category><category>binary search</category><category>problem solving</category><category>monotonicity</category></item><item><title>Pointers and Linked Lists: Addresses, and the Data Structure Made of Them</title><link>https://shamspias.com/posts/2016/12/pointers-and-linked-lists/</link><guid isPermaLink="true">https://shamspias.com/posts/2016/12/pointers-and-linked-lists/</guid><description>A pointer is the address of a box, not the box. Once that clicks, dynamic memory, references and the linked list all fall out of the same idea. In C and C++.</description><pubDate>Sun, 18 Dec 2016 00:00:00 GMT</pubDate><category>algorithms</category><category>pointers</category><category>linked lists</category><category>cpp</category><category>problem solving</category></item><item><title>Sorting: What to Know, What to Call, and What to Sort By</title><link>https://shamspias.com/posts/2016/10/sorting-what-to-know/</link><guid isPermaLink="true">https://shamspias.com/posts/2016/10/sorting-what-to-know/</guid><description>You will almost never write a sort. You will constantly decide what to sort by, and that decision is where the problems are actually solved.</description><pubDate>Sat, 15 Oct 2016 00:00:00 GMT</pubDate><category>algorithms</category><category>sorting</category><category>problem solving</category><category>comparators</category></item><item><title>Prefix Sums and Two Pointers: The Array Tricks You Will Use Forever</title><link>https://shamspias.com/posts/2016/07/prefix-sums-and-two-pointers/</link><guid isPermaLink="true">https://shamspias.com/posts/2016/07/prefix-sums-and-two-pointers/</guid><description>Two techniques that turn a quadratic loop into a linear one, on the humblest data structure there is. Range sums in constant time, and the sliding window.</description><pubDate>Sat, 09 Jul 2016 00:00:00 GMT</pubDate><category>algorithms</category><category>arrays</category><category>prefix sums</category><category>two pointers</category><category>problem solving</category></item><item><title>Big-O Without the Maths: Naming the Shape of a Curve</title><link>https://shamspias.com/posts/2016/04/big-o-without-the-maths/</link><guid isPermaLink="true">https://shamspias.com/posts/2016/04/big-o-without-the-maths/</guid><description>Big-O is not a speed and not a stopwatch. It is a claim about the shape of a curve. Six shapes, where each one comes from, and the four rules for reading them.</description><pubDate>Sat, 23 Apr 2016 00:00:00 GMT</pubDate><category>algorithms</category><category>complexity</category><category>big-o</category><category>problem solving</category></item><item><title>Counting the Steps: What Your Loop Actually Costs</title><link>https://shamspias.com/posts/2016/02/counting-the-steps/</link><guid isPermaLink="true">https://shamspias.com/posts/2016/02/counting-the-steps/</guid><description>Before any algorithm makes sense you need one habit: counting how many times a line runs. Here is that habit, built from four small C++ programs and a stopwatch.</description><pubDate>Sun, 14 Feb 2016 00:00:00 GMT</pubDate><category>algorithms</category><category>complexity</category><category>problem solving</category><category>beginners</category></item></channel></rss>