<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>WebDevRock</title><description>A working knowledge base of SQL Server data-fix scripts, integration and operations patterns, browser tools, and hands-on AI guides, shaped by real constraints: messy data, limited schema control, and the need to be reliable.</description><link>https://webdevrock.uk/</link><language>en-gb</language><item><title>Foreign Key Diagram from SQL Server</title><link>https://webdevrock.uk/tools/foreign-key-diagram/</link><guid isPermaLink="true">https://webdevrock.uk/tools/foreign-key-diagram/</guid><description>Paste the results of a query against sys.foreign_keys and get a diagram of your tables and how they relate, with every column if you want them. Export as SVG, PNG or Mermaid.</description><pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>schema</category><category>tool</category></item><item><title>Custom Shaders from First Principles: A Terrain Generator in Three.js</title><link>https://webdevrock.uk/experiments/terrain-shader/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/terrain-shader/</guid><description>Build a 3D landscape in seven steps with your own GLSL shaders: a grid of vertices, noise, fractal hills, colour by height, lighting, water and fog.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>shaders</category><category>glsl</category></item><item><title>Embeddings Explained: Explore How AI Represents Meaning in 3D</title><link>https://webdevrock.uk/experiments/embedding-space-explorer/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/embedding-space-explorer/</guid><description>An interactive 3D map of about 200 phrases embedded with a real model. See why similar meanings sit together, how semantic search finds answers without shared words, and where it goes wrong.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>ai</category><category>embeddings</category></item><item><title>How a Database Index Works: A B-Tree in 3D</title><link>https://webdevrock.uk/experiments/database-index-btree/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/database-index-btree/</guid><description>Watch SQL Server find customers by ID and by surname, page by page. An interactive Three.js model of a table, an index, key lookups and page splits.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>sql-server</category><category>performance</category></item><item><title>How SQL Server Joins Tables: Nested Loops, Hash and Merge, Side by Side</title><link>https://webdevrock.uk/experiments/sql-server-join-algorithms/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/sql-server-join-algorithms/</guid><description>Watch SQL Server&apos;s three join algorithms join the same rows at the same time, then see which one does the least work at real table sizes, and why.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>sql-server</category><category>performance</category></item><item><title>How to Read a SQL Server Execution Plan, in 3D</title><link>https://webdevrock.uk/experiments/sql-execution-plan-3d/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/sql-execution-plan-3d/</guid><description>An interactive 3D execution plan viewer. See where a query&apos;s cost goes, why a scan, a key lookup or a bad estimate slows it down, or paste your own plan.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>sql-server</category><category>performance</category></item><item><title>Letting an LLM Write SQL Against Production, Safely</title><link>https://webdevrock.uk/ai/llm-sql-production-safely/</link><guid isPermaLink="true">https://webdevrock.uk/ai/llm-sql-production-safely/</guid><description>How to let an AI assistant or agent query a live SQL Server database without risking the data: a read-only login it can&apos;t escape, limits on what reads cost, and a reviewed, reversible path for changes.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>AI guide</category><category>ai</category><category>llm</category><category>agents</category><category>sql-server</category><category>security</category><category>advanced</category></item><item><title>Rate Limiting Algorithms Compared: Token Bucket, Leaky Bucket and Sliding Window</title><link>https://webdevrock.uk/experiments/rate-limiting-algorithms/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/rate-limiting-algorithms/</guid><description>Four rate limiters enforce the same limit on the same traffic, side by side in 3D. See why fixed windows let bursts through, how the two buckets differ, and how retries make it worse.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>integrations</category><category>resilience</category></item><item><title>Retries, Backoff and Circuit Breakers, Visualised in Three.js</title><link>https://webdevrock.uk/experiments/integration-pipeline-particle-flow/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/integration-pipeline-particle-flow/</guid><description>An interactive Three.js simulation of an integration pipeline. Watch messages retry, back off, trip a circuit breaker and land in a needs-attention queue during an API outage.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>simulation</category><category>integrations</category><category>resilience</category></item><item><title>Three.js: Force-Directed Node Graph</title><link>https://webdevrock.uk/experiments/threejs-node-graph/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/threejs-node-graph/</guid><description>A 3D force-directed graph in Three.js. Nodes repel, connections act as springs, and the layout cools until it settles.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>visualization</category><category>simulation</category></item><item><title>SQL Server: Convert Between XML and JSON</title><link>https://webdevrock.uk/snippets/sql-xml-json-convert/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-xml-json-convert/</guid><description>Turn XML into JSON with nodes() and FOR JSON, and JSON into XML with OPENJSON and FOR XML PATH, keeping nested rows nested.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>xml</category><category>json</category><category>integrations</category></item><item><title>SQL Server: Query Large XML Documents Without Timeouts</title><link>https://webdevrock.uk/snippets/sql-query-large-xml/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-query-large-xml/</guid><description>Why shredding a big XML file with nodes() can take minutes, and the fixes that bring it back to seconds: no parent axis, full paths, text(), shredding once.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>xml</category><category>performance</category><category>integrations</category></item><item><title>SQL Server: Turn XML Into Rows with nodes()</title><link>https://webdevrock.uk/snippets/sql-xml-to-rows/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-xml-to-rows/</guid><description>Shred an XML document into rows and typed columns with nodes() and value(), including child rows, attributes and namespaces.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>xml</category><category>integrations</category></item><item><title>XML to JSON Converter</title><link>https://webdevrock.uk/tools/xml-json-converter/</link><guid isPermaLink="true">https://webdevrock.uk/tools/xml-json-converter/</guid><description>Convert XML to JSON and JSON back to XML, with attributes, repeated elements and namespaces handled the same way in both directions.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>xml</category><category>json</category><category>integrations</category><category>tool</category></item><item><title>XML to nodes() Query Generator</title><link>https://webdevrock.uk/tools/xml-to-nodes/</link><guid isPermaLink="true">https://webdevrock.uk/tools/xml-to-nodes/</guid><description>Paste a sample XML document and get a SQL Server nodes()/value() query, with column types inferred from the data and child rows shredded with CROSS APPLY.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>xml</category><category>integrations</category><category>tool</category></item><item><title>Changing Large Volumes of Production Data Without an Outage</title><link>https://webdevrock.uk/patterns/large-data-changes-without-outage/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/large-data-changes-without-outage/</guid><description>Planning backfills and clean-ups that touch millions of rows while the system stays live.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>sql-server</category><category>data-fix</category><category>operations</category><category>performance</category></item><item><title>Designing Audit Trails That Help Investigation</title><link>https://webdevrock.uk/patterns/audit-trails-for-investigation/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/audit-trails-for-investigation/</guid><description>What to record about data changes, and how to store it so you can answer what happened when something goes wrong.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>audit</category><category>operations</category><category>sql-server</category><category>observability</category></item><item><title>Designing Integration Jobs That Are Safe to Rerun</title><link>https://webdevrock.uk/patterns/integration-jobs-safe-to-rerun/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/integration-jobs-safe-to-rerun/</guid><description>How to make jobs produce the same result whether they run once, twice, or restart halfway through.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>integrations</category><category>pipelines</category><category>idempotency</category><category>operations</category></item><item><title>JSON to OPENJSON Generator</title><link>https://webdevrock.uk/tools/json-to-openjson/</link><guid isPermaLink="true">https://webdevrock.uk/tools/json-to-openjson/</guid><description>Paste a sample JSON payload and get a SQL Server OPENJSON query with column types inferred from the data.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>json</category><category>integrations</category><category>tool</category></item><item><title>List to SQL Converter</title><link>https://webdevrock.uk/tools/list-to-sql/</link><guid isPermaLink="true">https://webdevrock.uk/tools/list-to-sql/</guid><description>Turn a pasted list of ids, or ids and new values, into a #temp table, an IN list, or JSON for OPENJSON.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>data-fix</category><category>tool</category></item><item><title>Retry Backoff Schedule Calculator</title><link>https://webdevrock.uk/tools/retry-schedule/</link><guid isPermaLink="true">https://webdevrock.uk/tools/retry-schedule/</guid><description>See when each retry happens for an exponential backoff policy, and how long a call can take before it gives up.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>integrations</category><category>http</category><category>resilience</category><category>tool</category></item><item><title>Retry, Back Off, Give Up: Handling Unreliable External APIs</title><link>https://webdevrock.uk/patterns/handling-unreliable-external-apis/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/handling-unreliable-external-apis/</guid><description>A system-level policy for which failures to retry, how long to keep trying, and what happens when retries run out.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>integrations</category><category>pipelines</category><category>resilience</category><category>operations</category></item><item><title>Reversible Data Fix Script Builder</title><link>https://webdevrock.uk/tools/data-fix-script/</link><guid isPermaLink="true">https://webdevrock.uk/tools/data-fix-script/</guid><description>Generate a SQL Server data fix script for an update or a delete, with a preview, backup table, verification, and a ready-made rollback or restore.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>sql-server</category><category>data-fix</category><category>operations</category><category>tool</category></item><item><title>SQL Server: Find and Remove Duplicate Rows with ROW_NUMBER()</title><link>https://webdevrock.uk/snippets/sql-remove-duplicates-row-number/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-remove-duplicates-row-number/</guid><description>Preview duplicate rows, keep one per group, and delete the rest safely.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>data-fix</category><category>duplicates</category></item><item><title>SQL Server: Pass a List of IDs Without Dynamic SQL</title><link>https://webdevrock.uk/snippets/sql-pass-id-list/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-pass-id-list/</guid><description>Turn a comma-separated or JSON list into rows you can JOIN to, with no string concatenation or SQL injection risk.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>security</category><category>json</category></item><item><title>SQL Server: Record Changed Rows with OUTPUT INTO</title><link>https://webdevrock.uk/snippets/sql-output-into-audit/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-output-into-audit/</guid><description>Capture before and after values of an UPDATE or DELETE in the same statement, so any data fix can be undone.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>data-fix</category><category>audit</category></item><item><title>SQL Server: Update or Delete Millions of Rows in Batches</title><link>https://webdevrock.uk/snippets/sql-batch-update-delete/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-batch-update-delete/</guid><description>Change large volumes of data in small batches to avoid table locks, log growth and blocking.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>data-fix</category><category>performance</category></item><item><title>Stopping Duplicates at the Source Instead of Cleaning Them Up</title><link>https://webdevrock.uk/patterns/stop-duplicates-at-source/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/stop-duplicates-at-source/</guid><description>Where duplicate records come from, and how to design imports, constraints, and matching so they cannot be created.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>data-quality</category><category>integrations</category><category>sql-server</category><category>operations</category></item><item><title>Timestamp Converter for Integrations</title><link>https://webdevrock.uk/tools/timestamp-converter/</link><guid isPermaLink="true">https://webdevrock.uk/tools/timestamp-converter/</guid><description>Convert between Unix timestamps, ISO 8601, .NET ticks, Microsoft JSON dates, HTTP dates, and SQL Server literals.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Tool</category><category>integrations</category><category>sql-server</category><category>dates</category><category>tool</category></item><item><title>TypeScript: Retry fetch with Exponential Backoff and Jitter</title><link>https://webdevrock.uk/snippets/ts-fetch-retry-backoff/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/ts-fetch-retry-backoff/</guid><description>A small typed fetch wrapper that retries timeouts, rate limits and server errors without hammering the API.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>typescript</category><category>javascript</category><category>http</category><category>integrations</category></item><item><title>AI Agents: What They Are and How to Use Them</title><link>https://webdevrock.uk/ai/what-are-ai-agents/</link><guid isPermaLink="true">https://webdevrock.uk/ai/what-are-ai-agents/</guid><description>Stop treating AI as a chatbot and start treating it as a system: what AI agents are, how they differ from LLMs, and workflows you can set up today.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>AI guide</category><category>ai</category><category>agents</category><category>llm</category><category>automation</category><category>beginner</category></item><item><title>Architecting Multi-Agent Systems</title><link>https://webdevrock.uk/ai/multi-agent-architecture/</link><guid isPermaLink="true">https://webdevrock.uk/ai/multi-agent-architecture/</guid><description>When one agent isn&apos;t enough. Routing, specialisation, coordination, and the patterns I&apos;ve used to build systems like Hermes.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>AI guide</category><category>ai</category><category>agents</category><category>architecture</category><category>multi-agent</category><category>advanced</category></item><item><title>Building Your Own AI Agent System</title><link>https://webdevrock.uk/ai/building-agent-system/</link><guid isPermaLink="true">https://webdevrock.uk/ai/building-agent-system/</guid><description>A practical walkthrough of setting up local LLMs, connecting tools, and running agents on a schedule, based on what I actually use rather than theory.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>AI guide</category><category>ai</category><category>agents</category><category>ollama</category><category>local-llm</category><category>automation</category><category>intermediate</category></item><item><title>LLM Productivity Workflows</title><link>https://webdevrock.uk/ai/llm-productivity-workflows/</link><guid isPermaLink="true">https://webdevrock.uk/ai/llm-productivity-workflows/</guid><description>How I actually use LLMs day to day: email triage, content drafting, research synthesis, and decision support. Real patterns, not theoretical possibilities.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>AI guide</category><category>llm</category><category>productivity</category><category>workflow</category><category>automation</category><category>intermediate</category></item><item><title>OutSystems REST API Implementation</title><link>https://webdevrock.uk/experiments/outsystems-rest-api/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/outsystems-rest-api/</guid><description>Implementation guide for REST API endpoints in OutSystems to track publish activity and application metrics.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>outsystems</category><category>rest-api</category><category>backend</category></item><item><title>SQL Server: Safe Bulk DELETE Using JOIN</title><link>https://webdevrock.uk/snippets/sql-safe-bulk-delete-join/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-safe-bulk-delete-join/</guid><description>Delete rows using a JOIN with a preview step to avoid accidental data loss.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>data-fix</category><category>delete</category></item><item><title>SQL Server: Update Only When Values Change</title><link>https://webdevrock.uk/snippets/sql-update-only-when-changed/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-update-only-when-changed/</guid><description>Avoid unnecessary writes and locking by updating rows only when values differ.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>performance</category><category>data-fix</category></item><item><title>SQL Server: UPSERT Without MERGE</title><link>https://webdevrock.uk/snippets/sql-upsert-without-merge/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-upsert-without-merge/</guid><description>Insert new rows and update existing rows safely without using MERGE.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>upsert</category><category>data-fix</category></item><item><title>SQL Server: Bulk Update with JOIN</title><link>https://webdevrock.uk/snippets/sql-bulk-update-join/</link><guid isPermaLink="true">https://webdevrock.uk/snippets/sql-bulk-update-join/</guid><description>Update many rows from a supplied list of IDs + values using a temp table and JOIN. Ideal for data fixes.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate><category>Snippet</category><category>sql</category><category>sql-server</category><category>data-fix</category><category>bulk-update</category></item><item><title>Designing a Reversible Data Fix in SQL Server</title><link>https://webdevrock.uk/patterns/sql-reversible-data-fix/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/sql-reversible-data-fix/</guid><description>A repeatable approach for production-safe updates with verification and rollback.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>sql-server</category><category>data-fix</category><category>operations</category></item><item><title>Designing Integration Pipelines That Fail Safely</title><link>https://webdevrock.uk/patterns/integration-pipelines-fail-safely/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/integration-pipelines-fail-safely/</guid><description>A practical approach to building integration pipelines that prevent bad data from reaching downstream systems.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>integrations</category><category>pipelines</category><category>validation</category><category>operations</category></item><item><title>Why Status Tables Fail Operations Teams</title><link>https://webdevrock.uk/patterns/status-tables-fail-operations/</link><guid isPermaLink="true">https://webdevrock.uk/patterns/status-tables-fail-operations/</guid><description>Why simple status fields rarely communicate system state clearly, and how staged models improve operational clarity.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>Pattern</category><category>operations</category><category>ux</category><category>pipelines</category><category>observability</category></item><item><title>Flocking Algorithm (Boids)</title><link>https://webdevrock.uk/experiments/flocking-algorithm/</link><guid isPermaLink="true">https://webdevrock.uk/experiments/flocking-algorithm/</guid><description>Implementation of Craig Reynolds&apos; Boids flocking simulation in Three.js.</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><category>Experiment</category><category>threejs</category><category>algorithm</category><category>simulation</category></item></channel></rss>