{"version":"https:\/\/jsonfeed.org\/version\/1","title":"DamienG's Blog","home_page_url":"https:\/\/damieng.com","description":"Damien Guard on software development, typography, vintage computing, and .NET.","author":{"name":"Damien Guard"},"items":[{"url":"https:\/\/damieng.com\/blog\/2026\/03\/30\/prism-vtx5000-part-2","title":"VTX5000: Part 2 - Hardware","summary":"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.","image":"https:\/\/img.damieng.com\/4ed2cd33-eb04-418f-aee5-c67279cafbcf-PrismVTX5000Modem_PCB.jpg","date_modified":"2026-03-30T23:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2026\/03\/23\/prism-vtx5000-part-1","title":"VTX 5000: Part 1 - Prism, Prestel and Teletext","summary":"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.","image":"https:\/\/img.damieng.com\/fc5b9571-b19e-4684-b05e-354ace5b59c3-ceefax_holidays2.png","date_modified":"2026-03-13T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/12\/09\/sell-and-ship-to-guernsey","title":"Sell to Guernsey - An Overlooked Opportunity for UK Sellers","summary":"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.","date_modified":"2025-12-09T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/12\/05\/html5-video-cheatsheet","title":"HTML5 Video Cheatsheet: Optimizing videos for the web","summary":"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.","date_modified":"2025-12-05T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/12\/04\/art-of-amiga-lettering","title":"The Art of Amiga lettering","image":"https:\/\/img.damieng.com\/blog\/amiga-lettering\/image_1.png","date_modified":"2025-12-04T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/10\/25\/mongodb-explicit-transactions","title":"Transactions in the MongoDB EF Core Provider","summary":"Database transactions ensure that multi-record (or in our case multi-document) operations either all succeed or all fail together.","date_modified":"2025-10-25T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/09\/22\/mongodb-queryable-encryption","title":"Queryable Encryption with the MongoDB EF Core Provider","summary":"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.","date_modified":"2025-09-22T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/04\/02\/ef-proxies","title":"Lazy Loading with EF Core Proxies","summary":"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.","date_modified":"2025-04-02T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2025\/02\/14\/improved-content-articles-in-nuxt3","title":"Enhancing content articles in Nuxt3","summary":"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.","date_modified":"2025-02-14T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2024\/08\/01\/generated-excerpts-for-nuxt3-content","title":"Generated Excerpts for Nuxt3 Content","summary":"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.","date_modified":"2024-08-01T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2024\/05\/14\/nuxt-content-db-and-size","title":"Nuxt Content v1 content.db database & file size","summary":"An examination of Nuxt's content.db and how to shrink it for performance.","image":"https:\/\/img.damieng.com\/blog\/firefox-content-db.png","date_modified":"2024-05-14T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2024\/04\/25\/send-email-with-aws-and-brevo","title":"Email form sender with AWS Lambda, Brevo & reCAPTCHA","summary":"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.","date_modified":"2024-04-25T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/10\/16\/cloudflare-blog-comment-receiver","title":"A blog comment receiver for Cloudflare Workers","summary":"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.","date_modified":"2023-10-24T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/06\/04\/send-email-with-nuxt3-cloudflare-and-brevo","title":"Email form sender with Nuxt3, Cloudflare, Brevo & reCAPTCHA","summary":"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).","image":"https:\/\/img.damieng.com\/blog\/brevo-dashboard.webp","date_modified":"2023-05-31T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/02\/03\/tatung-einstein-disk-file-extraction","title":"Extracting files from Tatung Einstein disk images","summary":"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.","image":"https:\/\/img.damieng.com\/blog\/einstein-bbc-dim.png","date_modified":"2023-02-13T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/02\/10\/rendering-content-with-nuxt3","title":"Rendering content with Nuxt3","summary":"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.","date_modified":"2023-02-10T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/02\/09\/floppy-disk-primer","title":"A quick primer on floppy disks","summary":"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.","image":"https:\/\/img.damieng.com\/blog\/vintage-placeholder.jpg","date_modified":"2023-02-08T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2023\/02\/07\/reading-time-with-nuxt3-content","title":"Adding reading time to Nuxt3 content","summary":"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.","date_modified":"2023-02-07T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2022\/03\/22\/estimating-json-size","title":"Estimating JSON size","summary":"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.","date_modified":"2022-03-22T18:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/12\/03\/using-variable-webfonts-for-speed","title":"Using variable web fonts for perf","summary":"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.","date_modified":"2021-12-03T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/11\/29\/migrating-from-opentracing-to-opentelemetry","title":"Migrating from OpenTracing.NET to OpenTelemetry.NET","summary":"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.","date_modified":"2021-11-29T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/08\/05\/developing-a-great-sdk","title":"Developing a great SDK: Guidelines & Principles","summary":"A good SDK builds on the fundamentals of good software engineering but SDKs have additional requirements to consider.","date_modified":"2021-08-05T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/03\/30\/breaking-changes","title":"Shipping breaking changes","summary":"Breaking changes are always work for your users. Work you are forcing them to do when they upgrade to your new version. They took a dependency on your library or software because it saved them time but now it's costing them time.","date_modified":"2021-03-29T10:03:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/03\/09\/mac-os-9-on-windows","title":"Mac OS System 9 on Windows","summary":"I'm often digging into old bitmap font and UX design out of curiosity - and someday hope to revive a lot of these fonts in more modern formats using a pipeline similar to that for ZX Origins so we can get all the usable fonts, screenshots etc. out of them.","image":"https:\/\/img.damieng.com\/blog\/MacOS9-Installer.png","date_modified":"2021-03-21T00:00:00.000Z"},{"url":"https:\/\/damieng.com\/blog\/2021\/03\/02\/or-expressions-in-linq","title":"Creating OR expressions in LINQ","summary":"As everybody who has read my blog before knows, I love LINQ and miss it when coding in other languages, so it's nice when I get a chance to use it again. When I come back to it with fresh eyes, I notice some things aren't as easy as they should be - and this time is no exception.","date_modified":"2021-03-02T18:03:00.000Z"}]}