Lunar Eclipse

Another year another lunar eclipse . I was visiting friends in Wanaka and we headed out to Lake Hawea to watch the eclipse. It was a clear frosty night which gave good views of the galactic core intersecting the horizon.

The Moon

The Moon

This year I was shooting with the Sony a7rii and 24-105mm f/4 lens. Not an ideal lens but the camera gives plenty of …


DevOps Practices for Continuous Deployment

Continuous Delivery is a way of working which ensures our code is always in a releasable state. It encourages us to commit small iterative changes to our codebase, ensuring we are delivering value quickly to our customers and the likelihood of change failures and subsequent re-work is low. From a technical point of view master branch is always releasable. Deployments are kicked off manually by clicking a button.

Continuous Deployment takes this a step further. As soon as code has been committed …


Web Analytics with Cloudfront and GoAccess

Here is yet another answer to the perennial question of who is accessing my website and what pages are they looking at? A long time ago this website ran Google Analytics but I got put off by the privacy impact it has on users. I’ve since switched to another client side tracking solution Goat Counter which doesn’t uniquely track users and is open source.

These client side tracking solutions both slow the website down for users, and completely exclude the ever-growing segment of Ad and …


ANZAC Day Sunrise

Blue Hour at Oriental Bay

Blue Hour at Oriental Bay

Golden Hour over Wellington Harbour.

Frame

Frame


Building a Crossword in F# - Part II

In the first post we built a basic crossword engine in F# using Fable, Feliz, and React. In this post we’ll refactor the code to make it more idiomatic F#.

Link to this section Data Types

First a recap on the data types which make up the crossword. The grid is made up of a list of list of cells, with the cells being Black or White. Black cells are blocked out spacers, whereas in White cells we must enter a guess.

type White = { …