PodSearch

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]