Matt Button

Hi, I'm Matt Button. I write this blog, and work as a software developer at a financial technology company in Wellington, New Zealand. I like learning new things, connecting with awesome people, exploring the world, and creating great work.

Are we there yet? Insights on how to lead by design - by Sam Bucolo

By Matt Button |  Jan 14, 2019  | design-thinking, design, innovation, book-notes

One of the books that I read over the summer break was “Are we there yet? Insights on How to Lead by Design” by Sam Bucolo.

For the first few years of Sam’s career, he worked as a design consultant. As he gained more design and problem solving experience, he came to realise that he was often getting the wrong brief from his clients.

Sam found that while companies could conceptualise new products or services, the sticking point was aligning this conceptualisation to their business models, which meant that time, and time again, projects significantly fell below expectation or failed completely.

These experiences led Sam to specialise in Design Led Innovation.

My notes:

There are three elements of Design Led Innovation:

  1. Customer value: This is the starting point, and is about being clear on who the customer is, and the problem that the business is solving for them.
  2. Management Mindset: The correct mindset to create a strategy which has been built around new insights about the customer.
  3. Strategic alignment: Ensuring that all business processes and systems are aligned with the customer’s problem.
Continue Reading...

How to rename categories in Hugo

By Matt Button |  Jan 13, 2019  | hugo

I’ve been using Hugo for my blog for the last few years, and recently published my first theme - Silhouette Hugo.

I recently received an email with the following question:

What is the simplest way for me to rename the categories Development and Golang into other names, like Projects and Gallery? Is this in partials or template or theme or where?

I figured that this might be a common question, so decided to share it in a blog post.

Here’s how to rename categories in Hugo, in the context of my theme.

Continue Reading...

Google Authentication with Python and Flask

By Matt Button |  Jan 5, 2019  | python, flask

This blog post is part 1 of a multi-part series, and covers the basics of getting Google authentication to work with Python and Flask. Part 2 will cover actually reading and writing the files to Google Drive.

In this blog post, you will learn how to:
  • Create a Python Flask app, which allows a user to log in with their Google account
  • Request authorization for the app to read and write files in the user’s Google Drive.
Continue Reading...

Tony Alexander Presentation Notes - things which affected the NZ housing market over the decades

By Matt Button |  Jan 2, 2019  | investment, finance, property

I recently attended a presentation by BNZ’s Chief Economist, Tony Alexander.

One of the topics that really caught my attention was his perspective on the things that influenced the housing market over the decades, from the 1950’s until today.

I wrote up a bunch of notes to summarise his points.

If you’re interested in getting a bit of perspective on the NZ property market, and some of the things that caused it’s near-relentless movement upward over time, then read on.

Continue Reading...

InvalidCypherTextException when reading an encrypted DynamoDB table which has been restored from a backup

By Matt Button |  Dec 5, 2018  | aws, dynamodb, encryption

If you attempt to read encrypted data from a DynamoDB table which has been restored from a backup to a DynamoDB table which doesn’t match the original table name, you may see the following errors:

InvalidCiphertextException: An error occurred (InvalidCiphertextException) when calling the Decrypt operation

and

UnwrappingError: Failed to unwrap AWS KMS protected materials

TL;DR the restored DynamoDB table must have the same name as the original DynamoDB table, and be restored to the same account that it was originally created in.

Continue Reading...

Enabling HTTPS on Elastic Beanstalk without a load balancer

By Matt Button |  Aug 6, 2018  | aws, alb, elastic-beanstalk, https, prototype

The recommended way to enable HTTPS in Elastic Beanstalk is to use one of AWS’s load balancers such as the Application Load Balancer (ALB) which supports autoscaling, fault tolerance, and other things.

This blog is about hosting a web app prototype on a single EC2 instance, using HTTPS via Let’s Encrypt, without a load balancer.

Using an AWS ALB costs a minimum of about $18 per month, on top of any other charges you currently have, such as $5 for the t2.micro instance that you may be running your prototype on.

So, if you’ve only got one EC2 instance in Elastic Beanstalk for your prototype, and don’t currently want the benefits of an ALB (fault tolerance, auto-scaling, etc), but do want the benefits of HTTPS (protection from interception, man-in-the-middle (MITM) attacks, etc), read on.

Continue Reading...

Using CKEditor 5 with React via create-react-app

By Matt Button |  May 20, 2018  | react, ckeditor, npm, webpack

When I first started using CKEditor 5 with create-react-app, I installed CKEditor as an npm module, and imported the ClassicEditor build as recommended by the quickstart.

Development mode (via npm start) worked well, and I was happily integrating CKEditor with React, but as soon as I ran npm run build (which generates the create-react-app production build), I ended up with the following error:

> [email protected] build c:\Dev\scratch\ckeditor-integration
> node scripts/build.js

Creating an optimized production build...
Failed to compile.

Failed to minify the code from this file:

        ./node_modules/@ckeditor/ckeditor5-build-classic/build/ckeditor.js:5:7350

Read more here: http://bit.ly/2tRViJ9

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: `node scripts/build.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Ruh-roh. What to do next? How can I solve this? Is this solvable? Is there another way?

Continue Reading...