Taking Notes

cause i'll forget

At the Risk of Jon Ronsoning

I’m not much for telling other people when or how to be mad. This person said this, that person said that, none of it to me. Not my bag.


There’s something worth saying about the hubbub on the tubes this week.

I don’t think the details of the disagreement are that important, but more the dynamics of what happened after.

There’s speculation that Bielefeld is being disingenuous about her identity. She might be, but I have no of way of knowing this, and it doesn’t matter.

What I do know, is that the pile on is very much about someone who is perceived to be a woman with an audience and a contrarian position, and a whole mess of people who won’t stand for that. The tone and scale of the blowback would have been fundamentally different for someone that people believed had “earned” their audience. And a lot of men have a very hard time believing any woman can ever earn an audience.

Some people have taken the time to point out there are real problems here. Some have not, and I find myself thinking less of them for it.

It is possible in the coming days and weeks that we’ll learn more and our attention will turn away from sexist backlash, but I hope we all remember this part next time we’re wondering why women writing about tech need to be very cautious about having an opinion or being heard by too many people.

Update: Arment was dealing with a family issue. Criticism of his silence retracted and I hope for the best with what must be a difficult time for them.

Free Advice

So let’s say you’re a company that’s seen a little criticism lately.

Let’s say you’re asked to comment on that criticism.

Let’s say you don’t think you did anything wrong and you’re being portrayed in an unfair light.

Something I think you should consider doing, is not defending yourself. Don’t present your side of the story. Don’t try to explain why that’s not representative of your culture. Don’t tell people how hard you’re working on whatever.

Just tell people that you’re going to investigate, that you’re going to do what you can to correct the situation, and that you’re going to make sure this isn’t a systemic issue.

Here’s a free template :)

Hi [Reporter],

Thanks for bringing this to our attention. Please give [subject of story] my contact info [appropriate phone number and email address for an actual adult person at your company empowered to handle this situation]. We’ll be sure to get to the bottom of this, correct what we find as best we’re able, and find out if this is part of a broader issue that we need work on. We’ll do our best to be transparent about how this turns out and our progress as we make it.

Thanks, [Actual adult at your company]

And then, ya know, do that stuff.

Radio Dysentery

Everybody has a podcast these days, but way way back, in the before times, me and some of my friends got together and recorded a show that was ostensibly about sharing odd ball music we liked.

It was called Radio Dysentery.

Mostly it was just weirdos being weird.

My favorite episode is our fake This American Life about food poisoning:

13 - This American Dysentery

Here are the first few episodes (which are more representative of what the show was usually like):

1 - Man Grappling

2 - The Revenge

3 - Return to the Fold

4 - Jesus Overslept

Also, here’s some Perfect Strangers 9/11 fan fic

What I Get Paid

I think pay equity is a topic worth talking about and today Shanley published a great piece on it:

How Much Do You Get Paid?

I’m going to try to take a first step towards participating in this conversation and publish a short work history with salaries and how I negotiated for them and other random thoughts.

This subject is really interesting to me and while I’m not sure when, it’s something I’m hoping to write more about than just a list of numbers.

I’m hopeful that my friends in this community will try to find their own way to participate. I think we can make progress just by being willing to talk about it.

Update: Worthwhile post from Red Light Politics that talks about the problems with sharing salaries as an approach to dealing with the pay gap How to rebrand feminism and get women fired in the process

In the Muck

I think anyone who has done a decent amount of contracting has had a few (or a bunch of) toxic clients.

By toxic I mean a client who is behaviorally or institutionally self-destructive in a way that makes doing what they hired you to do nearly impossible.

For the most part learning how to handle these situations is about identifying clients that are dysfunctional and toxic before you engage and simply passing on the gig and then doing a good job communicating with the client after you’re in the door.

If you’re keeping your eyes open for it and you’re good with the human side of client services, toxic clients are unusual.

But, shit happens, you miss the signs ahead of time, you get gigantic check blindness*, and you’re in it now. You’re a month from shipping, there’s six months of work to do, the design is changing again, there are 4 managers on the client side all fighting each other over what this should be, some of them will be fired soon, but who knows which ones and you have too keep them all happy until that happens. You’re made mostly out of tears at this point and you’re not sure what to do.

*clients with ridiculously deep pockets often become toxic thanks to their willingness to pay people to just shut up and do what they’re told

Making Things That Make People's Lives Better

Freshly back from WWDC I have a lot of thoughts rattling around about my profession and what the point is. Here’s one.

Apple debuted something of a mission statement in the form of a video in this years keynote.

Designed by Apple in California

I think the most important line in that piece for me was “Until every idea we touch enhances each life it touches.” On it’s face, it’s all kinds of saccharine, but really, it’s the right idea. It’s the right goal.

It didn’t make the keynote, but this point is made even more effectively in a video released after the keynote

Making a difference. One app at a time.

and with a very similar video that did make last years keynote

WWDC 2012 (Starts at about 7:30)

Not every app needs to make you spring a leak, but we should all be striving to solve real problems. Solving real problems is about empathy. It’s about understanding what people who aren’t you struggle with. That understanding won’t just make you a better designer or engineer, it’ll make you better at life.

I’m not saying don’t ever build frivolous or selfish things.

People includes you.

Build things that make you happy and when you can, help other people too.

Vesper: An Accessibility Audit

Vesper on iTunes

When the guys over at Q Branch first showed me Vesper, they already knew what my first question would be:

How's your VoiceOver support?

At the time it wasn’t great, but we’ve made some real strides. (Some of what I’ll be covering didn’t make the cut for 1.0, but will show up in the first bug fix release shortly.) I’m going to describe my process for auditing the app, providing feedback and how we implemented the basic accessibility features of the app.

Xcode Symbol Navigator and Callers

Xcode has a whole lot of UI and it’s not exactly all easy to discover. Here’s a cool trick you can do with the symbol navigator to find out all the places in your code that you’re calling a given method on a given class.


The human side of this is profound

Appeal to the fact that they’re probably a decent human being


I want to use your software

I want to be a fan

I want to be a person who gives you money and buys your software and follows what you do

There’s not a lot of opportunities in most people’s lives to do a trivial thing and make a bunch of people’s lives immensely better

There’s not many things like that and accessibility is one of those things

- Me rambling on the latest Iterate


A fairly normal description of my side of most conversations with Rob Rix:

(1:00PM) That’s a terrible idea

(1:05PM) Ok, it’s not that terrible, but why would you want to do that?

(1:10PM) Ok, it’s ridiculous, but I’m intrigued

(1:15PM) Ok, I’ll be back in a few, I’m gonna build this

Today the discussion was the idea that you could implement a class cluster that only declares a protocol as it’s public interface.

Something like:

@protocol ClassClusterPublicInterface <NSObject>
- (id)initWithTypeA:(id)a;
- (id)initWithTypeB:(id)b;
- (void)doSomething;

and then if you could figure out a way to get instances out of that protocol declaration, you’d be in business. Turns out @protocol is implemented as the the object Protocol, defined in <objc/protocol.h> and since it’s an object, you can add to it via categories:

@interface Protocol (Alloc)
- (void)registerClass:(Class)class forInitializer:(SEL)initializer;
- (id)alloc;

and now you can instantiate and use an object like this:

id clusterA = [[@protocol(ClassClusterPublicInterface) alloc] initWithTypeA:nil];
[clusterA doSomething];

2013-01-09 14:09:42.270 Protocol[3433:303] Do A

You can check out the details of the implementation on github but the core of it is storing the class to use for a given protocol, initializer combo in load:

+ (void)load
    if (self == [ClassCluster class])
        [@protocol(ClassClusterPublicInterface) registerClass:[ConcreteSubclassA class] forInitializer:@selector(initWithTypeA:)];
        [@protocol(ClassClusterPublicInterface) registerClass:[ConcreteSubclassB class] forInitializer:@selector(initWithTypeB:)];

and then using –forwardingTargetForSelector: to return an alloced instance of that class when that initializer is called on Protocol.

This doesn’t have much in the way of practical relevance, but it’s good fun and worth giving a look.