RSSAmplifier

Blog

Amy Worrall's Blog - Amy Worrall

amyworrall.comRSS feed ↗20 posts

Latest posts

Previewing SF Symbols with Apple's own renderer

McKinley, the SF Symbols editor I've been building, has a preview panel. Its job is specifically to show you how Apple's rendering engine will display your symbol. (McKinley's canvas uses my own renderer, so it's important the user has a way to be sure their symbol will work with Apple's APIs.) SF Symbols rendering does a surprising amount behind your back: it interpolates nine weights from three…

Automating Mac app screenshots

I’ve had a few people asking me how I automate taking screenshots of my Mac app for imposing PDFs, Octavo (now live on the Mac app store!). So I thought I’d write a few things up. The app configures itself It’s helpful if the app knows you’re taking screenshots, so it can be on its best behaviour. The app checks for the launch argument --screenshot-mode in applicationDidFinishLaunching() (via…

Why did Apple pre-announce “more personalised Siri”?

In this post , John Gruber discusses how Apple dropped the ball by pre-announcing a feature that doesn’t exist yet in any semblance of a demoable form. I refer of course to the new Smart Siri features that ostensibly exist under the Apple Intelligence branding. Gruber describes how announcing features that can’t even be demoed yet is something that pretty much never happened at Apple during the…

TextKit custom truncation

TextKit has the option to truncate the last line of text if there’s more text than will fit in the container. It does this by displaying an ellipsis. But what if you wanted to display something else to indicate truncation? (In my case, the string “See More”, which will function like a button.) I tried and discounted a bunch of different approaches before coming up with something that worked. Let…

A Guinea Pig Castle

I built a castle for my guinea pigs. The base starts with a piece of plywood, 2440mm x 1220mm (i.e. a standard size sheet). I used some very heavy duty ply (I think it was 12mm thick) because I wanted to be able to walk on it. Here it is on top of my car: The edges needed sanding. My friend Kate was here to help me. I covered the base in a plastic pond liner, folded it round the sides and secured…

Fatigue

In early 2019, I went skiing for the second time in my life. When I departed on the train for the Alps, I was in good spirits. It was exciting to take a trip with my friends. While I had a bit of a winter cold coming on, I didn’t want to let it ruin my holiday. Alas, it did ruin my holiday. By the time we arrived at Val Thorens (altitude 2500m), I was feeling really grotty. I did a bit of skiing…

An In-Character Programme

Last summer, I was producer for Grosvenor Light Opera Company’s production of Pirates of Penzance. For those that don’t know, most of the female roles in the play comprise Major-General Stanley’s adopted daughters. In many productions, they tend to be depicted as twittering Victorian maidens, all petticoats and parasols. We didn’t want that.

UK Transport 2.0

It’s been a long time coming.

Please rate my app

I tried to come up with a better alternative to a “Rate my App” alert.

Subclassing UIResponder

I wrote a custom date picker using the responder chain.

On being a creative generalist

The other day, I created a flyer for my opera society’s upcoming play. I created it using dip pens and inks, tracing the pictures. Within the theming of our show, the flyer is meant to look as if it was produced by the Major General’s daughters (a group of girls in their mid-to-late teens); for this concept, any inaccuracies in my work actually add to the effect. Overall, I’m…

Non-Tech Hobbies: Tabletop Roleplaying

I’m on a train again. This time, just my normal commute. Today, I’m rushing back in order to attend a session of Dungeons and Dragons. For the uninitiated, tabletop roleplaying involves a group of people, each having a character (often but not always represented by a little model) that exists inside a fantasy world or other setting. One person in the group is the Dungeon Master, whose job it is to…

Non-Tech Hobbies

I haven’t posted much here recently. Granted, I’m now working for a certain large tech company , and have a daily commute of 200 miles. But that’s not the entire reason. So what have I been doing? As I write this, I am on the train back from Harrogate, the location of the International Gilbert & Sullivan Festival . Yesterday evening, I performed in the New London Opera Group ’s production of…

Scripting Bridge predicates and enums

I’m working with the Scripting Bridge and AppleScript-ObjC at the moment, so expect a longer article soon! For now I’ll share a quick tip. If you’re trying to filter an SBElementArray using a predicate, and want to substitute in an enum value (for example, fetching OmniFocus projects that are either active or on hold, but not completed or dropped), you may be unsure what type to…

Thoughts on Apple Watch

I wear a Pebble. I’m part of the Smartwatch Revolution™, as it were. I find my Pebble really useful for a few things: not missing phone calls when my phone is on silent and in my bag; receiving certain notifications (SMS and Facebook Messenger, but never email) on my wrist; sometimes controlling my music. I plan to use some fitness features (mainly tracking work done at the gym) in the…

An introduction to Cocoa Bindings

After learning about Key Value Observing, you might be wondering if there is any way of automatically keep two properties synchronised. Cocoa Bindings, a Mac-only technology, provides this missing link, although it is not as simple as just updating one property whenever the other changes. Bindings are specifically designed to work with views and controllers in AppKit, and contain many features to…

Using auto-layout to calculate table cell height

Table cell height is one of the tricky bits of UITableView. You have to calculate it manually, in advance of creating your cell. Here’s a method that uses auto-layout to help you calculate it. First of all, you’ll need a cell with its content laid out with auto-layout. The easiest way to make one is to use a xib file. Make a new xib file with only one object (a table cell) inside. Add whatever…

Predicting an Apple event

It’s prediction time again: Apple have sent an invitation for their October event. I just read Nick Heer’s predictions for what we’ll see. The thing that struck me was how many of them there are. From my memory of Apple announcement, I didn’t think they’d announce so many things at once. So I went digging. Apple’s events usually have one headline hardware…

Slides for my iOSDevUK talk on Templateable apps

At iOSDevUK last week, I gave a talk on making templateable apps — that is, apps with a single codebase but different content, theming or features. As promised, I’m sharing the slides: Download the PDF of my slides I’ll hopefully blog in more detail on this topic in the future (perhaps including sharing a reusable class for reading the config plists). If I haven’t done it by…

Omni Frameworks part 3: saving some data

This is a quickie, but I thought I’d write up a small stumbling block that I encountered. It probably came from my being relatively unacquainted with UIDocument, rather than an Omni-specific problem, but here goes. I was implementing saving some data in the app I’ve been building up over part 1 and part 2 of this series. I made a map view, and decided that I would make the app save the…