• 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.

  • Remember that Jony Ive is just a monoid in the category of endofunctors.

  • Ivexit.

    Jonexit? Aluminiexit? Trying. I got nothing.

  • Ive leaving. Commence Kremlinology.

  • Many people today have reminded me that installing scripting runtimes via Homebrew is pretty darn easy.

    And it is! Except that you need to have Ruby installed first.

  • Having to install Python/Ruby/etc. manually is gate-keeping. It might be easy for pros, but it’s not easy for everybody.

  • I need a maxed-out Mac Pro just so I can run all these Electron apps.

  • What are the iPad productivity apps that you hope come to the Mac (via Catalyst or other means)?

  • Because macOS 10.15 won’t run 32-bit apps, it won’t run Userland Frontier. It’s amazing that this app still ran even on 10.14 — it was Carbonized, but never made into a Cocoa app.

    I understand that this is how things go in tech. It still makes me sad, though.

  • Seattle Times: Apple will announce Seattle expansion today.

    This is just seven blocks from Omni’s office. Welcome, neighbors. :)

  • Public betas of macOS and iOS mean a whole bunch of work for app developers — everybody will have customers writing in about compatibility issues, and some of those issues will be urgent.

    Most of these issues are just bugs for Apple to fix, but that’s not how customers see it.

  • View from the floor at the Live Near WWDC rehearsal and soundcheck.

    Looking at the stage, with James Dempsey and the Breakpoints, plus a few scattered people standing on the floor.

  • Sometimes it seems like half our sentences, spoken and written, would have been utter gibberish 20 years ago. I wonder if this is always true, or if this is a change.

  • View from the stage during rehearsal and sound check for Live Near WWDC.

    View from the stage of people hanging out during rehearsal and sound check.

  • The video you didn’t know you needed today is Frankie Valli singing “Grease” with the Commodores in 1980.

subscribe via RSS