#134: Useful Toys.
00:00:00
◼
►
Hello and welcome to Developing Perspective.
00:00:02
◼
►
Developing Perspective is a podcast discussing news of note in iOS development, Apple and
00:00:07
◼
►
I'm your host, David Smith.
00:00:08
◼
►
I'm an independent iOS and Mac developer based in Herndon, Virginia.
00:00:11
◼
►
This is show number 134 and today is Friday, July 19th.
00:00:15
◼
►
Developing Perspective is never longer than 15 minutes, so let's get started.
00:00:18
◼
►
All right, first I just want to start off by thanking everybody for the kind words and
00:00:22
◼
►
encouragement after posting my, I guess, my two-year anniversary show last week.
00:00:27
◼
►
was really nice to hear all the people who responded and talked
00:00:30
◼
►
about how the role of developing perspective
00:00:33
◼
►
is played in them and their career
00:00:35
◼
►
and the apps they've shipped and things like that.
00:00:37
◼
►
So that was kind of cool to hear.
00:00:38
◼
►
So thank you.
00:00:39
◼
►
I appreciate that.
00:00:40
◼
►
And so after that, I'm just going
00:00:42
◼
►
to dive right into my topic for today, which is about--
00:00:45
◼
►
I guess you could call it toy projects,
00:00:48
◼
►
like playground projects.
00:00:49
◼
►
Everyone, I think, has different names for these.
00:00:51
◼
►
But I think there's something that I
00:00:53
◼
►
think is very important for people to use.
00:00:56
◼
►
And I find myself increasingly kind of heading in this direction.
00:00:59
◼
►
And so I kind of wanted to talk about the role they play for me
00:01:02
◼
►
and how useful they are.
00:01:04
◼
►
So specifically, I'm going to talk from my own experience.
00:01:07
◼
►
This last couple of weeks, I've been working on a little toy project
00:01:11
◼
►
because it started from a place of realizing that--
00:01:14
◼
►
Iowa 7 especially--had a lot of new APIs,
00:01:18
◼
►
a lot of new things that it does,
00:01:20
◼
►
and a lot of things that it does in ways that will change how I build my apps.
00:01:25
◼
►
And so I thought to myself, well, as I'm staring down, making updates to all my big, my main,
00:01:32
◼
►
my significant applications, that's a bit of an intimidating thing to look at a code
00:01:35
◼
►
base with, I don't even know, thousands of lines of code and say, OK, well, how am I
00:01:40
◼
►
going to adapt this?
00:01:41
◼
►
How am I going to change this?
00:01:42
◼
►
What do I need to do to make this iOS 7 ready?
00:01:45
◼
►
And then also, how do I make that coexist well with iOS 6?
00:01:48
◼
►
And these kinds of questions kind of made me start to get a little intimidated.
00:01:52
◼
►
I was like, you know what I should do?
00:01:54
◼
►
I should pull up one of my old kind of sort of toy projects,
00:01:57
◼
►
and I should work on that and update that for iOS 7
00:02:01
◼
►
and see if we sort of get some experience with that.
00:02:04
◼
►
And so what I did is I pulled up an old project of mine called
00:02:07
◼
►
Simplegram, which is an Instagram viewing application.
00:02:10
◼
►
And I thought to myself, well, this is a good one.
00:02:12
◼
►
It's a very basic app in the sense
00:02:14
◼
►
that it just displays pictures for the most part,
00:02:16
◼
►
does a few web service calls, gets back some JSON, parses it,
00:02:18
◼
►
displays it to the user, does some caching.
00:02:20
◼
►
But it could really use a lot of the stuff that's
00:02:22
◼
►
coming in iOS 7.
00:02:23
◼
►
And obviously, I'm not going to get into the technical side of that so much as the kind
00:02:26
◼
►
of just the high level stuff from the keynote and, you know, Apple's general thing that,
00:02:30
◼
►
you know, you can do things like background downloading now.
00:02:32
◼
►
And there's a variety of UI and changes and improvements that are coming in iOS 7.
00:02:36
◼
►
And so I was like, well, let's try this.
00:02:38
◼
►
And so I started and, you know, the next -- sort of in my spare time and sort of evenings and
00:02:43
◼
►
things over the last week, I've been working on this.
00:02:45
◼
►
And I've gotten it now to a point where it's a fully working iOS 7 application.
00:02:50
◼
►
What I love is that what that does is that puts me now
00:02:52
◼
►
in a place that I have this great little sort of example
00:02:55
◼
►
code for myself of how to do things in iOS 7.
00:02:58
◼
►
All the new APIs for appearance and networking,
00:03:03
◼
►
and all the little things that are changing out
00:03:05
◼
►
from under the app, I have a reference implementation
00:03:08
◼
►
that is useful and meaningful, styled how I like it.
00:03:12
◼
►
That's kind of going beyond, say, the sample code
00:03:14
◼
►
that you get from WWDC or something like that.
00:03:17
◼
►
Because I find that we're kind of in this weird middle ground
00:03:20
◼
►
now, where after iOS 7 actually launches in the fall,
00:03:27
◼
►
there'll be a lot of talk about it in terms of tutorials
00:03:29
◼
►
and books and all kinds of things
00:03:31
◼
►
that will appear at that point to help people kind of work
00:03:34
◼
►
around some of the complicated edges.
00:03:37
◼
►
But until then, you kind of run on your own for better or worse.
00:03:40
◼
►
And so this was something that I did,
00:03:41
◼
►
and I was just really encouraged that it didn't take that long,
00:03:44
◼
►
because if you scale down the problem to something that's
00:03:47
◼
►
fairly straightforward-- my goal was
00:03:49
◼
►
to keep it as simple as possible.
00:03:51
◼
►
It's like, I want to build something
00:03:52
◼
►
that can pull in from a web service and download assets,
00:03:58
◼
►
and has a UI that is cool in all the ways that iOS 7 UIs are
00:04:03
◼
►
And so I sort of built that.
00:04:06
◼
►
But now it's essentially like a four-class application.
00:04:09
◼
►
It's very simple.
00:04:11
◼
►
And it lets me try things out and play with things in a way
00:04:14
◼
►
that is also kind of cool.
00:04:16
◼
►
So another thing I did with this, which is getting away
00:04:18
◼
►
from the iOS 7 thing, for a while now, I've been thinking,
00:04:21
◼
►
you know, like, Core Data is-- sometimes feels like a trap,
00:04:27
◼
►
in a good way and a bad way.
00:04:29
◼
►
So like, Core Data, which I've used
00:04:31
◼
►
in a lot of my applications, can do a lot of things,
00:04:34
◼
►
and can do-- make them-- and can get you up and going very
00:04:38
◼
►
quickly for a lot of applications,
00:04:41
◼
►
for a lot of projects.
00:04:42
◼
►
There's good tools in the browser.
00:04:44
◼
►
There's a lot of documentation.
00:04:45
◼
►
There's a lot of books and tutorials and things
00:04:47
◼
►
people, it kind of gets you up and going.
00:04:50
◼
►
But what I've found recently is using core data brings with it a tremendous amount of
00:04:56
◼
►
There's a lot of things going on and there's a lot of limitations that you have, especially
00:05:00
◼
►
on performance side of things, that I kind of don't like.
00:05:03
◼
►
And so I've been for a while then like, oh, maybe I should do something else.
00:05:06
◼
►
Maybe I should use SQLite directly, which is sort of the most obvious approach for all
00:05:11
◼
►
kind of my data persistence needs.
00:05:13
◼
►
But I've always been like, oh, man, migrating away from that
00:05:15
◼
►
would be really complicated, because I've
00:05:17
◼
►
got these big, large projects.
00:05:19
◼
►
And so I took the same philosophy.
00:05:21
◼
►
I was like, well, let's see if I can take Simplegram.
00:05:23
◼
►
Just take this very simple application
00:05:25
◼
►
and change its state of persistence away from that
00:05:27
◼
►
and into SQLite.
00:05:29
◼
►
And so that's what I did.
00:05:30
◼
►
And the result-- and this is sort of a mini topic
00:05:33
◼
►
that I just kind of wanted to branch off on--
00:05:35
◼
►
is that was actually really, really cool.
00:05:38
◼
►
And I strongly recommend you take a look at that.
00:05:42
◼
►
Now, you're playing at a much lower level with SQLite.
00:05:49
◼
►
So SQLite, if you're not familiar,
00:05:51
◼
►
it's a file-based database.
00:05:52
◼
►
It's what Core Data usually sits on top of.
00:05:55
◼
►
And it's basically a SQL database that runs,
00:05:58
◼
►
but is just file-based.
00:05:59
◼
►
So it's not one of these large server-based things.
00:06:02
◼
►
It's just something you open a file,
00:06:03
◼
►
but it has a very well-structured way of doing it.
00:06:05
◼
►
And you can browse it and query it and insert into it, et
00:06:09
◼
►
And using it directly gives you a tremendous amount
00:06:12
◼
►
update a value, I think if you do anything that involves batch
00:06:15
◼
►
operations-- that's the one area that I'd say Core Data really,
00:06:19
◼
►
really struggles with.
00:06:20
◼
►
And this is something, as you may wonder,
00:06:23
◼
►
I have a variety of circumstances
00:06:25
◼
►
where I need to do things like, for example,
00:06:27
◼
►
take a collection of articles and mark them all as a red
00:06:30
◼
►
in Feed Wrangler or something like that,
00:06:31
◼
►
or places where you're going to delete a bunch of things
00:06:35
◼
►
if they're older than a certain type.
00:06:37
◼
►
Now, in Core Data, you essentially
00:06:39
◼
►
have to load those objects.
00:06:40
◼
►
you can do to speed this up a little bit.
00:06:42
◼
►
But a lot of what you're doing is
00:06:43
◼
►
you'll end up loading all these objects into memory
00:06:46
◼
►
and then iterating over them to delete them,
00:06:47
◼
►
rather than just being able to make a single SQL call
00:06:49
◼
►
and say update red equals true where ID in blank.
00:06:55
◼
►
And it's tremendously more performant.
00:06:57
◼
►
It's kind of one of these amazing things
00:06:59
◼
►
that I've been thinking I should do for a while,
00:07:03
◼
►
but having now have a sort of a toy project, an example where
00:07:07
◼
►
I can actually try it out, I feel
00:07:09
◼
►
much more confident about than taking that and moving it
00:07:12
◼
►
into something else.
00:07:14
◼
►
A side note to my side note is if you're
00:07:16
◼
►
going to get into SQLite, the best place, I think,
00:07:18
◼
►
to start is to get FMDB, which is Gus Mueller's wrapper
00:07:24
◼
►
That is excellent.
00:07:25
◼
►
I'll have a link in the show notes.
00:07:26
◼
►
It's a great way to kind of just get up and running.
00:07:28
◼
►
And I'll also have a link in the show notes
00:07:30
◼
►
to a tool called Base, which is a Mac application.
00:07:32
◼
►
It's kind of a GUI application for setting up, editing,
00:07:35
◼
►
browsing SQLite databases, which I've been using for years
00:07:38
◼
►
and really like whenever I'm wanting
00:07:41
◼
►
to look inside the database.
00:07:42
◼
►
It's just a really quick way to do it.
00:07:44
◼
►
It's an interface that I've just grown accustomed to
00:07:47
◼
►
and really like.
00:07:48
◼
►
So anyway, so now I have this very useful tool.
00:07:51
◼
►
And that led me to an interesting--
00:07:54
◼
►
another realization that I thought was interesting I
00:07:56
◼
►
wanted to talk about is-- so what I've been saying
00:07:59
◼
►
is that these test projects, these proof of concepts
00:08:03
◼
►
or technological test beds, whatever you want to call them,
00:08:06
◼
►
are useful in terms of teaching you, in terms of scaling down
00:08:09
◼
►
a problem to something that you're only
00:08:11
◼
►
dealing with the interesting technologies that you want,
00:08:13
◼
►
whatever that may be.
00:08:14
◼
►
So if you're doing a text application,
00:08:16
◼
►
maybe you want to play out with some hot new text stuff,
00:08:19
◼
►
you can have an application that's focused on that.
00:08:22
◼
►
What I realized is that it was important for me
00:08:24
◼
►
to, rather than just making it super kind of esoteric test
00:08:29
◼
►
project, it was important for me to make something
00:08:31
◼
►
that was actually useful.
00:08:33
◼
►
Because if I didn't, then-- and I've done this before--
00:08:37
◼
►
I'm not actually testing the edges of the technology
00:08:41
◼
►
in a way that I'm just doing the bits that I think I'll need.
00:08:46
◼
►
And then when I actually go to implement it
00:08:47
◼
►
and properly in my application, then
00:08:49
◼
►
there's all this other complexity that sprouts out
00:08:51
◼
►
and grows from it.
00:08:52
◼
►
So you want to build something, I think,
00:08:54
◼
►
for this type of a toy project that is actually useful.
00:08:59
◼
►
You want to build these useful toys that you can actually
00:09:02
◼
►
sit down and use.
00:09:03
◼
►
And so in this case, it's an Instagram browser,
00:09:05
◼
►
which is something that I use periodically
00:09:07
◼
►
to look at pictures on Instagram.
00:09:09
◼
►
And so it's something that I actually--
00:09:11
◼
►
I can just replace it, take the Instagram icon off my phone,
00:09:15
◼
►
and put Simplegram in its place.
00:09:18
◼
►
And I can play with it and use it,
00:09:21
◼
►
I've seen it in a conscious way for a couple of days.
00:09:23
◼
►
And I'll start finding the weird things that I wasn't doing
00:09:26
◼
►
right, or the things where the places that it falls down,
00:09:29
◼
►
or the weird bugs in the beta that I
00:09:30
◼
►
I need to go file radars about.
00:09:33
◼
►
These are the kind of things that you
00:09:34
◼
►
wouldn't see if it just was a totally esoteric test
00:09:37
◼
►
application.
00:09:37
◼
►
And this is the kind of problem you'll see a lot with, say,
00:09:40
◼
►
like sample code that you'll get from Apple.
00:09:42
◼
►
It's something that you'd never actually use.
00:09:44
◼
►
It's just a proof of concept.
00:09:46
◼
►
And so if you're going to use these,
00:09:47
◼
►
I think making them useful is something that's kind of cool.
00:09:52
◼
►
And then it has a secondary benefit,
00:09:53
◼
►
is that you actually potentially-- you can end up
00:09:55
◼
►
in a point where you can decide, hey,
00:09:57
◼
►
is this actually a product?
00:09:59
◼
►
Now, it's unlikely to be a product that's
00:10:00
◼
►
going to set the store on fire and make you millions of dollars.
00:10:03
◼
►
But it's a project that you could potentially say, you know what?
00:10:05
◼
►
This is actually useful.
00:10:07
◼
►
It's something sophisticated.
00:10:08
◼
►
It's not complicated.
00:10:09
◼
►
It's intentionally stripped down.
00:10:11
◼
►
But with a bit of work to clean it up and polish it up,
00:10:14
◼
►
do the various art assets and the help and so on and things like,
00:10:18
◼
►
you could potentially take that idea, take that test bed,
00:10:22
◼
►
turn it into something that you can put into the store,
00:10:24
◼
►
and then you've made it-- you've validated that time.
00:10:28
◼
►
at even another level.
00:10:29
◼
►
In addition to just being useful for yourself
00:10:32
◼
►
and for your personal development,
00:10:33
◼
►
you now have something that you can put in the store,
00:10:36
◼
►
maybe make a little money from, or get
00:10:38
◼
►
a little bit of exposure from, or just
00:10:39
◼
►
have the experience of putting something in the store.
00:10:42
◼
►
I talk to a lot of people who listen
00:10:44
◼
►
to the show who have never actually submitted apps
00:10:46
◼
►
to the store.
00:10:48
◼
►
They're kind of interested in it,
00:10:49
◼
►
or it's a hobby or something like that.
00:10:51
◼
►
And there's a tremendous amount that you learn from actually
00:10:53
◼
►
just putting something in the store,
00:10:55
◼
►
going through that process, understanding
00:10:57
◼
►
how iTunes Connect works, et cetera.
00:10:59
◼
►
And so it's just something that I was going to--
00:11:01
◼
►
the third level benefit of this is that you finally
00:11:04
◼
►
have a project that you can put out there.
00:11:06
◼
►
And it can do almost anything.
00:11:08
◼
►
It can be very, very simple.
00:11:09
◼
►
It can just be an application that downloads something
00:11:11
◼
►
and shows it to you.
00:11:12
◼
►
But if that thing that it's downloading
00:11:14
◼
►
is useful or interesting or something
00:11:15
◼
►
that you're going to check on a regular basis, then great.
00:11:18
◼
►
Or it can test a new graphical API or a new whatever it is.
00:11:22
◼
►
So just something that I was doing this week
00:11:24
◼
►
that I thought would be interesting to talk about.
00:11:26
◼
►
And so first, it's encouraging people to-- especially
00:11:28
◼
►
as we're heading into iOS 7 or heading into new technology--
00:11:32
◼
►
is to try and strip down all the things
00:11:35
◼
►
that you're going to have to learn into a very
00:11:37
◼
►
simple, well-defined problem, and then solve that first.
00:11:41
◼
►
And then you can take those lessons and apply them directly
00:11:43
◼
►
to the bigger thing without all the complexity of trying
00:11:46
◼
►
to just dive into the thousands and thousands of lines of code
00:11:49
◼
►
that you'll need to update and work to make it actually
00:11:51
◼
►
work in a big project.
00:11:53
◼
►
And two, make sure that it's actually useful.
00:11:55
◼
►
that you yourself-- even if you're
00:11:58
◼
►
the only person who would-- that you yourself would play with,
00:12:00
◼
►
that you yourself would look at and use on a regular basis.
00:12:04
◼
►
So you can really understand where your implementations are
00:12:07
◼
►
falling down before you take them and try and put them
00:12:09
◼
►
into something else, which is a lot of complexity
00:12:11
◼
►
and would be harder, necessarily,
00:12:13
◼
►
to dive down into it.
00:12:14
◼
►
And then lastly, build something that maybe you
00:12:16
◼
►
could actually put in the store and just take advantage of that.
00:12:19
◼
►
All right, so that's kind of it for the day's show.
00:12:21
◼
►
I just thought it was an interesting topic, something
00:12:23
◼
►
that I'm definitely diving into recently.
00:12:25
◼
►
And so I figured I'd share.
00:12:27
◼
►
Otherwise, I hope you guys have a great weekend.
00:12:30
◼
►
If you have any questions, comments, concerns,
00:12:31
◼
►
or complaints, I'm on Twitter @_davidsmith.
00:12:34
◼
►
You can email me, david@developingperspective.com.
00:12:36
◼
►
Otherwise, have a great weekend.
00:12:39
◼
►
Happy coding, and I'll talk to you next week.