Robert Ryan
Robert Ryanrobertryan
2025-05-23

I’m not a fan of the iPadOS “Smart Activation” feature for focus modes. I prefer to manually control when and if I need different focus modes. However, my iPad keeps prompting me every few days to turn this feature on.

I gather that this is a known issue. I’ve already provided feedback to Apple, but has anyone found a workaround to stop this persistent prompt?

iPadOS notification, “Use Smart Activation to turn on Work Focus automatically based on signals like your location, app usage, and others.”
Robert Ryanrobertryan
2025-05-09

@cazencott “I'm not looking forward to the time we're going to waste on grading projects written by an algorithm” … I suggest this only partially tongue-in-cheek, but wouldn’t you use AI, yourself? One might use it as first-pass assessment of the student’s submissions, for (a) correctness; and/or (b) to estimate probability that the submission was generated by AI?

Robert Ryanrobertryan
2025-05-09

Anyone else seeing tech sites recycling old content? In the span of less than a week, I’ve stumbled across two egregious examples: MacRumors recently had an article about the best text editors and included Atom (sunset in Dec 2022). Medium also had a “recent” article talking about managing dependencies b/w asynchronous work by subclassing `Operation` (state of the art 7-10 years ago). In both cases, they could easily have generated interesting new content, but just recycled outdated content.

Robert Ryanrobertryan
2025-05-07

I hate Swift’s non-indentation of `case` statements of a `switch`. I know this was debated back in the day, and I understand the ultimate rationale, so I’ve been living with it, but I’m increasingly inclined to advise my team to turn on `case` indentation. We are increasingly using `switch` expressions, and find the lack of indentation unnecessarily unclear.

Interestingly, the switch expression proposal, SE-0380, indents the case statements (both for expressions and, largely, for statements)…

Robert Ryanrobertryan
2025-04-05

@j4ck @airspeedswift Perhaps thehill.com/homenews/senate/51. I think the representative quote is “a scalpel and not a sledgehammer.” (As an aside, Michigan politicians historically adopt slightly more protectionist positions given the automobile industry’s outsized role in local politics.)

Robert Ryanrobertryan
2025-04-03

This is the first app that I’ve actually deleted just because the icon was so bad; an assault on my visual senses. Sure, you can pick different app icon in settings (but you have to upgrade to premium to get a very simple one). But it just ended up prompting me to reconsider whether I need/want the app at all. In the end, it was cathartic to just delete the app.

It’s an object lesson of how important a thoughtful visual design can be (and how detrimental a less-thoughtful one can be, too).

Robert Ryanrobertryan
2025-03-31

@davedelong And there is the Combine’ RAII-esque nature contrasted with Swift concurrency, introduced just 2 years later. Or the very incomplete Swift Async Algorithms with a `throttle`/`_throttle` fiasco. Or that we have so many frameworks that just aren’t ready for Swift concurrency. The list goes on. I just don’t remember working in an environment where the language evolves so quickly and I spend so much time working around so many incomplete implementations or inconsistent paradigms. (2/2)

Robert Ryanrobertryan
2025-03-31

@davedelong For me, it is the dizzying array of syntax with Swift concurrency (`Sendable`, all the RBI kruft of `sending`/`consuming`/`borrowing`, the actor inheritance implementation, the task executor inheritance implementation, etc.; the list goes on). They’re flying along, foot on the gas, introducing more and more unintuitive syntax, it just getting worse and worse. And, as you said, the road is littered with half-baked solutions. To mix metaphors, the cure is worse than the disease. (1/2)

Robert Ryanrobertryan
2025-03-10

@cocoaphony I've been successful wrapping `Logger` with macro (to preserve the “jump to source” functionality), but have been unsuccessful in my attempts to concatenate/embed `OSLogMessage`. Obviously one can use a `String`, but then lose the privacy features. I constant feel like I’m fighting the system…

Robert Ryanrobertryan
2025-01-10

@cocoaphony @mattiem The problem was that it wasn’t handling demand. A Subscription should never send published values until the Subscriber informs the Subscription that it is ready to receive them. You simply need two properties, the current Demand and the previously published result, to handle this properly.

Also, I would retire the brittleness of a Promise (where caller has to manually remember to fulfill it) because Swift concurrency renders that moot.

E.g., stackoverflow.com/a/78899940/1

Robert Ryanrobertryan
2025-01-08

We are surrounded by three separate evacuation zones in Los Angeles, but we are safe (but without power). My heart goes out to those more directly impacted by the LA fires. For map of the evacuation zones, see lacounty.gov/emergency/.

Robert Ryanrobertryan
2025-01-06

@cocoaphony – Ah, I get it now. No, nothing is leaping out at me (other than opening a ticket with the third-party library…shame on them).

Robert Ryanrobertryan
2025-01-06

@cocoaphony I apologize, but I am a bit unsure as to what you are asking.

Do I understand that it is the `await` of the `work` within the subscription that you find disquieting? I don't get how a subscriber could know that the `work` is done (which seems like a fundamental requirement) without awaiting it.

I’m not getting what you mean by making it “an init on Future”, nor what is the deeper problem that you are trying to solve.

Robert Ryanrobertryan
2024-12-25

An article discussing these trends with links to other assessments of the issue. blog.pragmaticengineer.com/are

Robert Ryanrobertryan
2024-12-24

It’s been a very, very long time since I've reviewed ER diagram tools. Recommendations?

I’m looking for something that can import a SQL schema to which I can visually layout, add logical relationships not currently enforced by formal FK definitions, etc. I am not looking for tool to actually modify the database, though (that’s controlled by existing versioning w formal migrations, etc.).

Remote MySQL/MariaDB; macOS client. Will entertain reasonably priced solutions, but nothing crazy.

Robert Ryanrobertryan
2024-12-17

@cocoaphony Note that `OutputStream` has the “append” semantics that you are looking for. But you probably then want an extension for easily writing strings and data, e.g., stackoverflow.com/a/26992040/1. Also note that you might minimize memory footprint by not building a single `Data` for the whole array. [2/2]

Robert Ryanrobertryan
2024-12-17

@cocoaphony My general approach (in the spirit of @ben_lings suggestion) is to attempt to append, and if it that fails with `fileNoSuchFile`, then create it. [1/2]

Robert Ryanrobertryan
2024-12-05

@faassen This is the source of our disconnect: Apple’s “unified logging” system is *not* for tracking down production bugs. There is no access to logs on production devices. It is exclusively a developer debugging tool, not production support.

To be clear, I agree with your broader argument: Debugging statements do not belong in the production logging system/dashboard. With apologies, I was quibbling over terminology: In Swift, “unified logging” is the preferred “print debugging” solution. Lol.

Robert Ryanrobertryan
2024-12-05

@faassen “What I wanted to print a sum of the values in an array?” … You can put pretty much any Swift expression in there. I’m using my own `sum` function, but you can use Swift’s `reduce(0,+)` as well…

But, sure, there are definitely times that you won’t use this breakpoint technique. But in those cases, `logger.debug(…)` is much richer debugging tool than `print`. Hey, I use `print` in “Hello, world” kind of scenarios, but in real apps, “unified logging” is sooo much better.

Robert Ryanrobertryan
2024-12-04

@faassen Third, different message types offer different characteristics (debug messages are fast and in-memory; higher level types, like errors, are persisted). Fourth, many workflows requiring debugging when not attached to debugger, and this supports remote observation of log messages. Fifth, it supports privacy (so, by default, private info can be seen when debugging locally is not exposed when debugging remotely). There are so many debugging advantages and no real downsides. [2/2]

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst