blog
subscribe via RSS
-
Comparing Netlify and Azure Static Web Apps
Static web hosts have come a long way since dropping your bundle into an S3 bucket. Netlify and Azure Static Web Apps (SWA) both offer a free tier and the two are surprisingly similar in terms of features. In this post I’ll compare the two and More... -
Evaluating ngrok
After a colleague alerted me to ngrok, I’ve been using the tool regularly to expose local development services to the internet. During a trip out of the country I needed to access a number of services on my LAN so decided to evaluate the paid plan. More... -
Getting Started Programming Spaceships
What if I told you, you could learn to program by playing with spaceships? Well you can, and in this post I’ll demonstrate how to get started quickly with SpaceTraders API and typescript. More... -
Data Processing with Large Language Models
In this post I’ll use a Large Language Model (LLM) to process an existing dataset into a new dataset. What otherwise might be a complex parsing script that is time consuming to write is instead fairly simple code that takes advantage of the LLM’s natural language processing capabilities. More... -
An Introduction to Stable Diffusion
Stable Diffusion is a latent text-to-image diffusion model capable of generating photo-realistic images given any text input. It’s similar to tools like DALL-E 2 and Midjourney except it’s open source and deterministic. This post will elaborate on the features offered by Stable Diffusion and provide guidance for running it on cloud provider GPU hosts. More... -
Mobile Development with Vite and Capacitor
The easiest way to get started with Ionic Capacitor with React is a one-liner via the Ionic CLI although doing so will scaffold a project usingcreate-react-app
. In this post, I’ll explain the steps needed to scaffold a new Capacitor project with Vite. More... -
Running Containers for Free on fly.io
A while ago I migrated my Kubernetes cluster from Azure to Digital Ocean. Since then I’ve decreased the size of the workload however costs have stayed the same. Recently I discovered fly.io has a free tier for running containers and in this post I’ll explain how easy it is to get containers up and running using this service. More... -
Better HTTP Request Management with httpyac
The state of http request management feels a bit disappointing to this developer. Postman is closed source, has an intrusive account requirement and an increasingly complex UI. Insomnia is open source, uses non-standard UI, and is missing features like inherited authentication. More... -
Automating Versioning and Deployment to npm
Recently I built and deployed a new package to the npm package repository. In this post I’ll describe how to automate the process of building, versioning and publishing node packages to npm using GitHub Actions and Changesets More... -
Building Tetris with GitHub Copilot
After receiving an invite for the GitHub Copilot Technical Preview I decided to try out the feature by building a browser-based Tetris-clone. This post will look at how Copilot offers suggestions while building software. More... -
Extending Serverless Framework for Alibaba Cloud
With a continuing interest in Serverless Framework, I decided to leverage its provider-agnostic approach to explore building and deploying an application to Alibaba Cloud. More... -
Building Applications with AWS CDK
In a previous post I explained how to build a serverless application using Serverless Framework. In this post, I’ll explain how to bring the same application to life using AWS CDK and I’ll compare the two approaches. More... -
More Serverless Framework on AWS
Following on from my previous post I look further into developing on Serverless Framework, specifically around logging, function invocation and permissions. More... -
Serverless Framework on AWS
Recently I’ve been using Serverless Framework to manage CloudFormation stacks and the serverless functions that run on them. In this post I’ll demonstrate how Serverless makes it easy to to deploy cloud resources and integrate them with code. More... -
Commanding the Fleet with XState Actors
In the previous post I introduced SpaceTraders API, a space trading a game for programmers exposed via REST API, and documented my first foray into using XState to automate a single spaceship. In this post I’ll look into automating many spaceships with XState Actors. More... -
Automating Spaceships with XState
After my unwieldy reducers and middleware failed to give me the confidence I needed to automate spaceships, I looked into XState as a replacement for Redux in my React application. In this post, I’ll describe my learning experience picking up XState. More... -
Clip Navigator: Strategy Comparison Tool
I’ve been playing a lot of Bubble Bobble recently and to improve my skill at the game I’ve written a React application. More... -
Grafana in Kubernetes
After messing with Elasticsearch I’ve decided that my Application Insights replacement could instead be PostgreSQL and Grafana. In this post I’ll install Grafana and set up back-ups and restore functionality in my Kubernetes cluster. More... -
Continuous Deployment to Kubernetes - Part 2
In an earlier post I described continuous deployment to Kubernetes using Microsoft Tye to abstract most of the heavy lifting. In this post I’ll describe a way of splitting application code from Infrastructure as Code (IaC) across repositories whilst maintaining continuous deployment. More... -
Continuous Deployment to Kubernetes - Part 1
Configuring a pipeline to autonomously deploy to Kubernetes does not have to be complex but will depend on your workload and expected integrations with the rest of your cluster. In this post I’ll explain one of the simplest ways to automate Kubernetes deployment using Microsoft Tye. More... -
Minimal Elasticsearch Resources in Kubernetes
Now I’ve migrated off Azure I’m looking for a log aggregation solution to replace Application Insights. The ELK Stack is popular, but the default Elasticsearch helm chart alone is much too large for my cluster. Can I decrease Elasticsearch’s footprint and have it run in my cluster? More... -
Low-Cost Kubernetes on DigitalOcean
In a previous post I was able to decrease my Azure AKS cost to ~$66AUD/month. In this post I’ll migrate to Kubernetes on DigitalOcean in an attempt to reduce costs considerably more. More... -
Static Blog Deployment to Netlify
Netlify, Github and Cloudflare all offer generous free tiers which you can use for your static web hosting needs. This post describes the experience of moving hosts from S3 to Netlify. More... -
Automated Browser Testing within GitHub Actions
Have a single page application sitting on top of an ASP.NET Core project and want to run end-to-end tests on any pull request? In this post we’ll start with nothing and finish with end-to-end tests using Playwright and Github Actions. More... -
Using Environment Variables in .NET xUnit Tests
I wantdotnet test
to handle environment variables. On *nix systems I should be able to typeMyEnvVar=Hello dotnet test
and then be able to access that variable within my tests. More... -
Writing code the easy way with TDD
Often I need to write some complex code with multiple requirements that when stacked on top of each other require a larger cognitive load than I care for. Along with its other benefits, Test-driven Development makes it easier and quicker to write code of this nature. More... -
Local .NET Development with Amazon S3
When developing applications that integrate with cloud services, I find it to be a more pleasant experience if I can raise, debug and destroy instances of these services locally as I build my application. In the case of Amazon S3, I might have a number of files I need to be moving around during development, and I don’t want to wait while transferring these files between my local machine and the cloud. More... -
Using Secret Manager in .NET Console Apps
Having written or contributed to a number ASP.NET Web projects, Secret Manager is a familiar tool for storing sensitive information. Using Secret Manager with a Console Application however wasn’t as straight forward as I’ve come to expect with web projects. This post looks at what needed to occur for secrets to be accessible in a Console App, and how both the workaround and reasoning was discovered. More... -
Browser Fingerprinting and Concealing Selenium
I recently discovered a website that would respond to requests normally in Chrome, but failed to display anything when Chrome was being controlled by Selenium. Upon investigation, I discovered both Browser Fingerprinting and a way to have the site display correctly when accessed via Selenium WebDriver. More... -
Static Code Analysis for .NET with SonarQube
Whether it’s your codebase or someone else’s you’re going to build on, SonarQube can quickly and easily highlight quality and security issues without having to eyeball every line of code yourself. More... -
Optimising for Cost in Azure Kubernetes Service
I’ve been trying for some time to run the cheapest single-node Kubernetes cluster I could on Azure Kubernetes Service (AKS). My target is to run it for a month at $70 (AUD) or below, but it takes some investigation to determine how to do this. More... -
PostgreSQL in Kubernetes
I want to run PostgreSQL in my Kubernetes cluster with automated backups, a UI to query and manage the database, and a means to easily transfer databases between the cluster and my other environments. This post discovers that such goals are not very difficult to achieve. More... -
Grumbling on TypeScript
I’ve been writing TypeScript since just before v1.8, which brought the killer feature JavaScript in TypeScript Compilation. Right now the latest version is v3.8.3 and there’s been many great features added over the last few years. Staying on top of new features, how they work, and even changes to older ways of working can be time consuming and at times frustrating. More... -
Gradually Refactoring Towards Utopia
I can never write perfect code. Over time, an increasing knowledge of the domain, language syntax, design patterns, and even learning entirely outside and irrelevant to the project at hand contribute to an ongoing drift in how I solve problems with (or without) code. At any time, should I have reached a level of happiness with code I’ve just written, the window this level of happiness is sustained for caps out at about three months. At the three month mark I’ll look at code I wrote and see an ill-informed mess. More... -
This Social Image was Generated
When sharing links from a website to social networks, meta tags are checked for summary data and these are used to build the little preview we see. This includes the image that will be displayed, and I’d like to automatically generate that image using data I already have. More... -
Service and Container Orchestration for .NET with Tye
Tye helps .NET Core developers build applications that are a collection of services and containers. On your local machine Tye runs your .NET services, any containers you need, and a dashboard you can use to inspect this environment. Tye can then deploy your services and containers to your Kubernetes cluster. More... -
A Salesforce pipeline in Azure DevOps
Having used Gearset in the past, I was looking for an option that would give me more control over Salesforce deployment, not to mention a better price. More... -
Building a React Native pipeline for Android and iOS
I’m familiar with React and Azure Pipelines but not with React Native and, I haven’t touched mobile development since 2018. What better way to upskill on these items than by building a pipeline targeting both iOS and Android? More... -
Fifty community events - The first ten
This year one of my goals is to become more involved with the broader software community, and to achieve this I’ve set a target of attending 50 community events in 2020. Hanging around and meeting people at these events has the following benefits for me More... -
Where to visit in New Zealand
Working in software in Sydney I meet a lot of people from different parts of the planet who, upon learning I’m from New Zealand, ask me where in New Zealand they should visit while travelling. I’m no expert on the matter, however I’ll share what I do know (mostly North Island) and I’ll update this post whenever I can harass more information out of my compatriots. More... -
A look back at NDC Sydney 2019
Last month I had the opportunity to both attend and speak at NDC Sydney 2019. NDC is a conference for Software Developers that occurred this year on 14-18 October with 2 days of workshops followed by 3 days of speakers. This year was the first time I have attended an NDC conference and the first time I was a speaker at a conference. More... -
An Azure Pipeline for Visual Studio Marketplace
In a previous post I built a custom Azure Pipeline release task and manually uploaded it to the Visual Studio Marketplace. In this post I’ll add new features and have DEV and PROD versions of the extension automatically deploy to the Marketplace on commit. More... -
Monitoring the Web with Azure for Free
With the deprecation of Multi-step Web Testing in Visual Studio and Azure, what approach can we now use to monitoring web properties, especially if we don’t own them? In this post, I’ll propose and demonstrate the leveraging of Azure to provide us a solution to this problem at no-to-little cost. More... -
Auto-scaling Azure SignalR Service with Logic Apps
Azure SignalR Service does not have auto-scale functionality out of the box. In this post I’ll implement my own auto-scaling using Azure Logic Apps. More... -
Load testing ASP.NET Core SignalR
Last time around I messed with SignalR I touched briefly on load testing. This time around I’ll deep dive into SignalR load testing, specifically to test the tool supplied in source, Crankier, and build my own load testing tools to investigate the limits of SignalR applications. More... -
Docker containers aren't just for long running tasks
Docker makes it easy to run long-running services like sql server or nzbget, but did you know that docker is also an excellent option for executing shorter workloads? More... -
Publishing a custom Azure Pipelines release task
I wanted to clear my Cloudflare cache during an Azure Pipeline deployment. Cloudflare offers a REST API to do this, but rather than poke around with scripts I decided to see how I could instead write a custom task to do this and publish it on the Visual Studio market place. More... -
Executing custom scripts during VM deployment
The Azure custom script virtual machine extension (2.0) allows script execution on virtual machines (VMs) during Azure Resource Manager (ARM) template deployment. During script development however, using the extension is slightly annoying due to the way scripts are referenced. I needed a workaround that would let me change script content easily, especially during development. More... -
An overview of Azure SignalR Service
I spent some time investigating Azure SignalR Service. I have an existing ASP.NET Core MVC application that uses SignalR, hosted on an Azure App Service. I’m interested in seeing whether I can move the web client to Azure Storage and replace the App Service with a SignalR Service. More... -
Noob tips for Traefik
In the past I’ve used jwilder’s nginx-proxy for my reverse proxy needs but maintenance on that codebase seems to be struggling with several ideas hanging around as open PRs. One of these ideas that I’m interested is routing http requests to different docker containers based on path, something a more modern reverse proxy, Traefik, already does natively. For me however, ramping up on Traefik had some head-to-brick-wall moments that I’ll document here so you, or more likely future me, doesn’t have to make the same mistakes. More... -
Github objects to my Chrome extension
I got an email from Github today asking me to stop using their logo and the name GitHub in my Chrome extension. More... -
Getting started with neo4j
Getting started with neo4j is very pleasant indeed. More... -
ZigZag released
More... -
Honeyshot strategy
I wrote a game and released it last week. My two brothers live in different countries and immediately a competition was spawned on the iOS leaderboards between us. More... -
Honeyshot released
More... -
Building an HTML5-based multi-platform game
I’ve been pretty quiet on the blogging front this year, the reason being I have been spending the majority of my time developing an HTML5 game that I have released on web, iOS and Android. More... -
banandoh released
More... -
Migrating from Wordpress to Jekyll
A couple of weeks ago I got an email from Amazon Webservices informing me that one of my EC2 instances was operating on degraded hardware and was to be retired. Technically I’m prepared for such an eventuality thanks to docker, however it was still going to take a few hours More... -
Deploying ASP.NET 5 projects to MyGet
MyGet is a package repository and feed host that you can push nuget packages (amongst other things) at. Their free tier allows you to have public feeds at no cost, and I've been using it to distribute my ASP.NET 5 EntityFramework 6 packages. More... -
ASP.NET 5 on the Amazon (Linux) Cloud
Yesterday ASP.NET 5 RC1 was released. Yesterday was also a milestone for me as I switched over from my shared hosting provider for eggsbenedict.info to Amazon Web Services. This post details some of the obstacles I needed to traverse in porting eggsbenedict.info over from a full Windows-based ASP.NET 4.5 application to full Linux-based ASP.NET 5 application, and offers some open-source libraries that I have created to enable such a transition. More... -
Optimising WordPress and MySQL docker images for Amazon EC2 micro instances
After seeing that my Amazon t2.micro EC2 instance would happily crash itself by quickly using all available memory when a few requests were coming in, I realised I needed a solution that did not involve me having to reboot the instance and bring the containers back up with so little traffic. The following outlines what I did to reduce the memory footprint to 160MB. More... -
I've finally confirmed that LaTeX is awesome
I finally got around to learning LaTeX this week, and after writing my first document in it, I hope I never write in Word again. All the technical documents I've written in the last ten years have been in Microsoft Word, but I've always felt that it wasn't the best tool for the job. It took a couple of hours to get started on a document, and the first day was a little slow, but after two or three days I felt not only that I was progressing faster than I would be with Word, but that the final output was of a much higher quality also. More... -
Chrome Extension: Github Follow
When files are moved or renamed in git their history is abruptly cut short. You can include the history prior to rename by executing the following command:git log --follow path\to\my\file.md
However, on github.com no such solution exists. More... -
Gnashing of Teeth on the Bleeding Edge
Well I got eggsbenedict.info running on my (linux) dev box as a docker image, but it took some effort. The current stack is AWS EC2 + S3, MVC 6 on Kestrel, Entity Framework 7 + Postgres, AngularJs but there's still some Knockout templates lying around. More... -
Migrating to ASP.NET 5
Note - The libraries I indicate as not supported are specific to projects targeting dnxcore50 and the coreclr runtime. Some of these items are still supported by dnx451 and the clr and mono runtimes. I've had a lot of success with porting eggsbenedict.info to ASP.NET 5, a few days ago I confirmed and tested a full port on Windows. More... -
.NET Development on Linux
Last week in a rage regarding how shit my host is, I signed up to Amazon Web Services (AWS), found out how awesome Docker and moved the blog over to AWS. The blog now consists of three Docker containers; one for wordpress, one for MySql, and the last one which performs a backup of the MySql data to an S3 bucket. More... -
Country tracking for eggsbenedict.info
To help motivate me add content to eggsbendict.info I've added this page to keep track of the number of countries the site indexes thus far. The aim is to get as many countries added as possible, and then change the page to some kind of world map thing I can use for marketing purposes. More... -
TrendBet now does multiple regions
TrendBet is a little more lively now with multiple regions, meaning a new round is triggered every one minute rather than every five. I'll let this run for a few days to collect some data and then I'll extend tweddit to index the regions also. More... -
Regions taking longer than expected
I wasn't expecting the addition of multiple-region functionality to TrendBet to take so long, but it seems I underestimated the required effort. I had written the application to auto-update the UI with the resolution of each round when the timer reached zero, at which point updates to the stash would also be displayed to the user. More... -
New Project - Tweddit
I was going to add badges to Trend Bet on Tuesday, which would put it in a good position for me to move on to something else. However, I had an idea and spent the day building it anyway. The name is stupid, but hints at the functionality - it's a way to view current and past twitter trends, ranked in a similar fashion to reddit. More... -
Entity Framework Code First makes Views unpleasant
Getting an SQL View into Entity Framework Code First is a real bastard. Especially if said view doesn't expose any non-nullable fields you can combine to create a primary key. Here's how I ended up achieving it. More... -
Sunday, 30 August 2015
I've started this blog so I can look back over a given week and feel relaxed that although I might not be able to see any progress in a project, that learning and/or invisible steps have been made in the direction of the finish line. Here goes... More...