#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]