• My Most Recent One Star App Review

    Just submitted an App Store app review giving an app one star because their EULA was completely ridiculous “You agree to … indemnify … … against any allegations … arising from an alleged breach of your representations or obligations under this agreement. Additionally, you will be primary responsible to pay promptly all .. costs (including attorney’s fees) … in connection with your indemnification obligations above.”

    Like, that’s infinite liability for something I have no control over, right?

    Shouldn’t Apple have rejected this app for engaging in “manipulative practices within or outside of the app.” (Section 5.6 - Developer Code of Conduct) ???

    Wouldn’t it be great if Apple App Store review read the EULAs on every app and rejected the ones which were plainly bonkers? Wouldn’t that be adding value to its ecosystem?

  • Mile 32. Loop Complete.

  • 22 miles. View of Juanita across the lake.

  • 20 mile IPA is always a good IPA.

  • 18 miles. Almost across the bridge.

  • 15 miles. 520 Bridge View Park.

  • 11.5 miles. First view of Seattle

  • The DERU Market ‘AM Sandwich’ hit the spot.

  • Eight miles.

  • Five miles.

  • It’s a start!

  • Thinking of taking a little walk next Saturday. Who’s with me?

  • "The Blind Leading the Blind"

    One of the rewarding parts of working in tech is being part of the Accessibility revolution. Like, it totally rocks when, at Apple’s WWDC, they show off some new tech that makes it easier for a blind person to navigate public spaces, or for a deaf person to participate in public conversations. Each little step towards real inclusivity in tech might be life-changing for some people, and in sum, they are society-transforming. Living and feeling this transformation is nourishing for the soul.

    This week I had an experience that put my feelings into perspective. A rather popular tech blogger used the phrase “blind leading the blind” (a phrase which has a long history: from Matthew 15, “And if the blind lead the blind, both will fall into a pit.”), and this phrase really struck a sour chord with me. Not just because of the casual ableism – I manage to not be offended by the everyday idioms that, if I were paying attention, would be constant reminders that the association between disability and inferiority is baked into our language.

    No, it struck a sour chord because the traditional meaning of the idiom, that the ignorant are ill-served by getting advice from the ignorant, assumes that change is impossible – that the blind will never be able to navigate public spaces.

    Inwardly I shout “No!”

    Envision how awesome the blind leading the blind might be – not into the pit of Matthew 15 – but leading like any tour guide leads a group of tourists. Let your guide take you to Pike Place Market and taste the coffee and the piroshky and the crumpets and the nectarines and the chowder. Let your guide take you to the Olympic Sculpture Park, to hear the city and the train tracks and the ferry and the the wind curling around Alexander Calder’s Eagle, and taste the air from the Sound and feel the full force of the sunset. Let your guide take you to Sake Nomi where Johnnie will pour you a flight of Junmai Daiginjoshu and treat you like the Nomidachi regulars.

    And who better than the blind to lead the blind? Let your guide help you avoid the dangerous intersections. Let your guide tell you which bus stops are easier to use. Let your guide give you the cues to navigate on your own tomorrow. Let your guide share their hard-won experience about how to enjoy this place you want to visit.

    The blind leading the blind is part of the future I want.

    Each little step towards real inclusivity might be life-changing. If you imagine a world where “the blind leading the blind” is a sign of a well-functioning, caring, joyful world, you can be part of the transformation of society, and the traditional sense of the phrase “the blind leading the blind” will no longer make sense to you. That’s a glorious world to live in.

    Some notes:

    1) One may ask, if “blind leading the blind” is a phrase to be avoided, what is a suitable replacement? I’ll suggest trying to make up a new idiom. It’s actually kind of fun, and will make your writing more colorful. How about “Donald Trump teaching Bill Barr about ethics” or “The Kanye West School for Spotlight Avoidance” or “Ellen DeGeneres’ Texas Barbecue Review for Vegan Magazine”.

    2) Matthew 15, the reason why the idiom persists (though not, apparently the original source), is actually relevant to the discussion in a more subtle way. In the story, the Pharisees are talking about the Law concerning how to prepare for a meal: Jesus says: “it is not what goes into the mouth that defiles a person, but what comes out of the mouth; this defiles a person.” (which might be updated as “A person’s shit may smell, but it is their words that can stink”.) Jesus goes on the Pharisees obsession with what can go into your mouth isn’t important and calls them “blind guides” and that they should be ignored – their teaching has no value. In the story, Jesus is urging his followers to transform how they think of the old text and of the Commandments, that there is a more caring way to view the Law. As is common with Biblical readings, there are more questions than answers.

    3) Thanks to Brent Simmons for encouraging me to write this as a blog post and share it.

    4) It is completely coincidental that you can’t spell Pharisee without “see”

    5) Thanks to author of, and the anonymous commenter on, this post: thatcrazycrippledchick.blogspot.com/2014/07/t…

  • Achievement Unlocked: Found a fish on the Burke-Gilman trail

  • Idea: “Stormtroopers!” - a first-person shooter where no player can actually hit a target, but hitting other things have fun secondary effects

  • I love you all, too. @_RocketFM

  • ScotusBlog has an excellent and humorous banner graphic: The Justices each dealing with remote conferencing in their own old-fashioned way. www.scotusblog.com

  • Hey, I'm on The April Xcoders Podcast!

    The April Xcoders Podcast features Tim Ekl and Jared Sorge and me talking about XcodeGen.  

    Xcoders is the Pacific Northwest Apple-platform developers meetup group, with Meetups in Seattle, Redmond and Vancouver.  When meetings aren’t cancelled due to pandemics, I try to get to the Seattle and Redmond meetups, and I’d really like to try to get to a Vancouver meetup someday.

  • Practicing the Coding Challenges

    Brent Simmons (@brentsimmons) muses over the value of coding questions for software interviews here:

    I mostly agree with his take, but as someone who has done a lot of interviewing, I actually love the coding problem he cites:

    You need to add two numbers and get a sum. But, importantly, 
    the digits of those numbers are stored in arrays, and they’re backwards.

    The return value also needs to be in a backwards array.

    If inputs are [4,2,6] and [3,8,0,8], the function should
    return [7,0,7,8] — because 624 + 8083 == 8707.

    I know plenty of interviewers who would have the same shortsighted approach Brent laments in his post:  that there’s a mindset that coding questions are all about efficient solutions and applying the right techniques to get to “optimized” code.  And in that context, there’s a “best” answer that an interviewer might want an interviewee to discover and implement.

    Of course, that’s wrong.  There is no best answer.  The approach Brent describes as his first instinct — to optimize for understandable, readable and simple code — is my first instinct, too, but that doesn’t mean that it is “right” — just optimized for something else.  As an interviewer, I’m happy with any answer as long as the interviewee can explain why they took the approach they did. And so many details of an implementation of the code for a problem like this shows off the instincts and the “comfort zone” of an candidate.

    Did they write one long function or break the solution up into smaller parts?  Did they give variables and functions intelligible names?  Did they lean on their chosen language’s standard library or libraries?  Did they ask why, or even theorize why such a function was needed in the first place?  Did they write test code first, or perhaps at least consider a few test cases?  Did their function prototypes make sense?  Did they show they were comfortable using pointers?  Did they use pointer math in unsafe ways, or perhaps they used a language which didn’t allow unsafe pointer math?  

    Then, knowing where the candidate comfort zone is, I’d try to venture outside of it.  I might ask “under what circumstances does your code not work as expected” if there’s integer overflow issues.  I might ask “can you write a unit test to verify that your code works” if it is structured in a way that makes unit testing awkward.  I might ask “can you you write code comments about what each parameter does?” if I think the interviewee doesn’t quite know how their own code works.  

    I might even pose a question like 

     what do you expect that the result should be if the 
    inputs are  [-4,2,-6] and [-3,8,0,-8] ?"

    if they wrote a function where those were possible inputs.

    My ideal coding interview question is simple enough that the candidate can show me their talents in their comfort zone, and complicated enough that it is easy to extend the question beyond their comfort zone - a strategy which lets me figure out exactly what kind of developer I’d get if I hired them.

    I have a feeling that anyone using this method with Brent would come out of it knowing exactly what kind of developer they’d get if they hired him.  And of course it would be a mistake if they didn’t.

  • CaseIterable

    Just discovered swift's CaseIterable which makes this sweet code possible:

    let allCaseValues = MyEnum.allCases.map() {$0.rawValue}

    Let’s say you’ve defined an enum like this one from the swift programming language guide:

    enum ASCIIControlCharacter: Character {
        case tab = "\t"
        case lineFeed = "\n"
        case carriageReturn = "\r"

    Just adding CaseIterable to the declaration like this:

    enum ASCIIControlCharacter: Character, CaseIterable {
        case tab = "\t"
        case lineFeed = "\n"
        case carriageReturn = "\r"


    allows the use of the expression ASCIIControlCharacter.allCases, which returns the array

    [ASCIIControlCharacter.tab,ASCIIControlCharacter.lineFeed, ASCIIControlCharacter.carriageReturn]

    and using ASCIIControlCharacter.allCases.map  {$0.rawValue} turns the array into an array of the raw values:

    ["\t”, "\n", "\r"]


    In my case, I’m using an Enum for the CodingKeys for decoding a JSON object.  Using 

    let allCaseValues = CodingKeys.allCases.map() {$0.rawValue}

    gives me a list of the JSON object fields I’m expecting to be able to decode.



  • The Weekly Review's Accountability Segment

    (Context: I listen to @theweeklyreview each week as part of my aspirations to get more task-organized. The most recent episode asked for name suggestions for a new segment)   I don’t have a good suggestion for the name of the segment, but I suggest you make this a listener engagement exercise — do a poll on micro.blog (and/or, gasp, twitter) asking listeners whose task (Jean’s or James’) is least appealing, and announce the result the next week when you discuss your successes at actually doing the previous week’s task.

  • Voyager Revisited

    @macgenie Thanks for Voyager Revisited! It's a wonderful respite from everything that's going on these days, and really interesting to hear other folks' takes on characters and plotlines. (Voyager Revisited link: [www.theincomparable.com/voyager/](https://www.theincomparable.com/voyager/))

  • Panchayat

    Recent bingewatching discovery: Panchayat

    Situation comedy where the situation is rural India. Serious change of pace from your regular American sensibilities, and yet totally relatable. Highly recommended.


  • Why doesn’t Boris Johnson like Japanese baths?


  • The Parable of the Great Young Girl

    There was a young girl who was very, very concerned about climate change. She spoke out, saying that she was worried that people were not doing enough to preserve the planet. She worried that one day, people would not even have air to breathe. Many people people tried to ignore her, thinking she was just a foolish girl, and what did she know about how the world worked. Others openly mocked her, telling her that if she was so concerned about the problem, that she should stop breathing, because her own life was making the problem worse – breathing in fresh air and breathing out carbon dioxide. Some very rich people hired some goons to harass her on Twitter, and make up false stories about her and her family.

    The girl told the people who were mocking her that she was sorry for them. And she told everyone that she thought it was because her parents loved her so much that she was able to breathe in the toxic exhaust of the people who mocked her, and still work towards a world where everyone would have air to breathe, and that she hoped her words would have enough life in them to make up for the oxygen she was consuming.

    This only made the rich people madder, for they had long ago abandoned their compassion and humanity in their quest for more wealth, and they doubled their efforts to belittle her. But others who were watching what was happening could not forget the words of the little girl, and they began to think about their own breathing for the first time.

subscribe via RSS