I’ve been working on what I hope will be a multi-part blog post I’ve been calling Everything I Know About ScreenReaders. It’s been fun to work on, but it is still very much in the post it notes and white board scribbles phase. I’m not going to put a firm timeline on it, but I’d like to have the first posts up soon and rap it up by the end of this summer.
I left my job in December. For a lot of reasons. The main one being that I spend most of my time these days doing political organizing in Detroit, where I was born and had been away from for too long. But… it’s hard to do a lot of that work in Michigan, in the winter, so i fired up Xcode and started exorcising some ideas.
Two months later I’ve got something worth talking about.
Building a screen reader for macOS is an arcane science
Before VoiceOver shipped, the public accessibility APIs in AppKit and in HIServices were conceived as agnostic interfaces for anyone who wanted to build a screen reader. some of the quirks of these APIs are there because there was no real client to poke them and make sure they made sense.
There is still, theoretically, support for third party assistive technology (AT), the umbrella a screen reader would fall under, but it’s not a trivial task and it’s simply not possible without dipping in to SPI1.
But it doesn’t have to be
The current state of accessibility on all of the Apple platforms is, like almost everything in the Apple universe, organized in a top down fashion. An app becomes accessible because Apple does the work to make it accessible, because the app developer does the work to make it accessible. There’s very little that can be done, even by well motivated community members, to make an app neglected by Apple or by a third party developer better.
I believe it is possible to produce infrastructure that democratizes assistive technology for macOS. I want the barrier to entry to be as low as active interest and time. The future of fundamental technologies serving disabled people ought to be in disabled peoples hands.2
This coming week I’ll be prepping open source components I’ve built for release. Hopefully you’ll find them well organized and easy to jump into. Once I’ve got all the pieces out in the world I’ll be seeking community involvement to steer the future of the project and to figure out what problems are most useful to solve.
In addition, I’m working on the first app to sit on top of this infrastructure. A brand new screen reader for macOS, which i’ve given the project code name SpeakUp.
Accessibility as autonomy
SpeakUp, as well as the open source components it sits on top of, will support a robust plugin architecture to allow individuals or groups to tune, tweak, or totally overhaul the accessibility of an app.
Many of us that work in professional software development take for granted that we can choose from a large number of IDEs, editors, compilers, and any number of other tools because as professionals even seemingly small optimizations add up and make us happier worker bees. But when it comes to accessibility there’s not nearly as many options to make things just so, to get a workflow that’s just for you, just for your job, or hobby. It matters that when an app’s accessibility is lacking, or just not well suited to your needs, that there are options available.
In this spirit I’ve been hard at work developing several sample plugins. The one I’m happiest with right now is a plugin that provides an accessibility API for Sublime Text via it’s Python API. Sublime Text is a very popular programming text editor and a black hole for VoiceOver right now.
Here’s a recording of navigation using regular arrow keys through the Python that powers the plugin, line by line, along with the relevant Python file for comparison. You’ll hear sequential pops indicating leading indentation level and marked up output that includes all the control characters a programmer would care about.
The specifics are subject to change, but there’s so much potential to make developer tools accessible and widen the community of people who can participate in building software on and for Apple platforms.
Until I get a proper website up and running for the project, this will be the spot to watch for updates, which you should expect to see regularly going forward.
SPI is apple jargon (it can mean other things in other contexts) for private API, for internal use, by first party apple software. it doesn’t have the same compatibility guarantees of published API.↩
The number of blind Cocoa developers is relatively small considering the huge popularity of iOS among blind smartphone users. this is largely a reflection of the very poor state of developer tool accessibility.↩
And on top of that I’ve spent this week watching Democrats seek to appease Donald Trump’s voters and Donald Trump himself.
I don’t think i can overstate what an enormous mistake this is. These people who wish to be seen as leaders are abandoning any and all concern for the trust and wellbeing of marginalized peoples, who they depend on to be elected and who are forced to depend on them to defend their rights. The people who show up to vote for them in the 90+% range, like Black women. This is deplorable.
I’ve had enough conversations about whether Democrats are being strategic or are simply capitulating that I would like to propose a framing for those Democrats who can’t bring themselves to call Trump voters the bigots they are, to at least make the case for not cooperating, and seek some base level of accountability.
Generic Democrat Approaches The Lectern
I’d like to talk about cooperation and accountability today.
I don’t think the majority of Trump’s voters set out to do harm.
Some definitely did, and we need to be conscious of them, & mindful of the people they seek to harm, but I don’t believe that is the majority.
What I do think the majority did was respond to a changing world by trying to put things back how they were. A man said he could make it how it was and they said, “that sounds good”.
I think there are two critical takeaways from that:
First, that man is lying to you.
He cannot and will not make things how they were. He seeks only to empower himself and will betray your trust.
And second, putting things back how they were is a dangerous idea for many, many people. For these people, these fellow Americans, equality is only recently a viable idea. In many ways, the equality they have found isn’t durable. Their place in our society is conditional on good behavior, not the inherent right it’s meant to be.
Enabling a man like Donald Trump, cooperating with him in any way, presents a very real, even life-threatening danger to these people. These people that are our friends, our families, our communities.
We need to be mindful of everyone’s struggles, but when making policies and choosing leaders we need to resist asking the marginalized peoples we share this country with to shoulder more than their fair share.
The first time I heard about App Camp I sent Jean an email asking if I could help with anything, however small. Even if it was just sweeping up after the camp. They never did take me up on the offer to sweep up, but this week they gave Sound Off a chance to do something not so small.
Sound Off is sponsoring a team at App Camp for Girls’ Seattle Camp. Unlike our usual rounds, this is something we’re sponsoring out of our operating budget, because it was time sensitive and an important cause to us.
App Camp for Girls is a truly special organization. Social pressure for young women to give up on STEM fields starts to take hold around middle school and App Camp makes a deliberate effort to get out ahead of that. The campers spend a week with adult women in tech who show them some real possibilities for themselves and their friends as developers, designers & testers. They get to build a real app they can put on their real phones. It’s an invaluable experience and one I’m proud to support.
App Camp Seattle still needs one team sponsor by this Friday. I’d love to see someone from #teamSoundOff step up to fill that gap!
We sat down as a couple of white cis hetero dudes to explore what it would mean to help make working in tech a better place. How to contribute without being gatekeepers or trying to be in charge. We took a lot of inspiration from existing projects and asked for help.
Our organizing principle is that we’re not qualified to be the ones deciding what should be done, but we are qualified to draw attention to all the good work already going on. We can use our voices and ask our community to join us in finding funding for them.
I think we can help good people do good work and I’m excited about it.
Check out our first campaign to help fund live captioning and ASL interpreters at AlterConf.
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 thehubbub 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.
Somepeoplehave 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.
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.
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 :)
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.
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