# Visual Effect Views in SwiftUI

One of the key elements of the new UI styles introduced in iOS 8 and macOS 10.10 was the use of transparency, specifically a blurred semitransparent background through which some of the underlying content could be seen. On iOS, this is implemented using a UIVisualEffectView, while on macOS the same can be obtained using an NSVisualEffectView. The two are somewhat different in the types of inputs they take, however, and their APIs don’t quite match up with one another.

# SwiftUI Bindings with CoreData

If you’ve been playing with SwiftUI for a while, you’re likely familiar with the liberal use of @State and @Binding throughout the library. For instance, consider the following simple to-do item editor:

I’m feeling rather legitimized today: none other than Adobe themselves have joined the Readium Foundation. The initial goal of our collaboration is to ensure that any reading system built using the Readium SDK will have the option to include built-in handling for EPUB 2 and EPUB 3 documents protected using Adobe Content Server 4 – the most pervasive form of DRM in the eBook industry.

From John Gruber

The design and goal is clearly focused on listeners purchasing music — but even so, iTunes Radio feels like the first truly modern take on what terrestrial radio wishes it could be. Radio was always meant to be a promotion tool, a way to sell more music, but without being built directly on top of the world’s biggest music retailer, it was always too distant from the marketplace to be more effectual. Now a “buy” button lives next to every song, or a wish list one for those hesitant, and it feels like this is how modern radio should function.

Agreed; iTunes Radio is well-done and well-designed. I’m a little surprised Apple is making everyone wait for iOS 7 to get it.

# Airing my NSBriefs

A couple of weeks ago I had the immense honour of being invited to speak with Saul Mora for his NSBrief podcast. We wound up talking for well over two hours, and only remembered to start recording about half an hour in. I think we could probably fill another one or two episodes without much trouble!

# Redirection on Octopress and Heroku

For a little while now I’ve had notifications from gaug.es that a number of inbound links were getting HTTP 404 errors. This all stemmed from the fact that I reassigned this domain from a Tumblog (still accessible at tumblr.alanquatermain.me, btw) and ported all the relevant (i.e. longer-form) posts across from that source. There were still a few links out there which were pointing to the old Tumblr articles, though, which no longer worked.

# eBook Ninjas!

I had the great honour to be a guest on the eBook Ninjas podcast last Friday, where I spoke with Joshua, Chris, and Toby about the Readium project.

# App.net Invitational

I’ve been on Twitter for a long time now, and it’s arguably been instrumental in my success as a solo developer and a person of note in the world of Mac & iOS development. These days, though, I find myself using it less for conversations and more for feeding outward. I browse through occasionally, but there’s so much happening on there now that I’ve no real expectation that it’s useful as a source of news. Similarly, I’ve found it less useful for conducting conversations: I’m a wordy person, and I choose my words and expressions fairly carefully, yet I spend half my time trying to cut down the character count. Sure, I can split something over multiple tweets, but that makes it problematic for a user to follow the thread of a conversation backwards. Software like Twitterrific goes a long way toward helping that, but browse through a few such conversations and you start seeing errors: your API Call Count has passed the allowed limit (horror!)

# C++03 vs. C++11: Fight!

In updating some stuff for the Readium SDK project, I wanted to use std::shared_ptr in some containers without lots of typing. Essentially I wanted something like shared_vector<SomeType> to magically unfold into vector<shared_ptr<SomeType>>.

Since I’m using C++11 for the project, that’s actually pretty easy to do through the magic of template aliases: