• One thing I haven’t said enough… I’m doing my best to make NetNewsWire a great app and I want it to be a huge success.


    If you use another RSS reader — such as Reeder, Unread, ReadKit, or one of the browser-based apps — I’m still happy. All good. :)

  • I’m sick of Republican presidents making me lose money.

    (I’m way more sick of the racism and cruelty and everything else — but I figured I’d also point out that they’re terrible for investments, too.)

  • Bring. Technorati. Back.

    (Or something like it but modern, of course.)

  • WordPress, it should be noted, is not evil. Which is refreshing and awesome and still a surprise, given how this industry is.

  • When I’m doing web work, I have two goals:

    • Make the content interesting enough that people will want to use the Reader button so they can read it.

    • Make the design so readable that they don’t have to actually use that button.

  • These junior raccoons are sleeping on the roof of my garage. There’s an apple tree behind them — I suspect they might have overdone it a bit on no-longer-perfectly-ripe apples. Poor kids.

    Two raccoons curled up together and sleeping on the roof of a garage.

  • I’ll never understand the lessons of Star Wars. If you’re emotional about your friends and family, that‘s… bad?

  • If 9/11 had happened in 1941, then the current year would be 1959.

  • Windmill for iPhone, which helps provide continuous delivery for developers (which sounds like a useful thing), was rejected by Apple. I don’t understand all the issues here, I admit, but I start by thinking that useful developer tools should be allowed on the App Store.

  • 90% of life is just throwing up.

  • For the last few days I’ve been getting some kind of knock-knock-knock sound periodically on my Mac. I figured it out — it’s Slack. I clicked the mute-all-sounds checkbox in the prefs for each group, and now it’s all back to normal. Noted in case this is useful to anyone else.

  • If I wrote, in some marketing copy, the phrase “ready for the hot new coolness in iOS 13” — would you think it was charming or idiotic?

  • If I had time, I would write The AppKit Book. But I don’t. I wish someone else would.

  • Random memory — in the code base I worked on in the late ’90s, we referred to 255-character Pascal strings as bigstrings. Because they were big.

  • One question I keep asking myself every day these last few years is “Where are the Christians?”

  • Social media is a virus from outer space.

  • Main Thread Model, Serial Queue Database

    Is there a name for this particular pattern?

    Screenshot showing a diagram of data flow from the main thread to a database running in a serial queue.

    This is how I do things in NetNewsWire — it’s a pattern I’ve used in previous apps, too. (Vesper and Glassboard, for instance.)

    The idea is that the model objects live on the main thread, and all database access happens on a serial queue. This way everything stays in sync, with the added benefit of being able to not block the main thread when doing database updates and queries.

    There are some details worth knowing. The database queue makes model objects, then passes them back to the main thread. Most of the time those model objects are immutable structs, so memory sharing isn’t an issue.

    But, when they’re not — when those objects are mutable — the main thread takes ownership of the model objects, once they’ve been created on the database queue and passed to the main thread. The database queue is not permitted to mutate those objects.

    How it works in my app

    In NetNewsWire, articles are stored in a SQLite database. (Feed data is stored in an OPML file, with metadata in a side-file plist.) An article is really an Article with optional Author and Attachment objects — and those are all immutable structs, so they’re fine.

    But an Article also has a single required ArticleStatus object — and that one is a mutable object, since read/unread/starred status is a thing that changes pretty often.

    They’re all created on the database queue and then passed to the main thread, which then owns them.

    So, again, my question

    What’s the name for this particular pattern?

    PS I made the diagram in OmniGraffle — I’ve been enjoying learning the app. It feels like a superpower to be able to show something that I would have been able to describe only in words.

    PPS I don’t claim to have made beautiful color choices. :)

    PPPS If the diagram looks a little blurry, it’s because it’s been scrunched-up for this web page. Sorry about that! I need to learn how to make that not happen.

  • I would like it if Mac laptops came with a no-camera option. I never use it. It’s just a privacy and security issue waiting to happen.

  • My calendar hack is that I add two alerts for each thing. One ten minutes before, so I have plenty of time to prepare — and another five minutes before, because I will have forgotten about the previous alert.

  • I just spent a few weeks writing code to make async database fetches for the timeline work in NetNewsWire. (Fetches should be async in some circumstances.)

    I was not able to build and test along the way. Just got it building.

    And — it worked, first time. I’m terrified.

  • I’m not going to watch this shit live on TV. But I’ll certainly watch, and enjoy, any funny and embarrassing clips later on.

  • The screenshot in this article exists because I actually do have a repeating (Monday-Friday) action in OmniFocus to check Ken’s tweets. :)

    Screenshot of a sheet showing options to Drop Completely or just Skip This Occurrence.

  • I saw Howard Jones at the Moore last night. He was magnificent. I loved it! And I quite like his new album Transform.

    Super-bonus: Men Without Hats was the second opening act (All Hail the Silence was first). When they played Safety Dance, it was transcendent.

    Many people my age — including me — took this song as an urgent and joyous message about safe sex.

    But maybe it was about self-expression, or even just specifically about pogo dancing.

    I don’t know, and I don’t care, because the song meant so much to so many people my age. It’s dorky, sure, but it’s also democratic and wonderful.

subscribe via RSS