Weather Station Progress

The weather station is taking shape.

Back to ptoject blog contents

Stripe Payment Processing

A qurik that caught me out in my Stripe checkout code is the changing Stripe customer ID.

If between the checkout.session.completed and invoice.paid notifications your payment has to be authorized by your banking application you will get a different Stripe customer number.

Back to ptoject blog contents

Chatter Box - Using the Web Speech API

Chatter Box now uses the Web Speech API to allow chat texts to be dictated and spoken out aloud. This is a great feature to have as it allows a visually impaired user to hear the chat text out aloud.

Back to ptoject blog contents

Mobile Application Development

My journey into mobile cross platform application development has began with new reading material - .NET MAUI in Action by Matt Goldman.

Back to ptoject blog contents

The Robot Car

The robot car has been assembled. The next mini project following the black line...

Back to ptoject blog contents

dotnet build failure

All my dotnet build commands were failing. After a bit of research the solution was to create an empty directory - C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages

Back to ptoject blog contents

Chatter Box Back on Line

Completed Chatter Box's upgrade to MongoDB version 6. It is now back online and can be accessed at Chatter Box.

Back to ptoject blog contents

Chatter Box - Upgrade to MonogoDB Version 6 on Atlas

Atlas has decided to upgrade accounts to version 6 of MongoDB. Great but it breaks the code i use to access the DB, including the connection string. So I have had to put the ChatterBox application into maintaince mode to make the codig chamges. Back as soon as possible...

Back to ptoject blog contents

Chatter Box - Network Timing Issues

When using Chatter Box on a network with a slower connection speed, timing issues can fall into 3 categories:

  • Image Loading
  • Room List, etc. Data Loading (JSON format)
  • Aviator Image Loading

I changed to loading the JSON data files to be done synchronously therfor ensuring the data is avialable before containing. Also add a data loading dialog to inform the user that the system is initializing.

Back to ptoject blog contents

Coding Updates

The web speech API - The function getVoices() is executed asynchronously after the web page has loaded. This means that its data is not immediately available and the list is not fixed. A solution is to use the following promise based code:

function getVoiceList() { return new Promise( function (resolve, reject) { let synth = window.speechSynthesis; let id; id = setInterval(() => { if (synth.getVoices().length !== 0) { resolve(synth.getVoices()); clearInterval(id); } }, 10); } ) } const chooseVoice = async (lang) => { const voices = (await getVoiceList()).filter((voice) => voice.lang == lang) return new Promise((resolve) => { resolve(voices[0]) // returns the first voice in the list }) }

And to use the function...

async function speakText(text,lang) { var msg = new SpeechSynthesisUtterance(); msg.voice = await chooseVoice(lang); msg.volume = 1; // 0 to 1 msg.rate = 1; // 0.1 to 10 msg.pitch = 1; //0 to 2 msg.text = text; //msg.voiceURI = 'native'; //msg.lang = 'en-US'; speechSynthesis.speak(msg); }

Back to ptoject blog contents

Reading Material Updates

Docker in Action by Jeff Nickoloff and Stephen Kuenzli. Docker provides a method of having development environments that can be run in isolated containers, without installing any system software on the computer. It also provides a way of replicating the production environment in a container to test your software.

Back to ptoject blog contents

Responsive Website Design

Redesign of the End House Software website using responsive techniques. Using CSS3 techniques such as max-width, flexbox and grid to produce a website that scales across multiple devices with different screen sizes.

Rahul Chhodde has written an excellent article on the new viewport units that can be found at and CSS breakpoints for Responsive Design by Rob O'Leary that can be found at

Back to ptoject blog contents

Chatter Box

A NodeJS application that uses the ExpressJS framework including among others new HTML5 features (canvas, new audio controls, etc.), FAQ using Microsoft's QnA Maker, Google/Azure language translation APIs and a SignalR hub to process the chat messages. Find it on Chatter Box.

Back to ptoject blog contents

Weather Station - Mark 1

I have finally started to build a weather station. I have been looking at the Raspberry Pi Pico for a while now and I have been thinking about what I could do with it. I have a few ideas but I have decided to start with a weather station. The idea is to expand this to a full outside weather logging station. I am using the Anvil dashboard application as the frontend.

Back to ptoject blog contents

Reading Material

Current reading projects - It never hurts to read books on areas you already know, hence 'CSS in Depth'. Also on the revision list is 'Web Components in Action' allowing me to produce reuseable components to use across my websites. Python and Rust are two new languages I am learning. Python for all the Rasberry Pi projects and Rust as it seems to be emerging as a trending topic both in terms of performance and simplicity.

Back to ptoject blog contents

Welcome Message

Welcome to my project blog. I will be posting updates on my projects here. This blog was officially in January 2023. I will be updating it with earlier projects as I get time.

Back to ptoject blog contents

Gavin Baker

Software Developer

NodeJS (JS/React), .NET (C#), MAUI, C++, PHP, Perl, Python (Raspberry PI), Rust, SQL, Stripe, Twillo, VHDL, REST APIs, GitHub, Google, Heroku, Azure, Docker, SignalR and XBox One.

Project Blog Contents

Resource Center