Skip to content

Hi! 👋 I'm Joseph Duffy. I enjoy building software. This website contains information about my commercial software, open-source projects, and blog posts. Welcome to my corner of the internet!

★ My Favourites

Overamped

Overamped Icon

Overamped is a Safari Extension that redirects AMP and Yandex Turbo pages to their canonical versions, no matter how the page was opened.

Four Squares

Four Squares Icon

Four Squares is a game of memory, skill, and concentration available for iOS, iPadOS, and macOS. Watch what happens each turn and replay what you see.

Hosting DocC Archives


At WWDC21 Apple introduced DocC, a tool for creating archives of Swift documentation that includes the static files required to host a version of the documentation on a website.

In this post I will summarise various methods of serving a DocC archive:

  • Netlify
  • Vapor middleware
  • nginx
  • Apache

All the examples provided here are hosting the DocC archive for VaporDocC, the Vapor middleware I wrote for hosting DocC archives.

Keep Reading

HashableByKeyPath framework release 1.0.0


Today I have released the 1.0.0 version of a Swift package that aids with adding Equatable and Hashable conformance by using KeyPaths.

The package is available on GitHub.

I created the Swift Playground that sparked this concept in December 2018, so this concept has been rattling around in my brain for a couple of years. The API has changed a lot since the original concept, but the core has stayed the same: a protocol that requires a single function to be implemented that uses KeyPaths to synthesise Equatable and/or Hashable conformance.

Keep Reading

Recent Entries

Don't Use Scope Modifiers with Extensions


Extending types in Swift support setting the scope for the extension, i.e. public, internal, or private, with internal being implicit if nothing is specified.

This may seem useful, but given the following snippet it's impossible to know what the scope of a function is:

func doSomething() {
    // Do the thing
}
Keep Reading

Overamped version 1.1.0


Release Notes

A new option in the Settings allows for a notification to be posted whenever Overamped redirects an AMP or Yandex Turbo page in Safari.

A new screen has been added under Advanced Statistics that displays each event that has occurred and allows for the deletion of individual events.

The permissions model has been simplified. The "Other Websites" will now be the only option shown when first installing the extension.

Overamped 1.1.0 and the Year of Small


So far my Year of Small is going really well; as I write this I'm making some final changes and preparing to push out v1.1.0-RC.1, which I hope to submit the App Store in the next couple of days.

Overamped 1.1.0 is an update I first started working on almost 3 months ago, and it should've been released earlier.

My initial plan for 1.1.0 was to:

  • Add a screen showing recently logged events
  • Add an option to send a notification when the Web Extension redirects a link
  • Simplify the permissions model
  • Add widgets

Easy, right? Well, adding widgets is why this update has been so delayed.

Keep Reading

pastelghouls Available Again


pastelghouls is once again available for download on the App Store. It's a free sticker pack containing 6 ghoulish sticker. Originally released 19th October 2016, just in time for halloween, it was removed from the App Store December 7th 2019 due to not having an update for a substantial period of time.

As part of my year of small I wanted to make this available again, and at the same time setup fastlane to automate the screenshots and store the app metadata to make future updates easier.

pastelghouls was created by my friend Joshua Robins and published by my company Yetii Ltd.

The Year of Small


I've become accustomed to using yearly themes – rather than New Years resolution – thanks to CGP Grey, who has a very good summary of yearly themes.

It took me a while to home in on it but this year the title of my theme will be "Year of Small."

I'll be focusing on all things small:

  • Small people: spending time with and giving the best life to my now 9-month-old son.
  • Small home improvements: finally doing those small tasks and improvements, such as buying a bedside table and getting rid of things I no longer use.
  • Small work: I want to focus on releasing smaller updates for existing project, alongside a higher quantity of smaller projects that serve as proof of concepts and methods of learning new technology.
  • Small activities: small hobbies I can with my wife, such as new board games and outside activities.

At the end of the year I'll post a "year in review," although I hope to revisit this every 3 months to make sure I'm still focusing on the right things.

Anything related to this theme will be posted under the year-of-small tag.