Syria is off the list
Syria went on the American terrorism list in 1979 and came off it on Monday. I wrote the careful version for Unblock Syria. This is the one where I'm happy, and still angry.
Articles, notes, and links. Software, AI, calligraphy, politics — in that rough order.
Syria went on the American terrorism list in 1979 and came off it on Monday. I wrote the careful version for Unblock Syria. This is the one where I'm happy, and still angry.
One model reads Arabic handwriting at under one per cent word error. The best anyone has managed on classical calligraphy is forty-five. I went looking for the missing data that would explain the gap and found the opposite — a script whose rules were written down in the tenth century, and again in software in the 1980s.
An IPTV client needed Picture-in-Picture, and the VLCKit line it ran on does not have it. Notes on owning a C engine rather than consuming one — pointer isolation, lifetimes nothing checks, a patch set carried against VLC's own source, and what that costs.
SwifterSwift passed five hundred extensions and began colliding with other libraries. A member added to a type you do not own is not scoped to your library at all — it is global, and no module qualifier reaches it.
GitHub stopped accepting passwords for Git in August 2021. A token in a credential helper solves the typing but not the expiry; a key solves both, and reaches the HTTPS URLs you did not write yourself.
Finding the first match, ordering by more than one key, and checking an index against a range. The hand-written version of each is longer, and two of the three are also slower.
willSet and didSet take a parameter, and both have a default name — so naming them explicitly is usually redundant. The rules about when they do not fire matter more.
Naming a completion handler once and writing Handler<Post> at each call site. It gives you readability and a single place to change the signature. It does not give you type safety.
The extension turns an out-of-bounds crash into nil. That is useful when the index comes from outside your own code, and hides a logic error when it does not.
Nothing here yet.