0:00:00Don't pick the drop tables one though because Apple probably does not...
0:00:03is not protected against injection attacks.
0:00:06Yeah, right. Yeah, we'll take down the whole iTunes store.
0:00:08I do like "I'm double meta" or "meta" however you'd like to pronounce it. I thought that was good.
0:00:13Who says "meta"? I've heard that occasionally, but it's much more rare than, you know,
0:00:18the GIF GIF thing. Like, that's like 50/50, but "meta"? No, sorry. That's not good.
0:00:26This reminds me of when I brought up the bra phase in neutral.
0:00:30But I wrote my first VA list function a few minutes ago.
0:00:35Like, all this time, I've known that it's a thing.
0:00:38I've known that this is how you do variable argument list C
0:00:43functions.
0:00:44But I've never actually needed to write one.
0:00:47Really?
0:00:47Until like an hour ago.
0:00:49God, I did that at my first job, which was C++ for DOS.
0:00:55I don't remember why I did it, but I did it, and it was weird.
0:00:59So what did you use it for?
0:01:00Am I allowed to ask?
0:01:01Yeah, if you want.
0:01:03So for my new big thing, I've now
0:01:08done-- in substantially shipping products,
0:01:11I've now done both core data in the magazine.
0:01:16And granted, that's a pretty light use of core data,
0:01:18but it's still a shipping production use of this thing
0:01:23for a real app that's not entirely trivial.
0:01:26So I've used Core Data, and in Instapaper,
0:01:31I used SQLite just raw.
0:01:33And I made a few lightweight utility functions
0:01:38to wrap on top of it, but everything was really just done
0:01:42via raw queries and raw calls to the SQLite API.
0:01:46And I know it's not pronounced SQLite, and I don't care.
0:01:49I also say GIF.
0:01:50Oh, well.
0:01:52Suck it.
0:01:53So, anyway.
0:01:54So, for my new project, now that I've seen both, I would like to get back to SQLite a
0:02:04little bit, just because Core Data is really nice for a very large set of things, but this
0:02:10is something where I expect to be dealing with a lot of data.
0:02:14And I know when you have large datasets that Core Data performance problems can pretty
0:02:19easily arise and can often be very, very hard to get around.
0:02:23So I decided to use Gus Mueller's awesome FMDB, which is a pretty lightweight wrapper
0:02:33around SQLite.
0:02:35And what I decided to build was a similarly lightweight model class on top of that.
0:02:43And this is probably -- this is one of those things where if you hear a programmer saying
0:02:47they made their own model class. Chances are it was a bad idea.
0:02:51And mine, chances are mine is probably a bad idea as well,
0:02:55but I'm doing it anyway, just like writing my own blog engine and roasting my own coffee.
0:02:59I'm doing these things anyway, even though it's generally not worth it, and I'm probably, like,
0:03:03so, okay, the main argument against this, this is the classic
0:03:07like, programmer know-it-all wanting to rewrite something really critical
0:03:11that everyone's done a million times, and chances are my version is gonna have bugs.
0:03:15You know, they're re-implementing UNIX joke or Emacs or Lisp or whatever the joke is.
0:03:20They're probably all three.
0:03:22- Is it Lisp? - It is Lisp? Okay. I thought it was Unix.
0:03:27Okay. I'll have to look that up.
0:03:29Anyways...
0:03:31Actually, of course you're right, John. This is the kind of thing you would know.
0:03:34It's not re-implementing. It's like, you know, any program eventually includes a, you know,
0:03:40half-assed buggy re-implementation of Lisp or something like that. I'm paraphrasing.
0:03:44Yeah, I'm pretty sure that is the thing I'm referring to. Okay, anyway. So, and there's
0:03:49already probably a million of these things out there, but I don't like using other people's
0:03:54frameworks that do substantial, like, non-trivial things. I don't generally tend to use those,
0:04:02except apples and, you know, things that I just really could not write myself. But, and,
0:04:08you know, I'm okay using other people's, like, utility functions, stuff like that, and that's
0:04:12why I'm using FMDB, because not only do a lot of people use it, and Gus Mueller is a
0:04:15good programmer, but I can look at the code. It's not a very large library. It's actually
0:04:21very, very compact, and it really is just like, it's really just convenience wrappers
0:04:27around SQLite, for the most part. And so, you know, it's pretty thin.
0:04:33So you're not like an AF networking fan then?
0:04:37AF networking, I added it to the magazine fairly late.
0:04:41I think in the most recent version of the magazine,
0:04:43I think I added it for some relatively trivial thing.
0:04:48I really just wanted to try it.
0:04:50I know AF networking is very, very good,
0:04:52and its programmer.
0:04:53Is that Matt with three Ts?
0:04:55Thompson, who writes that?
0:04:56- I believe that's right.
0:04:58- Well anyway, he's really, really good.
0:04:59So that's the kind of, like,
0:05:01I have no problem using his code,
0:05:02'cause he's ridiculously good.
0:05:04So we'll have to look that up.
0:05:06I'm pretty sure it's him.
0:05:07But, and that's what I think, everyone uses AF networking,
0:05:11so I know that it probably is not buggy,
0:05:13and if there is a bug, it's probably gonna get
0:05:14fixed pretty quickly.
0:05:15So, and that's another thing, like, you know,
0:05:18they do a lot of things there.
0:05:20It's still a fairly thin layer, though.
0:05:23Like, I mean, different parts of it, I guess,
0:05:24are different widths, or thicknesses, but,
0:05:28(laughing)
0:05:29but yeah, so anyway.
0:05:31Long story short, I decided to write my own model class.
0:05:35And this involves, you know,
0:05:39anytime you write something like this,
0:05:40there's a lot of weird design decisions you have to make.
0:05:43This is one of the first times I've really had to dive in
0:05:47to Objective-C runtime stuff.
0:05:50And I'm trying to avoid it being hacky and bad.
0:05:53And right now I'm calling into some runtime functions
0:05:56to basically do reflection.
0:05:58And I know we had a whole reflection topic
0:06:02on the topic list.
0:06:03I wonder if we can get to those now.
0:06:05- But we certainly can.
0:06:06- Yeah.
0:06:08But you know, like in dynamic languages,
0:06:11like most of the web languages,
0:06:12like the advanced scripting languages and stuff,
0:06:14it's easy to,
0:06:17it's very, very easy to like, you know,
0:06:19just inspect your variables and see what the class has
0:06:22and do crazy things to it and everything else.
0:06:26With Objective-C, a lot of that is possible.
0:06:29Some of it's not.
0:06:30But it's actually more possible than I thought it was.
0:06:34So, one thing I'm doing is, you know, the model class has its own dictionary mapping
0:06:42column names to their values.
0:06:44>> Oh, that's so awful, but carry on.
0:06:47>> Wait, hold on.
0:06:48Go on.
0:06:49>> Well, it's awful.
0:06:50>> This is the time to tell me.
0:06:52>> Well, it's awful in that coming from a .NET background and C# background, that is not
0:06:59at all how I would handle it.
0:07:00it. In Objective-C, that probably is exactly how I would handle it. So I'll tell you the
0:07:04other approach when you're done. So I'm sorry, carry on.
0:07:07No, please tell me now. Oh, all right. So you've just lost the floor
0:07:11for an hour, and John, you might as well just hang up. So one of the things I've been wanting
0:07:15to talk about on ATP for a long time is having a leg in both the .NET and the Objective-C
0:07:22and Cocoa worlds is that there's a lot of obvious differences between the two platforms.
0:07:29And by and large, I really, really like the decisions that Apple's made.
0:07:33And my friend Jamie Pinkham said to me once, when I was complaining about, for example,
0:07:38how convoluted handling dates are within Cocoa, he said, and I was saying, "Oh, why isn't
0:07:44there just a date class that handles everything?"
0:07:46And he said it more eloquently than I'm about to recount it, but he said something to the
0:07:50order of, "Is it really that complex or is it just properly abstracted?"
0:07:55And it was one of those, you know, total mind explosions.
0:07:58And I was like, you know what, you're actually right about that.
0:08:00And so, by and large, I think that that Koko and Koko Touch are really, really well done.
0:08:04However, reflection in Koko and Koko Touch, not as well done as I would like.
0:08:10So, let's give you an example by way of how would I have done the same thing in .NET.
0:08:15And this all cued for me when you tweeted about three or four days ago about what do
0:08:22you call the thing that represents the unique identifier for an object?
0:08:27Naturally, in most languages, that would be ID.
0:08:31But in Objective-C, you can't really do that because ID is a key.
0:08:34That's not true, actually. You can. It works just fine.
0:08:37Which is a little bit scary, which is probably why you shouldn't do it.
0:08:40But it does work. You can name a variable ID.
0:08:43Mine was even type ID.
0:08:46God, that makes me hurt so bad.
0:08:49But the point I'm driving at is whether or not it's tactically allowed,
0:08:52it's just not a good plan. And I think we can all agree about that.
0:08:55So, what would I have done in .NET?
0:08:57Well, what's really great about .NET is reflection is, in my personal opinion, kind of a first
0:09:02class portion of the language.
0:09:04And .NET is really metadata heavy.
0:09:06So what that means is, when I have what a .NET programmer would call a field, but an
0:09:12Objective C programmer would call an IVAR, basically a variable within a class, I can
0:09:17actually decorate that variable with arbitrary things that we call attributes.
0:09:22So if you imagine a class definition, you can say that you have a variable that's called
0:09:29unique identifier, for example.
0:09:32You can put an attribute that's associated with that variable, and that attribute is
0:09:37actually an instance of a class that inherits from a certain base class called, guess what,
0:09:42attribute.
0:09:43So I could make an attribute that decorates that field that specifies what the column
0:09:50name is for that IVAR. So let me play this back. I've got a class. I've got a class that's in my
0:09:58application that may or may not use the same terms as I want to use in my data store. So I could call
0:10:07whatever this is, this variable, like I said, unique identifier, I could call that unique
0:10:13identifier in my C# code, but I could decorate it with an attribute that says, "Hey, when
0:10:20you go back to the database, it's actually called ID."
0:10:24And so that's really, really powerful, being able to easily, and that's the key here, easily
0:10:30introspect and reflect upon yourself and see what metadata you have about your own classes.
0:10:37And I use this constantly.
0:10:39When I first learned about it, it was one of those things where I had a hammer, so everything
0:10:42was a nail. And I'm not proud of that. But as I've gotten to be a more mature programmer,
0:10:49I still use this all the time. And you can write your own custom attributes, like I said.
0:10:54You can use a ton of existing attributes. But being able to decorate your code and give
0:11:00yourself help on what to do with your code is the most powerful thing in the world. So
0:11:06to bring this back to Coco, what I would have liked to have been able to do is do the same
0:11:10thing or for you to have been able to do is to do the same thing and have this IVAR that's
0:11:14maybe called identifier but in the database is called ID and you don't have to have a
0:11:20stupid freaking dictionary or hash table or whatever the case may be hanging out doing
0:11:25that conversion. It's all in line. It's a first class part of that class. Did that make
0:11:31any sense at all?
0:11:32It did. That's actually really cool.
0:11:35Because, I mean, I don't even-- I think--
0:11:38I think there actually is buried in the runtime a way
0:11:42in Objective-C to attach arbitrary objects to any NS
0:11:45object.
0:11:46But I don't think it's supposed to be exposed.
0:11:49And either way, you probably shouldn't
0:11:52be doing things with that.
0:11:54There's a lot of things with designing low level model
0:11:59and reflection type classes and things like that.
0:12:02There's a lot of times where like,
0:12:04there's something you can do that you probably shouldn't do
0:12:07and a lot of room for terrible hacks.
0:12:10- Right, and you could do an associated object,
0:12:12but that's a little bit different
0:12:13because that's more of saying,
0:12:15I'm probably gonna butcher this
0:12:16because I haven't done it in a while,
0:12:17but if memory serves, that's saying,
0:12:19hey, for this instance of this class,
0:12:22I wanna have this arbitrary object associated with it.
0:12:25Whereas what I'm talking about is at a class level,
0:12:27I'm defining an additional piece of metadata that's part of that class definition.
0:12:34And again, it's just extremely powerful.
0:12:35And I think you're right, Marco.
0:12:36I think you can do a lot of this with Objective-C. And I've looked into reflection in Objective-C.
0:12:40And a lot of it is possible, a whole heck of a lot of it.
0:12:45But the thing that's crummy about it, and we've complained about this as a threesome
0:12:49before, is that you've got to drop into the C runtime.
0:12:52You were saying this just a few minutes ago.
0:12:54You gotta drop into the Objective-C runtime, which is all straight C, which once you get
0:12:58used to the cushy world of Objective-C, it's just...
0:13:01Ugh.
0:13:02It's gross.
0:13:03Well, it's not that.
0:13:04I mean, you know, I had to write "Malloch" and "Free" earlier today for the first time
0:13:07in a while, but it's like ten lines of C in the middle of this wonderful Objective-C
0:13:13cushy playland.
0:13:14I mean, it's not that bad.
0:13:18So what would you have done in PHP?
0:13:20And John, I'd like to know where Perl fits in,
0:13:22if we ever give you a chance to talk.
0:13:24What would you have done if you were trying
0:13:26to solve the same problem in PHP?
0:13:27- Well, I have solved the same problem in PHP.
0:13:29I use for Instapaper, for the magazine, for the new things.
0:13:33I do use my own MVC framework
0:13:36that is very thin and lightweight,
0:13:37so I can use SQL directly.
0:13:39All the same goals, actually.
0:13:41Well, most of the same goals.
0:13:42And so I have solved this problem in PHP,
0:13:46And I basically, I think I do roughly the same thing
0:13:51with like, you know, storing the attributes
0:13:54of a model object as a dictionary of, you know,
0:13:58strings to value, of keys to values,
0:14:00and those keys match database column names.
0:14:03And, you know, there's all sorts of things you can do.
0:14:06By the way, I love, if Merlin is actually listening to this,
0:14:09and if he's still listening, I'm getting him back so hard
0:14:12for all that comic book talk and backdoor.
0:14:14(laughing)
0:14:16Hi, Nolan.
0:14:17This is glorious.
0:14:19So you know, there's always-- this
0:14:23is one of the reasons why I like doing this kind of programming
0:14:26at this level, solving these kinds of problems,
0:14:29even though they've been solved a million times before,
0:14:31even though my implementation might not
0:14:33be very good for some people or for some things or for myself,
0:14:35even.
0:14:36I love it because there's so many design decisions
0:14:40that you can make that really do have a pretty big impact.
0:14:43So one of the things-- and I don't
0:14:46want to talk about this for too much of the show,
0:14:48just because I think it will get a little bit boring, even
0:14:50for people who aren't Merlin.
0:14:51But I think one of the things about--
0:14:55one of the hardest parts about this
0:14:57is how do you expose the database fields on the object,
0:15:01and how much code or boilerplate has
0:15:05to be written in the subclasses?
0:15:09So in the model classes, how much do you have to do?
0:15:13and how are the columns represented.
0:15:14So in my thing, I actually do a very similar trick
0:15:18to what Core Data does.
0:15:19Because you can tell at runtime, which I actually
0:15:22don't know why you can tell this at runtime, but you can.
0:15:25You can tell at runtime whether a property was declared
0:15:30dynamic, or rather whether its implementation was declared
0:15:34dynamic, and if it has custom getters or setters.
0:15:39All that stuff is available at runtime from the runtime APIs.
0:15:42So I'm basically making it so that you can set and get
0:15:47arbitrary column names just via a dictionary API.
0:15:50But it also treats any dynamic property as a database column.
0:15:56And then it does useful things.
0:15:58So you can have a property that's an NSURL.
0:16:01And if you declare it dynamic in the implementation file,
0:16:05then the runtime will see that.
0:16:07And so at runtime, it'll say any access to and from that
0:16:11is the database field named that.
0:16:14And then you can just call save, and it works.
0:16:16And you can call the query functions, get them,
0:16:21and it maps into them on read.
0:16:23So it's a very simple model layer.
0:16:29This is one of the reasons why I write my own model
0:16:31layers in the languages that I like.
0:16:35I don't usually like the model layer to have to do that much.
0:16:39And specifically, I treat databases the way
0:16:43that most programmers of previously high-traffic web
0:16:46applications treat databases, which
0:16:49is infrequently and gently.
0:16:51And so I don't like ORMs and really these crazy,
0:16:57very high-functioning model type APIs,
0:17:01where they'll go look up associated objects for you
0:17:04and do extra queries on your behalf.
0:17:06And I don't like query builders.
0:17:08I like to write the query myself so I
0:17:10can choose exactly how it's queried in the database
0:17:12and optimize it.
0:17:15And I don't like anything that creates the tables for me.
0:17:17I don't like the core data gooey about the model declarations
0:17:23and the migrations.
0:17:24Oh, migrations are rough.
0:17:26So I'm basically doing something that-- it
0:17:32is more of a convenience wrapper than a functional wrapper,
0:17:35if that makes sense.
0:17:38it's not doing a whole bunch of magic,
0:17:40it's just getting rid of boilerplate.
0:17:43Does that make sense?
0:17:45- It does.
0:17:46And I guess to me, I view a model as the buffer
0:17:51between the completely myopic database world
0:17:55and the completely myopic application level.
0:17:59And to me, and I agree with you
0:18:01that a model should be extremely dumb.
0:18:03It should basically be a bucket and nothing else,
0:18:06But I would hate not having it around because I want my application code to speak with classes,
0:18:13to classes and very little else.
0:18:15And I want my database to speak to itself in some lay intermediary layer that translates
0:18:20from database to model and back.
0:18:22And I think we're saying the same thing.
0:18:24But I can't, when you said I'm writing a model and oh, I can't believe I'm doing that, et
0:18:28cetera, et cetera.
0:18:30That just, it struck me funny because I would hate not to have one.
0:18:33Yeah.
0:18:34So, John.
0:18:35Yeah, I was about to say, John, where do you land on all this?
0:18:38I want to get back to something that Marco said in the beginning when he introduced this
0:18:42topic about how he was making his own model class, and that's probably a mistake, in case
0:18:48he said he thought it wasn't.
0:18:50Thinking about this topic, I see that a lot as kind of like a class system, pun, for programmers.
0:18:59And I bet--
0:19:00I don't think you have to label your puns.
0:19:01Yeah, maybe Marco has a lot of-- but I mean it like-- you know, you know how I mean it.
0:19:05Maybe Marco has not seen this as much as Casey, who's been out in a J-O-B job for longer,
0:19:11but I see it all the time.
0:19:15People can draw distinctions of all sorts with programmers based on their experience,
0:19:18what language they use, what their education is or whatever.
0:19:21This distinction, I think, is the most important one, much more so than any of those other
0:19:24things.
0:19:25No matter what their education is, how long they've been doing it, what language they're
0:19:27writing in, I usually tend to bin programmers into two groups.
0:19:33One is the programmers who take something that someone else wrote and use it to make
0:19:40a program.
0:19:41They learn Ruby on Rails and they make a web application.
0:19:45They learn UIKit and they make an iOS application.
0:19:50And those people distinguish between the magical elves that make the things they're going to
0:19:56use to write their program and their program.
0:19:59And the second set of people make no distinction between the things they're using to write
0:20:04the program and their program.
0:20:06It's all one continuous thing.
0:20:08And those are the people who are going to write their own thing, even though the vendor
0:20:13provides one.
0:20:14Or those are the people who are going to write their own web frameworks, or their own blog
0:20:18engines, or like, in the extreme case, their own language.
0:20:21Like it's a complete continuum, and there's no hard and fast line between, "These are
0:20:25the words that I type to make my program work, and this is my program. I don't know if you want to
0:20:30call tool builders, because you don't necessarily have to be that type of thing, but there are some
0:20:33people who will never cross that line. In every environment they find themselves in programming,
0:20:39they will draw that distinction somewhere and say, "That is other, and I don't do that, and that is
0:20:43magic, and I call those things to make my program work, and then my program is a series of
0:20:47conditionals and loops and variables and classes or whatever that use that thing to do their work."
0:20:52I think that distinction is—like when I heard Marcus say, "Oh, I probably shouldn't
0:20:58write there.
0:20:59I probably shouldn't write my own model class," being afraid to try to draw that line and
0:21:05using it as a barrier and saying, "I shouldn't cross over the line."
0:21:07Now, one is practicality.
0:21:08Like, maybe you shouldn't write your own language in compiler to do this tip calculator program
0:21:12or something, right?
0:21:14That's one side of it.
0:21:15The other side of it is that I see a lot of people who draw that line and are afraid to
0:21:17ever cross it.
0:21:18Everyone starts with that line because you don't know what the heck you're doing when
0:21:20you start out, right?
0:21:22I would encourage everybody who thinks they can recognize that line to realize that line
0:21:26doesn't exist. It's all just one big continuum of code written by people. And there's no
0:21:31reason you can't write a better one of whatever it is that you're using all the way up and
0:21:34down the chain. And in some cases, you should. And obviously, you know, like knowing when
0:21:39you should and when you shouldn't is a whole separate matter. But never like, you know,
0:21:43I wouldn't even Marco, just like, if there's a reason not to do it, it's not because like,
0:21:48"Oh, I'm going to screw it up. I'm not going to do it."
0:21:50People who made those things are, at a certain point, they're just other people too.
0:21:54Who made FMDB? It's just another guy.
0:21:57The only way you'll ever get good at doing something like that
0:22:00is to decide, "I'm going to make my own thing here."
0:22:03And then your thing might not be as good, but the fifth version of your thing will be as good,
0:22:07and then you've just become one of those people. Now that line is gone.
0:22:10So that's my take on this whole meta topic.
0:22:15I'm going to get a meta topic for a metadata topic.
0:22:17Get it?
0:22:18I'm double meta.
0:22:20And as for the actual things you're all talking about there,
0:22:23I don't want to go, well, Simpsons did it on you.
0:22:25But I always do.
0:22:26Simpsons did it, right?
0:22:27So all this stuff is kind of all that in the Perl world.
0:22:31And the path that I've sort of traveled--
0:22:34and I think a lot of the Perl community
0:22:35has traveled on the same topic-- is in the beginning,
0:22:43you've got a way to send SQL queries somewhere,
0:22:46and that's annoying, and someone writes some nicer way
0:22:48to wrap that up, and that's nicer,
0:22:50but then you're like, okay, well now I wanna make
0:22:52some classes associated with things
0:22:54that are gonna be associated with tables,
0:22:55and it's kind of annoying to write all that,
0:22:58which fields are associated with which columns,
0:23:00and like Marco was getting to,
0:23:01how much do I have to write?
0:23:03After you've done 10 or 20 of those things,
0:23:04at a certain point you're like,
0:23:05can I type less and get the same effect?
0:23:07And then you're like, you know what,
0:23:10can I type even less?
0:23:11like the ActiveRecord Rails type thing where you're like, "Why do I have to type anything?
0:23:14Can't I just inspect the database and figure out what all the columns are and do all that
0:23:18stuff for me?"
0:23:19And it's like, "Look, I can type one line and my whole thing is done."
0:23:24And you can do that in dynamic languages.
0:23:26You can probably do that in Objective-C if you really wanted to get down and dirty with
0:23:29the Objective-C runtime, although you probably don't.
0:23:31But just don't have anything.
0:23:34Just inspect the database, figure out the classes, figure out the tables, make your
0:23:39classes based on them, have a thing that manages the conventions for naming and also the crap.
0:23:45I think the next step beyond that, which I found probably the biggest leap—the first
0:23:51biggest leap was the one where you get into the race to see how little typing you can
0:23:55do to get useful work done.
0:23:56The second biggest leap, I think, is when you get to the point where you realize that
0:24:01tying your classes to the structure of your database tables is a terrible idea, not just
0:24:07like in terms of the field names, but structurally, period, because maybe this doesn't happen
0:24:11in small projects or projects with a single developer, but in large projects in big companies
0:24:16that evolve over many, many years. Inevitably, the structure of your database has almost
0:24:20no relation to the way you want your application to work. Like, not at all. Not on the table
0:24:24basis, not on anything, like it's just ridiculously divergent. And in some ways you could say,
0:24:28well, that's bad because things are diverging and they're getting all messed up. But sometimes
0:24:32it's necessary because the way your data is structured has to evolve in a direction for
0:24:36for performance or scaling reasons that has no bearing whatsoever
0:24:39on how you would like to deal with it in your application.
0:24:41So I think the next step in the sequence is to give yourself tools
0:24:45to get your data out of the database,
0:24:47but make sure you don't tie any of what you guys are calling model objects,
0:24:51although I hate that term.
0:24:53You don't tie any of the inner workings of your application
0:24:56to the structure or storage location
0:24:57or anything having to do with the stuff in the database.
0:25:00You still need some tool to make it so you don't have to type a million lines of code
0:25:02every time you want to get data out of the database
0:25:04and inflate your values into URL objects and data objects
0:25:08and do all that nice stuff.
0:25:09You still want to be able to not have to type
0:25:12that annoying boilerplate code,
0:25:14but you have to make another box on the graph and say,
0:25:17"Okay, this is my code that gets the crap
0:25:19"out of the database.
0:25:20"This is what's getting created from the data
0:25:22"in the database."
0:25:23And those two are pretty much entirely unrelated.
0:25:25So, and actually, this helps in development too,
0:25:27because you can mock up the stuff
0:25:28that you don't have in the database
0:25:30and other stuff, you can just have text files
0:25:31and other stuff you can just hard code stuff
0:25:33or like the rest of your application won't care because it deals with things that have no relation to the storage location or structure of the thing.
0:25:39And sometimes even when you're doing a project yourself that can free you to say
0:25:43this is the correct table structure, which you know from like just doing database stuff
0:25:47you know which queries are gonna be efficient, what indexes you need, what things should be normalized and not.
0:25:51But when I'm in my application, it would be convenient if the structure was really like this.
0:25:55So make the things that your application deals with look the way they're most convenient for the application to deal with and then have some
0:26:00of layer, which yes, is sometimes annoying to write, but it will save you later, some
0:26:04sort of layer that translates between the two in sometimes Byzantine ways.
0:26:10So that I think is a case where all the things you're talking about with reflection come
0:26:16in at every level of that, because the thing you make that makes it convenient for you
0:26:18to get stuff out of the database, that needs metadata.
0:26:20And then the next thing that you make that takes the data from the database and puts
0:26:24it into the things that your application is going to deal with, like your application's
0:26:28idealized view of the world that doesn't reflect the possible nastiness of the database because
0:26:33of weirdness, that needs some metadata to do that thing because you don't want to write that code
0:26:38up all by yourself. And then finally your application and your top-level thing gets to deal
0:26:42with objects that are magically delicious, that are just like, "Wow, this is so convenient. This
0:26:46is exactly what I needed for my application." It's your idealized view of the world. Wouldn't it be
0:26:52great if we just had three objects and they did this and you're like this? It's so hard to do that
0:26:56when you're an experienced programmer, because you think,
0:26:58"But I can't, that object can't exist to do that,
0:27:00because I know that's going to be on these two tables,
0:27:02and this information is from a third table."
0:27:04And so you end up making things that are tied to your database table.
0:27:08So that's more or less the path I've walked on this topic
0:27:13in Perl and in other languages.
0:27:15And some people, they call it anti-ORM backlash,
0:27:19because the ORM is the active record phase,
0:27:21and you get to that phase and you realize you're kind of in a dead end
0:27:23and you've done a terrible thing.
0:27:25but you're not really. You've created something that's useful, but you need something else as
0:27:31well. So everything that you've done is helping you move forward. There's just another place where
0:27:39you can also move forward. That was a lot of stuff. Yeah, I'll just let that settle in.
0:27:47I think you're right, though, that there's always
0:27:51this kind of battle between the objects that
0:27:56are fully abstracted from the data and the messiness
0:27:59or the structure of the database.
0:28:02One of the things that I think Core Data does a little bit
0:28:07badly for my taste is that it's too much on that object side
0:28:11where Core Data, even though it is based on a database storage
0:28:16and in many ways behaves like a database.
0:28:19In many ways it doesn't let you treat it like a database.
0:28:23And so you're kind of like, there's a whole class of operations
0:28:28that are very easy to do in a database.
0:28:31Things like a lot of things involving multiple records or batches or ranges or things like that.
0:28:35Things that core data either can't do very well or can't do at all.
0:28:39Yeah, it's trying to give you the idealized object version,
0:28:42but not letting you say anything about the database.
0:28:45It's like, "You don't worry about the database.
0:28:47You just tell us how you want the idealized view of the world in your application, and
0:28:50we'll just persist that."
0:28:52And you're like, "Really, I would like to have some influence over that process, because
0:28:56I have some ideas that you may find interesting."
0:28:58Right, exactly.
0:29:00And a lot of times, it's also necessary for performance.
0:29:04When you have an app that has a ton of data or that has maybe one table or one object
0:29:11type that has a lot of entries and they're all very small or something, and you want
0:29:14to do some kind of batch, like that kind of thing.
0:29:16Yeah, because you structure your data so—because you know the seven queries that your application
0:29:21is going to run most of the time, and you know what will make those queries fast and
0:29:24what will not make them fast.
0:29:25And Core Data, as far as I'm aware, gives you no way to influence the way it stores
0:29:30your stuff.
0:29:31You just make your convenient object graph, and you have to either guess or intuit or
0:29:35understand enough about Core Data's implementation of how it's going to lay that out and have
0:29:38to know what operations does Core Data make available, and what queries will that translate
0:29:42into, and will those be efficient?
0:29:43And that's like, you would rather just,
0:29:45you know, look, I know these are gonna,
0:29:46like some app, I bet applications probably just run like,
0:29:49you know, three possibly performance critical queries
0:29:51all the time.
0:29:52And you just say, look, core data, just do this.
0:29:56This is all I want.
0:29:57Everything else, I don't care what you do,
0:29:57but these are the three essential queries.
0:29:59And it's like, nope, I will structure your stuff for you.
0:30:01You don't worry about it.
0:30:02So like for small applications, that's fine,
0:30:04but anyone's done a web application.
0:30:06That's not like they're taking you to core data
0:30:07with web applications, but at a certain point,
0:30:10native applications start, they're not web scale,
0:30:13but the timing is much more critical and the devices are slower.
0:30:17So at a certain point, even a native application, you would like to have
0:30:21that kind of influence, which is why, Marco, you keep coming back to
0:30:25doing your own thing with raw SQLite, because then you have control over that.
0:30:29Exactly, because you have the SQLite on one side, which is
0:30:33SQLite, however you say it, I'm going to pronounce it every different way during the show.
0:30:37Don't let me bully you into my way of saying it. You say it however you want.
0:30:41something like SQLite.
0:30:43Yeah, I don't know what the official one is either.
0:30:45I say it the way I say it.
0:30:47Anyway, SQLite, we're going to say it every way.
0:30:49Alright, that thing, you have that
0:30:51on one side and that
0:30:53doesn't know anything about objects.
0:30:55About your objects and your code. Like it's totally
0:30:57just raw. There's no
0:30:59attempt to even
0:31:01to even do anything higher level
0:31:03than just database rows and that's
0:31:05it.
0:31:07Then on the other end you have core data, which is
0:31:09all about the objects and their mappings,
0:31:11and it doesn't expose anything about the database,
0:31:16and pretends like the database isn't there,
0:31:17to you, the user of it.
0:31:19And so my thing is kind of in the middle.
0:31:23And I actually do intend to open source this.
0:31:27I'm writing with the intention of open sourcing it,
0:31:29and writing it to be a standalone piece so it can be.
0:31:32But, oh, who knows when I'll get to that.
0:31:35I do intend to do that, maybe later this fall.
0:31:38But, you know, my thing, I want to be in the middle of that continuum because I feel like
0:31:46there isn't, there aren't enough choices there. And what's there, a lot of, what's there is
0:31:50basically a whole bunch of people like me making the things for themselves to vary,
0:31:55with varying degrees of success, varying degrees of people using it and reporting bugs, and
0:31:59varying degrees of functionality. And it's a lot like to-do apps. Like, if you're the
0:32:04the kind of person who can make one of these model layers
0:32:07or something like this.
0:32:09The chances that you're going to be happy enough
0:32:11with somebody else's to want to just use theirs instead
0:32:14of making your own is pretty low.
0:32:17And so for me, I'm doing my own thing
0:32:21like I usually do, which is sometimes good, sometimes bad.
0:32:27And so yeah, I'm making this thing
0:32:30between SQLite and Core Data.
0:32:33and I'm going to use it, and we'll see what happens, I guess.
0:32:37I think in native applications, again, not that they're small, small, but you're not
0:32:43writing a system for a product that's going to have seven incarnations.
0:32:51If you are making, let me think of something like this, not Gmail, not LinkedIn, maybe
0:32:57Facebook, some sort of big giant web service used by millions of people that has 10 different
0:33:02ways to interface with it, even just within their own company.
0:33:06That's where you really want to have your data access layer, and then above that have
0:33:11your object layer that gives you the idealized representation, and then have a whole bunch
0:33:16of other people in the company or whatever writing business logic, writing automation
0:33:20things, writing stuff.
0:33:21And all they ever use is the idealized view of the product, which has an ever-changing
0:33:29relationship with how things are actually stored or used so that you're isolating the whole rest of the people,
0:33:34you know, I just talked about this line between the people who are writing the thing and people who are using the thing.
0:33:37Individual programmers shouldn't see that line, but if you're trying to scale up a company,
0:33:42it's a good idea to have people building at various layers, and you want everyone who's just writing,
0:33:47you know, a bunch of reports that run or a bunch of jobs that do maintenance stuff or the people who write the web front end
0:33:52or the people who write the native app.
0:33:53You want all of those people to be using an interface that has almost no relation to the implementation if you could possibly help it
0:34:00And then another set of people dealing with
0:34:03How that you know idealized view of the product interfaces with the data store back in it because they're gonna constantly have to change it
0:34:09They use different data stores. They're gonna rearrange stuff. They're gonna do normalize tables. They're gonna rename things
0:34:13They're gonna do different versions of tables and up and you know, and you don't want anyone else to see that
0:34:17But when you're just doing one native iOS application, maybe with a web service or something
0:34:21especially if you're using a different language for it, the web part of it, it's probably
0:34:26not critical that you make this kind of enterprise-y distinction.
0:34:29I just offered it up as like the next evolution of, so you've gone and done yourself an active
0:34:36writer record type thing which queries the database and gets a structure and builds all
0:34:39your classes on the fly according to some convention with a pluralizer and all this
0:34:42other stuff, and you're still sad.
0:34:44Maybe it's because you actually want that next thing.
0:34:46Awesome.
0:34:47Well, why don't you tell us about something that's pretty awesome, and then I want to
0:34:51speak in favor of Core Data briefly, then we can give up on this probably extremely
0:34:55boring topic.
0:34:56All right. How are you hanging there, Merlin? You're almost there. All right. This week,
0:35:02we are sponsored once again by Hover. Hover is high quality, no hassle domain registration.
0:35:10So they believe that everyone should be able to take control of their online identity,
0:35:15have your own domain name, and they make it easy to do so. They offer .NET, Co, Com, TV,
0:35:21tons of country code TLDs. There's all these TLDs out there now. They keep making new ones.
0:35:28Hover keeps adding them. It's great. So they take all the hassle and friction out of owning
0:35:34and managing domain names. Now, I bet everyone listening to this show is probably nerdy enough
0:35:39to have bought a domain name in the past. And if you bought a domain name anywhere else,
0:35:43I imagine you were not that happy with the experience because I've bought them in a lot
0:35:48of places and they're pretty rough.
0:35:53Most of the places are pretty rough.
0:35:55Hover is to me like a breath of fresh air.
0:35:57They are just so easy, they're honest.
0:36:00They don't try to upsell you with all sorts
0:36:03of weird sleazy stuff.
0:36:04There's no check box on checkout that's like,
0:36:07"Don't not stop sending me the newsletter
0:36:09"that doesn't sell my privacy for $10 a month."
0:36:11They don't try to mislead you,
0:36:13they don't try to get all sleazy
0:36:15and get more money out of you.
0:36:16money out of you. It's just honest, direct, straightforward domain sales. And their management
0:36:21system is very good too. It's well designed, there's easy access to all the features they
0:36:27offer and they do offer quite a lot. And in fact, they actually just added something new.
0:36:31They added Google Apps for Business. You can add Google Apps for Business to any domain
0:36:36from Hover, new or old domains. They even give you a free 30-day trial on that and then
0:36:42prices start at $6 a month per user.
0:36:46It's really great.
0:36:46So anyway, go to hover.com/ATP.
0:36:50You can use promo code ATP to get 10% off.
0:36:54And you should, of course, you should do that.
0:36:55I mean, I use Dan's promo codes forever.
0:36:57You can use ours.
0:36:58So use promo code ATP at hover.com to get 10% off.
0:37:03Any domain purchase and any service purchase.
0:37:06Hover's a great company, really.
0:37:07They even have like, they have no-hold phone service.
0:37:12you just call them Monday through Friday 8 a.m. to 8 p.m. Eastern
0:37:15and you'll be speaking to a live person. They will just pick up the phone and
0:37:18there's a person. It's not a bot.
0:37:20You don't have to say "representative,"
0:37:22"track a package," none of that stuff. You know, it's "I hate them."
0:37:25All those things are terrible. They know that too. They don't do it. They give you
0:37:28only a human. It's just great. So go to hover.com/ATP
0:37:33to get your next domain. Use promo code ATP for 10% off. Thanks a lot to Hover
0:37:37for sponsoring the show.
0:37:40So, to briefly speak in favor of Core Data, so my really crummy, although soon to be not
0:37:46crummy since it's all straight UI kit, so it's going to look great in iOS 7, but my
0:37:50really crummy iPhone app, which I wrote basically as an exercise to teach myself how to write
0:37:55an iPhone app and also...
0:37:56Yeah, you can plug it.
0:37:57That's allowed.
0:37:58Well, it's called FastText and it's embarrassing on iOS 6, but it's going to be brilliant on
0:38:02iOS 7 because I'm going to change virtually nothing and it will all just look magical
0:38:07and pretty.
0:38:08But in any case, the app doesn't do a whole heck of a lot.
0:38:13The point is to do one thing really quickly and that's send a canned text message.
0:38:17So the idea is you pop open the app, you say who you want to send it to, which is presumably
0:38:21a list of people that you've already set up, what message you'd want to send, or maybe
0:38:24I got that backwards, I think I did because I haven't used it in a couple days.
0:38:28But anyway, the point is you pick who, you pick what, and then you say go.
0:38:32And that actually uses core data.
0:38:34That is actually a really really great use of core data because candidly it's very very simple
0:38:41It's two entities
0:38:42It's a total of like ten attributes between the two entities and it worked really well
0:38:48And one of the things I liked so much about it
0:38:50Was that when I decided to add support for sending messages to email addresses as well as just phone numbers
0:38:58I had to add a
0:39:01column if you will or an attribute to say well is this thing an email address or a number and
0:39:07Obviously I could have parsed that out whatever the point
0:39:10I'm driving at though is that I had to do a core data migration and
0:39:12To be honest for me because this was such a simple use case it actually worked really really well
0:39:18It was really nice, and I said in Xcode. Hey, I'm gonna make a new version of this model
0:39:23Here's what's different about it
0:39:25Then I wrote a couple of lines of code in my app delegate to handle it and everything just happened
0:39:31magically and I've actually had no real issues with core data, but to be fair
0:39:36This is an extremely simple use case and to me. I think that's what's great
0:39:40This is core data's bread and butter is to do something really simple
0:39:45All I want was a way in which I can persist a very small object graph and that's like out of the book
0:39:51Which I would look up if the developer portal was up. It's like out of the book
0:39:55Exactly what core data is meant for so I agree with what you're saying that in a lot of ways core data is this really
0:40:00big scary abstraction that you don't want to just relinquish your life to, so to speak.
0:40:05But for me it worked out really, really well.
0:40:07You could have just used property lists.
0:40:09I mean, not just the property list back end of Core Data, but like literal property lists.
0:40:14Because like the volume of data.
0:40:15You basically made like the sample application they would have you make.
0:40:18Like if you're doing like the Core Data demo.
0:40:20What are you saying, man?
0:40:21No, I mean like the Core Data part.
0:40:22Like you said, like two entities and like not a lot of them.
0:40:26Because I mean, I don't know how many text messages like your application store is a
0:40:29but presumably people are not going to store 10,000 canned text messages because you've
0:40:33defeated the purpose of the application, because you're supposed to find it quickly.
0:40:36So, like, yeah, you could have gotten away with a property list.
0:40:38And in fact, that's what a lot of people did for a long time.
0:40:42I mean, at a certain point it becomes ridiculous.
0:40:45You're absolutely right.
0:40:46And a lot of fast text, a lot of the purpose of it was in a series of engineering lessons
0:40:52and exercises for myself.
0:40:54And part of the reason I used Core Data was just, I want to learn Core Data.
0:40:57I want to see what it's all about.
0:40:58So when everyone complains and moans about it, I can say, "Oh, yeah, you know, I understand
0:41:01why you're saying that."
0:41:03And I could complain and moan with the next guy, but for me, it actually worked out really
0:41:07nicely.
0:41:08Yeah, no, you should have plugged your program sooner, because you kept mentioning your program,
0:41:11and I never bothered to look up what it was.
0:41:12And I looked up what it was, like, I don't know, maybe you tweeted something about it
0:41:15this week, and I'm like, "Oh, that's a useful program."
0:41:16You should, you know, I don't know if there's a hundred other programs out there that do
0:41:20that, and obviously I don't send text messages to people, so that's why I'm not in that field.
0:41:24But that's exactly, I think that would be, is this a common category of program, the
0:41:30CAN text message sender?
0:41:31Well, I don't know if it's common, but it was actually, it's funny hearing Marco talk
0:41:36about a lot of the things that he's talked about, both in Build and Analyze, and here.
0:41:40It was a very funny exercise, an interesting exercise for me, because I'd love to be able
0:41:45to just magically invent the next Instapaper and be able to do something independently
0:41:51and take that whole time.
0:41:52Right, and not just have any competition.
0:41:54Exactly, but what I'm driving at is it'd be cool to not, to work for myself, but I feel
0:42:00like I need that magical idea.
0:42:02And so, flashback to I think it was iOS 4, when I want to say it's MF message composed
0:42:07view controller or whatever it is, basically they added the ability for an app to send
0:42:12text messages.
0:42:13And so, I found that out at that WWDC, which I guess was 2011, is that right?
0:42:18It doesn't matter.
0:42:19I found out at that WWDC that, oh, they're going to do this, and I was like, I know what
0:42:22I can do with that.
0:42:23And so I had to figure out how to build and ship the app in order to, I wanted to be in
0:42:31on day one of iOS 4.
0:42:33And so the reason I think it's so funny is because in the smallest littlest way, this
0:42:39was a Casey sized exercise in doing the sorts of things that many of my peers do for a living.
0:42:47In that I had an idea and I needed to execute and I needed to execute by a certain date.
0:42:52I'm like what say Underscore did with Feed Wrangler.
0:42:55It was just a very funny thing and that's why it was really rewarding because I was
0:42:59able to get this little appropriately sized view of the world that a lot of my good friends
0:43:05and peers have.
0:43:06I know that was kind of a side note, but I don't know.
0:43:10It's fun.
0:43:11It's a very simple app, but it's very useful and I use it all the time.
0:43:15So if you didn't write that app, if you went into the App Store, have you looked at the
0:43:19competitors?
0:43:20Are there other applications that do this?
0:43:21Oh, there certainly are.
0:43:22one that most people use that I would know about if I was into texting?
0:43:25I don't know if there's a well-known one.
0:43:27I mean, it's because…
0:43:28Like, there's no Instapaper of the market.
0:43:30If there is, I don't know it, to be honest.
0:43:33And I've never taken…
0:43:34The app was not a money-making venture.
0:43:36In fact, I've probably put a couple hundred dollars into it that I haven't gotten out.
0:43:40I mean, I've gotten checks from Apple for it, but I've spent more between the $100
0:43:47annual developer account and paying 40 bucks or whatever it was for Opacity Express to
0:43:53hand draw the world's worst icon.
0:43:56I like it.
0:43:58I was pretty proud of it, to be honest, but if I'm honest with myself, it's pretty rough.
0:44:02I think I saw the icon, and if it's what I'm thinking of, it's no good.
0:44:07See?
0:44:08Thank you for not letting me down, John.
0:44:10No, but you know.
0:44:12That actually is what, speaking of applications, that is a lot of the time what separates the
0:44:17application that someone makes and barely makes back its money in developer fees and
0:44:22the one that does, is putting in a little bit of extra money for a designer to do your
0:44:28icon and getting the UI to look nicer.
0:44:33Window dressing, marketing type, not marketing in terms of paying money to advertise or whatever,
0:44:37but when someone sees your page, what is the impression they get?
0:44:40Apple Hammer is like crazy in WWDC. The first impression someone gets when they glance at
0:44:44your application has no reflection on the functionality of your application because
0:44:49if there are a lot of these applications that send canned text messages, what's going to
0:44:52differentiate them is the one that makes someone feel good to have it on their home screen,
0:44:57feel good to launch it and use it, and every time they do, they feel good about that experience.
0:45:01That's why iOS 7 is such an opportunity because all of a sudden these applications that people
0:45:04used to feel good about using, now they will not feel as good when they're using iOS 7
0:45:08because those ones will look old and ugly and strange
0:45:12or whatever.
0:45:13So that could have been all that separated you from perhaps not
0:45:16Instapaper-level success, but at the very least,
0:45:21being in the black instead of the red on Lifetime
0:45:23for this application is just a nicer icon, a little bit nicer
0:45:26UI.
0:45:27Oh, you're absolutely right.
0:45:29And some screenshots with puppies in them or something.
0:45:33No, you're absolutely right.
0:45:34And that's the thing is, again, this was more-- FastX
0:45:38written in order for me to be able to look myself in the mirror and say, "You know what?
0:45:41You did get something in the App Store."
0:45:43And even if everyone around you thinks it's a flaming turd, at least you can say, "You
0:45:48know what?
0:45:49One way or another, that's mine, and I did that."
0:45:50And I wrote it at a time where I barely could write "Hello, world!" in Objective-C. And that's
0:45:55not to say it's not stable and whatnot and blah, blah, blah.
0:45:58What I'm driving at, though, is that it was a really great exercise to teach myself this
0:46:02entire pipeline.
0:46:04And I'm really glad I did it.
0:46:05And I keep it there, to be honest, if I'm really candid, I keep it there more as kind
0:46:11of a trophy for myself.
0:46:14Look at what I was able to do.
0:46:16And everyone else who may have seen it and is listening may or may not be laughing about
0:46:20all that, but I'm okay with that because I'm still proud of it, even though it looks like
0:46:24crap in iOS 6.
0:46:25But wait for iOS 7.
0:46:27It's going to be great.
0:46:28I'm watching it just climb the ranks tonight as all 204 live listeners go out and buy it.
0:46:34We were going to have a Casey self-esteem sale where, "Don't buy it to use it, buy
0:46:40it to acknowledge Casey's trophy for--" I mean, hey, it's farther than I got with
0:46:46my iOS idea when they announced the SDK, which was a joke tip calculator, which I wrote about
0:46:51half of, and then I said, "You know what?"
0:46:53Wait, what's the joke?
0:46:54What?
0:46:55I've said this before on other projects.
0:46:56It was a tip calculator, which I knew there would be a bazillion of, because it's like
0:47:00five minutes to write, and sure enough, there were a bazillion of them.
0:47:04And the name of the application is "It Does Other Things," which is probably a copyright
0:47:07infringement on Seinfeld, but that's the joke.
0:47:10Yeah, I don't know.
0:47:11Have you seen that episode?
0:47:12Have you heard of Seinfeld's television show?
0:47:13Wait, the app is called "It Does Other Things"?
0:47:15Yes.
0:47:16Have you ever seen Seinfeld?
0:47:17Yeah, I think I've seen all of them, but it was a long time ago.
0:47:19Do you not know that line from a webisode?
0:47:21I forget what the context was.
0:47:23Oh, well.
0:47:25Anyway, you can Google for "It Does Other Things Seinfeld" and find out.
0:47:28It's not that funny, which is another reason why the application does not appear on the
0:47:31store.
0:47:32I bailed out because I saw the writing on the wall.
0:47:36But I would have liked to have just gotten
0:47:37through the process.
0:47:38The reason I don't go through the process
0:47:39is because, say, I get a working application that
0:47:42does what I want it to do.
0:47:44Then I need at least double that amount of time
0:47:47to work on the icon in the UI.
0:47:49Because otherwise I'll just obsess over it.
0:47:51Be like, no, I can't ship this.
0:47:53It's too boring looking.
0:47:54And then by that point, 8,000 other typical calculators
0:47:56have come out, and it's too late.
0:47:58I would love to see you ship an app of anything.
0:48:02I mean, I don't care what it did or didn't do.
0:48:03I would just love to see what you consider shippable.
0:48:07Because honestly, I'd be shocked if you ever shipped something like that in public.
0:48:12And I guess your reviews are even larger scale than most people's ads.
0:48:16Yeah, they're much larger scale receptacles for feedback, let's say.
0:48:23People have opinions, and they offer them on writing.
0:48:26Writing is much worse than putting out an ad.
0:48:28I mean, look at all the open source code I put out.
0:48:31Most of the pro code that's up on CPAN for me is just terrible, because it's been written
0:48:34years and years ago.
0:48:35And I leave it up there because, well, look, maybe someone's finding it useful or whatever.
0:48:39But it's kind of the difficult thing about working in a regular job.
0:48:45You try to do open source stuff so you have something that you can show as, "Here's an
0:48:49example of my code."
0:48:50But all of my open source stuff at this point, I'd be like, "Don't look at that."
0:48:54The best thing I could do if everyone on Job Interview would be like, "Here's some sample
0:48:57code from my open source projects, and let me tell you what's wrong with it as a demonstration
0:49:01of how I've grown since I wrote this thing.
0:49:04That's actually, that would be surprisingly effective in an interview, I think.
0:49:08Yeah, but you want to show them, it's like, here's my shipping app.
0:49:10Like, that's what, you know, that's when you get a job on Apple, you're like, look, I made
0:49:12this app, and then I'm awesome, and the app is awesome, hire me, and then I'll hire you,
0:49:16you know.
0:49:17That's the easiest way in the door.
0:49:19So to build on the thought of you shipping something that people can see, since you're
0:49:25a celebrity in the little bubble in which we live, does that, if you had a really good
0:49:29idea, do you think that would prevent you or scare you off from – actually, I guess
0:49:33I could ask both of you, but – I'm always looking for a good idea for an iOS app. I
0:49:37have been since day one. The tip calculator, you know, like, that's like me looking for
0:49:40an idea. My brother is also constantly trying to look for an idea. He's trying to look
0:49:45for a get-rich-quick idea, and so am I, to be fair. We've talked to a million-dollar
0:49:50homepage before, right, haven't we? Oh, yeah. Well, not on this show, I don't think,
0:49:54but – Yeah, maybe in real life. But anyway, that's the ultimate idea, where you have
0:49:58no money at risk, no time at risk, really easy to do, makes money, makes everybody happy
0:50:03who's involved with the project is amusing to people who are not involved with the project.
0:50:07That's pretty much the best example of that type of project I've ever seen in my life.
0:50:11And if there's an iOS app equivalent yet, I haven't found one. There's plenty of ways
0:50:15to make money in the app store that are scummy and scammy and make people sad, but that's
0:50:19not what we're looking for. And of course, you can make money like the old-fashioned
0:50:22way by making a good app, which is really hard.
0:50:27If I ever had an idea for a Mac app even, like an iOS or a Mac app, if I had an idea
0:50:31for an app that didn't exist, that I would like, that I thought I could write, I would
0:50:35do it.
0:50:36But that stuff never comes together.
0:50:37And, you know, it's always like two out of three or one out of three.
0:50:41But that's not directly answering my question, which is, let's say you had this great idea
0:50:44and you felt at least moderately confident that you could do at least a moderately passable
0:50:49job.
0:50:50Would the fact that you're Mr. Hypercritical scare you away from losing it?
0:50:55No, not at all.
0:50:56I mean if anything that should provide like a fountain of infinite ideas because
0:51:01You can look at any app you use any app you ever need to use and you can say oh well
0:51:06If I did it it would be different in these ways
0:51:09Yeah, but like but do I want to do it do I have to have do I think I would be capable of actually doing
0:51:13A better job do I really want to do it do I have you know it's just you know how much time it takes to make
0:51:17a real application it's a big
0:51:19Commitment you're right, so I really it would it would really need to be like something like oh
0:51:22I've got to make this app like that's it would have to be like that not just simply
0:51:26"Oh, I think I can make a better one of those," because it just takes so much time.
0:51:31Any notoriety I might have would encourage me, not discourage me, because all that would
0:51:35translate to is, "Look, for every tiny point of internet notoriety I have, that is one
0:51:41extra point on sales possibilities."
0:51:45It's not fair, but that's the way it works.
0:51:48If people know who you are to begin with, then they'll know about your application,
0:51:52at least.
0:51:53You have such an up with awareness and everything.
0:51:54Oh, yeah, if you got it, use it.
0:51:56Yeah, so that, but that, I mean, that wouldn't be the reason I would be doing it, but like,
0:51:59it just, it would have to be a fire under my butt where like, look, I need, like it
0:52:02was for you with Bugshot, you're like, I just need this application to exist. And you're
0:52:06at the point where you can rattle that off in a week, like, I'm not at that point, so
0:52:10it has to be real, I have to just be like, look, I cannot sleep until I write this application
0:52:14because my ramp up time would be significant starting from zero, right?
0:52:17Even that, though, like, yeah, I mean, for me, it was like, I'm an experienced iOS developer,
0:52:21so it didn't take me that long.
0:52:22I already knew how to do all this stuff.
0:52:24The icon even accidentally made itself.
0:52:26And then even that app, I said,
0:52:29I will spend a couple of days doing this app.
0:52:32That's all I can really justify spending on it,
0:52:34'cause it's gonna make 20 bucks a day
0:52:36for the next two years.
0:52:37So I can't justify doing a whole lot more on this app,
0:52:41just a few days of work so I can get back to my other stuff.
0:52:44And a few days became like 10 days.
0:52:48It was like seven days to build version one,
0:52:50And then I got a break while it was being approved.
0:52:53And then within a few days of it being released,
0:52:55I was working on 1.1 to fix all the bugs
0:52:58that everyone found, and then to add
0:52:59a couple of minor enhancements.
0:53:01And that took a couple more days.
0:53:02So all in, this is almost two weeks solid for this app.
0:53:07And I should clarify for Sam the Geek in the chat room,
0:53:12yeah, it's going to make $20 a day maybe
0:53:15for the next couple of months.
0:53:17After that, it might go down further to--
0:53:18Oh, yeah.
0:53:19No, he's absolutely right.
0:53:19Absolutely. This is not a joke and I probably shouldn't share this publicly, but whatever.
0:53:25I am genuinely excited when I get an app banning email and the number on it is anything more
0:53:29than zero. That's like awesome. I just sold something to someone. That's really exciting.
0:53:36So, 20 bucks a day is nothing to shake your fist at. I know you said that jokingly, but
0:53:39that is nothing to shake your fist at.
0:53:40No, that's not a joke. I mean, like when I made nursing clock last year, the breastfeeding
0:53:46timer. I released that and even that took a little bit longer than I thought it would.
0:53:51Even the nap that had almost no effort into it at all. That took like a few days to really
0:53:55polish it and make it releasable in any shape. And even that, over its entire life, it made
0:54:00I think $70. I mean it wasn't a whole lot. And I even ended up pulling it down after
0:54:08I think about six months or so because there was a, somebody had tipped me off, there was
0:54:13a patent troll going around suing or threatening to sue people who made childcare related apps
0:54:20and even though mine was not, wouldn't have applied, or the patent wouldn't have applied,
0:54:26we all know that doesn't really matter. And so I just, I'm like, you know what, this app
0:54:30has made like $70 in six months, it's not even worth the risk of having a patent troll
0:54:35come after me. So I just pulled it down.
0:54:38- Patents fostering innovation.
0:54:39Exactly. We should get to that actually. But first, let me tell you about our second sponsor.
0:54:43Our second sponsor this week is a new sponsor, but you might have heard of them recently
0:54:47on other awesome shows and blogs. They are 23andMe. So, 23andMe, it's a pretty cool service.
0:54:54It's a little hard to explain, but here's the gist of it. They are a DNA profiling service.
0:55:04And so, here's what you do.
0:55:06You give them a, basically, they send you a kit,
0:55:11you give them a saliva sample,
0:55:13and you don't have to poke your arm or anything,
0:55:15there's no blood involved.
0:55:16You give them a saliva sample,
0:55:17you send it back and they provide a return package,
0:55:19the lab analyzes it, and then it gives you a full report
0:55:23about stuff about you.
0:55:26So, here's the gist of it.
0:55:28They gave you the tools to better understand
0:55:30how your genes may impact your health.
0:55:32So this helps you and your doctor find health areas to keep an eye on.
0:55:37They have over 240 personalized health, trait, and ancestry reports.
0:55:42And they can help you understand your genetics.
0:55:44So they give you ancestry information.
0:55:46You can discover your global origin.
0:55:48You can find, like, if you have any celebrity relatives, they will give you a list of celebrities
0:55:53that are distant relatives of yours.
0:55:54You can also find other living relatives through their analysis.
0:56:00They have over a quarter million members.
0:56:02So this makes it the largest DNA ancestry service in the world.
0:56:05And so the chances of them finding something cool about you are pretty good.
0:56:09So anyway, it includes a few fun points to tell you how closely related you are to Neanderthals.
0:56:19They even can tell why you may not like cilantro.
0:56:22There's a gene for that.
0:56:24They can tell you how quickly you metabolize coffee, which of course is cool for me to
0:56:29know.
0:56:31So anyway, you can order your 23andMe DNA kit today for just $99 at 23andme.com/ATP.
0:56:39That's 23andme, the number 23, and then the words andme.com/ATP.
0:56:46Check it out.
0:56:47It's pretty cool and just a really great way for, you know, just to take a look at your
0:56:52DNA and learn some cool stuff about yourself.
0:56:55So thanks a lot to 23andMe for sponsoring the show.
0:56:59What is the avocado—asparagus pea smell gene?
0:57:03Is that a genetic thing, or is that not genetic?
0:57:05I think that's everybody.
0:57:06No.
0:57:07I mean, it's just—
0:57:08I think you'd have to eat a lot of asparagus.
0:57:10What I heard from third hand was that it was genetically related, and that the people with
0:57:16the gene made their pee smell, and they could smell it.
0:57:20And people without the gene, their pee did not smell, and they couldn't smell it, but
0:57:24other people smell like pee.
0:57:25I thought it was that the pee always smells, but only some people can smell it.
0:57:31I don't know.
0:57:32I know nothing about it.
0:57:33See, this is terrible.
0:57:34Oh, here we go.
0:57:35Here we go.
0:57:3623andme.com/health/asparagusmetabolitedetection.
0:57:37Of course they would know this.
0:57:3923andme has got it covered, and it is genetic, apparently.
0:57:46That's awesome.
0:57:47Erin is a biology teacher.
0:57:48I could have asked her if she was home at the moment, but she is not.
0:57:52Oh, good thing 23andMe didn't let us down.
0:57:55Awesome.
0:57:56Anyway, thanks for sponsoring.
0:57:58All right, so what else are we talking about?
0:58:01Do you want to talk about Ask Patents at all?
0:58:04I do.
0:58:05John, go for it.
0:58:07Yeah, so this was a Stack Exchange site that was made months and months ago, wasn't it?
0:58:12Like maybe last year?
0:58:13Yeah, a while ago.
0:58:14A long time ago.
0:58:15It was the brainchild of Joel Spolsky and the Stack Exchange guys in cooperation with
0:58:21the US patent office, I believe, even from the get-go.
0:58:24It's a Stack Exchange site, like StackOverflow or whatever,
0:58:27you ask questions or whatever.
0:58:28But this one is meant to collaboratively find
0:58:31prior art for patents.
0:58:33So someone will post a patent, and then other people
0:58:35will try to look at prior art for it and post it as the answer.
0:58:38So basically, the implied question to all of them
0:58:40is, here's a patent.
0:58:41Is there some prior art?
0:58:42And then anyone can post an answer, like, oh, here's
0:58:45some prior art for this, or whatever.
0:58:46And the goal of the site was to be like, OK, well, we all
0:58:50know these patents are stupid and trying to patent things that shouldn't be patentable,
0:58:54but it's really difficult, apparently, for the US Patent Office to do the research necessary
0:58:58to find the prior art. Even though, when we look at it, can you just call up a graphics
0:59:04programmer and ask them and they'll tell you the eight times? Anyway. And so that's how
0:59:09this was supposed to work.
0:59:10And finally, I think this was their very first confirmed case where a patent was posted,
0:59:16found an answer and the patent was invalidated.
0:59:19And in the invalidation of the patent by the person in the US Patent Office, they cited
0:59:23directly this answer on this site.
0:59:25And Joel did the answer, and Joel said it took him like 10 minutes of Googling to find
0:59:28prior-- because again, it's not hard to find prior art for these things, because the patents
0:59:31are awful, right?
0:59:32So Joel wrote a story called "Victory Lap for Ask Patents," describing the sequence
0:59:37events and saying basically, look, this took me 10 minutes of Googling.
0:59:40If you hate patents and you're a software developer or whatever, come onto our site,
0:59:44a patent that you think is stupid, Google for a prior art, paste it in there, and wait
0:59:49for the incredibly slow wheels of government to turn, and six months later, maybe that
0:59:54patent will get invalid.
0:59:55And of course, this is a Microsoft patent and they're appealing, so who knows how it
0:59:58will end up coming out.
0:59:59But the interesting bit, this that I pasted into the show notes, is that Joel says that
1:00:04his dream is that companies will hear about this site and use it offensively against other
1:00:09companies.
1:00:10Because if like Apple or Google or whatever dedicates like one or two people to just go
1:00:13on that site and look for patents that Google is applying for and spend 10 minutes to go
1:00:19find prior art for them, that it will become like—you know, so patents are sort of defensive
1:00:23where they patent—every company patents everything they can because it's good to
1:00:25have a big patent portfolio.
1:00:26But if each company also had an offensive wing, all they did was watch their competitors
1:00:30and watch for the super-dumb patents that they apply for and then invalidate them all
1:00:34by finding prior art, that would be a good sort of mutually assured destruction scenario
1:00:39where large companies prevent each other from having terrible patents.
1:00:44Of course, this is not the actual solution.
1:00:45The actual solution would be, maybe the US Patent Office could do this work, because
1:00:49it doesn't seem like it's that hard.
1:00:50It takes 10 minutes of googling.
1:00:51And of course, my position is that no patent should exist ever for anything.
1:00:55But anyway, every little bit counts.
1:00:58So I'm excited that at least one patent has been, at least, if not permanently thwarted,
1:01:03then possibly delayed on its trip to being a super dumb patent.
1:01:09So good job Joel and the Stack Exchange guys.
1:01:11Yeah, it's so cool this thing that Ask Patents even exists and that the USPTO kind of encouraged
1:01:18it or at least is being friendly with it.
1:01:22There is of course, you know, there's that great question of, you know, Joel is a programmer
1:01:28and he could look at this stuff from this Microsoft patent that he cited and, you know,
1:01:32any others that you look on there and he said like, you know, he assumed going into this
1:01:36that it would be pretty hard to read patents
1:01:39and to figure out what they are and to invalidate them,
1:01:41but in fact, once he started trying to do it,
1:01:43that it was easier than he expected.
1:01:45And that it only takes a few minutes to read a patent,
1:01:49and he linked to a post, maybe he linked to it too,
1:01:50about how to read a patent in 60 seconds.
1:01:53'Cause they all try to be very obfuscated
1:01:56to try to get granted and try to get past
1:01:59any potential conflicts or duplicates
1:02:01or to try to become more overreaching
1:02:04than they otherwise would have.
1:02:05Like, they go for obfuscation to attempt to confuse the patent examiners.
1:02:13So the problem is, you know, if one working programmer -- and granted, Joel is a good
1:02:18and knowledgeable programmer, but still, if one programmer can look at a patent application
1:02:23and kind of see through it that quickly, why doesn't the patent office -- why can't they
1:02:31do something similar?
1:02:32Why, like, if they can say, "Yeah, we can have patents on graphics programming techniques,"
1:02:38why can't they either have or contract with graphics programmers to look at any graphics-related
1:02:44patents?
1:02:45Like, that, it's just, I'm really glad that AskPatents exists, and obviously it needs
1:02:49to exist, but why it needs to exist is kind of a problem.
1:02:53Because it's a government agency, and they don't have infinite hiring money, you can't
1:02:57pay a graphics programmer or any of that.
1:02:59outsourcing the part that can't be done at scale because there's a limited number of
1:03:05patent employees. Those employees only know about patents and know nothing about the domain
1:03:10areas. And by the same token, Joel could not have written that ridiculous document that
1:03:17codifies the rejection of the patent. Joel could not have written that because that requires
1:03:22the lawyer-like expertise of the people in the patent office to know what form you have
1:03:26to do things and what is a valid rejection and what must you like. That's the skill that they're
1:03:31bringing to the table, you know, that to be able to navigate this legal, just like lawyers, like,
1:03:36you know, you may have an intuitive feel of, you know, what's right and wrong and how to prove
1:03:42things. But if you're not a lawyer, you don't know how to actually do it, right? So this is just
1:03:47finding people like, "Look, you find me the prior art, and then the US Patent Office says, 'We'll
1:03:50take it from here.' So you did that part of the work for us. We'll take that and probably spend
1:03:55ten times as much time doing this stupid legalese dance in this formal document structure to
1:04:00reject the patent and bring it through all this bureaucratic-- I mean, just try clicking
1:04:04through to that rejection.
1:04:05He's like-- he explains how to find the rejection.
1:04:07And it's like, the preliminary draft rejection finalized form.
1:04:11Like, try to read it.
1:04:12It just, you know, you cannot penetrate even the rejection of the patent, let alone the
1:04:17patent itself.
1:04:18And that "how to read a patent in 60 seconds" is good because it tells you, "Just ignore
1:04:20everything and go right to this section and look at these three things, and that's enough
1:04:23for you to get going."
1:04:25It's a broken, stupid bureaucratic system that doesn't work right.
1:04:30This does not make it better.
1:04:31This doesn't cure it.
1:04:32But if anything that stops crappy patents from getting granted is a good thing.
1:04:39This was just the community trying to make government better, maybe not against their
1:04:45will, but certainly like, "Look, we're here to help you in government saying, 'Okay,
1:04:48we will accept your help in this matter,'" and then it producing at least one actual
1:04:53result.
1:04:54Well, it's a brilliant idea if people are into it, but it seems to me that it's tough
1:05:00to get people into it.
1:05:01Said differently, here it is that the patent office is sort of kind of reaching out to
1:05:06the community and saying, "Hey, people who are experts in these things that patents are,
1:05:12go help us find this prior art."
1:05:13But the key is that we're experts.
1:05:16Joel is an expert, or at least you could easily argue as such.
1:05:20And I don't know how the patent office works internally, but I've got to imagine they don't
1:05:23have an expert for every darn field of patentable stuff under the sun.
1:05:29And so it strikes me as a brilliant idea, but I'm not sure that when I get bored on
1:05:35a weekday evening night, I'm going to sit there cruising for patents to shoot down.
1:05:38Well, I mean, but Joel's got the right idea.
1:05:40He says, like, who is actually sufficiently motivated to use this site?
1:05:45And who's sufficiently motivated are the companies who get patents, because they have a financial
1:05:49incentive to prevent—Apple has a financial incentive to make every single patent Google
1:05:54files be invalidated, right? And vice versa, Google has that same motiva—you know, so
1:05:59if you can get these big companies with tons of money to put even a few people on this,
1:06:03it's so easy to do, because you're going to be invalidating patents in a domain that you know
1:06:07about. Apple probably knows about the domains that Google's going to file patents in and vice
1:06:10versa, because they're both in the same industry. Get all these guys to, instead of spending all
1:06:14their energy patenting everything under the sun, take part of their energy, because now they
1:06:19Now suddenly they have an influence.
1:06:20It used to be you had no way to get your other guys' patents invalidated.
1:06:23You had to wait for them to be granted or rejected, and then you could try to invalidate
1:06:26them in court.
1:06:27Whereas now, if the patent office is like, "Look, we're willing to accept some help here.
1:06:32This patent has been applied for.
1:06:34Here's the application," and Apple goes out and finds prior art and heads it off of the
1:06:38past?
1:06:39I don't know if those companies are actually going to do that, but they are the ones who
1:06:42have both the motivation and the skill to do this.
1:06:46I think it would be a great idea because I hate all patents.
1:06:49Like I said, another thing that would cure this whole problem is just to eliminate the
1:06:52entire patent system and office and all the employees and all the legal framework and
1:06:56everything involved with it.
1:06:57That would also cure this problem and is the actual solution.
1:07:01That would actually promote innovation.
1:07:03People don't want to hear that.
1:07:04But anyway, you don't want to hear that, that's fine.
1:07:07We'll start with this.
1:07:08This would be fine too.
1:07:09John, both you and I, I believe, separately argued on our respective 5x5 podcast a couple
1:07:13of years ago.
1:07:14I think we both argued that basically the entire patent system should be abolished.
1:07:20Is that fairly accurate?
1:07:21Yep.
1:07:22Yep.
1:07:23Yeah.
1:07:24I mean, the fact that all this stuff is necessary is...
1:07:29And I think what bothers me about it, not to go too deep into whether the patent system
1:07:34should exist or not, because that would be a whole other show, but I think what bothers
1:07:38me so much about it is, like, this is...
1:07:41It's a problem that just cannot be solved well.
1:07:44Like it is just so, like, yeah, the patent office can't be expected to get everything
1:07:49right, but they get things wrong a lot.
1:07:53And the ramifications of that in the market are so incredibly destructive.
1:07:58I mean, it, like, whatever benefit patents are providing to people, I have to imagine
1:08:05there's an equal or greater amount of harm that they're causing, especially in the field
1:08:09of software.
1:08:11And it just seems like there's just no good solution to this.
1:08:14But I am very glad that ATHP patents is at least attempting to—it is improving it in
1:08:22one small way.
1:08:23Yeah, and my objection was less practical, more ideological.
1:08:26I don't think there's any reason you should have monopoly rights to an idea, period.
1:08:29Like, it's not as if like, you know, what if the patent office was perfect and never
1:08:33made a mistake?
1:08:34There's no such thing.
1:08:35There is no right—as far as I'm concerned, you get no right to a monopoly on an idea
1:08:41that you come up with, no matter how awesome that idea is, period, the end.
1:08:44And so if that's your position, that's my position, obviously there's no such thing
1:08:48as a patent office that works. It's an office that the only way it works is to not exist
1:08:53because it's enforcing a right that I don't think is a valid thing that you should, you know,
1:08:58you shouldn't get a monopoly on an idea. You shouldn't ever, the end.
1:09:01But, you know, there's a huge continuum down to the pragmatic concern of like, okay, I think you should,
1:09:05but it's impossible to do correctly, therefore it should be gone, all the way up to like,
1:09:08to like, "Oh, I think it should be gone for software because there's no such thing as
1:09:11a software patent because it's all math and everything's turned complete and blah, blah,
1:09:15blah."
1:09:16And business process patent shouldn't exist and a whole big range.
1:09:18When I talked about it on my show, I went to write for the jugular, which is like patents
1:09:23on drugs, which everyone thinks, "All right, you can get rid of all the other patents,
1:09:25but we need these because otherwise no one will ever do any research into how to cure
1:09:28disease."
1:09:29And I talked about it at length there.
1:09:30We should rehash it here.
1:09:32But anyway, patents are terrible.
1:09:34Don't let your kids get them.
1:09:36[laughter]
1:09:37Alright, does that mean we're done? That seems like a pretty good place to end to me.
1:09:42Yeah, I think so. Alright, well thank you very much to our two sponges this week, Hover
1:09:47and 23andMe, and we'll see you guys soon.
1:09:49[music]
1:09:50Now the show is over, they didn't even mean to begin, 'cause it was accidental.
1:09:59Accidental.
1:10:00Oh, it was accidental.
1:10:02Accidental.
1:10:03John didn't do any research, Margo and Casey wouldn't let him
1:10:08'Cause it was accidental (it was accidental)
1:10:11It was accidental (accidental)
1:10:13And you can find the show notes at ATP.fm
1:10:18And if you're into Twitter, you can follow them
1:10:23@C-A-S-E-Y-L-I-S-S
1:10:27So that's Casey Liss M-A-R-C-O-A-R-M
1:10:32♪ Anti-Marco Armin, S-I-R-A-C, U-S-A-C-R-A-Q-S-A ♪
1:10:39♪ It's accidental, accidental ♪
1:10:42♪ They didn't mean to ♪
1:10:45♪ Accidental, accidental ♪
1:10:47♪ Tech podcast so long ♪
1:10:52Uh, I just sold something to someone.
1:10:54I thought that was funny.
1:10:55If you're gonna make fun of me, I think that's a much less jerky way of doing it.
1:11:00Because that was me talking about how excited I am that whenever I see a singular sale of
1:11:04fast text.
1:11:05Someone trying to do a JavaScript injection.
1:11:08I appreciate that they put the semicolon at the end of their statement.
1:11:12They won't stand for that JavaScript automatic semicolon insertion.
1:11:15Say, "No, I'm going to put it explicitly so it's not confused."
1:11:19And yes, the people who wrote this Showbot application have minimal competence of web
1:11:23programmers.
1:11:26Escape their input, which is not...
1:11:28It's probably still 50/50.
1:11:30Given all the websites that I see that won't let me type telephone numbers with hyphens
1:11:34in them.
1:11:35Apparently, the bar has still not been raised.
1:11:38How about American Express, where the maximum character length for a password is, I think,
1:11:44still eight?
1:11:45Well, that's probably dictated by their COBOL-based mainframe interface or something,
1:11:50but the guys who don't let you type stuff with the phone numbers, like they want you
1:11:54to only type digits, you can't type anything else.
1:11:57I just want to go to all their houses and find them and be like no one is making you do this like this
1:12:03This is literally the simplest possible task that a programmer on the web has it is completely closed
1:12:10there are no edge cases all you got to do is just
1:12:13Let me type whatever I want remove everything except the numbers
1:12:16It's not rocket science like no no task is easier than that every other part of accepting that form submission is harder than that one
1:12:22task. And yet, big Fortune 500 companies will have forms that don't let you type anything
1:12:27except numbers in them. And will beep at you, put alerts, automatically backspace the field.
1:12:31The automatic backspacing code, that's more complicated than stripping out the stuff.
1:12:35It boggles my mind that this goes on. And I wonder what regular people think who don't
1:12:39know that is literally the easiest thing in the entire world of web programming to do.
1:12:43They're just like, "Oh, I guess you have to do this when I'm on the site. It must be really
1:12:47secure."
1:12:48So let me tell you a true story that we cannot put in the show because it's really embarrassing,
1:12:52which means it's probably doomed to be in the show.
1:12:54When I, Aaron and I were getting married,
1:12:56I wrote in PHP, and I think it was my first PHP app,
1:12:59I wrote a website that would let guests register,
1:13:04or RSVP among other things.
1:13:07And a good friend of mine,
1:13:08his surname has an apostrophe in it,
1:13:10and I noticed after he registered,
1:13:12because I had this like totally weirdo setups,
1:13:15where I would email my phone to send my phone
1:13:18a text message back when that was still a thing.
1:13:20Well anyways, so he registered and all of a sudden everything was cut off as soon as
1:13:24I hit the apostrophe in his name because I didn't escape anything, because I didn't
1:13:28know crap about web programming at the time.
1:13:29In fact, I taught myself SQL in order to write that site.
1:13:32This was in 2007, because I was always living in thick client land until then.
1:13:37This is like people who don't learn from the past.
1:13:39I remember the first time I looked at the active record code in Rails and I was like,
1:13:43"Jesus, guys, like, find parameters.
1:13:45The technology that has existed since forever."
1:13:48and you're like, "We're going to make SQL by catting together strings and just inline
1:13:55all the values. What could go wrong? We have an escaping function. It should be fine, right?"
1:14:00Jesus.
1:14:01Wait, that's how they were doing it?
1:14:03I believe the first version of Rails was not using bind parameters in their queries. They
1:14:08would build the SQL strings out of values.
1:14:11Oh my god.
1:14:12I believe they had an escaping function of their own devising, which would be like, "Oh,
1:14:16you see. It's a quote, just double it or whatever. If this wasn't ActiveRecord and I'm slagging
1:14:22off Rails when I shouldn't be, I'm sorry. But substitute Rails with any other type of
1:14:28thing. I see it all the time of people who write database code in the modern era, like
1:14:33in this year, and don't know that bind parameters exist and just bravely plow forward.
1:14:38Casey didn't know that escaping was a thing you might want to do. But for the people who
1:14:43That, I find more excusable than the people who know that you have to escape.
1:14:47So they write their own escaping function, and they still feel like this is the best
1:14:50way to do it.
1:14:51Once you know it's a problem, you would think you'd spend three seconds Googling
1:14:54like, "Oh, I see this is a problem, and there's a name for it, and I bet there's
1:14:57some sort of technique to not have it anymore.
1:15:01Let me look that up."
1:15:02The other favorite one is that people, "Well, this is not an any-year language."
1:15:06Maybe it kind of is.
1:15:07Do you find, have either one of you ever, I don't know if this is a .NET equivalent,
1:15:12But like Marco, when you're things, you can't even do this on iOS probably.
1:15:15You know the system call, the word system?
1:15:17Open, close, parenthesis.
1:15:18Yeah, where it just shells out to the end of the day.
1:15:19Right.
1:15:20Have you ever had to do that for an iOS program, or is that just not going to happen on iOS?
1:15:22I don't think you can do it on iOS.
1:15:23I'm not sure.
1:15:24It's probably forbidden.
1:15:25But at any rate, people who do that, they'll use bind parameters on their SQL code, but
1:15:32they'll come do a part in their program.
1:15:34Apple itself probably does it, or people writing Mac apps back in the pre-sandboxing days.
1:15:38they'll build a string, and they'll pass that string to system.
1:15:42And when you're building that string, what do you have to do?
1:15:43Well, you're like, "Oh, what if the file name has spaces in it?
1:15:45Well, let me put quotes in it.
1:15:46What if the file name has quotes in it?
1:15:47Let me write an escaping function."
1:15:48They go through the same thing, and it's like, people, you're in C. There's a million functions
1:15:53that you can use to fork an exec to take lists of variable, VA list methods to take a variable
1:16:00list of parameters.
1:16:01You don't need the shell to parse it for you.
1:16:02Don't you understand?
1:16:03You can bypass that.
1:16:04You're already in a program.
1:16:05You're a programmer.
1:16:06You can write code.
1:16:07I mean, Apple itself does it, and they're Perl stuff, and you're like, "Oh, if your
1:16:13hard drive name has a space in it, and you have one that has the same name without the
1:16:17prefix before the space, it will accidentally delete it."
1:16:20Was it iTunes installer that did that?
1:16:23Maybe it was the Myth 2 installer.
1:16:24Apple at various times has done the same.
1:16:26It's the same exact problem.
1:16:27It's the sequel thing.
1:16:28They're like, "I will just build a big, long string and pass it through.
1:16:31What could go wrong?"
1:16:35you have is a list of values, and they said, "Yeah, but every time I see this list of
1:16:39values in my normal life, it's one big long string, so I'll make it into a string and
1:16:43then give it to something that will break it into the list that I already had before
1:16:45I made the string." It's just, yeah. I don't know. We're supposed to make progress.
1:16:53Certain areas, we have to make progress not by teaching people the right way to do things,
1:16:56but by making it so they never have to do that thing again.
1:16:59John, I love when you get fired up after the show.
1:17:05Oh, that's my favorite.
1:17:06No, I didn't.
1:17:07I still didn't even get to talk about Minecraft mods.
1:17:10Someday.
1:17:11Don't even start.
1:17:12Don't even start.
1:17:13That's good.
1:17:14I'm going to be angry.
1:17:15I'm trying to mellow out.
1:17:16No!
1:17:17I've got it a little bit under control.
1:17:18No!
1:17:19Don't mellow out.
1:17:20Don't get talked about.
1:17:21Let's talk about titles.
1:17:22I don't want to talk about it.
1:17:23Before the next show, or whenever that may be, YouTube should be forced to install Minecraft
1:17:29in several mods on behalf of, if you don't, neither one of you has a child of the age
1:17:33who can play Minecraft, maybe just like borrow one for the weekend and have them ask you
1:17:37to install Minecraft and the mods that they want.
1:17:40And just spend the weekend doing that, then you will also be sufficiently angry for us
1:17:44to have an all Minecraft mod anger episode after vacation.
1:17:48If I get bored while I'm on vacation, I will do exactly that.
1:17:52Find a neighborhood kid.
1:17:53Go, "Come over to my house!"
1:17:55And then ask me to install Minecraft mods.
1:17:58That's not creepy at all.
1:17:59Well, maybe have your wife do it.
1:18:01That's what we do.
1:18:03I get in touch with your wives and say,
1:18:05"Just pretend you're into Minecraft."
1:18:07And ask Margot, "Hey, I saw this cool thing.
1:18:09Could you install Minecraft in these couple of mods for me?"
1:18:11Because when your wife asks you to, it's just as bad.
1:18:13Although I don't know if it's believable that they'd want to play Minecraft.
1:18:15Because it's more of a kid thing.
1:18:17Actually, Tiff tried it.
1:18:19I've never played Minecraft.
1:18:21Nor have I.
1:18:23But Tiff actually played it for like one night.
1:18:25And just didn't really like it that much.
1:18:27really like it that much, but she did play it for one night like a few, like a month
1:18:30ago or something like that. But I don't know, I'm really, I'm kind of scared. You know,
1:18:35like I don't have to try heroin to know that I probably should never try heroin. Right?
1:18:40Like so, and I know enough about like hard drugs and their addictiveness to know that
1:18:46I should never even attempt them. And I'm fine with that.
1:18:49Now is this the heroin clause or is this the TMD crush clause?
1:18:53Well it's both. So same thing. So like when I hear that a game is like super addictive
1:18:56and takes over people's lives. I don't have to play it. I'm not like, "Ooh, let me try
1:19:02that." No, I'm like, "You know what? I don't really need that."
1:19:04Well, why don't you pass that wisdom on to your wife?
1:19:06Well, I did. I scared her away with, oh man, Candy Crush. So, quick story. So, Tiz's phone
1:19:16had—it's an iPhone 5, and it had a failing sleep/wake button, which I guess is a very
1:19:20common problem. And so, I took it to the Apple people, and they swapped it. And so, great,
1:19:25come back with a new phone. And we backed it up and did the whole sync locally to iTunes
1:19:30like that morning. Every app, all the music, all the photos, the entire keychain,
1:19:37everything restored perfectly except Candy Crush. For whatever reason, Candy Crush just did not
1:19:44restore, just was not there on the phone. So Tiff has lost her progress in Candy Crush.
1:19:49And this is like severely bad.
1:19:52Did you have to pay extra for that service?
1:19:54I don't know. So the way she's been playing it, you know, like when we first heard about
1:20:00it I believe from Amy Jane Gruber on one of her various podcasts, or somewhere, Twitter
1:20:06or something, that I got the impression that it was extremely addictive and that it could
1:20:11just take all of your money because you could just, you know, you can like buy your way
1:20:15out of time limits and all, you know, all the crap that the free to play BS games do.
1:20:20And so I was like, "Do not install that game because it will take all the money.
1:20:26It will just suck away everything we have, everything we've worked for.
1:20:29All the money will be gone."
1:20:31So to prove that I was wrong about that, Tiff has played the entire game not spending any
1:20:37money and intends to continue that way.
1:20:42But apparently it's a pretty hard game and it's pretty hard not to spend money, which
1:20:45is why they make so much.
1:20:48So she's like spent hours this week playing this game, and now it's restored and it's
1:20:56gone. And of course they don't use any kind of iCloud or Game Center. Of course they don't
1:21:01do anything right in programming the thing to actually make it keep your progress. No,
1:21:06that would cost them too much money. That would cost people to not buy upgrades. So
1:21:09of course they don't do that because game programmers are so great these days. My slight
1:21:13rant. Thanks a lot, game programmers.
1:21:17But, yeah, so I wonder how this is going to play out now.
1:21:22Like if she'll have to buy her way out of this,
1:21:24if I will have to buy her way out of it,
1:21:25out of guilt for somehow not having this thing synced
1:21:28with just that app.
1:21:29- If she wants to like bang her head against
1:21:31a very difficult to play application,
1:21:32you can get a super hexagon or impossible road or something,
1:21:35which do not ask for an app purchases,
1:21:36but will nevertheless frustrate her for a lifetime.
1:21:40- Or Marble Madness.
1:21:42- Whose alarm is going off?
1:21:43- That's over here.
1:21:46For a second there I was like, "How? My garage is closed. I don't think it's me."
1:21:51Hi.
1:21:52My windows are closed, too.
1:21:54You know, all those times that I played Marble Madness,
1:21:58after having spent the $40 on it and being so disappointed at how much it sucked for my Genesis,
1:22:03all that time, the game only has six levels.
1:22:06Yeah, six levels for $40.
1:22:08I'd never beat it.
1:22:11Because at level six, the whole game is really, really hard,
1:22:13And level six is just like, it's so ridiculous, I just, I could not ever beat it.
1:22:19I came close a few times, never got it.
1:22:20You should get a super monkey ball for your, it's a GameCube game, but you have a Wii that
1:22:24will play GameCube games.
1:22:25That is the, probably the most difficult console game that I've played and enjoyed.
1:22:31Because no, I haven't played Dark Souls, people listening.
1:22:35Games are more forgiving now than they were in the past.
1:22:37Just having like, progress saving.
1:22:39is a massive, a massive ease jump, you know? Like...
1:22:44Super Monkey Ball does not have that. Neither does Super Hexagon. Neither does Impossible
1:22:47Road. Super Hexagon, have you played... that's the one you might have heard of and played.
1:22:52Have you played Super Hexagon? No, what's it for?
1:22:55For making yourself feel incompetent? No, no, what...
1:22:58No, it's for iOS. All right.
1:23:03Yeah, it's... yeah. You should get it just because I think it's a really well-done game
1:23:08It has really nice music that you'll I've seen this if you hear you will hear three seconds of before you die
1:23:13Yeah, I've seen this and yeah, I played it for about eight seconds and then not not continuously
1:23:18They'd seconds cumulatively all
1:23:20If you could stay alive for eight seconds, that would be something
1:23:23I don't I don't like games like this like any like I also never cared for like games like
1:23:29Cannibal and yeah anything that's like just fast action and just go until you die or like anything like that
1:23:35I I just don't I get discouraged so quickly and easily from these games
1:23:39I guess I never want you should never play a super axion or impossible super monkey ball though like I mean has easy levels
1:23:45So it's fun
1:23:45It's fun to play like that's the only game like that that I have been motivated enough to play because like it starts
1:23:50You know it starts so easy you're like oh, this is fun, and it's interesting
1:23:53It's nice to look at it as neat music, and it's mentally challenging
1:23:56But the difficulty just goes on forever and at a certain you it's one of those games where no matter who you are as a human
1:24:02being with the exception of seven people in the world, you will reach the limits of your
1:24:05ability but only after a satisfying trail up to that level instead of just like, "Super
1:24:10Hexagon is immediately you suck now. From second zero you suck." All right? That is
1:24:15different.
1:24:16Impossible Road is, I think, is actually—I haven't played it enough to know. It's
1:24:20probably a little bit harder than Super Hexagon, but I can't really tell.
1:24:23So now, Marco, did you get into Tiny Wings when that was popular?
1:24:27No, I've seen it. I think I played it on someone else's phone or something.
1:24:32Because I like that one. Like, I've never played Cannibal, and I've seen it on other
1:24:35people's phones, but I like Tiny Wings. I don't play it that often, but I like it.
1:24:38Tiny Wings is charming.
1:24:39I've seen a few things. Like, there was some kind of skiing version of that that I played
1:24:43for like an hour one time, but that... I just... I don't have the patience to... Once I get
1:24:51going really far in one of those games, and then I die, and then I start over again, I
1:24:55just don't care. I'm so discouraged by having to start over again at that point and playing
1:25:01the exact same thing over and over again, even if it's a little bit varied from random
1:25:05generation or procedural stuff. Even then, I hate going back. That's one of the reasons
1:25:10I was playing through Vice City with, no actually it was the original GTA 3, playing through
1:25:18it and I almost beat the game but there was this one mission where it took like 15 minutes
1:25:24to do the mission and it was a timed thing where you had to do it within that 15 minutes
1:25:29and it kept getting within like 10 seconds of succeeding and just barely missing it.
1:25:34And I just stopped playing the game. Like I just never proceeded past that point. After
1:25:37like a few days of banging on that mission and doing it like seven or eight times and
1:25:41failing every single one, I just got so discouraged. I'm like, you know what, I'm done. That's it.
1:25:46I just never went back. It was the mission where you drive around trying to crush all
1:25:51coffee stands in like seven different parts of the town. I bet everyone who played GTA
1:25:563 probably remembers that mission and possibly stopped playing it there.
1:26:00This is one of the rites of passage of anyone who will eventually come to identify themselves
1:26:04as a gamer is that everyone eventually meets that game with the frustrating level or the
1:26:08difficult thing that they feel like they're never going to get past. And people who will
1:26:14later in life call themselves a gamer get through that and they consider it like a personal
1:26:19triumph and move on from it. And once you've done that once, you realize that there is
1:26:25nothing in the game that I can't do. I can always persevere. It's just a question of
1:26:30doing it. And it's not like a value judgment. Like, if you decide your time is better spent
1:26:34doing something else, then fine, or whatever. I'm just saying, like, the people who make
1:26:37that decision, they say, "You know what? I'm going in this totally inconsequential place
1:26:42where there's no reason for me to do this. There's no reward waiting for the end of it.
1:26:45No one's going to care that I did it. I'm just alone here in my house. I've decided,
1:26:48"You know what? I'm going to do this." And eventually you do do it. It's an amazing
1:26:53feeling and it gives you a belief in yourself that it shouldn't because it's like all
1:26:57you did was press buttons on a controller like this has no bearing on your ability to
1:27:01succeed in life or anything like that. But it feels amazing, right? And that's the
1:27:05great thing for people who are gamers. That's the amazing thing about games like Super Hexagon
1:27:09and stuff is because it takes that gamer sense of thinking that there's nothing you can't
1:27:14beat and saying, "No, actually, here, try this." And it's like, for one set of people,
1:27:21like this is a new experience, because at this point, every challenge that I've come across,
1:27:24I've been able to surpass. So it's going to bring some people to say, "I have reached my limits as a
1:27:30human being." No matter, I realize now, after my years of experience of being in things, that this
1:27:35is one place that I can't go any farther. And then at first, even smaller percentage of people,
1:27:40it's going to make them initially think that, and then they are going to do it, and they're going to
1:27:43to be like, "I am now God." It's like after you've, you know, getting back to drugs analogy,
1:27:50like you've built up a tolerance, right? And the only way for you to get any sort of high
1:27:54is to get into the situation that is basically impossible and either be defeated and have
1:27:59that be a novel sensation or break through anyway and be like, "There's now nothing I
1:28:02can't do," you know? You are very far at the end of that spectrum. Is there any game type
1:28:09experience you've done where you feel like there's no way in heck I'm going to beat this,
1:28:12you forget it, you put the game down, you put it away for six months, and eventually
1:28:15you say, "You know what? I'm going to beat that," and you come back to it. Not with a
1:28:17six-month gap, but any kind of thing where you feel like you've already decided, "This
1:28:21is impossible. This is unfair. There's no way this can be beaten. I hate this game,"
1:28:24but then have eventually gotten through it.
1:28:26Oh, yeah, definitely. Usually that's the outcome. I don't usually give up on the game completely.
1:28:32But there are certain things that just... Anything that just wastes tons and tons of
1:28:37of time doing the same thing over and over and over again
1:28:41in order to get to the point that I keep failing,
1:28:44that drives me nuts.
1:28:45- Yeah, that's part of the experience.
1:28:47Of course they do that.
1:28:48Of course, like the most extreme cases,
1:28:50the ones where there was no saving, right?
1:28:51Because then, like, the whole thing would be like that.
1:28:53You'd spend like five hours on a weekend
1:28:55getting to the place where you die all the time
1:28:57only to die all the time.
1:28:58So like your, you know, your code compiled debug cycle
1:29:02is like four hours long, and you know, you're like,
1:29:05you do the math in your head, like,
1:29:06How many tries is it going to take me?
1:29:08And if each time I do the try, and then eventually you
1:29:10can't even get up to that level anymore,
1:29:11you're going to that downward spiral
1:29:13where you're not even getting halfway to the place
1:29:15where you're going to die anymore,
1:29:16and you have to take a break from it.
1:29:18That's what I'm talking about.
1:29:19That's the whole experience.
1:29:21And that's totally the worst.
1:29:22And that's why the games are generally
1:29:24where you get some kind of save or some other way to do it.
1:29:26But yeah, back in the day, you'd play those NES games.
1:29:29It was like, was it "Bionic Command" at the moment
1:29:31where you had to shoot a missile at Hitler in a helicopter
1:29:33as you flew by him on the screen?
1:29:3630 frames a second, and you got basically one shot at it, and the first time it happened,
1:29:40you had no idea it was coming, and now you're just like, "We gotta play through the whole
1:29:43game again to get up to that one scene and give it another try." That was a different
1:29:46age.
1:29:47See, I had a terrible horror story with the NES, because I had, what was it, Dragon Warrior?
1:29:52That was the original, not the original RPG, but it was one of the first RPGs in the NES,
1:29:57and...
1:29:58Please email Casey.
1:29:59Please email me. No, don't really. But anyways, I wanna say, please don't email me, that the
1:30:05highest level you could get to was like 25 and I got up to level 21 or something like that and then my little brother
1:30:11and to this day, I'm not sure if he was being a d*ck or if he did it accidentally, but he
1:30:16erased my save, my save game or whatever and I never looked at that game again because I was it took me hours
1:30:24I remember... That could ruin a friendship.
1:30:26Yeah, exactly. But he's still his brother. You can't get rid of him.
1:30:29Yeah, I tried but I couldn't. Oh man, that made me so angry.
1:30:34Yeah, that's the other thing. That's the other element that could turn you off is like if you feel like something
1:30:37Unfair has happened like it's not the game. It's not you my brother and like that's not fair like I was willing to accept all
1:30:43The crap this game could throw at me and try it, but now someone has deleted my save game
1:30:46It's like alright that one that one. It's like you know foul out of bounds
1:30:51Oh, yeah
1:30:51The reason why I never beat Vice City is that I was playing it during college and on my roommates Xbox
1:30:57And when he went home from the summer, I'm like well that there good there. It goes. That's it. He saved you
1:31:02Yeah, but like I would like Tiff and I were playing it we we got
1:31:06We were playing it for like months and we got to what had to be like almost the end of the missions
1:31:12And yeah, but like once that like I ended up getting my own Xbox eventually
1:31:16But then it's like I'm not gonna start over and there was no good way for me to like get the save game from him
1:31:20And put it on mine like you know that that wasn't gonna happen
1:31:23So I just the game if the game is good enough you'd want to start over
1:31:25Yeah, but that's the thing like I think I wouldn't I wouldn't get any pleasure out of like replaying the GTA missions because so like
1:31:32I like them at the time, the first time I'm playing through.
1:31:35I like accomplishing those things and getting it done.
1:31:38But I never want to go back and do these things over again
1:31:41'cause it's just so time consuming
1:31:42and so many of them are so tedious.
1:31:44- Yeah, it's kind of like favorite movies.
1:31:47Most people like to see their favorite movies
1:31:49more than once in their entire life.
1:31:50Like that's what makes them their favorite movies.
1:31:52None of them need to watch it every month
1:31:53or even every year, but your favorite movies,
1:31:55you might be like, "Nah, I've seen that one already."
1:31:57Like you'll watch it.
1:31:58You'll watch it if it ends up on TV or whatever.
1:32:01That's what it's like with favorite games,
1:32:02gamers is like not like you're gonna play it every month or every year or whatever but like every
1:32:06Five years or so you feel like I have to play my hero game again because it's been too long right
1:32:11Yeah, so how often do you play journey? I?
1:32:13Play it really so many damn times, so I'm not taking a break from now at this point
1:32:17I do it pretty much on the year anniversary of journey
1:32:19I play a little bit, but like my new thing is getting other people to play journey. I'm spreading it's spreading the love to others
1:32:25It's just two hours
1:32:27So I can't I can't even believe it you already have the ps3. I think you already have the game yep
1:32:32Oh, you were just trolling the shit out of him right now.
1:32:35He's just denying himself a good experience.
1:32:38I mean, Journey really is a gamer's game, though, so it could be that it's appeal.
1:32:42It's like a movie fan's movie, like someone who's a real big cinephile, if that's the
1:32:47word.
1:32:48Movies that they love, the general public might not love.
1:32:51But I think Marco, I think Journey may be a crossover hit.
1:32:54We'll see.
1:32:55What about you, Casey?
1:32:57What's your Journey excuse?
1:32:58I don't have a PS3.
1:33:00Alright, well when Marco's done with his I'll send it to you.
1:33:03Because he's not using it for anything else apparently.
1:33:07On a very very quick final note, I tweeted like two minutes before the show, I just filled
1:33:11my car, my tank miles per gallon, 15.
1:33:13I saw that.
1:33:14Yeah, I saw that.
1:33:15I was thinking, I would love to get that.
1:33:18I was thinking I'd get like double that if I ever measured my mileage, which I don't.
1:33:23This moment right here perfectly encapsulates the three of us.
1:33:27Definitely.
1:33:28It perfectly encapsulates our cars, anyway.
1:33:31There are, apparently...
1:33:33There is a game called Candy Crisis. People are saying, "This is the Puyo Puyo clone for Mac."
1:33:36It's very well known. It looks like it might even be open source.
1:33:39- Yeah, it might have been the name of it. - Yeah, it's GPL.
1:33:42I just didn't recognize the screenshots. Like, they didn't look familiar to me.
1:33:46Yeah, so these screenshots still don't look familiar to me.
1:33:49I mean, there could be more than one of these. I don't doubt that there's more than one.
1:33:52I'm totally getting this. I'm so good at this game.
1:33:55No one... No one... I'm always... I tweeted, like...
1:33:57I'm always good at the games that nobody else plays, which of course that probably just
1:34:00means I'm not.
1:34:01Well, people play this.
1:34:02They call them casual gamers, Marco.
1:34:03It's okay.
1:34:04No, but there's like...
1:34:05Only John is judging you.
1:34:07I'm really good at Moon Base Commander, too.
1:34:09And Moon Base Commander, nobody plays.
1:34:11Right?
1:34:12You said Rubik's Cube.
1:34:13I was like, "What?"
1:34:14No.
1:34:15That's like one of my, like, "I'll never get to it" ideas is I would love to make Moon
1:34:19Base Commander for iPad, but it's just never gonna happen.
1:34:23Like, first of all, even though it was a $5 game in, like, 2001,
1:34:29it's still probably beyond my ability to make,
1:34:33because I'm not really a game programmer, and it would be, like--
1:34:37I'm sure maybe I could do it if I had nothing else to do for, like, five years,
1:34:40but, you know, I wouldn't--
1:34:42it would be a tremendous waste of time for me to try to make that,
1:34:44because it's so far outside of my expertise.
1:34:46- Sprite can? - Maybe.
1:34:48- Ah. - But, um--
1:34:50- Games practically write themselves.
1:34:52It automatically compiles your images into asset files.
1:34:59You should watch those Dev Summit.
1:35:01SpriteKit is like-- SceneKit, you could not make a 3D game with, because it's just for
1:35:06adding 3D to your apps.
1:35:07Like those are number three.
1:35:08But SpriteKit, you could make a Sprite game with.
1:35:11Isn't it basically just like Apple's ripoff of Cocos2D, or is there more to it?
1:35:16I mean, basically, you've got core animation, right?
1:35:18So you've got all the makings of a SpriteKit, but anyone who actually wants to make a game
1:35:21out of that is not going to use a bunch of current animation layers. There's things that
1:35:24sprite collision detection and compiling all your assets into big files and pulling out
1:35:28chunks of them or whatever. And this does that for you. This makes it so that you might
1:35:34be... People who are thinking of making a game but have no idea how to do it, Sprite
1:35:37Kid now suddenly puts their game to the realm of possibility because it's not like... You're
1:35:42not going to make an awesome game that's groundbreaking, but you're going to make a competent game
1:35:45provided you have good artwork or whatever. So it does the things the framework's supposed
1:35:50Which is like people who could not make this program before now can because smarter people have come and given them more lower layers
1:35:56And it's impressive because you actually can make a game out of it like it did in the demo
1:36:01They had an actual game not a not a good game not an amazing game, but you look at it
1:36:05And you go you know what that's fine. You know
1:36:07Someone who who has like the skills to make a game in terms of level design and character design
1:36:12But not the skills to make a sprite engine now can get stuff on
1:36:17IOS and of course the best thing about it is it's IOS only
1:36:19So those people who do it won't have the skills to port their games any other platform
1:36:24Platform lock-in whoo
1:36:27But you should check just watch the dev seminars. They're fun dev seminars. They got their games
1:36:31I will see if I could but I can't oh, that's right everything's down, and I don't download all the
1:36:36Foresight to download them all the day they came out every year
1:36:44Someday now I have all this space and I finally I finally have like a large storage and backup thing set up
1:36:49Oh god. I have UPS is everywhere now - I have because I got this analogy and I'm like, you know what?
1:36:55I should put this on a UPS and
1:36:57So I'm like upgraded my main UPS for my mac Pro
1:37:01Move the old one into the closet for that and the router and stuff does the SMT 1500 have a fan?
1:37:07Oh my god you and your fans it does have a fan, but I think it only uses it when it's running on DC power
1:37:13hour. I, uh, cause like normally, I mean, I'll have to try to pay attention. I'll have
1:37:19to put a load on it when the Mac Pro's off. Um, so I could, so I could tell more directly,
1:37:23but as far as I can tell, the fan is not running normally. Uh, I certainly can't notice it
1:37:28next to a Mac Pro, uh, with no hard drives in it, which should tell you something. It
1:37:32doesn't tell me anything. It tells me nothing. All right. I'm hanging up on YouTube. I gotta
1:37:37go pack. All right. Enjoy your beach. And to be honest, I'm sort of dreading it. I don't
1:37:42I've not been in a pis-- I've not been to the beach at a time when I enjoy drinking alcohol, which I really enjoy.
1:37:48- So you're on the beach every five years? - I haven't been to the beach for more than a few hours.
1:37:52- Oh, good. Casey, we didn't have a beach intervention for you. - I hate the beach. It's hot. I hate the feel and the smell of suntan lotion.
1:38:00- Oh, God. What's wrong with you? Where'd you grow up again? - Oh, God.
1:38:03- Oh, I hate-- I will do anything to avoid using sunblock. - Oh, what is--
1:38:07- Oh, amen. Amen to that. - What is wrong with you people? - Sunblock smells like--
1:38:11Well, no matter what, it gets in my eyes.
1:38:13Like, no matter where I put it, no matter how careful I am, it always gets in my eyes and burns.
1:38:17This is like those commercials where they have this device to cook eggs and they say,
1:38:20"Eggs are so hard to make!"
1:38:21And the guys get eggs in their hair and the shells are in their eyes poking them.
1:38:25Sunblock always gets in my--
1:38:27No, it doesn't!
1:38:28If you have a tiny bit of confidence, you can not get the eggshells in your eyes.
1:38:33Even if you don't get it in your eyes, it still smells like--
1:38:36And you gotta sit there and you're--
1:38:38There's a million kinds of sunblock!
1:38:39I mean, it smells crappy.
1:38:40This million kinds of sunblock.
1:38:42Then you're all slimy for all day.
1:38:44And then what do you do?
1:38:45When you start to sizzle, you have to flip over.
1:38:48It's like you're a freaking geek yourself.
1:38:49You guys may be doing it wrong.
1:38:51Then you get up and you walk across the sand that's
1:38:53melting the bottom of your feet.
1:38:55Then you get in the water, which you accidentally
1:38:56get in your mouth.
1:38:57What beach are you going to, anyway?
1:39:01What is it?
1:39:01Kill Devil Hills, which is a great name for a freaking
1:39:03beach in the Outer Banks.
1:39:07Non-beach people.
1:39:08And then you get in the water and you open your- you stop clenching your lips shut as
1:39:13hard as possible and suddenly all the salt that is in the entire world is in your mouth.
1:39:19And you can't even drink the f***ing water because then you get more salt in your mouth.
1:39:22All these experiences you're describing are the same experiences the people who like the
1:39:26beach enjoy, but you're giving them a negative spin.
1:39:29The smell of the salt air, the feel of the sand under your feet, the smell of sunblock
1:39:35even suntan oil, cocoa butter smells. No. You guys were deprived of important experiences
1:39:44in your formative years, and now are broken adults who can't enjoy the beach.
1:39:48And the funniest part of this entire discussion is we met 20 yards from a beach, although
1:39:53the difference being that was a lake beach, which I enjoy.
1:39:55No, lakes are gross.
1:39:57Ocean beach.
1:39:57Filled with disgusting smelling water and mud.
1:39:59Yeah, and also, we were not wearing sunblock. We were inside using computers.
1:40:04[laughter]
1:40:05There was no salt, there was no sand, there was no sun.
1:40:08You got the programmer's tan, that's what I got.
1:40:11Oh god.