Developing Perspective

Show 2


00:00:00   Hello, and welcome to Developing Perspective.

00:00:02   Developing Perspective is a near daily podcast discussing the news of note in iOS, Apple,

00:00:07   and the like.

00:00:08   I'm your host, David Smith.

00:00:10   I'm an independent iOS developer based in Herndon, Virginia.

00:00:13   This is show two, and today is Friday, July 28th, 2011.

00:00:19   The format of Developing Perspective is that I'll cover a handful of links and articles

00:00:24   that I found interesting in roughly the last 24 hours, and then move on to a slightly more

00:00:29   general discussion towards the end.

00:00:31   The show will never be longer than 15 minutes and will never include third-party advertising.

00:00:37   And so without further ado, let's get to it.

00:00:39   It's going to probably be a little bit of a shorter show today.

00:00:42   Not a whole lot of news going on, but I found some interesting links, some things that you

00:00:46   may not have heard of or definitely things to check out.

00:00:49   First, I'm going to start off with just sort of a general link to the Bjango, bjango.com,

00:00:57   their blog, which is just Django.com/articles.

00:01:01   There's just some really interesting articles and things

00:01:04   here focused mostly on design, but also just generally

00:01:07   about being in the App Store, some of the things

00:01:09   they found dissecting iTunes links, all kinds of things.

00:01:13   It's definitely a place that you want to add to your RSS reader.

00:01:16   You could be constantly checking out.

00:01:18   They recently started doing a podcast, it looks like,

00:01:20   or are part of a podcast.

00:01:22   And just definitely, if you want to make your apps increase

00:01:25   in polish, you want to make your apps look better,

00:01:28   this is definitely a place to go look out.

00:01:30   They do a lot of stuff talking about the retina display,

00:01:33   talking about different Photoshop tools,

00:01:36   those kinds of things.

00:01:36   So it really just works with the entire site.

00:01:39   If you haven't read every word of it,

00:01:41   you're not doing a good job.

00:01:44   Next, there's just one of these fascinating articles

00:01:47   over on Asymco that Horace put together.

00:01:50   We were talking about not just market share, which

00:01:53   is something that you hear a lot about in the smartphone,

00:01:55   mobile phone industry.

00:01:57   He was talking about profitability.

00:01:59   And this is-- he just announced this back from Q2 2007

00:02:04   to Q2 2011.

00:02:06   And it's just kind of a remarkable thing

00:02:08   where you see how dramatically Apple disrupted this industry.

00:02:12   And he's disrupted in the actual sort of real term

00:02:15   there rather than just the startup term, where basically

00:02:19   they just came in and stole Nokia's lunch.

00:02:23   Nokia had been doing huge, huge profits in this area.

00:02:28   They accounted for 55% of the total smartphone operating

00:02:34   share back in 2007, whereas now Apple takes 66% of that number.

00:02:40   And Nokia is running at a loss, which

00:02:42   is quite a remarkable change.

00:02:44   And just one of those things that, as you look at,

00:02:47   just reminds you how important it

00:02:49   is to not get too complacent, not get too comfortable,

00:02:52   and don't think too much about what it is you're doing.

00:02:57   All right, next, I have just a link to something.

00:03:00   This is a link I originally heard from this week's

00:03:03   Hypercritical episode.

00:03:05   It's over secrets.blacktree.com.

00:03:09   And Secrets is basically a database

00:03:11   of hidden settings and adjustments

00:03:13   that you can make in Mac OS.

00:03:14   So if you've ever done one of those things

00:03:16   where you open up terminal, type defaults right,

00:03:19   and add some crazy setting to change Finder, to change Mail,

00:03:24   to change some application that you like,

00:03:26   this is definitely the way to improve your experience,

00:03:29   or at least to customize your experience.

00:03:32   And this is a great little app that you

00:03:34   can install as a preference pane on your Mac, which

00:03:36   allows you to change them without having to do all

00:03:39   the crazy stuff at the terminal.

00:03:40   But also, it's just an interesting thing to browse,

00:03:42   to look through, to see if there's anything that you're

00:03:45   like, hey, I wish I did that.

00:03:46   Didn't happen.

00:03:47   I wish they didn't have those crazy animations in Mail,

00:03:50   or the window opening animation in Lion,

00:03:54   or those types of things.

00:03:55   And so there's just lots of stuff to look into.

00:03:57   Definitely worth checking out.

00:04:00   And lastly, this is kind of a link,

00:04:03   but it's also probably the lead-in

00:04:04   to the general discussion.

00:04:06   And this is talking about what I-- I was recently using Reader,

00:04:11   and I was noticing some of the crazy things they do in the

00:04:14   status bar, where while the app's syncing and refreshing,

00:04:20   it changes the status bar to show this.

00:04:22   And at first, I was thinking, oh, that's crazy.

00:04:25   Are they using some private API?

00:04:26   Somehow they found a way to sneak that by Apple.

00:04:29   And I started digging a little bit more.

00:04:31   And I found that basically they're just doing it

00:04:33   by doing some stuff in NSWindow, kind of overlaying stuff

00:04:37   on top of the status bar by playing with exactly where you

00:04:42   put things with some frame offsets and things like that.

00:04:45   And then I was like, oh, that's interesting.

00:04:47   And I wonder if anyone's standardized that.

00:04:49   And I found a project, empty status bar overlay,

00:04:52   over on GitHub, which I'll link to in the show notes, which

00:04:55   does this and allows you to do a couple of standard operations

00:04:58   where you can take over the status bar,

00:05:00   you can show a spinner in the side,

00:05:02   you can do all kinds of things like that,

00:05:05   which is a tricky thing.

00:05:06   And definitely, from reading their descriptions,

00:05:08   it sounds like there's definitely--

00:05:10   it's a dangerous thing to do.

00:05:11   Some people who have been doing this kind of thing

00:05:13   have found their apps rejected from the App Store

00:05:16   for breaking the Hague or the style of what applications

00:05:20   should and how they should operate.

00:05:23   The thing that I found most interesting about this,

00:05:25   A, it's really cool.

00:05:26   Just it's something that I would love to have in applications

00:05:29   generally.

00:05:30   I think the risk factor of being rejected

00:05:33   would probably exclude it from a lot of my apps, though.

00:05:36   But it's definitely something I'm keeping an eye on.

00:05:38   But what it really led me into was

00:05:40   a thought discussion I was having about third party

00:05:44   code in your applications.

00:05:47   And so if you're a developer, you've

00:05:49   almost certainly come across this in something

00:05:51   where you're trying to do something and you're like,

00:05:53   hey, I wonder if someone's done this better.

00:05:55   You go over to GitHub, do a search,

00:05:56   and you find some MIT licensed library that says,

00:06:00   hey, that's basically what you want.

00:06:02   It's something, for example, some of the most--

00:06:05   sort of probably the most widely used are things like ASI,

00:06:07   HTTP request for handling network traffic.

00:06:11   There are some great things for doing modal blockers.

00:06:14   There's this thing.

00:06:15   There's a thing I linked to a couple days ago

00:06:18   about string formatting.

00:06:20   There's any number of applications and libraries

00:06:22   that you could use that would allow

00:06:26   you to do all kinds of things without having code

00:06:30   that you write yourself.

00:06:31   And I started thinking, well, really,

00:06:33   what are the boundaries?

00:06:35   What are the things that a developer should

00:06:37   be thinking about when they see something that sort of works

00:06:40   like they want, but they're not sure if it's for them.

00:06:44   These are kind of some of the thoughts that I came up with.

00:06:46   I think first, it's important to always think

00:06:50   of the context of what application

00:06:52   is that you are writing.

00:06:55   Is this an application that you're writing for yourself?

00:06:58   Is it just sort of an experiment?

00:07:00   Is it a client project?

00:07:01   Is it something that you're expecting

00:07:03   to be doing maintenance on for years to come?

00:07:07   Because I think those types of discussions

00:07:09   really help sort of balance the trade-offs that you're making,

00:07:12   where essentially you're getting sort of free code

00:07:15   at the expense of increased maintenance, increased

00:07:18   unpredictability in your code, and potentially sometimes

00:07:21   problems that are going to be very hard to track down,

00:07:24   because it's code you didn't write.

00:07:27   And so I think it's important to have that kind of a thing

00:07:30   in mind when you work on something like this,

00:07:32   of like, really, what am I doing with this?

00:07:34   something that I want to have worked for years and years.

00:07:38   If it's a prototype, that's something

00:07:40   that you're throwing together.

00:07:41   Say it's a client project where they're saying,

00:07:43   we want a proof of concept.

00:07:46   Something like that.

00:07:47   Then maybe using a bit more third party code

00:07:49   to just get that head start makes a lot of sense.

00:07:52   If it's something that you're writing for yourself

00:07:54   or for your company that you're going

00:07:56   to be maintaining for weeks, months, years,

00:07:59   it's something that you probably want to try and avoid.

00:08:01   I mean, there's certainly a spectrum.

00:08:02   There's some things that make sense to use.

00:08:05   Because at the end of the day, you're using a lot of third

00:08:09   party-- all of the SDK is a third party thing.

00:08:11   You're just relying on Apple to support it.

00:08:13   Now, clearly, they have a lot of incentive

00:08:16   to keep it upgraded, to keep it working in a way

00:08:19   that GitHub repo from someone you don't know is.

00:08:23   But it's not necessarily that using third party code is bad.

00:08:27   It's just something that you want to be very weary of.

00:08:30   And then I think a second thing, in addition

00:08:31   of thinking about the context of your application

00:08:34   and thinking about, OK, how am I going to be maintaining it?

00:08:38   What's that going to look like?

00:08:40   I was also just struck by the importance

00:08:42   of thinking about what would be the impact of pulling this out

00:08:46   of my application?

00:08:47   Would it dramatically and catastrophically

00:08:49   change the way that I use my application?

00:08:53   And something I was thinking about here--

00:08:54   so for example, there's a very famous iPhone library

00:08:59   called 320, which was extracted from the Facebook application.

00:09:04   And the thing that's challenging here

00:09:06   is that it does a lot of UI stuff.

00:09:08   It just makes a lot of changes and adjustments

00:09:10   that you can be like, hey, here's a whole view controller

00:09:12   stack that lets you create a gallery of images

00:09:16   and those types of things.

00:09:17   And the thing that would make me very worried about something

00:09:19   like that is pulling that out would basically

00:09:22   render your application useless.

00:09:24   Whereas, for example, say you changed

00:09:28   from using something that did a nice modal blocker

00:09:31   with animation.

00:09:31   It's like, well, that didn't work.

00:09:33   Well, maybe I'll just use an alert view now.

00:09:36   You can very easily switch out that behavior

00:09:39   in a way that wouldn't destroy your application.

00:09:41   If your entire application, the core of it, is based on that,

00:09:44   then you're going to think you're

00:09:45   going to have a lot of trouble down the road,

00:09:47   especially if something comes up, you have some weird bug.

00:09:50   I mean, another example of this, also picking on 320,

00:09:53   is I remember once working on an application where

00:09:57   They were, instead of using the standard navigation,

00:10:01   view controller hierarchy kind of thing,

00:10:04   they were using this thing in 320

00:10:05   where you had essentially URL-based navigation.

00:10:09   So each view controller published a URL.

00:10:12   And when you navigated, you navigated to a link,

00:10:15   kind of like you would on a web page.

00:10:17   I was just struck by how horribly brittle that is,

00:10:21   how unlikely that is to really continue

00:10:25   work well going forward.

00:10:27   You look at that thing six months later,

00:10:29   I thought that that's a bad idea.

00:10:30   I mean, if that had been the way that Apple had decided

00:10:32   to handle that view hierarchy navigation, that'd be fine.

00:10:37   But as new OS versions come out, as new platforms come out,

00:10:40   that just seems like a very difficult thing

00:10:43   to keep updated, to keep working correctly, to keep happy.

00:10:48   And so I think those are the types of things

00:10:50   that you really want to shy away from.

00:10:52   If it's something that, hey, someone-- for example,

00:10:55   there's a great thing called the gradient buttons, which

00:10:57   is something that Jeff LaMarche wrote over on the iphonedevelopment.blogspot.com

00:11:01   blog.

00:11:02   And he was talking-- and it's just a little thing that stylizes a UI button

00:11:06   and makes it look a little prettier, makes-- lets

00:11:08   you do some things without having to get into Photoshop.

00:11:11   It's something that I've used before, and I think

00:11:13   it's just a really nice, pretty thing.

00:11:15   And the great thing is if, for whatever reason, that stopped working.

00:11:18   Say iOS 5 comes out, I run my app.

00:11:21   And the way he's done the graphics in that application

00:11:23   just doesn't work.

00:11:25   Well, I can pull it out, and I've got a UI button.

00:11:28   Nothing's changed.

00:11:29   My application still works fine.

00:11:31   He had just subclassed UI button and added a few methods.

00:11:34   So in those cases, I think you can really justify using it.

00:11:39   But in cases where you'd really be destroying your application

00:11:43   to pull it out, you definitely want to avoid it.

00:11:46   All right, well, that's it for today's show.

00:11:48   Hope you enjoyed it.

00:11:49   And if you have any questions, comments, concerns, thoughts,

00:11:53   hit me up on Twitter.

00:11:54   I'm @_davidsmith.

00:11:56   That's underscore D-A-V-I-D-S-M-I-T-H.

00:12:00   Otherwise, have a good Friday.

00:12:02   Have a good weekend.

00:12:02   And happy coding.