Example of High Cohesion and Low Coupling with Presenter, View, and View Model

Here’s a short definition of the two terms: Cohesion is about how well elements within a module belong together and serve a common purpose. Coupling is about how much one module depends or interacts with other modules. Thus, cohesion is an intra-module concern whereas coupling … | Continue reading


@christiantietze.de | 2 years ago

How to Fix When Some Text Changes Don't Come with Automatic Undo?

When you work with NSTextView and happen to use insertText(_:) to programmatically insert text, you get an undoable action for free. This might give the impression you get undo/redo functionality for free. Eventually, you’ll notice how other changes don’t have an affordance in th … | Continue reading


@christiantietze.de | 2 years ago

Reactive Code is Sequentially Cohesive

Reactive, declarative code is sequentially cohesive: you have a sequence of events and reactions to events, and it’s pieces are tied together real close. The processing chain itself is then a function or feature of the app. The chain of operators is a thing itself; the step-by-st … | Continue reading


@christiantietze.de | 2 years ago

Delete to Beginning of Line in Emacs to Rewrite Code

Ever since Brett Terpstra posted about ⌘← to jump to the first character of the line back in 2014, I’ve used behavior like this in Xcode. Nowadays, ⌘⌫ automatically deletes up to the beginning of the line, stopping at whitespace. That’s quite handy to rewrite the current line. Th … | Continue reading


@christiantietze.de | 2 years ago

10 Year Indieversary AMA Postmortem

Thanks everyone for joining the AMA yesterday! Was a fun experience :) We talked about a couple of technical and historic things. Here’s an outline of the pieces: My first App Store success When I released Calendar Paste v1 in 2012, I shaved my head and got a mohawk to cel … | Continue reading


@christiantietze.de | 2 years ago

Replacing zoom-window with winner-mode to Temporarily Change Window Splits in Emacs

On Reddit, there was a recent thread called “Your dependency on external packages reduce with experience”. I have been using zoom-window in the past to temporarily “unsplit” buffers. So this: ┌───┐╔════════════╗┌─────┐ │ │║ ║│ │ │ A │║ C ║│ B │ │ │║... | Continue reading


@christiantietze.de | 2 years ago

Wiki and Website Updates

I’ve added a couple of “hidden pages” to the website: Edward Yourdon: Structured Design (1979) Related wiki page: Cohesion Wiki pages on MVC, MVVM, DRY Receive Christian’s new posts via email | Continue reading


@christiantietze.de | 2 years ago

10 Year Indieversary: AMA On Sep 6th

I realized that my officiel 10th “company” anniversary is just around the corner! To celebrate and hang out with people online, I’d like to party with all of you in a live chat and video. To round things up, I’m doing this Ask Me Anything style. No agenda from my part, but I’m op … | Continue reading


@christiantietze.de | 2 years ago

SwiftUI Isn't Easy to Get Into: My Road From Headache Towards Mastery

How long does it take to become a true SwiftUI master? How far am I on my own way to mastery? 🤔 Let’s quantify and have a wild guess! Point of Reference: Text Kit I start this introspective journey by looking at another topic I feel like I could become quite the expert, e … | Continue reading


@christiantietze.de | 2 years ago

Drawing Studies: Tonal Values

YouTube video of today's evening sketching This time I remembered to record our weekly sketch-together over Discord. Here’s a 4x speed version with narration of this evening’s sketches. The focus was on tonal values, so no colors, just pen and ink, then ink washes on watercolor p … | Continue reading


@christiantietze.de | 2 years ago

Rely on @Published Property Wrapper Events, Not the Observed Object

Pop quiz! What is the output of this program, e.g. when run in a playground or an autoclosure block? import Combine class ValueHolder { @Published var value: Int = 0 init() {} } let valueHolder = ValueHolder() let sub = valueHolder.$value.sink { value in print("received", v … | Continue reading


@christiantietze.de | 2 years ago

Schedule End of the Work Day Using Org

To get more structure into my day so I get work stuff done in time and have free time in the evenings to tackle other things, I’m now experimenting with notifications to end the work day. The following is a translated version of the current data. I am using the German term "Feier … | Continue reading


@christiantietze.de | 2 years ago

Output Port Adapter for Single Point of Configuration in Complex UI

When you have nested and complex UI components with multiple sub-view controllers, passing an optional output port (event handler or delegate) down the tree is cumbersome. There are two straight-forward approaches: Sub-components use the output port directly: When you inject th … | Continue reading


@christiantietze.de | 2 years ago

Emacs Blogging: Insert Tag from YAML Frontmatter Posts

My blog posts here usually have a line like: tags: [ swift, xcode, codesigning ] For tags I don’t use a lot, I sometimes don’t remember how to write them. So I do the only sane thing – and go to my website’s list of tags and look for a match. Got annoyed by that now after a coup … | Continue reading


@christiantietze.de | 2 years ago

What's the Problem with Old but Excellent Mac Apps?

Tyler Hall wrote about "Half-Assed Mac Apps " the other day. His argument goes like this: Catalyst made it easy to deploy iPad apps to the Mac. But iPad apps don't make the best experience on Mac. Users ... | Continue reading


@christiantietze.de | 2 years ago

Funding Open Source Software as a Third Party?

In a Discord chat, we've recently talked about how well funding for Blender turned out (https://fund.blender.org/). At the time of writing, they get $137k per month for development. I cannot say if that's ... | Continue reading


@christiantietze.de | 3 years ago

Atkinson Hyperlegible Font May Be Pretty Good If Your Granny Can't See Well

My grandmother approves of Atkinson Hyperlegible free font for her phone book printout | Continue reading


@christiantietze.de | 3 years ago

Emacs Settings for PHP Development

The project that I've been working on over the weekend, I worked on in emacs. This is part of my re-learning the basics of text editing and programming in emacs to slowly move away from TextMate when it ... | Continue reading


@christiantietze.de | 5 years ago

Fira Code 2 Released

My favorite monospace programming font, Fira Code, was updated to v2. (https://github.com/tonsky/FiraCode/releases/tag/2) This is even supposed to solve an issue (https://github.com/tonsky/FiraCode/issues/459) ... | Continue reading


@christiantietze.de | 5 years ago

With DevMate Closing Shop, Here's What You Can Do

Don't panic. DevMate's components can be replaced, one by one. Here's a breakdown of it all. | Continue reading


@christiantietze.de | 5 years ago

Being Afraid to Change a Working App

Today I work on The Archive. The focus is on an issue brought up by the community (https://forum.zettelkasten.de/discussion/541/bug-v1-2-x-note-list-doesnt-update-on-external-change). ... | Continue reading


@christiantietze.de | 5 years ago