Blog and Article Index

2024

November 2024

October 2024

Oct 26

Composition Over Inheritance in NSViews

I noticed that I’m writing some AppKit/UIKit view components in a composable way that reminds me of the opaque nature of SwiftUI.View-conforming types: hiding away the actual 1st party APIs, providing very little surface area.

September 2024

Sep 19

Checklists Appreciated Under Stress

Giving birth to a child includes managing stressed-out hospital staff, too. Checklists would’ve helped along the way at every turn. And they still help me to get stuff done in an otherwise unorganized daily routine.

August 2024

Aug 13

Typed Filters and callAsFunction

Combining three Swift features for the sake of expressivitiy: sum types aka enums, callAsFunction to introduce “callable” semantics, and type extensions to beautify call sites.

July 2024

June 2024

Jun 24

The Rake and Its Prongs

We don’t think about this as we write: the blinking cursor tells a useful lie about what the text looks like, so we can work on an abstraction that is about the space between characters, and especially the space after the last character.

Jun 12

The Communication Tradeoff

As a software developer, I want to understand the code, so that I can implement changes for our users. How do we get there?

Jun 7

Fold Search Results Away in rg.el

Whenever you want to fold away content in an Emacs mode that doesn't support this out of the box, consider using outline-minor-mode. Here’s how I did that to make rg.el

May 2024

May 8

Declarative Text Kit: Sketch of an API

I was fed up with writing long procedures to perform markup changes on the fly. This post contains an API that looks like something I would like to use.

May 4

Zettelkasten (Not) Needed?

As the saying goes, if the title of a post is a question, the answer is “no”. So, do you, or don’t you need a Zettelkasten in your life?

April 2024

Apr 17

Always Be Changing Existing Code

Ever thought that your good idea from today will be the worst nightmare of your future self? The future not realized may actually be worse.

Apr 6

“Soulslike”

Soulslike games are characterized by their high difficulty level, where success depends on learning from failures and mastering the mechanics. You know what else shares this?

March 2024

Mar 25

Ship Custom Fonts within a Swift Package

You can treat font files like any other resource, but you need to use Core Text API to load them in your app. That isn’t as complicated as I feared. Here’s how.

February 2024

Feb 26

Portable Every-Day-Carry Paper Kanban

You don’t need a computer or smartphone to use a Kanban board: here’s an approach to do it all with simple, affordable, and fun paper tools.

Feb 19

Splitting Large Tasks is not a Mathematical Process

You’re in a team meeting. You estimate a task to be worth 13 story points, which is a lot in your team, so you break it up into two tasks. The first one is estimated to be worth 8 story points. What’s the second one worth?

Feb 15

SwiftUI Field Guide

Chris Eidhof released an interactive, animated resource to understand SwiftUI.

January 2024

Jan 30

Low App Prices are Preemptive Excuses

Developers see how their product falls short from the ideal, and so they instinctively charge a lower price than they could (and maybe should).

Jan 9

Emacs sqlite-mode to Open .sqlite Files Automatically

.sqlite files render “graphically” in Emacs, but only if you open them manually with the equivalent of a file picker dialog; that is unacceptable, and I propose a solution that opens the graphical view for SQLite database files when you visit the files automatically.

Jan 9

Cold-Blooded vs Warm-Blooded Software

You cannot run cold-blooded projects as warm-blooded ones. There is not enough activity “to keep the temperature up”. But cold-blooded projects are great to keep around for years and years.

Jan 1

Timestamps with Weekdays

I found ISO dates to be lacking in context in notes that represent timelines. So I am trying out something a tad different, like [2024-01-01 Mon].

2023

December 2023

Dec 8

TableFlip v1.5.1

TableFlip v1.5.1 comes with many HTML and exporting tweaks!

November 2023

Nov 16

Embracing the AppKit Ways

After starting the day with a pro-SwiftUI rant, to my surprise I end it with an embrace of traditional, tested and true AppKit patterns.

Nov 11

TableFlip v1.5.0 Released

This update brings HTML export, more LaTeX export options, and much improved performance!

September 2023

Sep 18

Portable Painter Micro Palette

As a birthday gift, I got the Portable Painter Micro watercolor palette with some new colors. Here’s my first sketch with it.

August 2023

July 2023

Jul 16

Inverted E-Mail Blockquotes

I sometimes receive email where people (accidentally?) quote themselves, not my original text, and I can't figure out why.

June 2023

May 2023

May 25

BOOX Vector PDFs Are Already Colored

Ok, no need to investigate further: PDFs are colored if you use color pens, so I'm now just using that instead of replacing colors in the PDF source.

April 2023

March 2023

February 2023

January 2023

2022

December 2022

November 2022

October 2022

September 2022

August 2022

July 2022

June 2022

May 2022

April 2022

March 2022

February 2022

January 2022

2021

December 2021

November 2021

October 2021

September 2021

August 2021

July 2021

June 2021

May 2021

April 2021

March 2021

February 2021

January 2021

2020

December 2020

November 2020

Nov 16

Upgrading to Sparkle 2.x Branch

The Sparkle 2.x release branch is working fine for production when you switch from the ui-separation-and-xpc branch and enable DSA signing of updates.

October 2020

September 2020

August 2020

July 2020

June 2020

May 2020

April 2020

February 2020

January 2020

2019

December 2019

November 2019

October 2019

September 2019

August 2019

July 2019

June 2019

May 2019

April 2019

March 2019

February 2019

January 2019

2018

December 2018

November 2018

September 2018

August 2018

July 2018

June 2018

May 2018

April 2018

March 2018

February 2018

2017

December 2017

November 2017

October 2017

September 2017

August 2017

July 2017

June 2017

May 2017

April 2017

March 2017

February 2017

January 2017

2016

December 2016

November 2016

October 2016

September 2016

August 2016

July 2016

June 2016

May 2016

April 2016

March 2016

February 2016

January 2016

2015

December 2015

November 2015

October 2015

September 2015

August 2015

July 2015

June 2015

May 2015

April 2015

March 2015

February 2015

January 2015

2014

December 2014

November 2014

October 2014

September 2014

August 2014

July 2014

June 2014

May 2014

April 2014

March 2014

February 2014

January 2014

2013

December 2013

November 2013

October 2013

September 2013

August 2013

June 2013

May 2013

April 2013

March 2013

February 2013

January 2013

2012

December 2012

November 2012

September 2012

2011

April 2011

February 2011

2010

December 2010

November 2010

October 2010