<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Planet Tradik</title>
  <link href="https://tradik.com/blog/" rel="alternate"/>
  <link href="https://tradik.com/blog/feed.xml" rel="self"/>
  <id>https://tradik.com/blog/</id>
  <updated>2026-10-11T22:21:31Z</updated>
  <entry>
    <title>Install Shipyard on a Raspberry Pi</title>
    <link href="https://shipyard.tradik.com/blog/install-shipyard-on-raspberry-pi/"/>
    <id>https://shipyard.tradik.com/blog/install-shipyard-on-raspberry-pi/</id>
    <published>2026-10-03T00:00:00Z</published>
    <updated>2026-10-03T19:42:54Z</updated>
    <category term="Shipyard"/>
    <summary>Shipyard is one static binary and one SQLite file. A Raspberry Pi 4 or 5 runs it comfortably.</summary>
  </entry>
  <entry>
    <title>The API Reference Belongs Next to the Guides</title>
    <link href="https://ssg.tradik.com/blog/api-reference-next-to-the-guides/"/>
    <id>https://ssg.tradik.com/blog/api-reference-next-to-the-guides/</id>
    <published>2026-10-03T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>1.8.69 reads JavaScript, TypeScript declarations, Go, PHP, Python and OpenAPI files into pages of the same site as your guides, with examples that run in the browser and a Try it console for every endpoint.</summary>
  </entry>
  <entry>
    <title>Migrating from native XSLT: how-to</title>
    <link href="https://xslt-processor.tradik.com/blog/migrating-from-native-xslt/"/>
    <id>https://xslt-processor.tradik.com/blog/migrating-from-native-xslt/</id>
    <published>2026-10-02T18:00:00Z</published>
    <updated>2026-10-02T18:00:00Z</updated>
    <category term="XSLT"/>
    <summary>On 17 November 2026, Chrome 158 stops running XSLT (the dates and the
reasons). Two kinds of pages break: pages
whose JavaScript calls new XSLTProcessor(), and XML documents the browser
rendered through &amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot;?&amp;gt;. This is the hands-on
part: how to find both i</summary>
  </entry>
  <entry>
    <title>1.3.0: XSLT 3.0 in JavaScript, one option away</title>
    <link href="https://xslt-processor.tradik.com/blog/release-1-3/"/>
    <id>https://xslt-processor.tradik.com/blog/release-1-3/</id>
    <published>2026-10-02T12:00:00Z</published>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="XSLT"/>
    <summary>Two releases today. @tradik/xslt3 1.0.0 is a new package: XSLT 3.0 and
XPath 3.1 in JavaScript, which also runs XSLT 2.0 stylesheets. And
@tradik/xslt-processor 1.3.0, the browser XSLTProcessor replacement, can
now hand a 2.0 or 3.0 stylesheet to it when you ask. Nothing changes for
anyone who doesn</summary>
  </entry>
  <entry>
    <title>The problems Shipyard solves</title>
    <link href="https://shipyard.tradik.com/blog/problems-shipyard-solves/"/>
    <id>https://shipyard.tradik.com/blog/problems-shipyard-solves/</id>
    <published>2026-10-02T00:00:00Z</published>
    <updated>2026-10-03T19:42:54Z</updated>
    <category term="Shipyard"/>
    <summary>One person can write software for fifty repositories. Keeping fifty repositories maintained, released and explained is a different job. These are the problems…</summary>
  </entry>
  <entry>
    <title>XSLT 2.0 and 3.0 in JavaScript: why @tradik/xslt3 is a separate package</title>
    <link href="https://xslt-processor.tradik.com/blog/xslt3-in-javascript/"/>
    <id>https://xslt-processor.tradik.com/blog/xslt3-in-javascript/</id>
    <published>2026-10-01T11:00:00Z</published>
    <updated>2026-10-01T11:00:00Z</updated>
    <category term="XSLT"/>
    <summary>Every browser that ever ran XSLT ran version 1.0, the 1999 recommendation.
Chrome and Safari used libxslt, Firefox its own TransforMiiX. XSLT 2.0
arrived in 2007 and 3.0 in 2017, with grouping, regular expressions, real
functions, maps, JSON and a much stronger XPath, and the browsers never
followed</summary>
  </entry>
  <entry>
    <title>What the end of browser XSLT breaks, and what to do about it</title>
    <link href="https://xslt-processor.tradik.com/blog/xslt-removal-impact/"/>
    <id>https://xslt-processor.tradik.com/blog/xslt-removal-impact/</id>
    <published>2026-10-01T10:00:00Z</published>
    <updated>2026-10-01T10:00:00Z</updated>
    <category term="XSLT"/>
    <summary>Chrome&#39;s case for removing XSLT rests on two numbers: about 0.02% of page
loads use XSLT, and less than 0.001% use the xml-stylesheet
processing instruction (the background is here).
Put that way it sounds like nothing. It is worth looking at what sits behind
it before deciding that it doesn&#39;t conce</summary>
  </entry>
  <entry>
    <title>Chrome turns off XSLT on 17 November 2026. How we got here</title>
    <link href="https://xslt-processor.tradik.com/blog/chrome-is-turning-off-xslt/"/>
    <id>https://xslt-processor.tradik.com/blog/chrome-is-turning-off-xslt/</id>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="XSLT"/>
    <summary>On 17 November 2026, Chrome 158 reaches the stable channel, and XSLT stops
working in it. A page that calls new XSLTProcessor() gets a ReferenceError.
An XML file that starts with &amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;…&amp;quot;?&amp;gt;
shows up as raw XML instead of the HTML its author</summary>
  </entry>
  <entry>
    <title>Two Ways to Read an Article Aloud</title>
    <link href="https://ssg.tradik.com/blog/two-ways-to-read-an-article-aloud/"/>
    <id>https://ssg.tradik.com/blog/two-ways-to-read-an-article-aloud/</id>
    <published>2026-10-01T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>1.8.65 adds a Listen button that uses the reader&#39;s own voice engine, and build-time MP3 from a TTS API you choose, with a podcast feed and a plan for when the API is down.</summary>
  </entry>
  <entry>
    <title>Looking back at 1.2.0 and 1.2.1: Chrome&#39;s behaviour, 3,000-level recursion, and a release that broke on macOS</title>
    <link href="https://xslt-processor.tradik.com/blog/release-1-2/"/>
    <id>https://xslt-processor.tradik.com/blog/release-1-2/</id>
    <published>2026-09-30T18:00:00Z</published>
    <updated>2026-09-30T18:00:00Z</updated>
    <category term="XSLT"/>
    <summary>Version 1.2.0 went out on 30 September 2026, and 1.2.1 followed a few hours
later. The second one exists because of a bug in our own tests, and we will
get to that. First, what 1.2 is about: making the JavaScript XSLTProcessor
behave like the one Chrome is about to switch off, on the inputs real
sty</summary>
  </entry>
  <entry>
    <title>Most Websites Are Documents. Stop Shipping Them as Applications.</title>
    <link href="https://ssg.tradik.com/blog/most-websites-are-documents/"/>
    <id>https://ssg.tradik.com/blog/most-websites-are-documents/</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>A phone downloads 486 KB of this site&#39;s home page, and 24 KB of it is what the generator wrote. The rest is choices. The case for static sites, measured.</summary>
  </entry>
  <entry>
    <title>Ten XSLT 1.0 rules that surprise experienced developers</title>
    <link href="https://xslt-processor.tradik.com/blog/xslt-1-0-surprising-rules/"/>
    <id>https://xslt-processor.tradik.com/blog/xslt-1-0-surprising-rules/</id>
    <published>2026-09-29T12:00:00Z</published>
    <updated>2026-09-29T12:00:00Z</updated>
    <category term="XSLT"/>
    <summary>XSLT 1.0 is a short specification, and people who have written stylesheets for
years still get caught by parts of it. We know, because writing a processor
that matches Chrome meant finding every one of these the hard way: the 1.1
releases of @tradik/xslt-processor fixed dozens of them. Here are the</summary>
  </entry>
  <entry>
    <title>Three bugs in FreeBSD&#39;s ig4 driver, one dead touchpad</title>
    <link href="https://tradik.com/blog/freebsd-ig4-lpss-touchpad/"/>
    <id>https://tradik.com/blog/freebsd-ig4-lpss-touchpad/</id>
    <published>2026-09-16T00:00:00Z</published>
    <updated>2026-09-16T08:28:55Z</updated>
    <category term="freebsd"/>
    <category term="hardware"/>
    <category term="Tradik"/>
    <summary>A touchpad that died on every resume turned out not to be a suspend bug at all. FreeBSD never started the I2C controller the touchpad is wired to, for three separate reasons.</summary>
  </entry>
  <entry>
    <title>The Build Said Nothing</title>
    <link href="https://ssg.tradik.com/blog/the-build-said-nothing/"/>
    <id>https://ssg.tradik.com/blog/the-build-said-nothing/</id>
    <published>2026-09-14T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>1.8.62 fixes fourteen things that never errored: pages dropped without a word, a 404 in the wrong language, a header that refused geolocation.</summary>
  </entry>
  <entry>
    <title>When will the washing actually dry</title>
    <link href="https://tradeweather.co.uk/laundry-drying-window/"/>
    <id>https://tradeweather.co.uk/laundry-drying-window/</id>
    <published>2026-09-12T00:00:00Z</published>
    <updated>2026-09-14T00:13:25Z</updated>
    <category term="TradeWeather"/>
    <summary>Drying washing on a line is a weather-sensitive job with no product datasheet. Rain, relative humidity, wind and temperature decide it, which makes it a clean test case for the generic template engine.
The laundry profile has no hard limits from a manufacturer, so it never produces STOP on its own.</summary>
  </entry>
  <entry>
    <title>What to record when weather stops work</title>
    <link href="https://tradeweather.co.uk/what-to-record-when-weather-stops-work/"/>
    <id>https://tradeweather.co.uk/what-to-record-when-weather-stops-work/</id>
    <published>2026-09-11T00:00:00Z</published>
    <updated>2026-09-13T23:42:01Z</updated>
    <category term="TradeWeather"/>
    <summary>Standing down a gang because the weather turned is a normal part of the job. Whether it becomes an entitlement or a cost lands almost entirely on what got written down that morning, and by whom.
The asymmetry
If the main contractor&#39;s programme slips and you have nothing in writing, the default assum</summary>
  </entry>
  <entry>
    <title>The Client Wants to Fix a Typo</title>
    <link href="https://ssg.tradik.com/blog/the-client-wants-to-fix-a-typo/"/>
    <id>https://ssg.tradik.com/blog/the-client-wants-to-fix-a-typo/</id>
    <published>2026-09-10T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>1.8.60 is about the work an agency does between builds: letting a client fix their own headline, and a GTM install that was only ever half there.</summary>
  </entry>
  <entry>
    <title>The Paragraph You Clicked Is Not in the File</title>
    <link href="https://ssg.tradik.com/blog/the-paragraph-you-clicked-is-not-in-the-file/"/>
    <id>https://ssg.tradik.com/blog/the-paragraph-you-clicked-is-not-in-the-file/</id>
    <published>2026-09-10T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Click-to-edit is easy to build and hard to make safe. Here is the rule that decides which paragraph a click means, and why the editor sometimes refuses to guess.</summary>
  </entry>
  <entry>
    <title>What Breaks If I Change This?</title>
    <link href="https://ssg.tradik.com/blog/what-breaks-if-i-change-this/"/>
    <id>https://ssg.tradik.com/blog/what-breaks-if-i-change-this/</id>
    <published>2026-09-10T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>We built an incremental build for 1.8.60. It made a five-thousand-page site five per cent faster. Here is why we shipped it anyway, and what it is actually for.</summary>
  </entry>
  <entry>
    <title>Why one forecast is never enough</title>
    <link href="https://tradeweather.co.uk/why-one-forecast-is-never-enough/"/>
    <id>https://tradeweather.co.uk/why-one-forecast-is-never-enough/</id>
    <published>2026-09-10T00:00:00Z</published>
    <updated>2026-09-14T00:12:55Z</updated>
    <category term="TradeWeather"/>
    <summary>A monocouche render needs the wall to stay above 5 °C and dry for the cure period the manufacturer specifies. On an exposed coastal site, one provider showed a dry Tuesday and the other showed 2 mm of drizzle from 14:00. Both were &amp;quot;right&amp;quot; within their own error bars.
TradeWeather stores bo</summary>
  </entry>
  <entry>
    <title>Reading a datasheet like an adjuster</title>
    <link href="https://tradeweather.co.uk/reading-a-datasheet/"/>
    <id>https://tradeweather.co.uk/reading-a-datasheet/</id>
    <published>2026-09-09T00:00:00Z</published>
    <updated>2026-09-13T11:45:48Z</updated>
    <category term="TradeWeather"/>
    <summary>Manufacturer instructions are written to be followed, not to be read quickly, and the places people misread them are consistent. Here are the four that come up in nearly every dispute.
One: application limits are not cure limits
A datasheet usually gives two different windows, and they are easy to b</summary>
  </entry>
  <entry>
    <title>Dew point, not air temperature</title>
    <link href="https://tradeweather.co.uk/dew-point-not-air-temperature/"/>
    <id>https://tradeweather.co.uk/dew-point-not-air-temperature/</id>
    <published>2026-09-08T00:00:00Z</published>
    <updated>2026-09-13T23:42:01Z</updated>
    <category term="TradeWeather"/>
    <summary>The most common avoidable coating failure is not applying in the rain. It is applying to a surface that is about to go below dew point. The rain version is obvious and everyone avoids it. This one happens on a clear evening with a pleasant afternoon behind it.
What dew point actually tells you
Dew p</summary>
  </entry>
  <entry>
    <title>One Sitemap Per Site Does Not Scale to Forty Clients</title>
    <link href="https://ssg.tradik.com/blog/one-sitemap-per-site-does-not-scale-to-forty-clients/"/>
    <id>https://ssg.tradik.com/blog/one-sitemap-per-site-does-not-scale-to-forty-clients/</id>
    <published>2026-09-08T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>An agency has a different relationship with sitemap.xml than a site owner. Split sitemaps answer &#39;is it indexed&#39; per section, without forty dashboards.</summary>
  </entry>
  <entry>
    <title>The Build Was Green and the Site Was Wrong</title>
    <link href="https://ssg.tradik.com/blog/the-build-was-green-and-the-site-was-wrong/"/>
    <id>https://ssg.tradik.com/blog/the-build-was-green-and-the-site-was-wrong/</id>
    <published>2026-09-08T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Almost every fix in four releases came from one place: a third-party crawler, weeks after a build that reported success. What those failures had in common.</summary>
  </entry>
  <entry>
    <title>The Duplicate Pages Your Crawler Cannot See</title>
    <link href="https://mddb.tradik.com/blog/duplicate-pages-your-crawler-cannot-see/"/>
    <id>https://mddb.tradik.com/blog/duplicate-pages-your-crawler-cannot-see/</id>
    <published>2026-09-08T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="search"/>
    <category term="retrieval"/>
    <category term="embeddings"/>
    <category term="MDDB"/>
    <summary>A site audit finds copied pages by comparing words. The pages that actually compete with each other share an intent and almost no vocabulary, and word comparison is blind to them.</summary>
  </entry>
  <entry>
    <title>What&#39;s New in MDDB 2.14</title>
    <link href="https://mddb.tradik.com/blog/whats-new-in-mddb-2-14/"/>
    <id>https://mddb.tradik.com/blog/whats-new-in-mddb-2-14/</id>
    <published>2026-09-08T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="release"/>
    <category term="mcp"/>
    <category term="rag"/>
    <category term="retrieval"/>
    <category term="MDDB"/>
    <summary>MDDB 2.14 speaks the stateless MCP revision without dropping the old one, and fixes three ways retrieval was quietly returning the wrong document first.</summary>
  </entry>
  <entry>
    <title>What the climate does to a programme</title>
    <link href="https://tradeweather.co.uk/climate-and-your-programme/"/>
    <id>https://tradeweather.co.uk/climate-and-your-programme/</id>
    <published>2026-09-06T00:00:00Z</published>
    <updated>2026-09-13T23:45:56Z</updated>
    <category term="TradeWeather"/>
    <summary>Very few of the places this product is used have severe weather by world standards. What they have are climates that punish the programme rather than the day: mild and damp on the Atlantic edge, hard winters and hot summers further east, and a shoulder season either side where nothing stops the job</summary>
  </entry>
  <entry>
    <title>Why plumbers need a weather window</title>
    <link href="https://tradeweather.co.uk/why-plumbers-need-weather-windows/"/>
    <id>https://tradeweather.co.uk/why-plumbers-need-weather-windows/</id>
    <published>2026-09-04T00:00:00Z</published>
    <updated>2026-09-13T11:45:48Z</updated>
    <category term="TradeWeather"/>
    <summary>Ask a plumber whether the weather affects the job and you will get a short answer. Emergency work does not wait for a forecast, and most of the day is spent indoors. Both true. Then look at what actually goes wrong on plumbing jobs and how much of it is moisture and temperature.
Sealant is a wet tra</summary>
  </entry>
  <entry>
    <title>Insurance will not cover failed render</title>
    <link href="https://tradeweather.co.uk/insurance-will-not-cover-failed-render/"/>
    <id>https://tradeweather.co.uk/insurance-will-not-cover-failed-render/</id>
    <published>2026-09-02T00:00:00Z</published>
    <updated>2026-09-13T23:42:01Z</updated>
    <category term="TradeWeather"/>
    <summary>Every renderer has heard the story, and most have lived a version of it. A wall goes on late in October, the forecast said dry, the temperature dropped to two degrees overnight, and in March the client rings about crazing and hollow patches on the north elevation. A five-figure bill for scaffold, la</summary>
  </entry>
  <entry>
    <title>Why Your RAG Returns the Wrong Document</title>
    <link href="https://mddb.tradik.com/blog/why-your-rag-returns-the-wrong-document/"/>
    <id>https://mddb.tradik.com/blog/why-your-rag-returns-the-wrong-document/</id>
    <published>2026-08-29T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="rag"/>
    <category term="retrieval"/>
    <category term="embeddings"/>
    <category term="search"/>
    <category term="MDDB"/>
    <summary>A ten-document corpus, one ordinary question, and a semantic search that ranks the right answer nowhere. What actually fixed it was not a parameter.</summary>
  </entry>
  <entry>
    <title>Every January, Every Footer Is Wrong</title>
    <link href="https://ssg.tradik.com/blog/why-a-static-site-cannot-tell-you-the-year/"/>
    <id>https://ssg.tradik.com/blog/why-a-static-site-cannot-tell-you-the-year/</id>
    <published>2026-08-24T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>A generator that reads the clock cannot promise the same bytes twice. Which is why the copyright year in your footer is a harder problem than it looks.</summary>
  </entry>
  <entry>
    <title>Flat Throughput Is a Diagnosis</title>
    <link href="https://mddb.tradik.com/blog/the-loop-that-was-not-waiting-for-memory/"/>
    <id>https://mddb.tradik.com/blog/the-loop-that-was-not-waiting-for-memory/</id>
    <published>2026-08-24T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="performance"/>
    <category term="search"/>
    <category term="benchmarking"/>
    <category term="MDDB"/>
    <summary>Two optimisations to MDDB&#39;s vector loop predicted 33% and delivered 1.5%. The benchmark had been saying why for months, in a column nobody read as a diagnosis.</summary>
  </entry>
  <entry>
    <title>Is It Leaking? Read a Different Number</title>
    <link href="https://mddb.tradik.com/blog/rss-is-the-wrong-number/"/>
    <id>https://mddb.tradik.com/blog/rss-is-the-wrong-number/</id>
    <published>2026-08-24T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="operations"/>
    <category term="performance"/>
    <category term="MDDB"/>
    <summary>A report said MDDB grew from 42 MB to 153 MB under load. The observation was probably right and the conclusion wrong — and the difference is one field you already have.</summary>
  </entry>
  <entry>
    <title>What&#39;s New in MDDB 2.12</title>
    <link href="https://mddb.tradik.com/blog/whats-new-in-mddb-2-12/"/>
    <id>https://mddb.tradik.com/blog/whats-new-in-mddb-2-12/</id>
    <published>2026-08-24T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="release"/>
    <category term="search"/>
    <category term="rag"/>
    <category term="security"/>
    <category term="performance"/>
    <category term="MDDB"/>
    <summary>MDDB 2.12 adds code-aware retrieval, collection search profiles, faster bulk indexing, safer defaults and clearer production diagnostics.</summary>
  </entry>
  <entry>
    <title>What&#39;s New in MDDB 2.13</title>
    <link href="https://mddb.tradik.com/blog/whats-new-in-mddb-2-13/"/>
    <id>https://mddb.tradik.com/blog/whats-new-in-mddb-2-13/</id>
    <published>2026-08-24T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="release"/>
    <category term="performance"/>
    <category term="security"/>
    <category term="operations"/>
    <category term="MDDB"/>
    <summary>MDDB 2.13 runs its test suite on Windows, makes vector comparison 3.7–6.3× faster on amd64, and fixes two ways a restore could destroy the database it was restoring.</summary>
  </entry>
  <entry>
    <title>Choosing a Search Algorithm from the Collection</title>
    <link href="https://mddb.tradik.com/blog/which-algorithm-should-i-use/"/>
    <id>https://mddb.tradik.com/blog/which-algorithm-should-i-use/</id>
    <published>2026-08-23T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="search"/>
    <category term="rag"/>
    <category term="agents"/>
    <category term="mcp"/>
    <category term="benchmarking"/>
    <category term="MDDB"/>
    <summary>MDDB now profiles a collection and recommends search settings from its document length, vocabulary, vector coverage and extracted symbols.</summary>
  </entry>
  <entry>
    <title>Diversifying Near-Duplicate Search Results</title>
    <link href="https://mddb.tradik.com/blog/your-vector-search-rewards-duplicates/"/>
    <id>https://mddb.tradik.com/blog/your-vector-search-rewards-duplicates/</id>
    <published>2026-08-23T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="search"/>
    <category term="rag"/>
    <category term="retrieval"/>
    <category term="embeddings"/>
    <category term="MDDB"/>
    <summary>A runbook copied for four environments can occupy four result slots. MDDB uses MinHash overlap to reduce that repetition after ranking.</summary>
  </entry>
  <entry>
    <title>The Collection Knows How to Be Searched</title>
    <link href="https://mddb.tradik.com/blog/the-collection-knows-how-to-be-searched/"/>
    <id>https://mddb.tradik.com/blog/the-collection-knows-how-to-be-searched/</id>
    <published>2026-08-23T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="rag"/>
    <category term="retrieval"/>
    <category term="mcp"/>
    <category term="agents"/>
    <category term="MDDB"/>
    <summary>Retrieval settings and answer formatting used to live in every client. In MDDB 2.12 they live with the data, so a new consumer gets them right without being told.</summary>
  </entry>
  <entry>
    <title>What Breaks If I Change This?</title>
    <link href="https://mddb.tradik.com/blog/what-breaks-if-i-change-this/"/>
    <id>https://mddb.tradik.com/blog/what-breaks-if-i-change-this/</id>
    <published>2026-08-23T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="search"/>
    <category term="mcp"/>
    <category term="agents"/>
    <category term="MDDB"/>
    <summary>MDDB 2.12 indexes what a code file declares, uses and imports, then answers the relational questions grep cannot: what depends on this selector, which pages load this script, what is nobody using any more.</summary>
  </entry>
  <entry>
    <title>Migrating From WordPress Is Easy. Keeping Its URLs Is Not.</title>
    <link href="https://ssg.tradik.com/blog/migrating-from-wordpress-keeping-urls/"/>
    <id>https://ssg.tradik.com/blog/migrating-from-wordpress-keeping-urls/</id>
    <published>2026-08-21T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>A WordPress migration must preserve more than posts: original URLs, category and date archives, menus, comments and language structure all affect old links.</summary>
  </entry>
  <entry>
    <title>Your AI Agent Shouldn&#39;t Read 5,000 Tokens to Change One CSS Value</title>
    <link href="https://ssg.tradik.com/blog/ai-agent-should-not-read-5000-tokens-for-one-css-value/"/>
    <id>https://ssg.tradik.com/blog/ai-agent-should-not-read-5000-tokens-for-one-css-value/</id>
    <published>2026-08-21T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Giving an agent access to your project is half the problem. If changing one CSS value means rewriting a whole file, its context goes on learning nothing.</summary>
  </entry>
  <entry>
    <title>Your Local Preview Should Not Lie to You</title>
    <link href="https://ssg.tradik.com/blog/local-preview-should-not-lie/"/>
    <id>https://ssg.tradik.com/blog/local-preview-should-not-lie/</id>
    <published>2026-08-21T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>SSG&#39;s local preview applies generated redirects and headers, reloads them after builds, and keeps browser caching from hiding files while they are edited.</summary>
  </entry>
  <entry>
    <title>Your MCP Server Can Edit Your Website. Who Is Allowed to Talk to It?</title>
    <link href="https://ssg.tradik.com/blog/who-is-allowed-to-talk-to-your-mcp-server/"/>
    <id>https://ssg.tradik.com/blog/who-is-allowed-to-talk-to-your-mcp-server/</id>
    <published>2026-08-21T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>An MCP server that edits templates and opens pull requests is not just another dev endpoint. The moment it listens on HTTP, authentication is not optional.</summary>
  </entry>
  <entry>
    <title>Multilingual Without Losing Track of the Page</title>
    <link href="https://ssg.tradik.com/blog/multilingual-without-losing-the-page/"/>
    <id>https://ssg.tradik.com/blog/multilingual-without-losing-the-page/</id>
    <published>2026-08-09T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Translating the words is the easy half. The hard half is that /o-nas/ and /en/about/ are the same page, and nothing in a file tree says so.</summary>
  </entry>
  <entry>
    <title>Building a Planet: One Feed From Three Sites, Yours Included</title>
    <link href="https://ssg.tradik.com/blog/building-a-planet/"/>
    <id>https://ssg.tradik.com/blog/building-a-planet/</id>
    <published>2026-08-07T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Three feeds into one took a config block. The interesting part was the four decisions under it: whose format wins, what to drop, what a dark source means.</summary>
  </entry>
  <entry>
    <title>From Next.js to SSG: Rebuilding tradik.com</title>
    <link href="https://tradik.com/blog/from-nextjs-to-ssg/"/>
    <id>https://tradik.com/blog/from-nextjs-to-ssg/</id>
    <published>2026-08-07T00:00:00Z</published>
    <updated>2026-08-07T21:35:48Z</updated>
    <category term="ssg"/>
    <category term="nextjs"/>
    <category term="static-site"/>
    <category term="cloudflare"/>
    <category term="migration"/>
    <category term="seo"/>
    <category term="Tradik"/>
    <summary>tradik.com ran on Next.js with a static export: a React toolchain and a node_modules tree to publish nine pages that never change. It now runs on spagu/ssg — Markdown and YAML in, HTML out.</summary>
  </entry>
  <entry>
    <title>I Went Looking for CPU Tricks and Found a Quadratic Loop</title>
    <link href="https://ssg.tradik.com/blog/making-builds-faster/"/>
    <id>https://ssg.tradik.com/blog/making-builds-faster/</id>
    <published>2026-08-03T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>The plan was SIMD and PGO. The profiler said two thirds of the build was syscalls from listing one directory per post. Fixing that made it 5.25x faster.</summary>
  </entry>
  <entry>
    <title>AI in Your Content, at Build Time — Not in the Browser</title>
    <link href="https://ssg.tradik.com/blog/ai-in-content/"/>
    <id>https://ssg.tradik.com/blog/ai-in-content/</id>
    <published>2026-08-02T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Ask an AI a question from inside a Markdown file and bake the answer into the page — once, at build time, cached. No key in the browser, no spinner.</summary>
  </entry>
  <entry>
    <title>Related Posts, From a Line of Template to Semantic Search</title>
    <link href="https://ssg.tradik.com/blog/related-posts/"/>
    <id>https://ssg.tradik.com/blog/related-posts/</id>
    <published>2026-08-02T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>Five related articles is one template line, one config block, or a small pipeline — depending on whether you want keyword overlap or actual meaning.</summary>
  </entry>
  <entry>
    <title>Tell the Designer What You Want: the ssg mcp Development Server</title>
    <link href="https://ssg.tradik.com/blog/mcp-development-server/"/>
    <id>https://ssg.tradik.com/blog/mcp-development-server/</id>
    <published>2026-08-02T00:00:00Z</published>
    <updated>2026-10-11T19:18:41Z</updated>
    <category term="SSG"/>
    <summary>ssg mcp turns your AI assistant into two coworkers: a designer that edits templates and a content manager for Markdown. Each knows what it may not touch.</summary>
  </entry>
  <entry>
    <title>Your WordPress just became AI-searchable: MDDB Sync</title>
    <link href="https://mddb.tradik.com/blog/wordpress-plugin/"/>
    <id>https://mddb.tradik.com/blog/wordpress-plugin/</id>
    <published>2026-08-02T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="mcp"/>
    <category term="search"/>
    <category term="rag"/>
    <category term="MDDB"/>
    <summary>There&#39;s a decade of knowledge sitting in your WordPress. Product announcements,
how-to guides, changelogs, that one post from 2019 that still answers half of
your support tickets. And when you plug an AI agent into your company, the
first thing it asks is, effectively: where&#39;s the knowledge?
The MDD</summary>
  </entry>
  <entry>
    <title>MDDB 2.11.4: tenants, better RAG, vectors that fit</title>
    <link href="https://mddb.tradik.com/blog/mddb-2-11-4/"/>
    <id>https://mddb.tradik.com/blog/mddb-2-11-4/</id>
    <published>2026-07-31T00:00:00Z</published>
    <updated>2026-10-11T22:21:31Z</updated>
    <category term="release"/>
    <category term="rag"/>
    <category term="performance"/>
    <category term="MDDB"/>
    <summary>We spent the last cycle reading a lot of feedback — not just about MDDB, but
about what people using vector databases in general keep running into. A few
themes came up again and again: &amp;quot;I want to put multiple customers on one
instance without building isolation myself&amp;quot;, &amp;quot;my RAG answe</summary>
  </entry>
  <entry>
    <title>Starting Shipyard</title>
    <link href="https://shipyard.tradik.com/blog/starting-shipyard/"/>
    <id>https://shipyard.tradik.com/blog/starting-shipyard/</id>
    <published>2026-01-12T00:00:00Z</published>
    <updated>2026-10-03T19:49:51Z</updated>
    <category term="Shipyard"/>
    <summary>Shipyard runs a software portfolio from one place. It watches the repositories you select, builds approved issues into pull requests and ships releases on a…</summary>
  </entry>
  <entry>
    <title>Good, fast, cheap: the triangle in one diagram</title>
    <link href="https://tradik.com/blog/good-fast-and-cheap/"/>
    <id>https://tradik.com/blog/good-fast-and-cheap/</id>
    <published>2020-05-18T08:45:39Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="project-management"/>
    <category term="Tradik"/>
    <summary>Cheap and good is long, cheap and fast is ugly, good and fast is expensive, and the middle of the diagram is marked NO. A budget conversation in one image.</summary>
  </entry>
  <entry>
    <title>Four ways to get files into a git repository</title>
    <link href="https://tradik.com/blog/ways-to-upload-files-into-a-git-repository/"/>
    <id>https://tradik.com/blog/ways-to-upload-files-into-a-git-repository/</id>
    <published>2020-04-14T17:05:45Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="git"/>
    <category term="Tradik"/>
    <summary>Web editor, GUI client, command line or an IDE — the same commit made four ways, and which one suits a one-line fix versus a whole theme.</summary>
  </entry>
  <entry>
    <title>FreeBSD 12.1: changing the default shell for jexec</title>
    <link href="https://tradik.com/blog/freebsd-12-1-default-shell-for-jexec/"/>
    <id>https://tradik.com/blog/freebsd-12-1-default-shell-for-jexec/</id>
    <published>2020-04-01T12:33:18Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="freebsd"/>
    <category term="jails"/>
    <category term="Tradik"/>
    <summary>chsh, .profile and a path argument all fail to give jexec a different shell. Reading jexec.c shows why, and where the hardcoded /bin/sh comes from.</summary>
  </entry>
  <entry>
    <title>FreeBSD jails: extending the jls command</title>
    <link href="https://tradik.com/blog/freebsd-jails-extending-jls/"/>
    <id>https://tradik.com/blog/freebsd-jails-extending-jls/</id>
    <published>2020-03-31T11:06:43Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="freebsd"/>
    <category term="jails"/>
    <category term="Tradik"/>
    <summary>jls reports the parameters a jail was defined with, not what it is doing now. A small script adds process counts, users and live state to the same table.</summary>
  </entry>
  <entry>
    <title>Installing Portainer on a remote machine over SSH</title>
    <link href="https://tradik.com/blog/install-portainer-on-a-remote-machine/"/>
    <id>https://tradik.com/blog/install-portainer-on-a-remote-machine/</id>
    <published>2020-03-25T15:18:13Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="docker"/>
    <category term="portainer"/>
    <category term="ssh"/>
    <category term="Tradik"/>
    <summary>Portainer&#39;s setup screen is served on port 9000 and expects a browser. An SSH tunnel puts that screen on your own laptop, with no X server on the box.</summary>
  </entry>
  <entry>
    <title>Trigger a Jenkins job from Bitbucket Pipelines</title>
    <link href="https://tradik.com/blog/trigger-a-jenkins-job-from-bitbucket-pipelines/"/>
    <id>https://tradik.com/blog/trigger-a-jenkins-job-from-bitbucket-pipelines/</id>
    <published>2020-03-03T13:54:56Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="jenkins"/>
    <category term="bitbucket"/>
    <category term="ci"/>
    <category term="Tradik"/>
    <summary>Two Jenkins plugins, a parametrised job and one curl line in bitbucket-pipelines.yml — passing the commit hash across without a webhook in sight.</summary>
  </entry>
  <entry>
    <title>Mattermost 5.19 on FreeBSD 12.1, inside a jail</title>
    <link href="https://tradik.com/blog/mattermost-5-19-on-freebsd-inside-a-jail/"/>
    <id>https://tradik.com/blog/mattermost-5-19-on-freebsd-inside-a-jail/</id>
    <published>2020-02-16T23:49:58Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="freebsd"/>
    <category term="jails"/>
    <category term="mattermost"/>
    <category term="Tradik"/>
    <summary>Self-hosting Mattermost from the FreeBSD port: the jail, the database user, TLS with Let&#39;s Encrypt behind Cloudflare, and a working server in five minutes.</summary>
  </entry>
  <entry>
    <title>svn: E175002: Received fatal alert: protocol_version</title>
    <link href="https://tradik.com/blog/svn-e175002-received-fatal-alert-protocol-version/"/>
    <id>https://tradik.com/blog/svn-e175002-received-fatal-alert-protocol-version/</id>
    <published>2020-02-08T15:41:03Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="subversion"/>
    <category term="jenkins"/>
    <category term="cloudflare"/>
    <category term="security"/>
    <category term="Tradik"/>
    <summary>Jenkins could not check out from Subversion behind Cloudflare. The alert is a TLS version mismatch between SVNKit and a repository set to TLS 1.3.</summary>
  </entry>
  <entry>
    <title>Install a master Kubernetes cluster on CentOS 8</title>
    <link href="https://tradik.com/blog/install-a-master-kubernetes-cluster-on-centos-8/"/>
    <id>https://tradik.com/blog/install-a-master-kubernetes-cluster-on-centos-8/</id>
    <published>2019-11-18T22:00:12Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="kubernetes"/>
    <category term="centos"/>
    <category term="containers"/>
    <category term="Tradik"/>
    <summary>The CentOS 8 walkthrough, where podman replaces docker and firewalld behaves differently — every command from a clean install to a joined worker node.</summary>
  </entry>
  <entry>
    <title>Filebeat for custom Nginx logs on FreeBSD 12.0</title>
    <link href="https://tradik.com/blog/filebeat-custom-nginx-logs-on-freebsd/"/>
    <id>https://tradik.com/blog/filebeat-custom-nginx-logs-on-freebsd/</id>
    <published>2019-11-09T22:50:23Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="freebsd"/>
    <category term="logging"/>
    <category term="elasticsearch"/>
    <category term="nginx"/>
    <category term="Tradik"/>
    <summary>Filebeat&#39;s Nginx module expects the default log format. Changing the grok patterns, adding a field and loading the ingest pipeline so Kibana parses your own.</summary>
  </entry>
  <entry>
    <title>Kubernetes vs Docker Swarm: a simple comparison</title>
    <link href="https://tradik.com/blog/kubernetes-vs-docker-swarm-simple-comparison/"/>
    <id>https://tradik.com/blog/kubernetes-vs-docker-swarm-simple-comparison/</id>
    <published>2019-11-02T16:04:42Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="kubernetes"/>
    <category term="docker"/>
    <category term="containers"/>
    <category term="Tradik"/>
    <summary>Installation, scaling limits, load balancing, rollbacks, updates and logging, side by side — where Swarm is simpler and where Kubernetes earns the effort.</summary>
  </entry>
  <entry>
    <title>Install a master Kubernetes cluster on CentOS 7</title>
    <link href="https://tradik.com/blog/install-a-master-kubernetes-cluster-on-centos-7/"/>
    <id>https://tradik.com/blog/install-a-master-kubernetes-cluster-on-centos-7/</id>
    <published>2019-10-26T10:03:43Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="kubernetes"/>
    <category term="centos"/>
    <category term="containers"/>
    <category term="Tradik"/>
    <summary>From the virtualisation flags a node needs to a working master: firewall rules, swap, kubeadm init, the pod network and joining the first worker.</summary>
  </entry>
  <entry>
    <title>Inside an APC APCRBC124 UPS battery cartridge</title>
    <link href="https://tradik.com/blog/inside-an-apc-apcrbc124-ups-battery-cartridge/"/>
    <id>https://tradik.com/blog/inside-an-apc-apcrbc124-ups-battery-cartridge/</id>
    <published>2019-10-24T10:39:03Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="hardware"/>
    <category term="Tradik"/>
    <summary>Eleven photographs of an APCRBC124 taken apart: the glued sticker plate, the connector holder and the two 12V sealed lead-acid cells behind it.</summary>
  </entry>
  <entry>
    <title>Upgrading firmware on an HP 2620-24-PoEP from the GUI</title>
    <link href="https://tradik.com/blog/hp-2620-24-poep-firmware-upgrade/"/>
    <id>https://tradik.com/blog/hp-2620-24-poep-firmware-upgrade/</id>
    <published>2019-10-20T22:55:33Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="networking"/>
    <category term="hp-procurve"/>
    <category term="Tradik"/>
    <summary>The switch keeps a primary and a secondary image, so an upgrade has a way back. Finding the right SWI file for a J9625A and flashing it from the GUI.</summary>
  </entry>
  <entry>
    <title>Setting time and date on an HP 2620-24-PoEP switch</title>
    <link href="https://tradik.com/blog/hp-2620-24-poep-time-and-date/"/>
    <id>https://tradik.com/blog/hp-2620-24-poep-time-and-date/</id>
    <published>2019-10-20T22:39:35Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="networking"/>
    <category term="hp-procurve"/>
    <category term="Tradik"/>
    <summary>Three ways to give an HP 2620-24-PoEP the right time: an NTP server found with dig, SNTP unicast, or typing it in by hand over the console.</summary>
  </entry>
  <entry>
    <title>A release process built on trunk, tags and branches</title>
    <link href="https://tradik.com/blog/release-process-with-trunk-tags-and-branches/"/>
    <id>https://tradik.com/blog/release-process-with-trunk-tags-and-branches/</id>
    <published>2019-03-27T17:12:53Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="subversion"/>
    <category term="ci"/>
    <category term="Tradik"/>
    <summary>Who owns trunk, what a tag is for, and where a developer&#39;s branch fits — the repository layout behind a release, drawn as one diagram.</summary>
  </entry>
  <entry>
    <title>Captcha: a simple way to protect your website</title>
    <link href="https://tradik.com/blog/captcha-simple-way-to-protect-your-website/"/>
    <id>https://tradik.com/blog/captcha-simple-way-to-protect-your-website/</id>
    <published>2019-03-24T11:03:57Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="security"/>
    <category term="wordpress"/>
    <category term="spam"/>
    <category term="Tradik"/>
    <summary>Why an unprotected form is a target, the six habits that keep bots out, and reCAPTCHA v3 on a WordPress site in about ten minutes.</summary>
  </entry>
  <entry>
    <title>Colour coding error categories: error, warning, notice</title>
    <link href="https://tradik.com/blog/colour-coding-error-categories/"/>
    <id>https://tradik.com/blog/colour-coding-error-categories/</id>
    <published>2019-03-19T23:36:15Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="logging"/>
    <category term="Tradik"/>
    <summary>Three severities, three colours, and one sentence each saying what the reader is expected to do about it. The whole convention on one screen.</summary>
  </entry>
  <entry>
    <title>Development, staging, NXT, production: our deployment path</title>
    <link href="https://tradik.com/blog/deployment-process/"/>
    <id>https://tradik.com/blog/deployment-process/</id>
    <published>2019-03-19T22:16:30Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="deployment"/>
    <category term="infrastructure"/>
    <category term="Tradik"/>
    <summary>The four environments a change moved through before it reached a client, and the URL each one answered on. One diagram, drawn in 2019.</summary>
  </entry>
  <entry>
    <title>Report-level date settings in Google Data Studio</title>
    <link href="https://tradik.com/blog/google-data-studio-report-level-date-settings/"/>
    <id>https://tradik.com/blog/google-data-studio-report-level-date-settings/</id>
    <published>2019-03-04T16:31:09Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="analytics"/>
    <category term="Tradik"/>
    <summary>A date selector that refuses to go report-level usually has a hidden element fighting it. Ctrl+A finds it in seconds, page by page.</summary>
  </entry>
  <entry>
    <title>Hello to Gutenberg, goodbye to the classic editor</title>
    <link href="https://tradik.com/blog/hello-gutenberg-goodbye-classic-editor/"/>
    <id>https://tradik.com/blog/hello-gutenberg-goodbye-classic-editor/</id>
    <published>2019-01-06T20:30:54Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="wordpress"/>
    <category term="gutenberg"/>
    <category term="Tradik"/>
    <summary>Gutenberg turns a WordPress post into blocks. Good for new designs, awkward for the thousands of posts already saved in the old editor.</summary>
  </entry>
  <entry>
    <title>WordPress 5.0: the editor encountered an unexpected error</title>
    <link href="https://tradik.com/blog/wordpress-5-0-editor-encountered-an-unexpected-error/"/>
    <id>https://tradik.com/blog/wordpress-5-0-editor-encountered-an-unexpected-error/</id>
    <published>2018-12-09T19:26:28Z</published>
    <updated>2026-09-08T17:28:16Z</updated>
    <category term="pushpanel"/>
    <category term="wordpress"/>
    <category term="gutenberg"/>
    <category term="Tradik"/>
    <summary>WordPress 5.0 auto-updated, took the classic editor with it, and drafts stopped opening. What the error actually is, and how to get editing again.</summary>
  </entry>
  <entry>
    <title>First performance numbers from MySQL 8.0</title>
    <link href="https://tradik.com/blog/mysql-8-0-first-performance-numbers/"/>
    <id>https://tradik.com/blog/mysql-8-0-first-performance-numbers/</id>
    <published>2018-08-13T23:10:29Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="pushpanel"/>
    <category term="databases"/>
    <category term="freebsd"/>
    <category term="Tradik"/>
    <summary>MySQL 8.0.11 measured against 5.7 on 50,000-row tables: 2% faster, 2% less I/O, more memory — and an apr-util build that needed a patch.</summary>
  </entry>
  <entry>
    <title>New development servers, in south-west Germany</title>
    <link href="https://tradik.com/blog/new-development-servers/"/>
    <id>https://tradik.com/blog/new-development-servers/</id>
    <published>2011-11-07T14:46:04Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="company"/>
    <category term="infrastructure"/>
    <category term="Tradik"/>
    <summary>Hardware to build and test on: development servers in south-west Germany, for new technologies and the exchange products that ran on them.</summary>
  </entry>
  <entry>
    <title>Tradik Limited is registered in England and Wales</title>
    <link href="https://tradik.com/blog/company-startup/"/>
    <id>https://tradik.com/blog/company-startup/</id>
    <published>2010-01-28T22:01:47Z</published>
    <updated>2026-09-08T22:15:35Z</updated>
    <category term="company"/>
    <category term="Tradik"/>
    <summary>Company number 7139005, registered on 28 January 2010. The first post on the tradik.com blog, and the day the company started.</summary>
  </entry>
</feed>
