<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://damieng.com</id>
    <title>DamienG's Blog</title>
    <updated>2026-09-02T08:06:31.315Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Damien Guard</name>
        <email>damieng@gmail.com</email>
    </author>
    <link rel="alternate" href="https://damieng.com"/>
    <subtitle>Damien Guard on software development, typography, vintage computing, and .NET.</subtitle>
    <rights>Copyright 2004-2025 Damien Guard. All rights reserved.</rights>
    <entry>
        <title type="html"><![CDATA[VTX5000: Part 5 - Rendering]]></title>
        <id>https://damieng.com/blog/2026/vtx5000-part-5-rendering/</id>
        <link href="https://damieng.com/blog/2026/vtx5000-part-5-rendering/"/>
        <link rel="enclosure" href="https://img.damieng.com/32e5daaa-2402-4878-983d-f12643efbdb9-Micronet800Spectrum.webp" type="image/webp"/>
        <updated>2026-05-31T06:23:29.958Z</updated>
        <summary type="html"><![CDATA[In part 4 we followed data to and from the TI modem through the Intel 8251 USART landing in our buffers.  Now comes the interesting part - rendering those Viewdata 40×24 frames on what is typically a 32×24 display.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[VTX5000: Part 4 - Communications]]></title>
        <id>https://damieng.com/blog/2026/vtx5000-part-4-comms-routines/</id>
        <link href="https://damieng.com/blog/2026/vtx5000-part-4-comms-routines/"/>
        <link rel="enclosure" href="https://img.damieng.com/94c63c46-0b41-47ff-84fd-67c1b8013d54-Intel8251Datasheet.png" type="image/png"/>
        <updated>2026-05-06T10:19:24.727Z</updated>
        <summary type="html"><![CDATA[In part 3 we saw how the VTX5000's 8K ROM is structured and how the BASIC program drives the terminal. ]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[VTX5000: Part 3 - Software ROM]]></title>
        <id>https://damieng.com/blog/2026/vtx5000-part-3-software-rom/</id>
        <link href="https://damieng.com/blog/2026/vtx5000-part-3-software-rom/"/>
        <updated>2026-04-15T23:00:00.000Z</updated>
        <summary type="html"><![CDATA[In part 1 we covered the history of Prestel and Prism, and in part 2 we cracked open the VTX5000 to examine the hardware. Now how did they squeeze a viewdata terminal app into 8KB...]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[VTX5000: Part 2 - Hardware]]></title>
        <id>https://damieng.com/blog/2026/prism-vtx5000-part-2/</id>
        <link href="https://damieng.com/blog/2026/prism-vtx5000-part-2/"/>
        <link rel="enclosure" href="https://img.damieng.com/4ed2cd33-eb04-418f-aee5-c67279cafbcf-PrismVTX5000Modem_PCB.jpg" type="image/jpg"/>
        <updated>2026-03-30T23:00:00.000Z</updated>
        <summary type="html"><![CDATA[With the design spec in hand, Prism Microproducts contracted O.E. Ltd - a UK electronics manufacturer - to implement and produce the VTX5000 as a self-contained Prestel terminal that sat beneath the rubber-keyed Speccy and plugged straight into the edge connector at the back meaning no extra hardware and no extra power supply.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[VTX5000: Part 1 - Prism, Prestel and Teletext]]></title>
        <id>https://damieng.com/blog/2026/prism-vtx5000-part-1/</id>
        <link href="https://damieng.com/blog/2026/prism-vtx5000-part-1/"/>
        <link rel="enclosure" href="https://img.damieng.com/fc5b9571-b19e-4684-b05e-354ace5b59c3-ceefax_holidays2.png" type="image/png"/>
        <updated>2026-03-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Prism VTX5000 for the ZX Spectrum and the first modem I ever owned. With its bright colourful viewdata graphics and decent-download 1200/75 bps speed it ignited my life-long interest in data communications and online communities.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Sell to Guernsey - An Overlooked Opportunity for UK Sellers]]></title>
        <id>https://damieng.com/blog/2025/sell-and-ship-to-guernsey/</id>
        <link href="https://damieng.com/blog/2025/sell-and-ship-to-guernsey/"/>
        <updated>2025-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you're an online retailer in the UK you probably want to maximise your market but a lot of retailers don't realise their store is configured not to ship to the British Channel Islands (Guernsey and Jersey) or the Isle of Man as the defaults in some online store software, like Shopify, exclude them.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[HTML5 Video Cheatsheet: Optimizing videos for the web]]></title>
        <id>https://damieng.com/blog/2025/html5-video-cheatsheet/</id>
        <link href="https://damieng.com/blog/2025/html5-video-cheatsheet/"/>
        <updated>2025-12-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Creating videos for your page can be tricky, especially if you ensure your videos load quickly, play smoothly, auto start, and work across all devices and browsers.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Art of Amiga lettering]]></title>
        <id>https://damieng.com/blog/2025/art-of-amiga-lettering/</id>
        <link href="https://damieng.com/blog/2025/art-of-amiga-lettering/"/>
        <link rel="enclosure" href="https://img.damieng.com/blog/amiga-lettering/image_1.png" type="image/png"/>
        <updated>2025-12-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A gallery of remarkable title-screen and demo-scene logos hand-plotted in Deluxe Paint, celebrating the typographic artistry of the Amiga era.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Transactions in the MongoDB EF Core Provider]]></title>
        <id>https://damieng.com/blog/2025/mongodb-explicit-transactions/</id>
        <link href="https://damieng.com/blog/2025/mongodb-explicit-transactions/"/>
        <updated>2025-10-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Database transactions ensure that multi-record (or in our case multi-document) operations either all succeed or all fail together.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Queryable Encryption with the MongoDB EF Core Provider]]></title>
        <id>https://damieng.com/blog/2025/mongodb-queryable-encryption/</id>
        <link href="https://damieng.com/blog/2025/mongodb-queryable-encryption/"/>
        <updated>2025-09-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MongoDB's Queryable Encryption lets you encrypt sensitive database fields while keeping them searchable. Unlike traditional encryption-at-rest that renders data unreadable to the database, queryable encryption supports equality and range queries on encrypted fields without requiring decryption first.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Lazy Loading with EF Core Proxies]]></title>
        <id>https://damieng.com/blog/2025/ef-proxies/</id>
        <link href="https://damieng.com/blog/2025/ef-proxies/"/>
        <updated>2025-04-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[With the Microsoft.EntityFrameworkCore.Proxies NuGet package you can use to traverse navigation properties. This is often preferable to joins and includes such as when using one-to-many or only exploring a subset of the navigations based on client-side logic or for providers that don't support include yet.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Enhancing content articles in Nuxt3]]></title>
        <id>https://damieng.com/blog/2025/improved-content-articles-in-nuxt3/</id>
        <link href="https://damieng.com/blog/2025/improved-content-articles-in-nuxt3/"/>
        <updated>2025-02-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've already covered reading time and generated excerpts for Nuxt3 content but there are still a couple more things you can do to enhance your content articles.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Generated Excerpts for Nuxt3 Content]]></title>
        <id>https://damieng.com/blog/2024/generated-excerpts-for-nuxt3-content/</id>
        <link href="https://damieng.com/blog/2024/generated-excerpts-for-nuxt3-content/"/>
        <updated>2024-08-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Nuxt3 has been my stack of choice for a while now and it was time to port my site over from Nuxt2 - an exercise in itself I should blog about - but more concretely is the idea of excerpts.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Nuxt Content v1 content.db database & file size]]></title>
        <id>https://damieng.com/blog/2024/nuxt-content-db-and-size/</id>
        <link href="https://damieng.com/blog/2024/nuxt-content-db-and-size/"/>
        <link rel="enclosure" href="https://img.damieng.com/blog/firefox-content-db.png" type="image/png"/>
        <updated>2024-05-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An examination of Nuxt's content.db and how to shrink it for performance.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Email form sender with AWS Lambda, Brevo & reCAPTCHA]]></title>
        <id>https://damieng.com/blog/2024/send-email-with-aws-and-brevo/</id>
        <link href="https://damieng.com/blog/2024/send-email-with-aws-and-brevo/"/>
        <updated>2024-04-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this article I'll show you how to use AWS Lambda to send an email with Brevo using their API while being protected by reCAPTCHA.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[A blog comment receiver for Cloudflare Workers]]></title>
        <id>https://damieng.com/blog/2023/cloudflare-blog-comment-receiver/</id>
        <link href="https://damieng.com/blog/2023/cloudflare-blog-comment-receiver/"/>
        <updated>2023-10-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A number of years back I switched to a static site generator for damieng.com, firstly with Jekyll, and then with Nuxt when I wanted more flexibility. I've been happy with the results and the site is now faster, cheaper, more secure and easier for me to maintain.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Email form sender with Nuxt3, Cloudflare, Brevo & reCAPTCHA]]></title>
        <id>https://damieng.com/blog/2023/send-email-with-nuxt3-cloudflare-and-brevo/</id>
        <link href="https://damieng.com/blog/2023/send-email-with-nuxt3-cloudflare-and-brevo/"/>
        <link rel="enclosure" href="https://img.damieng.com/blog/brevo-dashboard.webp" type="image/webp"/>
        <updated>2023-05-31T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[I've been using Nuxt quite extensively on the static sites I work on and host and use Cloudflare Pages to host them. It's a great combination of power, flexibility, performance and cost (free).]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Extracting files from Tatung Einstein disk images]]></title>
        <id>https://damieng.com/blog/2023/tatung-einstein-disk-file-extraction/</id>
        <link href="https://damieng.com/blog/2023/tatung-einstein-disk-file-extraction/"/>
        <link rel="enclosure" href="https://img.damieng.com/blog/einstein-bbc-dim.png" type="image/png"/>
        <updated>2023-02-13T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[Kevin Edwards got hold of some 3" disks containing source code to various old commercial games and once they were imaged with a high quality process (a Kryoflux) it was time to write some tooling to get the files out of the corresponding DSK file.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Rendering content with Nuxt3]]></title>
        <id>https://damieng.com/blog/2023/rendering-content-with-nuxt3/</id>
        <link href="https://damieng.com/blog/2023/rendering-content-with-nuxt3/"/>
        <updated>2023-02-10T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[I've been a big fan of Nuxt2 and Nuxt3 is definitely a learning curve and I have to admit the documentation is a bit lacking - lots of small fragments and many different ways to do things.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[A quick primer on floppy disks]]></title>
        <id>https://damieng.com/blog/2023/floppy-disk-primer/</id>
        <link href="https://damieng.com/blog/2023/floppy-disk-primer/"/>
        <link rel="enclosure" href="https://img.damieng.com/blog/vintage-placeholder.jpg" type="image/jpg"/>
        <updated>2023-02-08T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[I've always been fascinated by floppy disks from the crazy stories of Steve Wozniak designing the Disk II controller using a handful of logic chips and carefully-timed software to the amazing tricks to create - and break - copy protection recently popularised by 4am.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Adding reading time to Nuxt3 content]]></title>
        <id>https://damieng.com/blog/2023/reading-time-with-nuxt3-content/</id>
        <link href="https://damieng.com/blog/2023/reading-time-with-nuxt3-content/"/>
        <updated>2023-02-07T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[I've been using Nuxt2 quite a bit for my sites (including this one) and am now starting to use Nuxt3 for a few new ones and am finding the docs lacking in many places or confusing in others so hope to post a few more tips in the coming weeks.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Estimating JSON size]]></title>
        <id>https://damieng.com/blog/2022/estimating-json-size/</id>
        <link href="https://damieng.com/blog/2022/estimating-json-size/"/>
        <updated>2022-03-22T18:03:00.000Z</updated>
        <summary type="html"><![CDATA[I've been working on a system that heavily uses message queuing (RabbitMQ via MassTransit specifically) and occasionally the system needs to deal with large object graphs that need to be processed different - either broken into smaller pieces of work or serialized to an external source and a pointer put into the message instead.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using variable web fonts for perf]]></title>
        <id>https://damieng.com/blog/2021/using-variable-webfonts-for-speed/</id>
        <link href="https://damieng.com/blog/2021/using-variable-webfonts-for-speed/"/>
        <updated>2021-12-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Webfonts are now ubiquitous across the web to the point where most of the big players even have their own typefaces and the web looks a lot better for it.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Migrating from OpenTracing.NET to OpenTelemetry.NET]]></title>
        <id>https://damieng.com/blog/2021/migrating-from-opentracing-to-opentelemetry/</id>
        <link href="https://damieng.com/blog/2021/migrating-from-opentracing-to-opentelemetry/"/>
        <updated>2021-11-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenTracing is an interesting project that allows for the collection of various trace sources to be correlated together to provide a timeline of activity that can span services for reporting in a central system. They were competing with OpenCenus but have now merged to form OpenTelemetry.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Developing a great SDK: Guidelines & Principles]]></title>
        <id>https://damieng.com/blog/2021/developing-a-great-sdk/</id>
        <link href="https://damieng.com/blog/2021/developing-a-great-sdk/"/>
        <updated>2021-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A good SDK builds on the fundamentals of good software engineering but SDKs have additional requirements to consider.]]></summary>
    </entry>
</feed>