<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Matt Button</title>
    <link>https://mattbutton.com/</link>
    <description>Recent content on Matt Button</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Copyright 2026, Matt Button</copyright>
    <lastBuildDate>Tue, 31 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mattbutton.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Compound Interest Calculator</title>
      <link>https://mattbutton.com/calculators/compound-interest/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/calculators/compound-interest/</guid>
      <description>&lt;div id=&#34;compound-interest&#34;&gt;&#xA;    &lt;form&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;initial&#34;&gt;Initial investment&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;span class=&#34;prefix&#34;&gt;$&lt;/span&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;initial&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;contrib&#34;&gt;Monthly Contribution&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;span class=&#34;prefix&#34;&gt;$&lt;/span&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;contrib&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;years&#34;&gt;Length of Time in Years&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;years&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;rate&#34;&gt;Interest Rate&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;rate&#34; min=&#34;0&#34; /&gt;&#xA;                &lt;span class=&#34;suffix&#34;&gt;%&lt;/span&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/form&gt;&#xA;    &lt;div id=&#34;result&#34;&gt;&#xA;        &lt;h2&gt;Your Results&lt;/h2&gt;&#xA;        In &lt;span id=&#34;out-years&#34;&gt;&lt;/span&gt; years, you will have $&lt;span id=&#34;out-amount&#34;&gt;&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mortgage Repayment Calculator</title>
      <link>https://mattbutton.com/calculators/mortgage-repayment/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/calculators/mortgage-repayment/</guid>
      <description>&lt;div id=&#34;mortgage-repayment&#34;&gt;&#xA;    &lt;form&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;price&#34;&gt;House price&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;span class=&#34;prefix&#34;&gt;$&lt;/span&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;price&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;deposit&#34;&gt;Deposit&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;span class=&#34;prefix&#34;&gt;$&lt;/span&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;deposit&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;years&#34;&gt;Loan term in Years&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;years&#34; min=&#34;0&#34; /&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;field&#34;&gt;&#xA;            &lt;label for=&#34;rate&#34;&gt;Interest Rate&lt;/label&gt;&#xA;            &lt;div class=&#34;input-wrapper&#34;&gt;&#xA;                &lt;input type=&#34;number&#34; id=&#34;rate&#34; min=&#34;0&#34; /&gt;&#xA;                &lt;span class=&#34;suffix&#34;&gt;%&lt;/span&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/form&gt;&#xA;    &lt;div id=&#34;result&#34;&gt;&#xA;        &lt;h2&gt;Your Results&lt;/h2&gt;&#xA;        Minimum monthly payments: $&lt;span id=&#34;monthly-repayment&#34;&gt;&lt;/span&gt;&lt;br /&gt;       &#xA;        Loan amount: $&lt;span id=&#34;loan-amount&#34;&gt;&lt;/span&gt;&lt;br /&gt;&#xA;        Total number of payments: $&lt;span id=&#34;num-payments&#34;&gt;&lt;/span&gt;&lt;br /&gt;&#xA;        Total interest payable: $&lt;span id=&#34;interest-payable&#34;&gt;&lt;/span&gt;&lt;br /&gt;&#xA;        Total amount payable: $&lt;span id=&#34;amount-payable&#34;&gt;&lt;/span&gt;&lt;br /&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Jetbrains Rider vs Webstorm</title>
      <link>https://mattbutton.com/jetbrains-rider-vs-webstorm/</link>
      <pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/jetbrains-rider-vs-webstorm/</guid>
      <description>&lt;p&gt;For the last five or so years, I&amp;rsquo;ve been using &lt;a href=&#34;https://www.jetbrains.com/rider/&#34;&gt;Jetbrains Rider&lt;/a&gt; as my primary IDE for C# work, and &lt;a href=&#34;https://www.jetbrains.com/webstorm/&#34;&gt;Webstorm&lt;/a&gt; for any Javascript, Typescript, and NodeJS work.&lt;/p&gt;&#xA;&lt;p&gt;Since Rider has most of the Webstorm features built in, along with &lt;a href=&#34;https://www.jetbrains.com/datagrip/&#34;&gt;Datagrip&lt;/a&gt; features, and &lt;a href=&#34;https://www.jetbrains.com/rider/features/&#34;&gt;much more&lt;/a&gt;, it initially seemed perfect to consolidate all my work into Rider, since my work is a fairly even mix of C#, Typescript, and Javascript.&lt;/p&gt;&#xA;&lt;p&gt;For C#, Rider is fantastic.&lt;/p&gt;&#xA;&lt;p&gt;However for Javascript and Typescript, Rider is mostly great, but with some key annoyances that aren&amp;rsquo;t present in Webstorm.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use Minimal APIs in .NET 8 without cluttering Program.cs</title>
      <link>https://mattbutton.com/minimal-apis-dotnet/</link>
      <pubDate>Fri, 05 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/minimal-apis-dotnet/</guid>
      <description>&lt;p&gt;Minimal APIs were first introduced in ASP.NET Core 6.0 and have been around for some time now. At a high level, Minimal APIs are a simplified way of building HTTP APIs with ASP.NET Core.&lt;/p&gt;&#xA;&lt;p&gt;But why use Minimal APIs over the classic MVC / Controller workflow that we&amp;rsquo;re all familiar with?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASP.NET MVC is useful if you want to organise your code based on &lt;a href=&#34;https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch01.html&#34;&gt;layers&lt;/a&gt;. &lt;strong&gt;Minimal APIs are useful if you would rather organise your code by features/slice&lt;/strong&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Cohesion_(computer_science)&#34;&gt;keeping related things together&lt;/a&gt;&amp;hellip; but you can still keep a layered architecture with Minimal APIs if you prefer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MVC is opt-out&lt;/strong&gt;, running an entire filter pipeline for each request, even if you don&amp;rsquo;t actually need all of it. When using &lt;strong&gt;Minimal APIs, you need to explicitly opt-in&lt;/strong&gt; to validation, model binding, and any filters that you&amp;rsquo;d like to run on each request. &lt;a href=&#34;https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/min-api-filters?view=aspnetcore-8.0&#34;&gt;Minimal API filters&lt;/a&gt; are also simpler, with the capability to do everything that MVC can.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ASP.NET MVC&amp;rsquo;s convention based model can be difficult to understand and debug&lt;/strong&gt; - it isn&amp;rsquo;t always clear exactly which routes would be discovered and configured via reflection, and getting this right can be error-prone especially early in the project. &lt;strong&gt;With Minimal API, routes are explicitly mapped&lt;/strong&gt;, making Minimal API routes easier to understand and debug.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Controllers can be harder to test&lt;/strong&gt;, and tend to grow in complexity over time - I&amp;rsquo;ve seen controllers become a massive file with a equally massive constructor (upwards of 20 parameters); you&amp;rsquo;ll need to inject all those parameters when instantiating the class in a unit test, even if method you&amp;rsquo;re testing only uses one of those parameters&amp;hellip;. leading to controllers sometimes not having test coverage.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ASP.NET Core is moving toward native AOT compilation,&lt;/strong&gt; &lt;a href=&#34;https://learn.microsoft.com/en-us/aspnet/core/fundamentals/native-aot&#34;&gt;which is not compatible with ASP.NET MVC&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Read on to find out how mitigate the most common concerns with adopting Minimal APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to fix Balena Etcher errors 5@0101000F and 1B1@0101000F / Balena Etcher killed my USB stick</title>
      <link>https://mattbutton.com/how-to-fix-balena-etcher-errors/</link>
      <pubDate>Sun, 09 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/how-to-fix-balena-etcher-errors/</guid>
      <description>&lt;p&gt;I recently purchased a USB stick so that I could try out a few different &lt;a href=&#34;https://ubuntu.com/tutorials/try-ubuntu-before-you-install#1-getting-started&#34;&gt;Linux Live images&lt;/a&gt;. Most of the tutorials &lt;a href=&#34;https://ubuntu.com/tutorials/create-a-usb-stick-on-windows#1-overview&#34;&gt;recommend Balena Etcher&lt;/a&gt; to create the bootable USB stick.&lt;/p&gt;&#xA;&lt;p&gt;The first and second flash (Fedora 14, then PopOS 22.04) with &lt;a href=&#34;https://etcher.balena.io/&#34;&gt;Balena Etcher&lt;/a&gt; worked well. I then tried Ubuntu 24.04 and received a &amp;ldquo;Flash Failed&amp;rdquo; error:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mattbutton.com/images/2024/balena-etcher-flash-failed.png&#34; alt=&#34;Balena Etcher error - Flash failed&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried re-flashing the two previous images, and now they fail too.&lt;/p&gt;&#xA;&lt;p&gt;This didn&amp;rsquo;t make any sense. Was my USB stick faulty? Did the repeated flashing somehow damage it? Did Balena Etcher kill my USB stick? Is my USB stick bricked?&lt;/p&gt;&#xA;&lt;p&gt;There is an easy way to fix this. Read on to find out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Self hosting for freelancers</title>
      <link>https://mattbutton.com/self-hosting-for-freelancers/</link>
      <pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/self-hosting-for-freelancers/</guid>
      <description>&lt;p&gt;Are you wondering whether it&amp;rsquo;s worth cutting costs on cloud providers, and setting up servers yourself for your freelancing?&lt;/p&gt;&#xA;&lt;p&gt;Please don&amp;rsquo;t do it! Here&amp;rsquo;s why:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ten programming books that can be read passively</title>
      <link>https://mattbutton.com/ten-programming-books-that-can-be-read-passively/</link>
      <pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/ten-programming-books-that-can-be-read-passively/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve all got busy lives, and it can sometimes be difficult to find time to sit down and read a chunky and dense programming book. (I&amp;rsquo;m looking at you, &lt;a href=&#34;https://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871&#34;&gt;SICP&lt;/a&gt;!!)&lt;/p&gt;&#xA;&lt;p&gt;A reader recently asked which programing books can be more casually read, without having to commit to a long reading session.&lt;/p&gt;&#xA;&lt;p&gt;Here are ten of my favorites:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top useEffect mistakes made by React Developers</title>
      <link>https://mattbutton.com/top-useeffect-mistakes/</link>
      <pubDate>Tue, 13 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/top-useeffect-mistakes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://react.dev/reference/react/useEffect&#34;&gt;useEffect&lt;/a&gt; is a kind of &amp;ldquo;escape hatch&amp;rdquo; which lets you perform side effects in functional components.&lt;/p&gt;&#xA;&lt;p&gt;Effects let you step outside of React, giving you the ability to synchronise your components with systems that aren&amp;rsquo;t controlled by React such as a non-react widget, an external system (such as a browser API), a third party library, or a network connection.&lt;/p&gt;&#xA;&lt;p&gt;Effects aren&amp;rsquo;t always necessary; if there is no external system involved, you shouldn’t need useEffect.&lt;/p&gt;&#xA;&lt;p&gt;But it isn&amp;rsquo;t always clear when effects are necessary, and how to use them. Which leads to some common mistakes.&lt;/p&gt;&#xA;&lt;p&gt;Here are some of the top mistakes that I&amp;rsquo;ve seen people make with useEffect:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling yourself by Scott Hanselman</title>
      <link>https://mattbutton.com/scaling-yourself/</link>
      <pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/scaling-yourself/</guid>
      <description>&lt;p&gt;I recently watched a presentation by &lt;a href=&#34;https://hanselman.com/&#34;&gt;Scott Hanselman&lt;/a&gt; about scaling yourself and it was enlightening; the key message was that you can&amp;rsquo;t keep up with everything, and in the presentation, Scott talked about ways of taming the torrent of information and lists of things to do that sometimes leave us feeling ineffective and overwhelmed.&lt;/p&gt;&#xA;&lt;p&gt;In the presentation, Scott combines ideas from Stephen Covey&amp;rsquo;s book &lt;a href=&#34;https://en.wikipedia.org/wiki/The_7_Habits_of_Highly_Effective_People&#34;&gt;The Seven Habits of Highly Effective People&lt;/a&gt; with ideas from &lt;a href=&#34;https://www.youtube.com/watch?v=wLjgUYm2wpk&#34;&gt;David Allen&amp;rsquo;s system, Getting Things Done&lt;/a&gt;, and also Scott&amp;rsquo;s own life experiences.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I&amp;rsquo;ve summarised some of the highlights of Scott&amp;rsquo;s presentation, reorganised them a little, and added more context with links and quotes. At the end, there&amp;rsquo;s a link to the entire hour long presentation, which is absolutely worth a watch.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Docker for local web development</title>
      <link>https://mattbutton.com/docker-for-web-developers/</link>
      <pubDate>Thu, 23 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/docker-for-web-developers/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re new to Docker, it&amp;rsquo;s hard figuring out even what to search for, and how the concepts tie together, let alone what to pay attention to for your use case.&lt;/p&gt;&#xA;&lt;p&gt;To make things more difficult, there has been a lot of change over time, and stuff that was once recommended is now not recommended. For example, a lot of older video tutorials recommend using &lt;a href=&#34;https://docs.docker.com/network/links/&#34;&gt;container links&lt;/a&gt; which have since been deprecated in favor of &lt;a href=&#34;https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge&#34;&gt;user-defined bridge networks&lt;/a&gt; .. in case you&amp;rsquo;re unfamiliar with this, I&amp;rsquo;ll cover what this means, and why you&amp;rsquo;d use it later in the blog post.&lt;/p&gt;&#xA;&lt;p&gt;Once you learn the basics, using Docker in practice is fairly straightforward, and if you&amp;rsquo;re using Docker at home or at work, the time you spend learning now will save you a massive amount of time and effort in the future.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve used Docker a bit, are familiar with some of the concepts, how dabbled here and there, but sometimes struggle with connecting some of the concepts, or how to get things set up end-to-end, then this blog post is for you.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, I&amp;rsquo;ll guide you through step by step on:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The distinction between docker image and containers&lt;/li&gt;&#xA;&lt;li&gt;Best practices on how to persist data within containers, and how to control where data is persisted&lt;/li&gt;&#xA;&lt;li&gt;How to continue developing on your local machine as usual, while your app is running within a docker container on your local machine&lt;/li&gt;&#xA;&lt;li&gt;How to connect your containerised web app to a containerised Microsoft SQL Server&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;!-- * How to set up a full dockerised development environment on your local machine, which resembles the production environment that you&#39;re targeting --&gt;</description>
    </item>
    <item>
      <title>Redux made easy with Redux Toolkit and Typescript</title>
      <link>https://mattbutton.com/redux-made-easy-with-redux-toolkit-and-typescript/</link>
      <pubDate>Mon, 20 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/redux-made-easy-with-redux-toolkit-and-typescript/</guid>
      <description>&lt;p&gt;Using &lt;a href=&#34;https://redux.js.org/&#34;&gt;Redux&lt;/a&gt; with &lt;a href=&#34;https://reactjs.org/&#34;&gt;React&lt;/a&gt; can be incredibly challenging for people to get their head around; while the core principles of Redux itself are fairly straightforward and don&amp;rsquo;t take too long to grasp, a lot of people struggle with using Redux in React apps. Partly because there are so many damn things to integrate:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://redux.js.org/&#34;&gt;Redux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/reduxjs/react-redux&#34;&gt;React Redux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/reduxjs/redux-thunk&#34;&gt;Redux Thunk&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.typescriptlang.org/&#34;&gt;Typescript&lt;/a&gt; (getting more common in recent years)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://redux-saga.js.org/&#34;&gt;Redux Saga&lt;/a&gt; / &lt;a href=&#34;https://redux-observable.js.org/&#34;&gt;Redux Observable&lt;/a&gt; (in more complex apps)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I spotted this quote which summed it up for me:&lt;/p&gt;&#xA;&lt;blockquote class=&#34;blockquote&#34;&gt;&#xA;    &lt;p&gt;&#xA;Redux was such a mental overhead for me when I started out with it. The amount of boilerplate code that I had to write for the project I worked on was very frustrating.&#xA;&lt;/p&gt;&#xA;&#xA;    &#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I struggled with that stuff too, even after I became familiar with the concepts, I often found it difficult to understand the flow of data and events within React Redux apps. This is not uncommon, even the original author of Redux had this to say:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/20/dan-abramov-redux-2019.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;Yup. Can totally relate.&lt;/p&gt;&#xA;&lt;p&gt;Then I found &lt;a href=&#34;https://redux-toolkit.js.org/&#34;&gt;Redux Toolkit&lt;/a&gt;, written by the maintainers of Redux, and &lt;a href=&#34;https://redux.js.org/style-guide/style-guide/#use-redux-toolkit-for-writing-redux-logic&#34;&gt;recommended by the Redux style guide&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to scrape stock upgrades and downgrades from Yahoo Finance</title>
      <link>https://mattbutton.com/how-to-scrape-stock-upgrades-and-downgrades-from-yahoo-finance/</link>
      <pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/how-to-scrape-stock-upgrades-and-downgrades-from-yahoo-finance/</guid>
      <description>&lt;p&gt;In this blog post I&amp;rsquo;ll show you how to scrape stock upgrade and downgrade data from &lt;a href=&#34;https://finance.yahoo.com&#34;&gt;Yahoo Finance&lt;/a&gt; using Python, &lt;a href=&#34;https://www.crummy.com/software/BeautifulSoup/bs4/doc/&#34;&gt;Beautiful Soup&lt;/a&gt;, json, and a bit of &lt;a href=&#34;https://en.wikipedia.org/wiki/Regular_expression&#34;&gt;regular expression&lt;/a&gt; magic.&lt;/p&gt;&#xA;&lt;p&gt;This technique can be applied to any stock symbol on Yahoo Finance, but for this blog post we&amp;rsquo;ll be scraping data for &lt;a href=&#34;https://finance.yahoo.com/quote/AAPL?p=AAPL&#34;&gt;Apple (AAPL)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll be guiding you through the process, describing my thought processes and techiques, and if you follow along, by the end of this blog post, you&amp;rsquo;ll have extracted stock upgrade and downgrade data in a &lt;a href=&#34;https://pandas.pydata.org/&#34;&gt;Pandas&lt;/a&gt; dataframe which will look something like this:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/articles/df-upgrades-downgrades-final-preview.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;From there, you can easily export the data into an Excel file, or if you&amp;rsquo;re a more advanced Python user, host the code in a Web API which can be accessed by Google Sheets, or your own custom code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accelerate - Building and Scaling High Performing Technology Organisations</title>
      <link>https://mattbutton.com/accelerate-building-and-scaling-high-performing-technology-organisations/</link>
      <pubDate>Thu, 19 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/accelerate-building-and-scaling-high-performing-technology-organisations/</guid>
      <description>&lt;p&gt;I first read &lt;a href=&#34;https://amzn.to/2LuCuu2&#34;&gt;Accelerate&lt;/a&gt; by Nicole Forsgren, Jez Humble, Gene Kim back in 2018 when it was a hot topic in the office; only an hour or two would go by between overhearing somebody talk about it, internal blog posts were being written, and we&amp;rsquo;d receive emails about following the findings.&lt;/p&gt;&#xA;&lt;p&gt;One of the goals behind the book was to run a series of surveys, gathering 23000 responses across 2000 organizations, then using statistical methods on the results in order to find a way to measure software delivery performance, and to find out what drives it. One of the most impressive things about the book is that it not only presents the research findings, but also goes into detail about why the findings are trustworthy, meaning that they not only tell us what they learned, but how they learned it.&lt;/p&gt;&#xA;&lt;p&gt;I recently read through the book again and took a bunch of notes which cover the main points.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 things that you need to consider before becoming a mentor</title>
      <link>https://mattbutton.com/5-things-that-you-need-to-consider-before-becoming-a-mentor/</link>
      <pubDate>Sat, 03 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/5-things-that-you-need-to-consider-before-becoming-a-mentor/</guid>
      <description>&lt;p&gt;As your career progresses, you&amp;rsquo;ll discover an increasing number of opportunities for mentoring others, and being an effective mentor will become increasingly important.&lt;/p&gt;&#xA;&lt;p&gt;This blog post covers 5 things that you need to consider before becoming a mentor, along with some tips on how to select a mentee, and some pitfalls to watch out for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Week: Ryan Holiday&#39;s 32 Thoughts From a 32-Year-Old</title>
      <link>https://mattbutton.com/2019/07/20/this-week-ryan-holidays-32-thoughts-from-a-32-year-old/</link>
      <pubDate>Sat, 20 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/07/20/this-week-ryan-holidays-32-thoughts-from-a-32-year-old/</guid>
      <description>&lt;p&gt;A collection of 5 things from the week that I found interesting, am enjoying, or am working on.&lt;/p&gt;&#xA;&lt;p&gt;This week:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been amazed by: Photopea - an advanced image editor, which looks and behaves a lot like Photoshop, and runs entirely in your browser&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been experimenting with: CSS Grid. It makes my layout life easier, and it&amp;rsquo;ll make yours easier too.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been watching: Keep Betting on Javascript by Kyle Simpson&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been reading: Ryan Holiday&amp;rsquo;s 32 Thoughts From a 32-Year-Old&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been thinking about: How important it is to write online&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>13 years ago we were rallying against nested HTML tables - Notes from Webstock 2019</title>
      <link>https://mattbutton.com/notes-from-webstock-2019/</link>
      <pubDate>Sat, 29 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/notes-from-webstock-2019/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not sure why it&amp;rsquo;s taken so long, but after 13 years of &lt;a href=&#34;https://www.webstock.org.nz/19/&#34;&gt;Webstock&lt;/a&gt; existing, this year was the first time that I attended.&lt;/p&gt;&#xA;&lt;p&gt;While I haven&amp;rsquo;t attended Webstock until now, I have watched many of the recordings which are usually available a few months after each event was held, and it&amp;rsquo;s been interesting to see how the event, and the industry in general has changed over the years.&lt;/p&gt;&#xA;&lt;p&gt;None of this year&amp;rsquo;s talks were technical, and all were about the human side of the industry - topics such as ethics, personal experiences, psychology, communication, and team health.&lt;/p&gt;&#xA;&lt;p&gt;One of the original organisers stood up on stage at the end of the event, and said it best:&lt;/p&gt;&#xA;&lt;blockquote class=&#34;blockquote&#34;&gt;&#xA;    &lt;p&gt;&#xA;13 years ago we were rallying against nested HTML tables&#xA;&lt;/p&gt;&#xA;&#xA;    &#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>How to fix font rendering in Chrome when using RDP</title>
      <link>https://mattbutton.com/how-to-fix-font-rendering-in-chrome-when-using-rdp/</link>
      <pubDate>Wed, 15 May 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/how-to-fix-font-rendering-in-chrome-when-using-rdp/</guid>
      <description>&lt;p&gt;Does the font in Chrome look really grainy in Windows when using RDP, even though fonts in all other apps look fine?&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2019/chrome-grainy-text.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;When you really want your fonts to be nice and clear like this:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2019/chrome-clear-text.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;There are a couple of ways that this can be fixed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chrome breakpoints don&#39;t work when using create-react-app</title>
      <link>https://mattbutton.com/2019/04/27/chrome-breakpoints-dont-work-when-using-create-react-app/</link>
      <pubDate>Sat, 27 Apr 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/04/27/chrome-breakpoints-dont-work-when-using-create-react-app/</guid>
      <description>&lt;p&gt;Currently there&amp;rsquo;s a bug in recent versions of create-react-app where debug breakpoints aren&amp;rsquo;t working in Chrome.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Week: I&#39;ve been playing The Witness, and Webstock is back!</title>
      <link>https://mattbutton.com/2019/04/13/this-week-ive-been-playing-the-witness-and-webstock-is-back/</link>
      <pubDate>Sat, 13 Apr 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/04/13/this-week-ive-been-playing-the-witness-and-webstock-is-back/</guid>
      <description>&lt;p&gt;A collection of 5 things from the week that I found interesting, am enjoying, or am working on.&lt;/p&gt;&#xA;&lt;p&gt;This week:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been learning about: Single Sign-On and Sign-Out in .NET Core with OpenID Connect and IdentityServer4&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been watching: Andrew Tokeley&amp;rsquo;s talk on High Performance Product Leadership&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been happy to see that: Webstock is back on this year&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been thinking about: Lambda School sounds great&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been playing: The Witness&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Using Git on Windows</title>
      <link>https://mattbutton.com/2019/03/24/using-git-on-windows/</link>
      <pubDate>Sun, 24 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/03/24/using-git-on-windows/</guid>
      <description>&lt;p&gt;Using &lt;a href=&#34;https://git-scm.com/&#34;&gt;Git&lt;/a&gt; on Windows is way easier once you find a combination of tools that you&amp;rsquo;re comfortable with.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post you&amp;rsquo;ll learn about:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using Git via the command line on Windows&lt;/li&gt;&#xA;&lt;li&gt;A great Git GUI client for Windows and Mac&lt;/li&gt;&#xA;&lt;li&gt;The tool that I use for diffs, and resolving any Git merge conflict that may occur (including 3-way merges)&lt;/li&gt;&#xA;&lt;li&gt;Using Git with SSH authentication on Windows via .bashrc and Bash shell&lt;/li&gt;&#xA;&lt;li&gt;My .gitconfig&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Impromptu speaking techniques</title>
      <link>https://mattbutton.com/2019/02/23/impromptu-speaking-techniques/</link>
      <pubDate>Sat, 23 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/02/23/impromptu-speaking-techniques/</guid>
      <description>&lt;p&gt;Impromptu speaking in front of an audience is challenging for most of us. Even the famous author and public speaker, Mark Twain, has been quoted as saying &amp;ldquo;I never could make a good impromptu speech without several hours to prepare it.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;If you struggle with scattered thoughts, or mind blank when impromptu speaking, then this blog post will help you.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, you&amp;rsquo;ll learn some techniques to structure your speech when you&amp;rsquo;re on the spot, and some ways to quickly generate ideas when your mind goes blank.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enabling HTTPS on Elastic Beanstalk without a load balancer</title>
      <link>https://mattbutton.com/2019/02/12/enabling-https-on-elastic-beanstalk-without-a-load-balancer/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/02/12/enabling-https-on-elastic-beanstalk-without-a-load-balancer/</guid>
      <description>&lt;p&gt;In this blog post, you&amp;rsquo;ll learn how to host a sample Python web app on Elastic Beanstalk, using &lt;a href=&#34;https://en.wikipedia.org/wiki/HTTPS&#34;&gt;HTTPS&lt;/a&gt;, without a load balancer.&lt;/p&gt;&#xA;&lt;p&gt;After following the steps in this blog post, you should end up with something that looks like the following image:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2019/eb-https-site-slim.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;</description>
    </item>
    <item>
      <title>This Week: Startups that are hiring remotely in 2019</title>
      <link>https://mattbutton.com/2019/02/01/this-week-startups-that-are-hiring-remotely-in-2019/</link>
      <pubDate>Fri, 01 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/02/01/this-week-startups-that-are-hiring-remotely-in-2019/</guid>
      <description>&lt;p&gt;A collection of 5 things from the week that I found interesting, am enjoying, or am working on.&lt;/p&gt;&#xA;&lt;p&gt;This week:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Competitive Advantage of Design (Philip Fierlinger)&lt;/li&gt;&#xA;&lt;li&gt;How to get rich (without getting lucky)&lt;/li&gt;&#xA;&lt;li&gt;Startups that are hiring remotely in 2019&lt;/li&gt;&#xA;&lt;li&gt;15 Things You Should Know About Product Managers&lt;/li&gt;&#xA;&lt;li&gt;How website builders can differentiate themselves in a heavily commoditised market&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>How to scrape Yahoo Finance and extract fundamental stock market data using Python, LXML, and Pandas</title>
      <link>https://mattbutton.com/2019/01/24/how-to-scrape-yahoo-finance-and-extract-fundamental-stock-market-data-using-python-lxml-and-pandas/</link>
      <pubDate>Thu, 24 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/24/how-to-scrape-yahoo-finance-and-extract-fundamental-stock-market-data-using-python-lxml-and-pandas/</guid>
      <description>&lt;p&gt;In this blog post I&amp;rsquo;ll show you how to scrape &lt;a href=&#34;https://finance.yahoo.com/quote/MFT.NZ/financials?p=MFT.NZ&#34;&gt;Income Statement&lt;/a&gt;, &lt;a href=&#34;https://finance.yahoo.com/quote/MFT.NZ/balance-sheet?p=MFT.NZ&#34;&gt;Balance Sheet&lt;/a&gt;, and &lt;a href=&#34;https://finance.yahoo.com/quote/MFT.NZ/cash-flow?p=MFT.NZ&#34;&gt;Cash Flow&lt;/a&gt; data for companies from Yahoo Finance using &lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt;, &lt;a href=&#34;https://lxml.de/&#34;&gt;LXML&lt;/a&gt;, and &lt;a href=&#34;https://pandas.pydata.org/&#34;&gt;Pandas&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll use data from &lt;a href=&#34;https://finance.yahoo.com/quote/MFT.NZ/financials?p=MFT.NZ&#34;&gt;Mainfreight NZ (MFT.NZ)&lt;/a&gt; as an example, but the code will work for any stock symbol on Yahoo Finance.&lt;/p&gt;&#xA;&lt;p&gt;The screenshot below shows a Pandas DataFrame with MFT.NZ balance sheet data, which you can expect to get by following the steps in this blog post:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2019/mft-dataframe-balance-sheet-final-oct-2019.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;After taking you step by step on how to fetch data from the balance sheet, I&amp;rsquo;ll show you how to generalise the code to also generate a DataFrame containing data from the Income Statement, and Cash Flow statement.&lt;/p&gt;&#xA;&lt;p&gt;After creating the Pandas DataFrames, I&amp;rsquo;ll then show you &lt;strong&gt;how to scrape data for multiple symbols&lt;/strong&gt;, and finally, export everything to an Excel file, so you&amp;rsquo;ll have output that looks something like this:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/20/yahoo-finance-scrape-multi-xlsx.png&#34; class=&#34;mx-auto d-block img-fluid&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;This post was last updated in April, 2020.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Prior to October, 2019, Yahoo Finance conveniently had all this data in a regular HTML table, which made extracting the data super easy. Since then, they&amp;rsquo;ve updated the page with a new structure, which was a wee bit tricker to get the data from. Fortunately, it&amp;rsquo;s still possible. Read on to find out how.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Are we there yet? Insights on how to lead by design - by Sam Bucolo</title>
      <link>https://mattbutton.com/2019/01/14/are-we-there-yet-insights-on-how-to-lead-by-design-by-sam-bucolo/</link>
      <pubDate>Mon, 14 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/14/are-we-there-yet-insights-on-how-to-lead-by-design-by-sam-bucolo/</guid>
      <description>&lt;p&gt;One of the books that I read over the summer break was &lt;a href=&#34;https://www.amazon.com/Are-We-There-Yet-Insights/dp/9063694091&#34;&gt;&amp;ldquo;Are we there yet? Insights on How to Lead by Design&amp;rdquo;&lt;/a&gt; by Sam Bucolo.&lt;/p&gt;&#xA;&lt;p&gt;For the first few years of Sam&amp;rsquo;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.&lt;/p&gt;&#xA;&lt;p&gt;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.&lt;/p&gt;&#xA;&lt;p&gt;These experiences led Sam to specialise in Design Led Innovation.&lt;/p&gt;&#xA;&lt;p&gt;My notes:&lt;/p&gt;&#xA;&lt;p&gt;There are three elements of Design Led Innovation:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Customer value:&lt;/strong&gt; 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.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Management Mindset:&lt;/strong&gt; The correct mindset to create a strategy which has been built around new insights about the customer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Strategic alignment:&lt;/strong&gt; Ensuring that all business processes and systems are aligned with the customer&amp;rsquo;s problem.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>How to rename categories in Hugo</title>
      <link>https://mattbutton.com/2019/01/13/how-to-rename-categories-in-hugo/</link>
      <pubDate>Sun, 13 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/13/how-to-rename-categories-in-hugo/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; for my blog for the last few years, and recently published my first theme - &lt;a href=&#34;https://github.com/mattbutton/silhouette-hugo/&#34;&gt;Silhouette Hugo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I recently received an email with the following question:&lt;/p&gt;&#xA;&lt;blockquote class=&#34;blockquote&#34;&gt;&#xA;    &lt;p&gt;&#xA;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?&#xA;&lt;/p&gt;&#xA;&#xA;    &#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I figured that this might be a common question, so decided to share it in a blog post.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s how to rename categories in Hugo, in the context of my theme.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Week: The Story of ConvertKit - From $0 to $968,000 in Monthly Revenue</title>
      <link>https://mattbutton.com/2019/01/11/this-week-the-story-of-convertkit-from-0-to-968000-in-monthly-revenue/</link>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/11/this-week-the-story-of-convertkit-from-0-to-968000-in-monthly-revenue/</guid>
      <description>&lt;p&gt;A collection of 5 things from the week that I found interesting, am enjoying, or am working on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Authentication with Python and Flask</title>
      <link>https://mattbutton.com/2019/01/05/google-authentication-with-python-and-flask/</link>
      <pubDate>Sat, 05 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/05/google-authentication-with-python-and-flask/</guid>
      <description>&lt;img src=&#34;https://mattbutton.com/images/2019/google-drive-and-python.png&#34; class=&#34;img-fluid mx-auto d-block&#34;  /&gt;&#xA;&lt;p&gt;In this blog post, you will learn how to create a &lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt; app using &lt;a href=&#34;http://flask.pocoo.org/&#34;&gt;Flask&lt;/a&gt; and the Google API which will:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support Google Authentication with Python and Flask&lt;/li&gt;&#xA;&lt;li&gt;Restrict access via an OAuth scope, so that the app can only view and manage Google Drive files and folders which were created by the app&lt;/li&gt;&#xA;&lt;li&gt;Read and write files on the user&amp;rsquo;s Google Drive with Python.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;By the time you get to the end of this blog post, you&amp;rsquo;ll have built a basic Google Drive file browser which looks something like:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2019/google-drive-file-browser.png&#34; alt=&#34;OAuth Google Drive Scope&#34; class=&#34;img-fluid mx-auto d-block&#34; /&gt;&#xA;&lt;p&gt;This blog post is divided up into sections which progressively build up an app which interacts with the user&amp;rsquo;s Google Drive. If you only want to find out about how to do user Authentication with Google and Python, feel free to stop there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This week: management is doing things right. Leadership is doing the right things</title>
      <link>https://mattbutton.com/2019/01/04/this-week-management-is-doing-things-right.-leadership-is-doing-the-right-things/</link>
      <pubDate>Fri, 04 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2019/01/04/this-week-management-is-doing-things-right.-leadership-is-doing-the-right-things/</guid>
      <description>&lt;p&gt;A collection of 5 things from the week that I found interesting, am enjoying, or am working on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tony Alexander Presentation Notes - things which affected the NZ housing market over the decades</title>
      <link>https://mattbutton.com/2019/01/02/tony-alexander-presentation-notes-things-which-affected-the-nz-housing-market-over-the-decades/</link>
      <pubDate>Wed, 02 Jan 2019 12:00:22 +1300</pubDate>
      <guid>https://mattbutton.com/2019/01/02/tony-alexander-presentation-notes-things-which-affected-the-nz-housing-market-over-the-decades/</guid>
      <description>&lt;p&gt;I recently attended a presentation by BNZ&amp;rsquo;s Chief Economist, &lt;a href=&#34;http://tonyalexander.co.nz/&#34;&gt;Tony Alexander&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;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&amp;rsquo;s until today.&lt;/p&gt;&#xA;&lt;p&gt;I wrote up a bunch of notes to summarise his points.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re interested in getting a bit of perspective on the NZ property market, and some of the things that caused it&amp;rsquo;s near-relentless movement upward over time, then read on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>InvalidCypherTextException when reading an encrypted DynamoDB table which has been restored from a backup</title>
      <link>https://mattbutton.com/2018/12/05/invalidcyphertextexception-when-reading-an-encrypted-dynamodb-table-which-has-been-restored-from-a-backup/</link>
      <pubDate>Wed, 05 Dec 2018 12:00:22 +1300</pubDate>
      <guid>https://mattbutton.com/2018/12/05/invalidcyphertextexception-when-reading-an-encrypted-dynamodb-table-which-has-been-restored-from-a-backup/</guid>
      <description>&lt;p&gt;If you attempt to read encrypted data from a DynamoDB table which has been restored from a backup to a DynamoDB table which doesn&amp;rsquo;t match the original table name, you may see the following errors:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; 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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enabling HTTPS on Elastic Beanstalk without a load balancer</title>
      <link>https://mattbutton.com/2018/08/06/enabling-https-on-elastic-beanstalk-without-a-load-balancer/</link>
      <pubDate>Mon, 06 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2018/08/06/enabling-https-on-elastic-beanstalk-without-a-load-balancer/</guid>
      <description>&lt;p&gt;The recommended way to enable HTTPS in &lt;a href=&#34;https://aws.amazon.com/elasticbeanstalk/&#34;&gt;Elastic Beanstalk&lt;/a&gt; is to use one of AWS&amp;rsquo;s load balancers such as the &lt;a href=&#34;https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html&#34;&gt;Application Load Balancer (ALB)&lt;/a&gt; which supports &lt;a href=&#34;https://en.wikipedia.org/wiki/Autoscaling&#34;&gt;autoscaling&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Fault_tolerance&#34;&gt;fault tolerance&lt;/a&gt;, &lt;a href=&#34;https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html&#34;&gt;and other things&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This blog is about hosting a web app prototype on a single &lt;a href=&#34;https://aws.amazon.com/ec2/&#34;&gt;EC2&lt;/a&gt; instance, using &lt;a href=&#34;https://en.wikipedia.org/wiki/HTTPS&#34;&gt;HTTPS&lt;/a&gt; via &lt;a href=&#34;https://letsencrypt.org/&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;, without a load balancer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/elasticloadbalancing/pricing/&#34;&gt;Using an AWS ALB costs a minimum of about $18 per month&lt;/a&gt;, on top of any other charges you currently have, such as &lt;a href=&#34;https://aws.amazon.com/ec2/pricing/on-demand/&#34;&gt;$5 for the t2.micro instance&lt;/a&gt; that you may be running your prototype on.&lt;/p&gt;&#xA;&lt;p&gt;So, if you&amp;rsquo;ve only got one EC2 instance in Elastic Beanstalk for your prototype, and don&amp;rsquo;t currently want the benefits of an ALB (fault tolerance, auto-scaling, etc), but do want the benefits of HTTPS (protection from interception, &lt;a href=&#34;https://en.wikipedia.org/wiki/Man-in-the-middle_attack&#34;&gt;man-in-the-middle (MITM) attacks&lt;/a&gt;, etc), read on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using CKEditor 5 with React via create-react-app</title>
      <link>https://mattbutton.com/2018/05/20/using-ckeditor-5-with-react-via-create-react-app/</link>
      <pubDate>Sun, 20 May 2018 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2018/05/20/using-ckeditor-5-with-react-via-create-react-app/</guid>
      <description>&lt;p&gt;When I first started using CKEditor 5 with create-react-app, I &lt;a href=&#34;https://docs.ckeditor.com/ckeditor5/latest/builds/guides/quick-start.html#classic-editor&#34;&gt;installed CKEditor as an npm module, and imported the ClassicEditor build as recommended by the quickstart&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Development mode (via npm start) worked well, and I was happily integrating CKEditor with React, but as soon as I ran &lt;strong&gt;npm run build&lt;/strong&gt; (which generates the create-react-app production build), I ended up with the following error:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: bash&#34;&gt;&#xA;&gt; ckeditor-integration@0.1.0 build c:\Dev\scratch\ckeditor-integration&#xA;&gt; node scripts/build.js&#xA;&#xA;Creating an optimized production build...&#xA;Failed to compile.&#xA;&#xA;Failed to minify the code from this file:&#xA;&#xA;        ./node_modules/@ckeditor/ckeditor5-build-classic/build/ckeditor.js:5:7350&#xA;&#xA;Read more here: http://bit.ly/2tRViJ9&#xA;&#xA;npm ERR! code ELIFECYCLE&#xA;npm ERR! errno 1&#xA;npm ERR! ckeditor-integration@0.1.0 build: `node scripts/build.js`&#xA;npm ERR! Exit status 1&#xA;npm ERR!&#xA;npm ERR! Failed at the ckeditor-integration@0.1.0 build script.&#xA;npm ERR! This is probably not a problem with npm. There is likely additional logging output above.&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Ruh-roh. What to do next? How can I solve this? Is this solvable? Is there another way?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Book Recommendations</title>
      <link>https://mattbutton.com/book-recommendations/</link>
      <pubDate>Tue, 02 Jan 2018 04:37:23 +0000</pubDate>
      <guid>https://mattbutton.com/book-recommendations/</guid>
      <description>&lt;p class=&#34;h5 text-center&#34;&gt;&lt;u&gt;Life and Mindset&lt;/u&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The New Psycho Cybernetics by Maxwell Maltz&lt;/li&gt;&#xA;&lt;li&gt;Think and Grow Rich by Napoleon Hill&lt;/li&gt;&#xA;&lt;li&gt;The 7 Habits of Highly Effective People by Stephen Covey&lt;/li&gt;&#xA;&lt;li&gt;Principles by Ray Dalio&lt;/li&gt;&#xA;&lt;li&gt;How to Fail at Almost Everything and Still Win Big by Scott Adams&lt;/li&gt;&#xA;&lt;li&gt;The 4 Hour Work Week by Tim Ferriss&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p class=&#34;h5 text-center&#34;&gt;&lt;u&gt;Business and Startups&lt;/u&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Art of the Start by Guy Kawasaki&lt;/li&gt;&#xA;&lt;li&gt;The Effective Executive by Peter Drucker&lt;/li&gt;&#xA;&lt;li&gt;Turn The Ship Around!: A True Story of Building Leaders by Breaking the Rules by L. David Marquet&lt;/li&gt;&#xA;&lt;li&gt;Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration by Ed Catmull&lt;/li&gt;&#xA;&lt;li&gt;Hooked: How to Build Habit-Forming Products by Nir Eyal&lt;/li&gt;&#xA;&lt;li&gt;Managing Humans by Michael Lopp&lt;/li&gt;&#xA;&lt;li&gt;The Entrepreneur&amp;rsquo;s Guide to Getting Your Shit Together by John Carlton&lt;/li&gt;&#xA;&lt;li&gt;Turn The Ship Around!: A True Story of Building Leaders by Breaking the Rules by L. David Marquet&lt;/li&gt;&#xA;&lt;li&gt;The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers by Ben Horowitz&lt;/li&gt;&#xA;&lt;li&gt;Zero to One by Blake Masters and Peter Theil&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p class=&#34;h5 text-center&#34;&gt;&lt;u&gt;Finance, Money, and Investment&lt;/u&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Products that I recommend</title>
      <link>https://mattbutton.com/products/</link>
      <pubDate>Tue, 02 Jan 2018 04:37:23 +0000</pubDate>
      <guid>https://mattbutton.com/products/</guid>
      <description>&lt;p class=&#34;h5 text-center&#34;&gt;&lt;u&gt;Software development&lt;/u&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Visual Studio Code for HTML/CSS/JS/Python/Markdown/Text editing.&lt;/li&gt;&#xA;&lt;li&gt;Notepad++ for quickly making any edits to a text file, or when I want to see hidden characters&lt;/li&gt;&#xA;&lt;li&gt;Visual Studio for any .NET Core, and general C# work.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.scootersoftware.com/&#34;&gt;Beyond Compare&lt;/a&gt; for file diffs.&lt;/li&gt;&#xA;&lt;li&gt;Git Bash for any command line work with Git, and as a general Windows command prompt.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.sourcetreeapp.com/&#34;&gt;Sourcetree&lt;/a&gt; as an interactive Git browser, and for when I want to stage or diff files in a Git repo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p class=&#34;h5 text-center&#34;&gt;&lt;u&gt;Privacy related products&lt;/u&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solutions Architect Associate Exam Notes</title>
      <link>https://mattbutton.com/2017/11/11/aws-solutions-architect-associate-exam-notes/</link>
      <pubDate>Sat, 11 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/11/11/aws-solutions-architect-associate-exam-notes/</guid>
      <description>&lt;p&gt;I completed the AWS Solutions Architect Associate exam in November 2017, after about eight weeks study, with a score of 85%.&lt;/p&gt;&#xA;&lt;p&gt;Below are a series links to blog posts containing all my study notes, and finally, another blog post containing &lt;a href=&#34;https://mattbutton.com/2017/11/02/aws-certified-solution-architect-associate-exam-tips/&#34;&gt;my thoughts on the exam, as well as some exam feedback and tips&lt;/a&gt; for those who will sit the exam after me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I host and update www.mattbutton.com on AWS with CloudFlare and Amazon S3 Static Website Hosting</title>
      <link>https://mattbutton.com/2017/11/04/how-i-host-and-update-www.mattbutton.com-on-aws-with-cloudflare-and-amazon-s3-static-website-hosting/</link>
      <pubDate>Sat, 04 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/11/04/how-i-host-and-update-www.mattbutton.com-on-aws-with-cloudflare-and-amazon-s3-static-website-hosting/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been hosting this blog on &lt;a href=&#34;https://aws.amazon.com/s3/&#34;&gt;Amazon S3&lt;/a&gt; for a few months now, and thought it would be a good idea to write about how it&amp;rsquo;s set up, in case &lt;a href=&#34;https://www.urbandictionary.com/define.php?term=Future%20me&#34;&gt;future me&lt;/a&gt; needs to refer to it, and to give pointers to anybody else who is interested in setting up their own website using Amazon S3, HTTPS, and the CloudFlare CDN.&lt;/p&gt;&#xA;&lt;p&gt;Hosting this website costs cents per month, and avoids &lt;a href=&#34;https://wpengine.com/blog/security-mindset-wordpress-the-threat-landscape/&#34;&gt;security risks of other blog platforms such as Wordpress&lt;/a&gt; by being &lt;a href=&#34;https://en.wikipedia.org/wiki/Static_web_page&#34;&gt;purely static, consisting just regular HTML files, JavaScript, and images&lt;/a&gt;; which means no PHP, .NET, etc. This works well with what I need in a blog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Certified Solution Architect Associate Exam Tips</title>
      <link>https://mattbutton.com/2017/11/02/aws-certified-solution-architect-associate-exam-tips/</link>
      <pubDate>Thu, 02 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/11/02/aws-certified-solution-architect-associate-exam-tips/</guid>
      <description>&lt;p&gt;After heaps of study, I passed AWS Solutions Architect Associate exam, with an overall score of 85%.&lt;/p&gt;&#xA;&lt;p&gt;Here are my notes on how I studied for the exam, and tips for preparing based on my experience in the actual exam.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wellington Spearfishing</title>
      <link>https://mattbutton.com/wellington-spearfishing/</link>
      <pubDate>Wed, 01 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/wellington-spearfishing/</guid>
      <description>&lt;p&gt;A collection of links, with a Wellington focus, which I frequently use to work out if it&amp;rsquo;s worth going for a dive or not.&lt;/p&gt;&#xA;&lt;p&gt;Feel free to &lt;a href=&#34;https://mattbutton.com/about/&#34;&gt;get in touch&lt;/a&gt; if you have any links worth adding.&lt;/p&gt;&#xA;&lt;h3 id=&#34;webcams&#34;&gt;Webcams&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.gw.govt.nz/environment/harbours-and-coasts/wellington-harbour-entrance-webcams-and-radio/&#34;&gt;Beacon Hill Webcam&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;forecasts&#34;&gt;Forecasts&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.metservice.com/towns-cities/wellington/wellington-city&#34;&gt;MetService - 5 day forecast for Wellington&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.metservice.com/towns-cities/wellington/wellington-city#!/ten-day&#34;&gt;MetService - 10 day forecast for Wellington&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.swellmap.co.nz/&#34;&gt;Swellmap - Surf Forecast Conditions and Marine Weather&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.windy.com/-41.332/174.793?-41.362,174.839,11,m:cwhak0u&#34;&gt;Windy - Interactive wind forecast maps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;tides&#34;&gt;Tides&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tideschart.com/New-Zealand/Wellington/Wellington-City/Wellington/&#34;&gt;Tideschart - Wellington&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;maps&#34;&gt;Maps&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.cawthron.org.nz/apps/cawthroneye/&#34;&gt;Cawthron Eye - Satellite view&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://data.linz.govt.nz/layer/1305-chart-nz-4633-wellington-harbour/&#34;&gt;LINZ - Hydrographic raster chart&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;water-quality&#34;&gt;Water Quality&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.mpi.govt.nz/travel-and-recreation/fishing/shellfish-biotoxin-alerts/&#34;&gt;Shellfish Biotoxin Alerts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lawa.org.nz/explore-data/wellington-region/swimming/breaker-bay/swimsite&#34;&gt;Wellington Water Quality&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: Application Services</title>
      <link>https://mattbutton.com/2017/10/21/aws-solution-architect-associate-exam-study-notes-application-services/</link>
      <pubDate>Sat, 21 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/21/aws-solution-architect-associate-exam-study-notes-application-services/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: AWS Databases</title>
      <link>https://mattbutton.com/2017/10/16/aws-solution-architect-associate-exam-study-notes-aws-databases/</link>
      <pubDate>Mon, 16 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/16/aws-solution-architect-associate-exam-study-notes-aws-databases/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: Route 53</title>
      <link>https://mattbutton.com/2017/10/15/aws-solution-architect-associate-exam-study-notes-route-53/</link>
      <pubDate>Sun, 15 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/15/aws-solution-architect-associate-exam-study-notes-route-53/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: EC2 (Elastic Compute Cloud), and Lambda</title>
      <link>https://mattbutton.com/2017/10/12/aws-solution-architect-associate-exam-study-notes-ec2-elastic-compute-cloud-and-lambda/</link>
      <pubDate>Thu, 12 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/12/aws-solution-architect-associate-exam-study-notes-ec2-elastic-compute-cloud-and-lambda/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: VPC (Virtual Private Cloud)</title>
      <link>https://mattbutton.com/2017/10/10/aws-solution-architect-associate-exam-study-notes-vpc-virtual-private-cloud/</link>
      <pubDate>Tue, 10 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/10/aws-solution-architect-associate-exam-study-notes-vpc-virtual-private-cloud/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: S3 (Simple Storage Service), CloudFront and Storage Gateway</title>
      <link>https://mattbutton.com/2017/10/08/aws-solution-architect-associate-exam-study-notes-s3-simple-storage-service-cloudfront-and-storage-gateway/</link>
      <pubDate>Sun, 08 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/2017/10/08/aws-solution-architect-associate-exam-study-notes-s3-simple-storage-service-cloudfront-and-storage-gateway/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: IAM (Identity and Access Management)</title>
      <link>https://mattbutton.com/2017/10/02/aws-solution-architect-associate-exam-study-notes-iam-identity-and-access-management/</link>
      <pubDate>Mon, 02 Oct 2017 21:32:17 +1200</pubDate>
      <guid>https://mattbutton.com/2017/10/02/aws-solution-architect-associate-exam-study-notes-iam-identity-and-access-management/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS Solution Architect Associate Exam Study Notes: 10,000 Foot Overview</title>
      <link>https://mattbutton.com/2017/09/24/aws-solution-architect-associate-exam-study-notes-10000-foot-overview/</link>
      <pubDate>Sun, 24 Sep 2017 21:32:17 +1200</pubDate>
      <guid>https://mattbutton.com/2017/09/24/aws-solution-architect-associate-exam-study-notes-10000-foot-overview/</guid>
      <description>&lt;p&gt;These notes were written while working through the &lt;a href=&#34;https://acloud.guru/learn/aws-certified-solutions-architect-associate&#34;&gt;A Cloud Guru AWS Certified Solutions Architect - Associate&lt;/a&gt; online course. These notes are partly from the videos, and also from various other online sources. Primarily, they&amp;rsquo;re notes for me, but you might find them useful too.&lt;/p&gt;&#xA;&lt;p&gt;Since the AWS platform is changing so quickly, it&amp;rsquo;s possible that some of these notes may be out of date, so please take that into consideration if you are reading them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting web.config defaultProxy with Powershell for debugging .NET web services</title>
      <link>https://mattbutton.com/2017/08/07/setting-web.config-defaultproxy-with-powershell-for-debugging-.net-web-services/</link>
      <pubDate>Mon, 07 Aug 2017 21:32:17 +1200</pubDate>
      <guid>https://mattbutton.com/2017/08/07/setting-web.config-defaultproxy-with-powershell-for-debugging-.net-web-services/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.telerik.com/fiddler&#34;&gt;Fiddler&lt;/a&gt; is an awesome tool for debugging web services. For the last 10 years, I&amp;rsquo;ve been using it virtually every working day for web service &lt;a href=&#34;https://en.wikipedia.org/wiki/Debugging&#34;&gt;debugging&lt;/a&gt; in scenarios such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Capturing HTTP requests as they travel through a distributed system, which you have set up on your local development machine.&lt;/li&gt;&#xA;&lt;li&gt;Intercepting and modifying HTTP requests, essentially performing a local &lt;a href=&#34;https://en.wikipedia.org/wiki/Man-in-the-middle_attack&#34;&gt;man-in-the-middle&lt;/a&gt; interception. This is particularly useful if want to modify HTTP requests to simulate functionality which isn&amp;rsquo;t currently present, modify HTTP headers, etc.&lt;/li&gt;&#xA;&lt;li&gt;Replaying captured requests - useful if you are debugging the way a web service behaves, given a specific request; capture the request, and replay it as many times as you need in order to debug the error.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re doing any work with web services, &lt;a href=&#34;http://www.telerik.com/fiddler&#34;&gt;Fiddler&lt;/a&gt; is definitly worth considering. &lt;a href=&#34;http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureFiddler&#34;&gt;Setting it up is fairly straightfoward&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By default, Fiddler can update your browser proxy to route through the Fiddler proxy, which is, &lt;a href=&#34;http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureBrowsers&#34;&gt;by default on port 8888&lt;/a&gt;, and will capture requests between Chrome/Firefox/Safari/etc, and your web app.&lt;/p&gt;&#xA;&lt;p&gt;What if you&amp;rsquo;re debugging locally, and want to intercept .NET services which call other web services? i.e. Web Browser -&amp;gt; Web App -&amp;gt; Service1 -&amp;gt; Service2 (the one you want to debug)? This can be done by setting defaultProxy in &lt;a href=&#34;https://msdn.microsoft.com/en-us/library/aa306178.aspx&#34;&gt;web.config&lt;/a&gt;. In this case, since we want to debug Service2, we&amp;rsquo;d set defaultProxy in Service2&amp;rsquo;s web.config file.&lt;/p&gt;&#xA;&lt;p&gt;i.e.&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: xml&#34;&gt;&#xA;&amp;lt;configuration&amp;gt;&#xA; &amp;lt;system.net&amp;gt;&#xA;  &amp;lt;defaultProxy&amp;gt;&#xA;   &amp;lt;proxy bypassonlocal=&amp;quot;false&amp;quot; usesystemdefault=&amp;quot;true&amp;quot; /&amp;gt;&#xA;  &amp;lt;/defaultProxy&amp;gt;&#xA; &amp;lt;/system.net&amp;gt;&#xA;&amp;lt;/configuration&amp;gt;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;With one of the distributed apps I frequently work with, I was setting, and resetting the web.config defaultProxy fairly frequently. To save some effort, I wrote a script to automate the change.&lt;/p&gt;</description>
    </item>
    <item>
      <title>dotnet new causing segmentation fault on Debian Linux</title>
      <link>https://mattbutton.com/2017/07/10/dotnet-new-causing-segmentation-fault-on-debian-linux/</link>
      <pubDate>Mon, 10 Jul 2017 22:16:01 +1200</pubDate>
      <guid>https://mattbutton.com/2017/07/10/dotnet-new-causing-segmentation-fault-on-debian-linux/</guid>
      <description>&lt;p&gt;Earlier this evening I installed &lt;a href=&#34;https://www.microsoft.com/net/core/preview#linuxdebian&#34;&gt;.NET core preview 2&lt;/a&gt; on &lt;a href=&#34;https://www.debian.org/releases/sid/&#34;&gt;Debian Sid&lt;/a&gt;, and tried to create a new project via the &lt;a href=&#34;https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-new&#34;&gt;dotnet new&lt;/a&gt; command, only to get a &lt;a href=&#34;https://en.wikipedia.org/wiki/Segmentation_fault&#34;&gt;segmention fault&lt;/a&gt; error message:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush:bash&#34;&gt;&#xA;matt@IDSiG:~/git/testproject$ dotnet new console&#xA;Segmentation fault&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;In this instance, the segmentation fault on creation of a new project was is due to &lt;a href=&#34;https://github.com/dotnet/core/issues/649#issuecomment-301110547&#34;&gt;.NET Core telemetry being incompatible with version 1.1 of OpenSSL&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a method that takes an integer, and returns it&#39;s factorial</title>
      <link>https://mattbutton.com/2017/05/20/writing-a-method-that-takes-an-integer-and-returns-its-factorial/</link>
      <pubDate>Sat, 20 May 2017 18:20:06 +1200</pubDate>
      <guid>https://mattbutton.com/2017/05/20/writing-a-method-that-takes-an-integer-and-returns-its-factorial/</guid>
      <description>&lt;p&gt;Sometimes, when being interviewed for a job as a software developer, you&amp;rsquo;ll be asked a question such as &amp;ldquo;write a method that takes an integer as a parameter, and returns it&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Factorial&#34;&gt;factorial&lt;/a&gt;.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;For example, the factorial of 3 is represented as &amp;ldquo;3!&amp;rdquo;, which is calculated via 3&lt;em&gt;2&lt;/em&gt;1, which equals 6. 4! is 4&lt;em&gt;3&lt;/em&gt;2*1, which is 24, etc.&lt;/p&gt;&#xA;&lt;p&gt;Putting aside whether these kinds of questions should be asked in an interview, if they&amp;rsquo;re asking you this, there&amp;rsquo;s a fairly high likelihood they&amp;rsquo;re asking for you to show that you understand recursion. If that&amp;rsquo;s the case, no problem, something like this will calculate the factorial:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fsharp&#34; data-lang=&#34;fsharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;rec&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;factorial&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;match&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;12&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;factorial&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failwith&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Parameter n is out of the supported range. Must be between 0 and 12.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This can be run in the F# interactive shell via:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fsharp&#34; data-lang=&#34;fsharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;factorial&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;But what if they want to find out whether you:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Understand recursion, and&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;Know when you can avoid recursion, and just write simple methods instead.&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>CloudFlare S3 Website Error: 502 - Bad Gateway</title>
      <link>https://mattbutton.com/2017/04/29/cloudflare-s3-website-error-502-bad-gateway/</link>
      <pubDate>Sat, 29 Apr 2017 20:39:33 +0000</pubDate>
      <guid>https://mattbutton.com/2017/04/29/cloudflare-s3-website-error-502-bad-gateway/</guid>
      <description>&lt;p&gt;I recently migrated my mattbutton.com blog away from Wordpress hosting in favor of a static site generated by Hugo, hosted on Amazon S3.&lt;/p&gt;&#xA;&lt;p&gt;Initially, I hosted the static site via Aerobatic.io, who recently removed their free tier, and started &lt;a href=&#34;https://www.aerobatic.com/#pricing&#34;&gt;charging $15 per month&lt;/a&gt; for hosting with a custom domain.. 50% more than the $10 per month I was previously paying for Hostgator Wordpress hosting. Unless I have certain specific requirements, I can&amp;rsquo;t justfy that kind of cost to host a static site.&lt;/p&gt;&#xA;&lt;p&gt;Aerobatic.io are using &lt;a href=&#34;https://aws.amazon.com/s3/&#34;&gt;Amazon S3&lt;/a&gt; and &lt;a href=&#34;https://aws.amazon.com/cloudfront/&#34;&gt;Amazon CloudFront&lt;/a&gt; behind the scenes, so I decided to cut out the middle-man, set it up myself, and save nearly $15 per month.&lt;/p&gt;&#xA;&lt;p&gt;Setting up the S3 bucket to host my site was fine. For the CDN/SSL side of things I initially tried using CloudFront because most of the &lt;a href=&#34;https://lustforge.com/2016/02/27/hosting-hugo-on-aws/&#34;&gt;AWS Hugo Hosting, HowTo&lt;/a&gt; guides were using it.&lt;/p&gt;&#xA;&lt;p&gt;When trying to set up CloudFront via my personal AWS account, I got an error saying a distribution already exists for mattbutton.com. The reason for this error is because Aerobatic.io had already created a CloudFront distribution pointing to their own S3 bucket. CloudFront isn&amp;rsquo;t an option for me until Aerobatic.io delete their mattbutton.com CloudFront distribution.&lt;/p&gt;&#xA;&lt;p&gt;I still wanted to use SSL, and had decided on setting up mattbutton.com with it mainly out of interest, partly because &lt;a href=&#34;https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html&#34;&gt;Google uses HTTPS as a ranking signal&lt;/a&gt;, and partly because &lt;a href=&#34;https://developers.google.com/web/updates/2016/10/avoid-not-secure-warn&#34;&gt;Chrome will eventually show a Not Secure warning for all pages served over HTTP&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since AWS CloudFront wasn&amp;rsquo;t an option, I decided on using the &lt;a href=&#34;https://www.cloudflare.com/plans/&#34;&gt;CloudFlare free plan&lt;/a&gt; for SSL and CDN. Everything went well, until I encountered a &lt;a href=&#34;https://support.cloudflare.com/hc/en-us/articles/218378978-What-should-I-do-after-seeing-a-502-or-504-gateway-error-on-my-site-&#34;&gt;CloudFlare 502 Bad Gateway error page&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2017/cloudflare-502.png&#34; alt=&#34;Cloudflare 502 Bad Gateway&#34; class=&#34;img-fluid&#34; /&gt;&#xA;&lt;p&gt;I wasn&amp;rsquo;t having any luck &lt;a href=&#34;https://www.google.com/search?q=cloudflare+s3+502+bad+gateway&#34;&gt;searching for a solution to this error for this particular error&lt;/a&gt;. Fortunately, there&amp;rsquo;s a simple fix, if you know what you&amp;rsquo;re looking for, and you&amp;rsquo;re happy with the trade-offs involved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toastmasters Role Templates</title>
      <link>https://mattbutton.com/2017/02/25/toastmasters-role-templates/</link>
      <pubDate>Sat, 25 Feb 2017 15:15:04 +0000</pubDate>
      <guid>https://mattbutton.com/2017/02/25/toastmasters-role-templates/</guid>
      <description>&lt;p&gt;I joined a Toastmasters public speaking club back in November 2016. There are lots of resources out there, I found they were fragemented, and none really resonated my personal style of speaking, especially for the club I&amp;rsquo;m in, which adheres to the Toastmasters structure and rules, yet has a much more natural speaking than other clubs I&amp;rsquo;ve visited.&lt;/p&gt;&#xA;&lt;p&gt;After performing each of the roles several times (Chair, Grammarian, Table Topics Master, etc) I found it useful to build up, and revise templates as my skill and personal style evolved. Below are my current templates, which I will update over time:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.google.com/document/d/1YL50Mnn4wFR7hGRZEDvwTIXk1jgAqy-gZo5twhbe_-A/edit?usp=sharing&#34;&gt;Toastmasters Grammarian Template&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Who is Matt Button and what is this site about?</title>
      <link>https://mattbutton.com/about/</link>
      <pubDate>Sun, 01 Jan 2017 04:37:23 +0000</pubDate>
      <guid>https://mattbutton.com/about/</guid>
      <description>&lt;p&gt;Hi, I&amp;rsquo;m Matt Button. I write this blog, work as a Lead Engineer at a financial technology company in &lt;a href=&#34;https://en.wikipedia.org/wiki/Wellington&#34;&gt;Wellington, New Zealand&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I enjoy working closely with designers, product managers, architects, principal engineers, and the development team to deliver features and functionality that customers love.&lt;/p&gt;&#xA;&lt;p&gt;From a technical perspective, I have over 15 years of commercial C# .NET developer experience, and a broad range of experience in a variety of other technologies and frameworks including ASP.NET MVC, .NET Core, React, Redux, Typescript, Javascript, Microsoft SQL Server, Docker, AWS, Linq to SQL, NHibernate, Python, HTML and CSS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Searching for Whale Sharks in Koh Tao, Thailand</title>
      <link>https://mattbutton.com/2016/11/02/searching-for-whale-sharks-in-koh-tao-thailand/</link>
      <pubDate>Wed, 02 Nov 2016 15:15:04 +0000</pubDate>
      <guid>https://mattbutton.com/2016/11/02/searching-for-whale-sharks-in-koh-tao-thailand/</guid>
      <description>&lt;p&gt;I spent two weeks in late August on the island of &lt;a href=&#34;https://en.wikipedia.org/wiki/Ko_Tao&#34;&gt;Koh Tao&lt;/a&gt;, which is located in the eastern Gulf of Thailand.&lt;/p&gt;&#xA;&lt;p&gt;The weather was perfect. Every day, I&amp;rsquo;d head out on the boat to go scuba diving at various dive sites around the island. I&amp;rsquo;d been a qualified diver for several months prior, so no training was needed, and I signed up for the fun dives, where we would be taken on underwater tours by a guide called a dive master.&lt;/p&gt;&#xA;&lt;p&gt;I was planning on diving virtually every day around the beautiful island of Koh Tao. In particular, I was hoping to see some big sea creatures such as the &lt;a href=&#34;https://en.wikipedia.org/wiki/Whale_shark&#34;&gt;Whale Shark&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now I should give some context. Some of you might hear the word &amp;ldquo;shark&amp;rdquo; and think of danger, or perhaps a film such as &lt;a href=&#34;http://www.imdb.com/title/tt0073195/&#34;&gt;Jaws&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A whale shark, while being huge at up to 14m long and 21 tonne, is nothing like the kinds of sharks that you might see on the Discovery Channel&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Shark_Week&#34;&gt;Shark Week&lt;/a&gt;. Instead, a whale shark has no teeth, and is a gentle, slow-moving, &lt;a href=&#34;https://en.wikipedia.org/wiki/Filter_feeder&#34;&gt;filter-feeding&lt;/a&gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Carpet_shark&#34;&gt;carpet shark&lt;/a&gt;, feeding only on &lt;a href=&#34;https://en.wikipedia.org/wiki/Plankton&#34;&gt;plankton&lt;/a&gt; (not on humans!!)&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/2016/whaleshark-scuba-0.jpg&#34; alt=&#34;What does a whale shark look like?&#34; class=&#34;img-fluid&#34; /&gt;</description>
    </item>
    <item>
      <title>Where I say goodbye to New Zealand, hello to Japan, and hello to Pocari Sweat</title>
      <link>https://mattbutton.com/2016/10/15/where-i-say-goodbye-to-new-zealand-hello-to-japan-and-hello-to-pocari-sweat/</link>
      <pubDate>Sat, 15 Oct 2016 12:11:04 +0000</pubDate>
      <guid>https://mattbutton.com/2016/10/15/where-i-say-goodbye-to-new-zealand-hello-to-japan-and-hello-to-pocari-sweat/</guid>
      <description>&lt;p&gt;I flew out of Wellington on 20th of July, 2016, in the middle of a bitter winter, for a two week adventure around Japan (Tokyo -&amp;gt; Takayama -&amp;gt; Kanazawa -&amp;gt; Hiroshima -&amp;gt; Kyoto), followed by four weeks in Thailand (Bangkok -&amp;gt; Chiang Mai -&amp;gt; Koh Phangan -&amp;gt; Koh Tao).&lt;/p&gt;&#xA;&lt;p&gt;This was the longest trip I&amp;rsquo;ve been on as an adult, and was also my first time solo traveling outside of New Zealand.&lt;/p&gt;&#xA;&lt;p&gt;I departed from Wellington, New Zealand, destined for Tokyo, Japan, on the plane you see below. In Wellington, it was on a freezing cold, dark, overcast winter day. In Tokyo, it was a hot summer day. There&amp;rsquo;s something awesome, and wonderful, about boarding a plane in winter, and 10 hours later, departing the same plane, to arrive in summer.&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/japan/goodbye-wellington-winter.jpg&#34; alt=&#34;Goodbye Wellington&#34; class=&#34;img-fluid&#34; /&gt;</description>
    </item>
    <item>
      <title>Traveling light on a six week trip around Japan and Thailand, in 2016</title>
      <link>https://mattbutton.com/2016/10/01/traveling-light-on-a-six-week-trip-around-japan-and-thailand-in-2016/</link>
      <pubDate>Sat, 01 Oct 2016 12:11:04 +0000</pubDate>
      <guid>https://mattbutton.com/2016/10/01/traveling-light-on-a-six-week-trip-around-japan-and-thailand-in-2016/</guid>
      <description>&lt;p&gt;Whenever I travel, I keep my luggage as light as possible, traveling with carry-on only; everything fits inside a 38 litre backpack, usually with room to spare, and this trip was no exception.&lt;/p&gt;&#xA;&lt;p&gt;My entire set of luggage, for my 2016, six week trip around Japan and Thailand, weighed about 6kg (14lb). During my trip, I picked up a few more things, which pushed the total weight up to about 7kg, which was still within the carry-on weight allowance.&lt;/p&gt;&#xA;&lt;p&gt;I travel light because I think it&amp;rsquo;s by far, the easiest, simplest way to travel; no checked-in luggage, means no lost luggage, no awkwardness with connecting flights (just grab my bag out of the overhad locker, and I&amp;rsquo;m ready to walk to the connecting flight), no need to wait for the baggage carousel, no dragging around multiple suitcases, easy to get on the bus or train.&lt;/p&gt;&#xA;&lt;p&gt;Below is a photo all of my luggage, in the &amp;ldquo;capsule&amp;rdquo; room, where I slept in Asakusa, Tokyo.&lt;/p&gt;&#xA;&lt;img src=&#34;https://mattbutton.com/images/japan/enaka-capsule.jpg&#34; alt=&#34;Enaka Asakusa hostel capsule room - and all my stuff!&#34; class=&#34;img-fluid&#34; /&gt;</description>
    </item>
    <item>
      <title>Creating comparison charts for stocks with FSharp Charting, Deedle and Yahoo Finance</title>
      <link>https://mattbutton.com/2014/06/29/creating-comparison-charts-for-stocks-with-fsharp-charting-deedle-and-yahoo-finance/</link>
      <pubDate>Sun, 29 Jun 2014 04:52:30 +0000</pubDate>
      <guid>https://mattbutton.com/2014/06/29/creating-comparison-charts-for-stocks-with-fsharp-charting-deedle-and-yahoo-finance/</guid>
      <description>&lt;p&gt;When you want to visualize how a stock or portfolio has performed historically relative to the market as a whole, it is useful to create a comparison chart.&lt;/p&gt;&#xA;&lt;p&gt;This blog shows how to create a line chart to compare two stocks with &lt;a href=&#34;http://bluemountaincapital.github.io/Deedle/&#34;&gt;Deedle&lt;/a&gt;, &lt;a href=&#34;http://fsharp.github.io/FSharp.Charting/&#34;&gt;FSharp Charting&lt;/a&gt; and &lt;a href=&#34;http://fsharp.github.io/FSharp.Data/&#34;&gt;F# Data&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this example, the chart will show the perfomance of &lt;a href=&#34;https://au.finance.yahoo.com/q?s=ANZ.AX&#34; title=&#34;ANZ.AX&#34;&gt;ANZ.AX&lt;/a&gt; relative to the ASX ALL ORDINARIES index (&lt;a href=&#34;https://au.finance.yahoo.com/q?s=%5EAORD&#34; title=&#34;ANZ.AX&#34;&gt;^AORD&lt;/a&gt;) over a three year period from 2011-1-1 to 2014-1-1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Basic Stock Trading Backtesting System for F# using Ta-Lib and FSharp.Data</title>
      <link>https://mattbutton.com/2014/03/09/a-basic-stock-trading-backtesting-system-for-fsharp-using-ta-lib-and-fsharp-data/</link>
      <pubDate>Sat, 08 Mar 2014 23:23:07 +0000</pubDate>
      <guid>https://mattbutton.com/2014/03/09/a-basic-stock-trading-backtesting-system-for-fsharp-using-ta-lib-and-fsharp-data/</guid>
      <description>&lt;p&gt;This article is written for the intermediate F# audience who has a basic familiarity of stock trading and technical analysis, and is intended to show the basics of implementing a backtesting system in F#.&lt;/p&gt;&#xA;&lt;p&gt;If you’re an F# beginner it may not take too long for you to get up to speed on the concepts if you check out a few resources. In particular:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.tryfsharp.org/Learn&#34;&gt;Try F#&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&#34;http://fsharp.github.io/FSharp.Data/library/CsvProvider.html&#34;&gt;CSV Type Provider&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://blogs.msdn.com/b/chrsmith/archive/2008/07/10/mastering-f-lists.aspx&#34;&gt;Mastering F# Lists&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;and &lt;a href=&#34;http://en.wikibooks.org/wiki/F_Sharp_Programming/Recursion&#34;&gt;Wikibooks F Sharp Programming/Recursion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The backtesting strategy which you will implement is a simple &lt;a href=&#34;http://www.investopedia.com/university/movingaverage/movingaverages4.asp&#34;&gt;SMA crossover&lt;/a&gt; where the fast line is 10 &lt;a href=&#34;http://www.investopedia.com/terms/b/bar.asp&#34;&gt;bars&lt;/a&gt; and the slow one 25. When the fast line crosses above the slow line, a buy signal will be triggered, and when the fast line cross below the slow line, a sell signal will be triggered. Only one &lt;a href=&#34;http://www.investopedia.com/terms/l/long.asp&#34;&gt;long position&lt;/a&gt; will exist at any time, so the system will not trigger another buy order until after the long position is sold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NullReferenceException when model binding strings after upgrading from ASP.NET MVC 1 to ASP.NET MVC 2</title>
      <link>https://mattbutton.com/2013/03/18/nullreferenceexception-when-model-binding-strings-after-upgrading-from-mvc1-to-mvc/</link>
      <pubDate>Mon, 18 Mar 2013 08:00:48 +0000</pubDate>
      <guid>https://mattbutton.com/2013/03/18/nullreferenceexception-when-model-binding-strings-after-upgrading-from-mvc1-to-mvc/</guid>
      <description>&lt;p&gt;When migrating a site from ASP.NET MVC 1 to ASP.NET MVC 2, you can generally follow the instructions in &lt;a href=&#34;http://www.asp.net/whitepapers/what-is-new-in-aspnet-mvc#_TOC2&#34; title=&#34;http://www.asp.net/whitepapers/what-is-new-in-aspnet-mvc#_TOC2&#34;&gt;http://www.asp.net/whitepapers/what-is-new-in-aspnet-mvc#_TOC2&lt;/a&gt;, taking note of any &lt;a href=&#34;http://www.asp.net/whitepapers/what-is-new-in-aspnet-mvc#_TOC5&#34; title=&#34;breaking changes&#34;&gt;breaking changes&lt;/a&gt;. This will take you most of the way there, however there are a few undocumented issues which you may uncover if you’re migrating a site with a substantial amount of code.&lt;/p&gt;&#xA;&lt;p&gt;By default, the ASP.NET MVC 1 model binder would initialize strings to string.Empty whereas ASP.NET MVC 2 will initialize strings as NULL. This is an undocumented breaking change and will be a problem if you have a substantial amount of code relying on the original behavior – code that was previously working in production will start throwing NullReferenceException.&lt;/p&gt;&#xA;&lt;p&gt;To preserve the original MVC 1 model binder behaviour, consider creating default model binder such as the following:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET MVC - issues with binding a non-sequential list with the default model binder</title>
      <link>https://mattbutton.com/2013/03/02/asp-net-mvc-issues-withbinding-a-non-sequential-list-with-the-default-model-binde/</link>
      <pubDate>Sat, 02 Mar 2013 05:59:41 +0000</pubDate>
      <guid>https://mattbutton.com/2013/03/02/asp-net-mvc-issues-withbinding-a-non-sequential-list-with-the-default-model-binde/</guid>
      <description>&lt;p&gt;For the ASP.NET MVC default model binder to bind a list successfully, the list must be sequential with unbroken indices.&lt;/p&gt;&#xA;&lt;p&gt;For the following examples, the server side model will be&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: csharp; title: ; notranslate&#34; title=&#34;&#34;&gt;&lt;code class=&#34;language-csharp&#34;&gt;public class ItemsModel &#xA;{&#xA;    public IList&amp;lt;string&amp;gt; Items { get; set; }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Non-sequential form submits when using indexes which don’t start from zero i.e. Item[2], Item[3], etc will result in incomplete form data being loaded by the model binder.&lt;/p&gt;&#xA;&lt;p&gt;The following will not bind, and will result in the model being NULL:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: xml; title: ; notranslate&#34; title=&#34;&#34;&gt;&lt;code class=&#34;language-csharp&#34;&gt;&amp;lt;input type=&#34;text&#34; name=&#34;Item[1].Name&#34; value=&#34;Item1&#34; /&amp;gt;&#xA;&amp;lt;input type=&#34;text&#34; name=&#34;Item[3].Name&#34; value=&#34;Item2&#34; /&amp;gt;&#xA;&amp;lt;input type=&#34;text&#34; name=&#34;Item[4].Name&#34; value=&#34;Item3&#34; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Database version management and figuring out which scripts need to be run when deploying the latest version of your web app</title>
      <link>https://mattbutton.com/2013/01/05/database-version-management-and-figuring-out-which-scripts-need-to-be-run-when-deploying-the-latest-version-of-your-web-app/</link>
      <pubDate>Sat, 05 Jan 2013 07:23:58 +0000</pubDate>
      <guid>https://mattbutton.com/2013/01/05/database-version-management-and-figuring-out-which-scripts-need-to-be-run-when-deploying-the-latest-version-of-your-web-app/</guid>
      <description>&lt;p&gt;When you are maintaining multiple web apps across environments it can be difficult to keep track of which scripts need to be run to upgrade the database when it comes time to deploy. If you’re maintaining different versions of web apps across environments when the versions can sometimes be significantly out of sync, the difficulty of determining which update scripts need to be run on deployment can explode.&lt;/p&gt;&#xA;&lt;p&gt;While there are a ton of approaches to &lt;a href=&#34;http://www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html&#34; title=&#34;keeping your database under version control&#34;&gt;keeping your database under version control&lt;/a&gt;, if you want something simple and effective that you can implement with minimal time and effort, consider a DatabaseVersionHistory table in your database.&lt;/p&gt;&#xA;&lt;p&gt;A database version history table will allow you to see at a glance the state the database is in and by comparing it with the update scripts in source control, you will quickly be able to determine which update scripts need to be run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A JIRA issue tracking FAQ for a small team</title>
      <link>https://mattbutton.com/2012/10/25/a-jira-issue-tracking-faq-for-a-small-team/</link>
      <pubDate>Thu, 25 Oct 2012 08:25:24 +0000</pubDate>
      <guid>https://mattbutton.com/2012/10/25/a-jira-issue-tracking-faq-for-a-small-team/</guid>
      <description>&lt;div&gt;&#xA;  &lt;p&gt;&#xA;    This post is intended as a living document that will evolve and grow over time. If there&amp;#8217;s something you think I missed or would like something clarified, please feel free to leave a comment.&#xA;  &lt;/p&gt;&#xA;  &lt;div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;h3&gt;&#xA;    Who should be reading this FAQ?&#xA;  &lt;/h3&gt;&#xA;  &lt;p&gt;&#xA;    Managers, developers, testers, anybody working or contributing on a software project.&#xA;  &lt;/p&gt;&#xA;  &lt;p&gt;&#xA;    This article is generally &lt;a title=&#34;JIRA&#34; href=&#34;http://www.atlassian.com/software/jira/overview/&#34;&gt;JIRA&lt;/a&gt; specific, however concepts will carry across into other issue trackers such as &lt;a href=&#34;http://www.bugzilla.org/&#34;&gt;Bugzilla&lt;/a&gt;, &lt;a href=&#34;http://www.redmine.org/&#34;&gt;Redmine&lt;/a&gt;, &lt;a href=&#34;http://msdn.microsoft.com/en-us/vstudio/ff637362.aspx&#34;&gt;Team Foundation Server (TFS)&lt;/a&gt; and &lt;a href=&#34;http://trac.edgewall.org/&#34;&gt;Trac&lt;/a&gt; just fine.&#xA;  &lt;/p&gt;&#xA;  &lt;h3&gt;&#xA;    When should a small team be using an issue tracker such as JIRA?&#xA;  &lt;/h3&gt;&#xA;  &lt;p&gt;&#xA;    A young startup may initially get away just fine by working informally and by email, and early in the project you&amp;#8217;ll want to have as little administrative burden as possible, however as a project and team matures, there will come a time when having a searchable, persistent audit history of business decisions, fixes (and why they were done) and completed tasks will become invaluable.&#xA;  &lt;/p&gt;</description>
    </item>
    <item>
      <title>The Visual Studio 2012 Open File Dialog Doesn&#39;t Work</title>
      <link>https://mattbutton.com/2012/09/26/the-visual-studio-2012-open-file-dialog-doesnt-work/</link>
      <pubDate>Wed, 26 Sep 2012 05:41:58 +0000</pubDate>
      <guid>https://mattbutton.com/2012/09/26/the-visual-studio-2012-open-file-dialog-doesnt-work/</guid>
      <description>&lt;p&gt;After installing Visual Studio 2012, I found that the open file dialog wasn’t being displayed. I could open projects via Windows explorer, via the recent projects menu, compile, run etc, however neither &lt;strong&gt;Open Project&lt;/strong&gt; or the &lt;strong&gt;File-&amp;gt;Open-&amp;gt;Project/Solution&lt;/strong&gt; were working.&lt;/p&gt;&#xA;&lt;p&gt;What was strange about this is that other dialogs such as &lt;strong&gt;New Project&lt;/strong&gt; were working fine.&lt;/p&gt;&#xA;&lt;p&gt;After much searching and testing, enabling the &lt;strong&gt;Tablet PC Input Service&lt;/strong&gt; fixed the issue. This does not make much sense since I’m not using a tablet pc, however it works for me and may work for you.&lt;/p&gt;&#xA;&lt;p&gt;To enable the service:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Mercurial with a SVN repository in a production environment without any drama</title>
      <link>https://mattbutton.com/2012/04/05/using-mercurial-with-a-svn-repository-in-a-production-environment-without-any-drama/</link>
      <pubDate>Thu, 05 Apr 2012 04:17:57 +0000</pubDate>
      <guid>https://mattbutton.com/2012/04/05/using-mercurial-with-a-svn-repository-in-a-production-environment-without-any-drama/</guid>
      <description>&lt;h3 id=&#34;why-would-i-want-to-use-mercurial-or-any-other-dvcs-client-with-a-subversion-repository&#34;&gt;Why would I want to use Mercurial or any other DVCS client with a Subversion repository?&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It lets us keep SVN as our central repository&lt;/li&gt;&#xA;&lt;li&gt;Some team members prefer not to use a DVCS for whatever reason so it lets them carry on using SVN without interruption.&lt;/li&gt;&#xA;&lt;li&gt;It allows me to work and commit changes (but not push!), search history and switch between branches completely disconnected. I can continue to work during network outages or while traveling when I don&amp;rsquo;t have connectivity.&lt;/li&gt;&#xA;&lt;li&gt;You get full, fast history search.&lt;/li&gt;&#xA;&lt;li&gt;Switching between branches is easy and fast.&lt;/li&gt;&#xA;&lt;li&gt;Any automated processes which use SVN (i.e. automated builds and deployments) can continue to operate while everyone moves to DVCS.&lt;/li&gt;&#xA;&lt;li&gt;It’s much easier to perform merges than regular SVN (via export/import patch queues – which I detail later)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>SQL Profiler templates missing</title>
      <link>https://mattbutton.com/2011/06/01/sql-profiler-templates-missing/</link>
      <pubDate>Wed, 01 Jun 2011 09:06:55 +0000</pubDate>
      <guid>https://mattbutton.com/2011/06/01/sql-profiler-templates-missing/</guid>
      <description>&lt;p&gt;If you are connecting to a SQL server with the SQL profiler and none of your templates are showing up, compare the versions of the SQL profiler you are running and the version of SQL server that you’re connecting to; there is likely a version mismatch.&lt;/p&gt;&#xA;&lt;p&gt;If this is the case, what’s likely happening here is that you’re connecting to a SQL 10.50 instance with a SQL 10.0 profiler and the profile templates for 10.50 aren’t present.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loading jQuery via HTTP or HTTPS depending on the request protocol without document.write</title>
      <link>https://mattbutton.com/2011/05/20/loading-jquery-via-http-or-https-depending-on-the-request-protocol-without-document-write/</link>
      <pubDate>Fri, 20 May 2011 08:49:36 +0000</pubDate>
      <guid>https://mattbutton.com/2011/05/20/loading-jquery-via-http-or-https-depending-on-the-request-protocol-without-document-write/</guid>
      <description>&lt;p&gt;When running a page with HTTPS, you’ll want to also load any external resources such as javascript via HTTPS. A lot of people recommend loading jQuery from the Google CDN via the following javascript script:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: jscript; title: ; notranslate&#34; title=&#34;&#34;&gt;&amp;lt;script type=&#34;text/javascript&#34;&amp;gt;&#xA;    var gaJsHost = ((&#34;https:&#34; == document.location.protocol) ? &#34;https://&#34; : &#34;http://&#34;);&#xA;    document.write(unescape(&#34;%3Cscript src=&#39;&#34; + gaJsHost + &#34;ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&#34;));&#xA;    document.write(unescape(&#34;%3Cscript src=&#39;&#34; + gaJsHost + &#34;ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&#34;));&#xA;    document.write(unescape(&#34;%3Cscript src=&#39;&#34; + gaJsHost + &#34;ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js&#39; type=&#39;text/javascript&#39;%3E%3C/script%3E&#34;));       &#xA;&amp;lt;/script&amp;gt;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;This works just fine, however you can let the browser select the protocol depending on the request by the following snippet:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to include the Fluent NHibernate discriminator column in a composite key</title>
      <link>https://mattbutton.com/2011/02/10/how-to-include-the-fluent-nhibernate-discriminator-column-in-a-composite-key/</link>
      <pubDate>Wed, 09 Feb 2011 12:22:25 +0000</pubDate>
      <guid>https://mattbutton.com/2011/02/10/how-to-include-the-fluent-nhibernate-discriminator-column-in-a-composite-key/</guid>
      <description>&lt;p&gt;In our project, we’re sub classing multiple domain classes from a single Reference Data table – i.e. Volume and Weight types. Among other things, the reference data table contains discriminator, code and value columns. The ‘discriminator’ column stores the name of the class and is used by Fluent NHibernate to determine which subclass to instantiate, the ‘value’ column is the full name of the reference data item, and the ‘code’ column is the abbreviated version of the value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET MVC - Multiple parameterised form submit buttons without Javascript</title>
      <link>https://mattbutton.com/2011/01/25/asp-net-mvc-multiple-parameterised-form-submit-buttons-without-javascript/</link>
      <pubDate>Mon, 24 Jan 2011 12:44:20 +0000</pubDate>
      <guid>https://mattbutton.com/2011/01/25/asp-net-mvc-multiple-parameterised-form-submit-buttons-without-javascript/</guid>
      <description>&lt;p&gt;The current project I&amp;rsquo;m working on involves a search page with multiple submit buttons in a single HTML form. Each submit button triggers a different behavior while posting all of the form data to the controller.&lt;/p&gt;&#xA;&lt;p&gt;This method is compatible with both IE 6+ and Firefox. It also avoids the IE button bug where button values are not passed on HTTP POST.&lt;/p&gt;&#xA;&lt;p&gt;After discussing a few design options we decided to allow the user to add the desired search parameters via selecting them one by one from a drop down list. The user will commonly want up to three parameters at a time and may want to remove parameters after adding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Sketchables for Sketchflow</title>
      <link>https://mattbutton.com/2011/01/23/installing-sketchables-for-sketchflow/</link>
      <pubDate>Sat, 22 Jan 2011 13:18:17 +0000</pubDate>
      <guid>https://mattbutton.com/2011/01/23/installing-sketchables-for-sketchflow/</guid>
      <description>&lt;p&gt;We used to use Balsamiq for mockups, however Expression Blend 4 and Sketchflow has some compelling features.&lt;/p&gt;&#xA;&lt;p&gt;Sketchflow is missing a sketch style grid among other things, so we looked to Sketchables to provide.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitbucket - wrong user on commit</title>
      <link>https://mattbutton.com/2011/01/22/bitbucket-wrong-user-on-commit/</link>
      <pubDate>Fri, 21 Jan 2011 15:07:52 +0000</pubDate>
      <guid>https://mattbutton.com/2011/01/22/bitbucket-wrong-user-on-commit/</guid>
      <description>&lt;p&gt;I was having an issue where after pushing my changes to bitbucket, the changesets listed a different user as having pushed the files.&lt;/p&gt;&#xA;&lt;p&gt;For bitbucket, the commit username has to match your bitbucket username.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As commits in Mercurial are local, we have no way of controlling that you have set your username correctly. It is important for you to set this up in such a way that we can identify your user account on Bitbucket when you push your commits to us.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://mattbutton.com/archive/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/archive/</guid>
      <description></description>
    </item>
    <item>
      <title></title>
      <link>https://mattbutton.com/newfp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mattbutton.com/newfp/</guid>
      <description></description>
    </item>
  </channel>
</rss>
