RSSAmplifier

Blog

Dave Taylor - Software Engineer

Recent content

davetayls.meRSS feed ↗155 posts

Latest posts

The Art of Enjoying a Venture through Persistence

I’m a serial project starter, a twisted project starter? … maybe . Ever since I was young I have loved the process of putting my hands to work and creating something. It’s brought me countless hours of joy and satisfaction, but honestly, it has also poured it’s fair share of grief over my head. What should I do when energy + sweat > output + satisfaction ? Much of this…

Local first stateful background tasks

Background With the decision to push the boundaries of what was possible with a local first predictive scheduling, I realised that it will be necessary to abstract the various background tasks for keeping the AI Prediction in the Browser using Vector Embeddings up to date. The first consideration is that these embeddings would need to be ready when the user started to plan their schedule. They…

AI Prediction in the Browser using Vector Embeddings

The Movement There is a big movement going on in the Local First circles to give users greater control over their data, greater performance and resilience. They want to do this by building applications that need less access to external servers and even the network at times. One of the major breakthroughs in recent years which is making this goal more accessible to a lot of applications is the…

Anti Restraint

Hoarding People’s Time and Energy I really struggle with this obsession within the digital and tech industry to lure everyone into a false expectation, that the more of their life they spend in a virtualised, surreal world the better things will become. A Chance to be Satisfied Some might see my approach to technology as an oxymoron, I recognise and promote the benefits, whilst at the same…

The 80% Schedule

The 80% Schedule One of the most common pain-points I hear from the Music Teachers (VMT) that I have spoken to over the last few years has been planning student lesson schedules for the next school term. I have had a few false-starts over the last few years on this, I keep uncovering yet another piece of foundational scheduling functionality that we need before this can start. Anyway, Soniq now…

Soniq in Beta

Four years and counting It’s been almost four years now since I started on a side project to help Esther. Sometimes I ask myself: why am I still doing Soniq? After a busy week at work, I seem to get energy from doing a very similar thing: writing code, thinking about data, thinking about algorithms. It’s become a labour of love and more than just a business venture. Create and Learn I think…

The Pains of Startup Scaling

Scaling a company … Scaling a company when it graduates from that startup bubble is hard, painstakingly slow and fraught with obstacles and pit-holes. It’s something that I have seen my friends go through as well as experienced myself. The people around you fluctuate, many people leave along the way which means there is an ongoing battle between skilling up and knowledge walking out the…

On Challenges that are Harder than Others

The real challenge I like a challenge, some challenges are much harder than others. There was a time I was returning from Clevedon after bikepacking. I arrived at Bristol Temple Meads station at about 7 in the morning, feeling exhausted, spent and ready to jump on a train for the rest of the way home. I couldn’t see how it would be possible for me to make it back. Something inside me would…

Soniq Changelog January 2024

Over the last year I have been working hard during my 20% time, behind the scenes, towards a basic working version of Soniq. Soniq is a platform for instrumental teachers, it’s purpose is to make their lives easier and give them opportunity to build engaging learning experiences to complement lessons. Once again, I have had a huge amount of help from a few Soniq Advisors, instrumental…

Data manipulation and hair-loss with WASM Bindgen

I’ve been trying to move some of the Soniq application logic into WebAssembly using wasm-pack. I’m not sure whether it makes total sense at the moment, but I figure, the best way to find out is to do it and analyse the results. I have been building an invoicing section which will take a set of lessons and create the corresponding invoices. It’s a relatively clean operation, I can…

It takes time to fully understand the function software will need to perform

I’m starting to add Invoicing capabilities to Soniq. While designing the schema for an invoice, I needed to consider how to model the billing details. After talking with Esther, Sam and Jamie it is clear that they all handle invoicing clients in very different ways. Sometimes and invoice can be sent directly to the student, and other times it should be sent to a parent or carer contact.…

Follow up on JSON Document to Document Transforms

A while back I was researching JSON document to document transforms . At this point I was frustrated, I was struggling to find any decent spec for performing these kind of transforms. The good news is, I finally stumbled on a really nice library and spec called JSON-e . It has a really powerful syntax which is JSON based as well as a growing support for performing the transform in a number of…

Exploring an Open Spec for JSON Document to Document Transforms

I’ve been doing a lot of research recently for Uniform on how to we might extract key data from API responses based on what type of information the current context is looking for. For example, when you call a products listing API from some headless commerce system you might be doing so because you are interested in a list of product titles and prices. You might equally, just be interested in…

Monorepo p2 - The CI build and deploy

This is the second part of a series where I go through my monorepo setup with Github Actions deploying to Vercel. Links to all the articles in the series are at the bottom of the page. In this article we will look closely at the build and deploy steps to the pipeline. CI Pipeline The main CI pipeline is handled by Turborepo. Any package which can be deployed defines a ci script within the…

Deploying a Monorepo to Vercel with Github Actions p1

I have recently added wasm-pack builds into my Soniq project but found that it is a nightmare trying to get rustup and cargo installed in the Vercel build alongside my yarn monorepo. I have been planning to migrate my deployments to pure Github actions and this was the push to strap myself in and get my hands dirty. So here is part 1 in a series where I will explain the steps I have taken to get…

Convert a ReadableStream to a String in JavaScript

I have recently come across the need to convert a ReadableStream to a String . In my case this was because I was using React’s react-dom/server to render a component in an edge worker. More specifically, I needed to build an email body from ReMirror JSON content using their static renderer . Using ReactDOMServer.renderToReadableStream. The renderToReadableStream method is the only option for…

Looking back at 2022

2022 has been a full year. This is the second year of giving myself a dedicated 20% time, it continues to be one of the best changes I could have made. I have explored new areas and given my brain space to think over them. I have been able to support my family better and be more present in their lives. I have continued my work with Uniform. Uniform is working hard to make it easy for developers…

Meeting Matthias Endler and Opening Up My Calendar

I really enjoyed meeting Matthias Endler yesterday. I stumbled on his website while researching wasm based full-text search options. He writes in Your First Business Should be a Spreadsheet : One of the best decisions I made in 2020 was to open my calendar to everyone. People book appointments to chat about open-source projects, content creation, and business ideas. This reminded me that I have…

Use WASM Compiled Golang Functions in NextJs

What if you are using Next.js for your website but want to make use of Golang functionality written to support your backend APIs? This is a quick look at the Tinygo WebAssembly guide and how I integrated the output with NextJs. The Tinygo Guide Here is the Tinygo guide I used . It gives you a very basic first step to building a wasm binary from Go. Getting Golang set up correctly on my system was…

Playing Around with simple Personalisation

One of the promises of building with Uniform is that: providing personalised experiences is a simple, and natural part of working with website content. I have found this to be true, although like many things it is not always the case. It depends on what kind of personalisation I thought would be valuable Let’s look at where I started. My solution needed a small amount of initial development…

Uniform Codegen Project

I’ve published my Uniform components TypeScript generation scripts to a cli package @davetayls/uniform-codegen . Intro Source code is here: https://github.com/davetayls/uniform-codegen It looks like it might need a bit of TLC as it has some old Optimize types in there. I will be working on getting it updated over the next week or so. It currently supports Contentful, BigCommerce and Hygraph types.…

Migrating the blog to Uniform

This site was born in 2009, that’s over ten years now. All this time the content has sat inside the GitHub repository. It started as Markdown files and more recently has moved to JSON files. I have always liked that there are no external dependencies on the content but have found the management of it gets in the way of writing and creating. Static content archive Over the years I have…

Are Instrumental Lessons just a Luxury?

I have played the guitar ever since I was little. I must have been six or seven when I was given a small guitar. Instrumental lessons were not affordable though so I never had any formal music training. I am so grateful to a number of people who gave me lessons here and there. I’m thinking about this because Esther mentioned to me that a few students might need to stop because inflation is…

Researching Application GUI Options for Wasm

I have used the likes of Figma and often wondered how they used Wasm (or WebAssembly) to power the GUI. I also wondered if there were any existing C++ libraries out there that would provide a good foundation on which to build similar kinds of UIs on the web. After a bit of research, I have found Dear ImGui which is a well maintained GUI library that can be used on the Web with Wasm but also used…

What Language Should I use for WASM

There is no doubt in my mind that WASM will become a large part of my future toolkit. The performance benefits for serverless functions will directly equate to cost savings. Then the performance benefits for user interfaces will directly equate to increased revenue. The problem is, there are a few languages to choose from when programming for a WASM environment. I won’t be able to stay…

How to Create a Single Page App with NextJs

NextJs is very useful for creating static websites but how do you configure it if you are building a single page application (SPA)? The setup isn’t immediately obvious. The key thing here is we don’t want to build a page on the server when the path is dynamic. Let’s take a look at how you can set it up, it’s actually pretty straight-forward. Rewrites The first piece of this…

Instrumental Teachers are Instrumental

I think instrumental teachers have it pretty hard sometimes. I’m sure I’ve written before about my interest in helping them. One of the big reasons for this is my wife, Esther, who is a Piano teacher. She runs her business as a sole trader company. The last couple of years have brought about a huge number of challenges which she has had to adapt to. The pandemic has caused a lot of…

Progressing through Environments with Uniform

When deploying anything other than a simple POC or personal website, a reliable application will need Environments. What is the right pattern for implementing environments for local developers as well as shared ones like staging and production? Let’s look at how Uniform separates your configuration and content. Then look at how we can migrate both to new higher environments as a feature…

Adding Uniform to Create Next App

I have found it super easy to add Uniform Canvas to a bare-bones NextJs app. I thought I would show you what it takes to go from Zero to Hero with a very basic setup. This will then give a good foundation to add more things on top. Create Next App I’ll start with the familiar, I’ll use yarn create next-app --ts to generate a bare-bones NextJs application with TypeScript. 1 2 3 4 5 6 7…

Reduce Unused JavaScript with Dynamic CMS Components

I found in the bundle analysis that I was loading the CMS editor components into the _app chunk unnecessarily. I have been able to remove a lot of the JavaScript used but not all. Still, this has made a big impact to the chunk size as well as the performance scores. The key ingredient to these changes has been using the next/dynamic util. The hardest part of this work has been to work out what…

Reduce Unused JavaScript Nextjs Bundle Analysis

The Lighthouse report says that the page is only using 1/3 of the JavaScript within the main _app file. Before I start making assumptions about what components or features need to be lazy loaded from the main app I need to do some analysis on the bundle. Let’s remind ourselves of the previous report after I removed Youtube. Webpack had a bundle analyzer which I have used many times to…

Reduce Unused JavaScript to Improve Lighthouse Performance

Looking at the lighthouse report it shows that there is a lot of unused JavaScript on the homepage. A large proportion of this is coming from YouTube because I have a video embedded and then it also looks like I am only using 1/3 of the JavaScript in my application source code. YouTube JavaScript I am going to focus this morning on the unused YouTube JavaScript sitting in the page. This is being…

Lighthouse Scores Review

It’s time to do a review of my site performance. I’m taking a look through my lighthouse scores across the two key site sections. This will be the homepage and blog articles. My scores have definitely slipped since I last checked so I thought this would be a good chance to write about the process of fixing and improving them. Let’s see how close to 100 across the board I can get.

Will JavaScript Become Everyone's Second Language

Over the last year we have seen the rise of Languages like Rust running in the browser through the use of Web Assembly (or WASM) . It’s also creeping into the Frontend Developer’s Toolkit’s through tools like the Speedy Web Compiler (SWC) which has been said to provide NextJs version 12 with “~3x faster Fast Refresh and ~5x faster builds”. With the significant…

Uniform Release Canvas - One Ring to Orchestrate them ALL

Uniform have just launched its new platform and a big part of that is Canvas. Canvas is a way to orchestrate the modern stack of micro-services and SaaS into a website or multiple websites. It gives the software developer power to control the tech stack while at the same time giving a marketer or content designer the power to control what is eventually presented to the user. EVERYONE has power 💪…

Why I Like Using TypeScript

TypeScript has been around for several years now and over that time has gone from something people scoffed at to an integral part of many open source projects and frameworks. This has been great for me, I really like using TypeScript and it’s increasing popularity has made the day-to-day usage has become easier and even more fun! I’ve been thinking. Why DO I like using TypeScript?? I…

Firebase Functions in Custom Region CORS Error

I have been using Firebase again recently to build a simple app for Esther who is a Piano teacher. I’ve not used it for several years and things have definitely come a long way. The ability to use serverless functions is really exciting. I am based in England and so I am using the europe-west2 region to deploy my functions but when I tried to call the function from my browser code I got a…

Making Decisions

It can be hard making decisions, especially when they affect multiple teams and a large number of developers. What if you get it wrong, what if it’s not popular? A mistake could be costly, both financially and for morale. This is all true but what are the hidden costs of delaying a decision and is my expectation true that the cost of being indecisive over long periods of time is far greater.

Joining TherapyPal

Coordinating therapies and progress for a disabled child is extremely hard. Because of this it is even harder for parents and carers to have a holistic view of the child’s needs. Martin and Kev at Theracode have been working on a way to simplify this process over the last few years through an app called TherapyPal and I’m excited to be able to help out on a part-time basis. The aim is to…

Create Global UI State with React Context

How do you implement some UI state which can be changed from different parts of your React application? In this example I implement a menu which can be toggled using a central UI context. I’ve built it in such a way that a central Provider component controls how this context will be updated. By doing it this way you will keep your code easy to read and will reduce the complexity of any bugs…

Transferring Less JavaScript with Next Dynamic

As your application grows you will want to separate out JavaScript from your main bundle. You will arrive at a point where the majority of the JavaScript you are serving is not being used on any particular page your user is on. In this video I walk through how you can structure your NextJs application code to dynamically split out JavaScript based on modules.

3 Tech Changes You Could Make Now for Cloud Sustainability

Since posting some thoughts on more sustainable technology I have been made more aware of others who have been working for a number of years now at raising awareness of how our technology choices (and habits) affect everyone. Here are three things I have learnt which you might be able to put into practice now. 1 - Turn off Unused Servers Running in the Cloud It sounds obvious but it’s quite…

Enviro Creds

I’m struck by the urgency of the state of the natural world after watching David Attenborough’s recent Netflix programs. Without action nothing will happen so I’ve been trying to think of ways in which we can be more sustainable with our technology choices. I feel focussing on three particular areas can make a significant impact, let’s look at why. Motivation We need a…

Professional Update

Hello everyone, this is a professional update giving a bit of background to what I’ve been involved with recently. Feel free to get in touch if this is of any interest. JAM Stack React and NextJS JAM stands for JavaScript, APIs, Markup. It is a way of delivering websites which focus on simple HTML files which are enhanced by JavaScript and an API within the browser. I’ve been working…

A Transition For This Website

This website has been my place for thoughts and experiments, ideas and memories for close to a decade. The first article on here was written in March 2010 when I was building jQuery plugins and working at Aqueduct in London. I’m still going to keep my blog going here but I want to collect up and pull together the more in-depth content on the Pogo Kid website in a more structured way.

Enterprise JAMstack at JAMstack for Sitecore

Deploying JAMstack within an enterprise company comes with many complications due to it’s scale. There is not only the large number of pages to contend with, there are often restrictions imposed on how we can deliver the solution. This was the case at Nationwide Building Society where we delivered a new platform and a new JAMstack website. It was great to be able to talk about our experience…

SMART Goals for Software Engineers

One of the big challenges I have found going into a management role is finding ways to help the people in my team develop their skills and their career. I have done some research and have collated some of my favourite examples. Design Goals I want all of these goals to conform to the SMART criteria. S - Specific These goals must be clear and well defined. We all need to understand when the goal is…

Rich Domain

In this post I want to go beyond React and Redux and explore ways in which we can improve the readability of our code by creating a rich domain of types that describe the data better. Using Type Aliases to Build a Rich Description of the Domain The point of the rich domain is to enhance the underlying types in such a way that it adds further semantic meaning. Secondly to provide more certainty to…

Serverless Framework Talk

Thanks to everyone who came to the Bath Digital Festival lunchtime events. It was really nice to be given the opportunity to speak and then to be able to talk with so many of you afterwards. Here are the slides: This is what I covered What have we achieved at Seccl? What are the pinch points? Who is this for? What is Serverless Framework Infrastructure as code Simplified deployment of separate…

Middleware Pipelines - Promises

I’ve been looking at the possibilities of a simple middleware pipeline script. So far I’ve implemented a version of the Chain of Responsibility pattern. I’ve also been looking at using the same builder to work with promises. Here is what I’ve found. Fetching some data from an API So for this example I will define a few interfaces defining the data I am working with. The…