• Love/hate relationship with Cocoa bindings

    When I started ReceiptWallet over 6 years ago, I wanted to use the latest and greatest Mac OS X technologies, so I used Cocoa bindings to make it easier to bring the UI to life. Bindings allowed me to write less code and have UI elements updated automatically based on what was selected and other variables. Bindings work great for simple cases, but once things start getting complex, bindings almost become a problem. Bindings are quite hard to debug as there is no one place where you can see all the bindings and one slight change to the code can cause a crash; tracking down the crash can take hours. I had to write custom debugging routines to examine the bindings and eventually shipped a stable product.

    Fast forward 6 years. This past week I wanted to write a simple app and choose to use bindings again to link up the user interface. This app didn't do much, but it took me hours to figure out bindings again discovering that I had forgotten almost all I learned about bindings and the documentation wasn't much help. My biggest problem was that I accidentally setup a binding for an NSTableView in addition to setting up a binding for the NSTableColumn. Of course, nothing warns you of this and debugging is a nightmare. I'm sure if I started using bindings again I'd get better at them, but with as infrequently as I write Mac applications, I'll probably struggle the next time I attempt to use them.

    Is there a simple guide I'm missing? Should I abandon bindings completely? I have no idea.

  • Abusing NSDictionary

    Lately I've been more aware of developers using NSDictionary where a class should be used. While it may seem easier to use an NSDictionary to store data and pass it around, the lack of type checking and easily mistype keys is prone to failure. Creating classes with a bunch of properties has gotten even easier with the latest version of Xcode; you don't even have to synthesize properties. Just define the properties and presto, you have a class where you would have used an NSDictionary. NSDictionaries have their place, but in many cases classes serve developers better.

  • Social media for customer service

    In the last few years, people have taken their frustrations dealing with customer service reps to social media. Companies, in turn, are reacting quite quickly to complaints and reaching out to customers. While I'm not sure I'm a fan of jumping on social media before giving companies a chance to fix the problem, it seems to be an amazingly effective tool.

    Last month I returned my cable modem to avoid the $3.95 monthly lease fee that is now being charged and replaced the cable modem with the same model that I bought off eBay for $23. I had to goto a Time Warner Cable store to do this and got a receipt for the return. Like all the paper I collect, I scanned in the receipt and stored it in Paperless. When I received my next bill, I saw that I was still being charged for the lease (it is billed one month in advance), so I contacted customer service via the web chat and tweeted about it. I got a direct message asking if they could help, but I had already gotten it "resolved" via the standard channel. I thought my tweet complaining was legitimate as I shouldn't have had to contact customer service after waiting at the store and returning the modem. Problem solved, or so I thought.

    I just got my latest bill; it had a $3.95 credit on it, but the cable modem lease fee was still being charged. OK, so now I've gone through the official channel twice to fix this issue. I tweeted again and this time corresponded with their social media folks who said they escalated the issue. Awesome service on a Saturday by the social media folks, but this kind of issue shouldn't have required me to do this.

    So the moral seems to be, if a company wrongs you, they are much better at fixing the problem if you complain in public. I'm not saying that this is the way to go, but if the front line folks aren't capable of doing their jobs correctly, then I'm not going to waste my time and will just use Twitter as my complaint board. While I'd like to say that companies will do a better job at fixing things the first time, social media probably isn't going to change that.

    I have my fingers crossed that I'll not only get credited the $3.95 for the charge for the cable modem this month, but the recurring charge will be taken off my bill. However, given the track record, I suspect that I'll either get the recurring charge taken off or the credit, but not both. If that is the case, I'll be taking to Twitter again next month and possibly doing a chargeback on my credit card; I have very little patience for things not done right the first or second time. Yes, it is only $3.95, but it is the principal that matters to me.

  • Review: Une Bobine

    As some that read this blog know, I'm still in the pursuit of a good stand for my iPhones. While I do most of my iOS development using the simulator, there are times when I need to test on an actual device, a stand comes in handy. I've backed a number of Kickstarter projects for stands, but have generally not been pleased. The last project I backed was the Une Bobine. This "stand" is a flexible iPhone cable wrapped in a metal coil that retains it shape.

    When I first saw this, I thought it was a great way to be able to position the iPhone and have it connected to my computer. When it arrived, I was quite pleased with the workmanship and the utility. It allows my iPhone to sit at a decent height and makes it easy to access all the controls.

    It is a unique design where the only thing that holds up the iPhone is the connector at the bottom. This, however, is what I consider its design flaw. The bottom connector wasn't designed to take stress. The Une Bobine could put a significant amount of stress on the internal parts of the iPhone dock connector. At this point, I'm not too concerned with this as I use it with my test iPhones and if the connector happens to break, I can take it apart and not worry about it.

    Pros

    • Unique design.
    • Very flexible.

    Cons

    • Connector could cause extra stress on the dock connector.
    • Only works with the dock connector (doesn't work with the iPhone 5 except with some wacky plastic that they now sell).
    • A bit expensive.

    Summary

    While this "stand" is going to work for me for development purposes, I'm not sure I'd buy it again. If the bottom connector somehow cradled the phone to reduce stress and possibly allowed the use of the Lightning connector, I might reconsider. I'm still in the pursuit of a decent cradle and having seen some of my co-workers cradles, I'm going to investigate much simpler stands that are already on the market so that I can read reviews before making a purchase.