Profile picture

Written by J. Patrick Fulton.

Add a Code Copy Button to a Gatsby MDX Site

August 02, 2023 - 5 min read (962 words)

Many documentation sites and technical blogs feature a copy to clipboard button attached to their syntax highlighted code snippets and commands. After a great deal of searching, I was unable to find a Gatsby plugin to create one that was compatible with both modern Gatsby versions and the use of MDX. As a result, I built one.

Post Image
gatsbyjs remark mdx plugin copy button gatsby-remark-copy-button gatsby-plugin-mdx 

Extend a Personal Network to Azure: Spot Instance Restart Orchestration

July 25, 2023 - 10 min read (1813 words)

In the last post, we developed a resilient mechanism to gracefully shutdown an interruptible workflow on an Azure Spot Virtual Machine. In this post, we create an external orchestration to restart the spot instances once capacity has been freed within the Azure data center.

Post Image
Azure IaaS virtual machine spot instance interruptible workload orchestration bash Azure CLI Linux Ubuntu 

Extend a Personal Network to Azure: Backup Server Spot Instance

July 24, 2023 - 12 min read (2257 words)

Azure Spot Virtual Machines offer deep discounts of up to 90% off pay-as-you-go prices for interruptible workloads. As long as resiliency and fault tolerance can be built into the workload, this model can offer significant cost savings. In the workload described by this post series, the backup system is an excellent candidate for the use of spot instances. This post covers the creation of a spot instance server to replace the existing backup virtual machine.

Post Image
Azure IaaS virtual machine spot instance interruptible workload samba backup bash Linux Ubuntu 


Extend a Personal Network to Azure: Resize the Backup Data Disk

July 23, 2023 - 8 min read (1569 words)

In this post, we will resize a managed disk to increase the amount of available storage space then use Linux operating system utilities to resize its ext4 partition to utilize the newly allocated space. In the process, we will create a temporary disk snapshot to ensure that no data is lost during the operation.

Post Image
Azure IaaS virtual machine managed disk resize partition Linux Ubuntu ext4 

Extend a Personal Network to Azure: Firewalla Configuration

July 21, 2023 - 3 min read (555 words)

In this post, we will configure a Firewalla to use its VPN client feature to connect a home network to a Azure virtual network using an OpenVPN tunnel provided by the server that was created in the last post.

Post Image
Azure IaaS virtual networking vpn vpn client openvpn Firewalla 

Extend a Personal Network to Azure: OpenVPN Server

July 21, 2023 - 11 min read (2141 words)

In an earlier post, we created an Azure VPN Gateway to provide remote access to our virtual network. While powerful, these resources are both expensive at an SKU that supports multiple platforms and are likely overkill as a solution for small business networks. They may best be suited for enterprise deployments. In this post, we will create an Ubuntu virtual machine that supports similar functionality at a lower price point.

Post Image
Azure IaaS virtual machine virtual networking vpn openvpn Linux Ubuntu 


Extend a Personal Network to Azure: Samba Server

July 20, 2023 - 15 min read (3000 words)

At this point in the series, we have created an Azure Virtual Network and established remote access to it using an Azure VPN Gateway from a remote network. The next step is create a Ubuntu virtual machine connected to that network to run Samba and provide shares to support backup clients on the remote network. In this post, we will create that server, a managed disk to store the data and then configure Samba for use on the hybrid network.

Post Image
Azure IaaS virtual machine samba backup time machine managed disk ext4 Linux Ubuntu 

Extend a Personal Network to Azure: VPN Gateway

July 19, 2023 - 7 min read (1251 words)

The Azure VPN Gateway is a high availability resource designed to provide virtual private networking tunnels to Azure virtual networks. It can be configured to connect an on-premise network to the cloud and also to support point-to-site clients. Among its primary advantages is the ability to manage the resource through the Azure Portal or Azure CLI. In this post, we will create an Azure VPN Gateway to connect an on-premise network to a virtual network in the cloud.

Post Image
Azure IaaS virtual network openvpn vpn gateway strongswan ipsec Linux 

Extend a Personal Network to Azure: Virtual Network

July 19, 2023 - 5 min read (966 words)

To start out the project, we need to create some foundational Azure resources that are common for infrastructure-as-a-service (IaaS) implementations. In this post, we will create a resource group for the project and then build a virtual network to support the cloud components of what will become a hybrid workflow. As outlined in the overview post that started this series, this virtual network will have an address space that is designed to overlap with the on-premise network to which it will be connected.

Post Image
Azure IaaS virtual network private dns zone nat gateway resource group 


Extend a Personal Network to Azure: Overview

July 18, 2023 - 5 min read (892 words)

This series of posts examines the creation of a hybrid workflow between an on-premise network and cloud hosted virtual network connected by virtual private networking technology. An emphasis will be placed on managing cloud costs while maintaining performance and security. While the example is based on bridging a home network with cloud resources, an adaptation of the example can easily be applied to small business networks and applications.

Post Image
Azure IaaS virtual machine virtual network vpn hybrid workflow Azure CLI 

Building Better Sitemaps for a Gatsby Site

July 17, 2023 - 5 min read (888 words)

Gatsby offers a sitemap plugin to generate sitemap XML documents for the sites it generates. However, in its default configuration needs customization to be useful to most search engines. Luckily, it is possible to change the default configuration and supplement its logic with both other plugins and custom logic. In this post, I cover how to leverage Git commits to update the sitemap and introduce last modification dates to each URL entry.

Post Image
gatsbyjs blog seo sitemap git 

Taming Complex GitHub Actions Workflows with Reusable Workflows

July 15, 2023 - 10 min read (1838 words)

This article covers the refactoring of a complex workflow implemented in GitHub Actions from a single YAML file with many repeated similar blocks of code into a modular design using multiple reusable workflows and a single top-level caller.

Post Image
github actions reusable workflows yaml devops 


Live Update Bing through the Submission API in GitHub Actions

July 14, 2023 - 8 min read (1538 words)

This article covers an integration with the Microsoft Bing Submission API through GitHub Actions using a shell script to update the Microsoft Bing search engine with updated URLs in this blog implementation upon each deployment of the site.

Post Image
gatsbyjs bing submission api github actions seo 

Live Update Google through the Indexing API in GitHub Actions

July 13, 2023 - 8 min read (1530 words)

In this article, I discuss making live updates to Google Search via the Indexing API through GitHub Actions using a shell script to update the search engine upon each deployment of the site.

Post Image
gatsbyjs google search indexing api easyindex-cli github actions seo 

Live Update Bing through IndexNow in GitHub Actions

July 12, 2023 - 8 min read (1455 words)

This article covers an integration with IndexNow through GitHub Actions using a shell script to update the Microsoft Bing search engine with updated URLs in this blog implementation upon each deployment of the site.

Post Image
gatsbyjs bing indexnow github actions seo 


Adding Open Graph Images to a Gatsby Site

July 09, 2023 - 9 min read (1719 words)

The Open Graph Protocol specifies a series of tags that may be included in the header of an HTML document to describe its content. Among them are the og:image tag which is used to render images associated with a page in iMessage link previews, Twitter cards and previews on other platforms. Most Gatsby starters include several of these SEO tags but omit preview image support. This article describes an implementation to add them to a Gatsby website or blog.

Post Image
gatsbyjs open graph markdown blog seo 

Fixing C# Debugging in Visual Studio Code on macOS

July 08, 2023 - 3 min read (472 words)

Quite painfully, the VS Code ms-dotnettools.csharp extension debugger binaries do not work out-of-the-box on modern macOS versions (v12+). This article outlines the steps that are necessary to get those debugger binaries working macOS Monterey and beyond.

Post Image
Visual Studio Code csharp macOS debugging 

Custom 404 Response in a Azure Static Web App

July 05, 2023 - 2 min read (381 words)

Azure Static Web App containers are configured with a JSON file at the root of their deployment called staticwebapp.config.json. Most Gatsby starters already come equipped with a custom 404 page for use internally when a bad route is requested on the client side. This article focuses on reusing that page’s output for server-side 404 responses in an Azure Static Web App.

Post Image
gatsbyjs Azure static web app 404 blog 


Visual Studio Code Support and Debugging for a Gatsby Project

July 03, 2023 - 7 min read (1317 words)

Despite being a long-term and professional user of the full version of Visual Studio, Visual Studio Code quickly became my IDE of choice. It is light weight, cross platform and has an exceptional extension ecosystem. When I started working on this blog and implemented it in Gatsby, it was important to develop good support in the project for VS Code and to be able to effectively debug issues as they arose and edit content using that tool.

Post Image
gatsbyjs Visual Studio Code debugging blog 

Publishing a Gatsby Blog to Azure SWA

July 02, 2023 - 5 min read (880 words)

Publishing a Gatsby website to Azure Static Web Apps using GitHub Actions is fairly straight forward. The Azure product team made things easy on us.

Post Image
gatsbyjs Azure blog static web app github actions 

Building this Blog with Gatsby, React and Markdown

July 01, 2023 - 8 min read (1537 words)

I ran across GatsbyJS in a video on Azure Static Web Apps which I have been using for a variety of projects and quickly became impressed with the framework and the open source ecosystem around it. After a few test runs, I selected it as the engine for this blog.

Post Image
gatsbyjs react markdown javascript blog 


Samba and macOS Time Machine

June 23, 2023 - 5 min read (995 words)

A guide for setting up Ubuntu Linux to support macOS time machine backups using Samba.

Post Image
Ubuntu Linux macOS samba time machine backup