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