Developing Perspective

#63: Side Projects and Internationalization


00:00:00   Hello and welcome to Developing Perspective. Developing Perspective is a podcast discussing

00:00:04   news of note in iOS development, Apple, and the like. I'm your host, David Smith. I'm

00:00:09   an independent iOS developer based in Herne, Virginia. This is show number 63, and today

00:00:13   is Thursday, July 12th. Developing Perspective is never longer than 15 minutes, so let's

00:00:18   get started. First, a couple of more minor notes. First, I just wanted to let you know

00:00:23   that there's now a new little Satch page. It's not linked anywhere on the page on the

00:00:27   the site because it's not something that I sort of--it's not private, but it's not something

00:00:32   that I want to sort of just want, you know, showing up in Google indexes and things. So

00:00:35   it's not linked anywhere. But if you go to developingperspective.com/stats.html, you

00:00:40   can get a little stats page about download stats. Mostly, I just did something I did

00:00:44   for myself, but I figure if any of you out there are kind of like me and just sort of

00:00:49   love numbers and just kind of seeing and knowing kind of, "Oh, what's--you know, okay, so this

00:00:53   guy has a podcast, kind of, you know, how many people does it reach and so on." You

00:00:56   know, it's up there. By all means check it out, take a look. And, you know, anyway, I

00:01:01   figured I'd share. Like I said, it's not like, it's not private, but it's not public either,

00:01:06   I guess. It's like protected in Java per lens. Anyway, also, there's a link I'll have in

00:01:15   the show notes that there's a great list of iOS and Mac development podcasts that was

00:01:20   put together by Rob Bazinet. Hopefully I'm saying that right. And it includes my, you

00:01:25   know, this podcast, which obviously if you're listening to, you already know and enjoy hopefully.

00:01:30   But there's another couple of other really great ones. Core Intuition, I listen to every

00:01:34   week. Build and Analyze, I listen to every week. And there's a couple that I've been

00:01:38   wanting to get into or started getting into. NS Brief by Sol Mora. Sol Mora looks pretty

00:01:44   good. And there's Edge Cases. I tried the first episode, which is a really technical

00:01:51   podcast with Andrew Pontius and Wolf Resnick, and it's great and super detailed, but I found

00:02:01   it kind of intractable.

00:02:02   Not in the way like hypercritical, like John Siracuse's podcast is intractable, where it's

00:02:06   just really deep, but I found it really hard to ... It's almost like I need to lock myself

00:02:10   in a dark room with a big piece of paper and just kind of be transcribing it to keep track

00:02:15   of what's going on.

00:02:16   So it was a little difficult, but anyway, it's a great sort of collection, highly recommended,

00:02:19   And it's a little self-serving obviously because I'm on the list and he says nice things about

00:02:22   me, but I figured I'd share it because I was just, you know, if you like this one, you'll

00:02:27   probably like the rest of the things on that list.

00:02:29   All right, so now onto the sort of actual topics for today.

00:02:34   And really I have two different topics that I'm going to talk about.

00:02:37   And the first is something that I've recently been doing, which is sort of, I guess you

00:02:42   could put it as the importance of side projects and the importance of letting yourself kind

00:02:48   of wander around and do interesting things and experiment with new technology and be

00:02:52   well-rounded. And so, you know, this recently I've been doing is, I'm not sure if you're

00:02:58   familiar with Sam Sofs and his Cheddar app, you know, he just recently opened an API for

00:03:03   that, which is a task management app. It's a beautiful little thing for super high performance,

00:03:08   simple task management, to-do list, lots of the, you know, it's a--I love--I know Sam,

00:03:14   he's a friend and I really like what he's doing. It's a really interesting business

00:03:18   model where it's a free app with in-app purchase for more lists and things, which all that

00:03:24   stuff's great. What I'm actually interested in talking about is what I did is when I saw

00:03:30   that he opened up his developer API, so you can add, create, manage your list. You can

00:03:34   essentially replace his application, and for him that works great because he makes all

00:03:38   of his money from subscriptions and in-app purchase, not from the actual app itself.

00:03:43   so he has something to lose in that way.

00:03:46   But as soon as I saw that, I was like, yes, I'm

00:03:49   going to do that as a side project.

00:03:51   I'm going to take a couple days, stick a pin in what I'm working on

00:03:54   for my main bread and butter apps, and just, I'm

00:03:56   going to make something for that.

00:03:57   I want to play with that.

00:03:58   I want to learn something new.

00:04:01   And it's a pattern that I've done many times over the course of--

00:04:05   the course of my development.

00:04:06   And I've made these-- I have a lot of applications.

00:04:08   I have an application that all it does is generate

00:04:13   plain wallpapers for the iPhone or iPad, which I can have a link in the show notes for.

00:04:18   But basically, it's super simple. It's just a collection of colors. You hit it, you say,

00:04:23   "I want a black wallpaper. I want a gray wallpaper. I want whatever color you want."

00:04:27   But that's just something that I made over the course of a couple of days. It was just an idea

00:04:33   I had. I got frustrated when I got... This was, I think, oh, gosh, it must have been iOS 4, I think,

00:04:38   when they switched from the black wallpaper to the... You could have a colorful wallpaper.

00:04:43   And I just like-- I mean, for me, actually, I do--

00:04:45   Daring Fireball Gray is my-- which

00:04:48   is one of the defaults in the app.

00:04:50   But for me, it was about-- I wanted

00:04:54   an app that could do that.

00:04:55   And my wife, Lauren, she wanted a pink wallpaper.

00:04:58   So I was like, great, I'll write that app.

00:05:00   And then for this one, it's like, OK, I

00:05:02   want to make an app for this.

00:05:03   And so off I go, and I'm making an app that is designed just

00:05:06   for quick capture, so for kind of brain

00:05:08   dumping all your tasks and to-dos into Cheddar, which

00:05:11   which is great. The actual details of what that is doesn't really matter so much. The

00:05:16   goal and sort of the point of why I'm bringing this up is I found that as a developer, especially

00:05:22   as an independent developer whose time is so kind of back and forth and for someone

00:05:28   who you end up just being so pigeon-holed working on the same project over and over

00:05:33   and over and over again, you know, up to version five on audiobooks and I think four on my

00:05:38   recipe book. You know, it's like I, my life is just constantly iterating and perfecting

00:05:43   and pruning and, you know, making those things as good as I can. It gets very monotonous.

00:05:48   So I find this great pattern of being able to go in and just work on a side project.

00:05:55   It doesn't have to make money. It, you know, I'll put them in the store and, you know,

00:05:59   like I think, you know, my plain wallpapers app is maybe, you know, I have a few hundred

00:06:02   people who have bought it and that's great. But, you know, it, the purpose is that I've

00:06:07   learn new skills. And it's almost like starting from first principles.

00:06:11   Is that maybe even a better term for it? Where any existing application tends to have a body

00:06:18   of code that you're kind of maintaining, and you have this weight that you're kind of -- you

00:06:24   don't want to go away from, that you don't want to mess with and break, and who knows

00:06:29   what's going to happen. And so you tend to be -- you're kind of working around the cruft,

00:06:35   Maybe there's a better way to put it.

00:06:37   And so what I love doing is there's something liberating

00:06:39   about going into Xcode, a file new project, and just starting

00:06:43   from a blank canvas and learning from your own

00:06:45   mistakes, so using your best practices over and over and

00:06:48   over again to make a better and better app.

00:06:52   And I find that I can learn things and play with things and

00:06:55   experiment with new frameworks, new APIs, things

00:06:58   that are just difficult to do otherwise in a big monolithic

00:07:03   application. And it's great to just be able to take those and just play with them.

00:07:08   You know, it's like this app will be, I don't know, probably iOS 5 as its base requirement.

00:07:12   I could, in theory, require iOS 6, but it's not going to be out for a couple of months.

00:07:15   That's kind of lame. You know, so it'll be, you know, require iOS 5. I could probably

00:07:19   require iOS 5.1 or 1.1 if I really wanted. But, you know, it was really great to just

00:07:26   be playing with it. It's like, okay, what APIs? What new things can I work with and

00:07:29   play with, what libraries that--

00:07:31   open source libraries that I've been thinking about or seen,

00:07:34   can you incorporate into it and use it as a playground.

00:07:38   And I found that it's really--

00:07:41   there's just something valuable in that.

00:07:43   And so I just mentioned it as an encouragement

00:07:45   to other developers that having little side projects

00:07:48   is just awesome.

00:07:50   And it is really helpful in helping

00:07:52   you be a better developer by--

00:07:54   it reminds me a little bit of almost like those Japanese Zen

00:07:57   gardens where you have the sand and you kind of rake it.

00:08:01   And part of the goal--

00:08:03   once you build something, is that you then smooth it back

00:08:06   out and you build it again.

00:08:09   There's an impermanence to it.

00:08:11   And in software, it's so hard to have that start again

00:08:14   experience where you just start from a blank canvas and

00:08:17   can take all the mistakes you've made and correct them

00:08:21   and build an application as you would like it to be.

00:08:25   And that just seems like a really good-- almost like a pattern or a practice

00:08:30   to get into.

00:08:31   That sort of start from a blank canvas, see, OK, what is in my mind right now

00:08:35   best practice?

00:08:35   How would I build this?

00:08:36   How would I structure it?

00:08:37   What would I do?

00:08:38   What mistakes have I made in the past that I want to avoid in structuring this?

00:08:41   And I found that to just work awesomely for me.

00:08:45   So anyway, that's kind of the first thing.

00:08:47   And I just-- just definitely give it a go.

00:08:50   Work on some side projects and see where that goes.

00:08:54   It doesn't have to be financially interesting.

00:08:56   It just has to be interesting for you.

00:08:59   And so the next topic, and the second topic

00:09:01   I'm going to talk about today, is

00:09:03   I got a question from Paul Donahue, who

00:09:06   was asking about internationalization

00:09:10   in applications.

00:09:11   And it's something that he was thinking

00:09:12   about for his application.

00:09:13   And he just asked, what do I think about it?

00:09:14   And internationalization is kind of like continuous integration,

00:09:19   where it's this thing that I think in my mind,

00:09:21   oh, I should be doing that, but I never have,

00:09:25   that I think that would be awesome.

00:09:27   I wish my apps were in 27 different languages,

00:09:29   and I could be making a lot more money because they'd

00:09:31   sell better in all different places.

00:09:34   And I've just never done it.

00:09:35   And so I started thinking, why haven't I done this?

00:09:38   It's like the same thing with continuous integration.

00:09:40   In theory, it's great, but I've just never done it.

00:09:43   And I think I can certainly blame obvious things like,

00:09:45   oh, I'm just an independent developer.

00:09:48   I don't have the resources to manage that process, which

00:09:50   Which is a total cop-out.

00:09:53   That is not at all true, and it's not even reasonable.

00:09:56   It's more just a question of it's not something

00:09:58   that I've prioritized.

00:10:01   But I think I will.

00:10:03   I think it's one of those things that I'm saying--

00:10:05   I'm saying it on the show, because then you

00:10:07   can sort of-- I have an audience to keep me slightly

00:10:10   accountable to.

00:10:10   But I think it's one of those things

00:10:12   that I really need to do for my apps is at least try it.

00:10:15   Go through one of these services.

00:10:17   There's a bunch of them.

00:10:18   I think iLocalize and Tetris, there's all kinds of different services.

00:10:24   And if you have experiences with any of them, or you work for an internationalization company

00:10:29   and want to show me the ropes, then that would be awesome.

00:10:34   But I want to just give it a go and try, because for all I know,

00:10:39   it's like there's that weird feeling of, "Is there 20% of my market that I'm not addressing

00:10:45   because I haven't localized my application, even just

00:10:48   to the extent of I haven't localized my app

00:10:50   to store description.

00:10:51   Sort of simple things like that that don't even

00:10:53   require technical skill, that I'm just missing out on.

00:10:58   And if I spend whatever the couple weeks of going

00:11:01   through the process and localizing all the apps,

00:11:03   that all of a sudden my sales would go up 20%.

00:11:06   Because suddenly people in Germany and France and Japan

00:11:09   and all over the world now can finally get my app,

00:11:12   and they couldn't get it before.

00:11:14   Maybe that's the case, maybe it's not, but I think it's definitely interesting.

00:11:18   I mean, technically, Apple makes it ridiculously easy.

00:11:21   And I think especially with the new Xcode, 4.5, I think it is.

00:11:26   I'm not sure if it's Iowa 6 related, but I'm remembering stuff--

00:11:29   sort of stuff I can't talk about, but stuff at WWDC they were talking about

00:11:33   that really--

00:11:34   they're spending a lot of time and doing a lot of work on the back end

00:11:37   to make it really easy for us to develop internationalized, localized

00:11:42   applications.

00:11:44   And actually, that's probably a fair point, using the two

00:11:46   words in a sentence.

00:11:47   There is actually a difference between internationalization

00:11:50   and localization.

00:11:52   I used to work for a language learning company, and so I

00:11:55   have a bit of that.

00:11:56   Where localization is more about adapting the terms in

00:12:01   your application to the local use, and then

00:12:04   internationalization is typically translation.

00:12:07   And typically, those things are often the same.

00:12:11   there's a huge overlap in the Venn diagram between them.

00:12:14   But there are also sometimes things where, as an example,

00:12:19   the easiest example usually is to consider

00:12:22   the difference between US English and British English,

00:12:25   English English.

00:12:26   And obviously, you're not changing

00:12:29   the language between those two.

00:12:32   And there are some translation that you do.

00:12:34   So if you have color, C-O-L-O-R, in the United States,

00:12:37   in England that may be C-O-L-O-U-R, which is sort of a translation.

00:12:42   But there may also be localization.

00:12:44   Say, for example, your app includes a reference

00:12:46   to a sweater that may need to be changed to a jumper, which isn't really

00:12:50   a translation because they're both English words.

00:12:53   They both are valid in both places.

00:12:55   But you're adapting the application and its terminology

00:12:59   to be more appropriate and recognizable to a user.

00:13:01   But it's a side topic.

00:13:03   But anyway, so internationalization seems pretty straightforward

00:13:07   In Xcode, it's one of those things that you just kind of--

00:13:10   in general, you're just going to build

00:13:12   this huge set of strings, which is basically just a big hash,

00:13:16   that says this token means this in this language.

00:13:19   This token should be replaced with this in this language.

00:13:21   And you just build up this huge thing.

00:13:23   All your nibs, all your--

00:13:25   anywhere that you have a string literal in your application

00:13:28   gets externalized.

00:13:29   And you put it into these strings files.

00:13:31   And then you just send these--

00:13:32   typically what you'll do is you'll generate an English one,

00:13:35   send it to a localization company who

00:13:37   has translators who just go through and do a translation.

00:13:40   And that's basically it.

00:13:42   You then take that, plug it back into your application.

00:13:44   And when the apps run in that language, all of a sudden,

00:13:48   all these things will start working.

00:13:51   It'll now be in German.

00:13:52   It'll be in French.

00:13:53   It'll be in Japanese.

00:13:55   One fun thing with auto layout coming in iOS 6,

00:13:58   a lot of the challenging part of localization,

00:14:00   making sure your UI adapts correctly

00:14:02   to German, the classic one with huge long words, a lot of that

00:14:06   gets better with auto layout because you can kind of play with it a little bit.

00:14:09   iOS is always tricky because you only have so much space. You only have 320 pixels wide,

00:14:14   for example, on the iPhone. So there's only so much you can do.

00:14:16   But anyway, I'm committing to try out internationalization. If I don't talk about it again in about a

00:14:24   month from now, please beat me up on Twitter. But otherwise, I look forward to reporting

00:14:29   back on how that goes.

00:14:30   All right, that's it for today's show. As always, if you have questions, comments, concerns,

00:14:35   hit me up on Twitter. I'm @_davidsmith. The Twitter feed for this show is @devperspective.

00:14:40   And otherwise, have a good week, happy coding, and I will talk to you later. Bye.

00:14:44   [BLANK_AUDIO]