PodSearch

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.