338: Double Chunking
00:00:00
◼
►
I need to find that episode where we talked about self-driving so I can send it to people because I feel like my warnings are not being heeded.
00:00:06
◼
►
Keith Pastron's warnings. Drive your cars, people.
00:00:11
◼
►
You've been ripping some test flight builds like it's your job.
00:00:16
◼
►
I am yet again procrastinating by making iOS 12 builds better.
00:00:23
◼
►
Yeah, I've been doing the same thing except you've been doing a much better job of it than me. For people who aren't on a test flight,
00:00:29
◼
►
first of all, if you want to join the beta, please join the beta. What happens with betas, this happens with every app, every beta, is
00:00:35
◼
►
no matter how many testers you get,
00:00:38
◼
►
you get like a couple of good installations out of each one and then they start fading and they don't install the betas anymore.
00:00:43
◼
►
And I understand, I'm the same way when I'm on betas. I'll install the first couple,
00:00:47
◼
►
I'll give some feedback and then I'll kind of just forget to do the updates after that and I'll never do it again. Anyway,
00:00:51
◼
►
so however big your beta group is, it'll start, you know,
00:00:55
◼
►
tapering off with like every build you ship will have fewer installations than the one before it did.
00:01:01
◼
►
So my beta group is like I think about
00:01:05
◼
►
3,800 people now. Apple allows up to 10,000, but I was only getting like 800 installs on the latest builds. By the way,
00:01:13
◼
►
this is also why I occasionally reset my entire beta group.
00:01:16
◼
►
I just like delete everybody and make everybody to re-sign up if they want to
00:01:19
◼
►
because, you know, most of the time you gotta like cycle through people because they, you know, they fall off.
00:01:26
◼
►
Anyway, in this build I am changing the sync protocol to the servers in a pretty substantial way.
00:01:32
◼
►
So I wanted to get as many people testing it as possible.
00:01:35
◼
►
So when most of my beta group has fallen off, I had to add new ones. Anyway,
00:01:38
◼
►
so if you want to join my beta, please feel free. The link will be in the show notes.
00:01:44
◼
►
Don't just skim past that. So what's the
00:01:47
◼
►
reasoning behind the grandiose sync server protocol changes and to the best you're willing to share,
00:01:53
◼
►
what is the executive summary of what you've done? Sure. So I mean none of this is really secret.
00:01:58
◼
►
There's been a couple of challenges I've faced.
00:02:00
◼
►
So the previous sync system, the, you know,
00:02:03
◼
►
if you figure like a podcast has a feed, the feed has episodes in it, every time you would sync before,
00:02:08
◼
►
before I had these two different methods of sync. There was the
00:02:12
◼
►
complete like full sync and the
00:02:15
◼
►
some objects sync. The some objects sync was a small method that would just like, as
00:02:20
◼
►
you were listening to a podcaster, if you would like pause or seek or delete or recommend it, any kind of like small change to
00:02:26
◼
►
a podcast, the client could send just that to the server.
00:02:29
◼
►
So it was a lightweight operation and that was fine.
00:02:31
◼
►
There was a whole bunch of complex logic in the app though about like,
00:02:34
◼
►
how many times do you send those before you send a full sync? How often do you send a full sync?
00:02:39
◼
►
Do you wait for certain delays or whatever else? Because without a full sync,
00:02:43
◼
►
you can't get like entirely new things and everything. The full sync operation was very
00:02:47
◼
►
heavyweight on both the app and the server side. The full sync, the app would
00:02:52
◼
►
would basically send a record to the server of every episode it knew about in all of your podcasts and
00:03:00
◼
►
every detail about all your podcasts too. So it would send like, you know,
00:03:03
◼
►
e-tags for each one and then all the parameter values for like what you've like the user, the user set of all parts.
00:03:09
◼
►
So deleted, progress, etc.
00:03:11
◼
►
It would send all that to the server. Then the server would load
00:03:16
◼
►
every podcast you subscribe to,
00:03:18
◼
►
every episode in every podcast you subscribe to, and would filter through and try to see, all right,
00:03:23
◼
►
do you have anything you shouldn't have and do I have anything you don't have that you need to have?
00:03:28
◼
►
So it was this very heavy operation. You can imagine, you know, on the client side you're going through at that point possibly,
00:03:35
◼
►
you know, tens or hundreds of episodes if you had a big backlog. And on the server side you were going through all
00:03:42
◼
►
episodes of all your feeds. So you could have, it could be going through thousands of records easily.
00:03:47
◼
►
And so it was a very very heavy operation on both sides and
00:03:52
◼
►
there were two problems I wanted to solve. Number one is I wanted to get to a point where the app could have
00:03:59
◼
►
locally downloaded records of all episodes of all your podcasts. Not just the current ones,
00:04:05
◼
►
but their entire back catalogs. And this is for a few reasons that, you know,
00:04:09
◼
►
it helps enable certain features down the road like having a list of all your start episodes,
00:04:12
◼
►
things like that that people have wanted for a while. It also helps enable much better search
00:04:17
◼
►
because you could, the search, the local search index on your app, on the device can index all
00:04:23
◼
►
back catalog content of all your podcasts, not just the current unlisted two episodes.
00:04:27
◼
►
So there were a bunch of reasons why I wanted to have everything stored locally.
00:04:30
◼
►
It makes a lot of things easier and enable some cool features.
00:04:33
◼
►
But to do that with the old sync system would just explode in memory and CPU usage on both sides
00:04:39
◼
►
for people who had a lot of a lot of subscriptions. And a lot could be like
00:04:43
◼
►
50 or more and you think that's weird, but like I have 90 and I don't think I have too many.
00:04:48
◼
►
It's just, you know, they accumulate.
00:04:50
◼
►
It's a lot of them are old shows that no longer update, but I still have them in my list, etc.
00:04:53
◼
►
Anyway, so problem number one was I wanted to be able to store everything on the device about all your podcasts for lots of various reasons.
00:05:01
◼
►
Problem number two is that this heaviness on both sides made it so that the servers were doing way more work than they should have.
00:05:09
◼
►
They were using way more memory for some of these requests. People were hitting the PHP memory limit all the time.
00:05:15
◼
►
Like whenever I'd set it out, like I currently have it set at
00:05:17
◼
►
256 megs per request, which is a very high memory limit for a web request.
00:05:22
◼
►
That's no web app in 2019 should need that much RAM to do most requests.
00:05:27
◼
►
But I just had to set that high because I had to for people who had big subscription lists.
00:05:31
◼
►
And, you know, just to have enough memory to do that sync operation where it loads all of their episodes of all their podcasts into memory and
00:05:38
◼
►
parses through them and everything. And, you know, I did some things in the server side to help alleviate that a little bit.
00:05:43
◼
►
But it wasn't as good as it could be. Like I would like stream out the JSON
00:05:47
◼
►
response and everything like object by object. And so I wasn't storing it all in memory at once.
00:05:51
◼
►
But it was still doing a bunch of very heavy operations.
00:05:54
◼
►
The other problem is that this would explode memory usage on the client side, too.
00:05:59
◼
►
And so I want to have a locally synced version that can run on the Apple Watch.
00:06:04
◼
►
I want to make like a full-blown first-class overcast sync client that runs on the Apple Watch and syncs directly to my servers
00:06:11
◼
►
instead of having to go through the phone because that's unreliable.
00:06:13
◼
►
The only way to do that is to fit the entire sync engine in the Apple Watch's resource constraints.
00:06:18
◼
►
And that was never gonna happen with the old system.
00:06:20
◼
►
I decided to solve this problem with a new system that instead of making
00:06:25
◼
►
one giant request to do everything, it basically makes individual requests per podcast.
00:06:30
◼
►
And so it does a main sync request at the beginning.
00:06:33
◼
►
I totally got rid of the some object sync. The like the two different kinds of sync request to the app, like depending on
00:06:38
◼
►
severity, got rid of that completely. Greatly simplified the app code.
00:06:41
◼
►
And now it just makes one request at first that is like list of podcasts. That list request tells the app
00:06:48
◼
►
which podcasts it needs to update. Then the app can fetch those podcasts individually.
00:06:53
◼
►
And so it turns out the sync ends up taking a little bit longer on the client side.
00:07:00
◼
►
But no one notices. I can do it way more often.
00:07:04
◼
►
I can do it with way less throttling, way less delay, because it's such a simple operation on both sides.
00:07:10
◼
►
The memory usage on the server dropped from like something like 90 megs from my account to 8.
00:07:17
◼
►
I'm a little scared that I am generating more requests.
00:07:20
◼
►
So I'm a little scared like how this will scale on launch day.
00:07:23
◼
►
And in fact, I will probably phase this release out with the App Store phase release feature,
00:07:29
◼
►
which I've never used before. My expectation is that it's gonna be actually way less load on the servers than the current version.
00:07:34
◼
►
And this enables, you know, I haven't done the the start episodes section yet,
00:07:39
◼
►
because that's just more UI work that I'm deferring for now.
00:07:42
◼
►
But this did enable me to hopefully fix syncing of large libraries.
00:07:47
◼
►
And also I did the local search feature where now you can search everything and it's fine.
00:07:51
◼
►
So anyway, once you get this version everybody,
00:07:55
◼
►
the initial sync might be a little slow while it downloads all those bat catalog data blobs for the first time ever.
00:08:01
◼
►
But once it has that, it's fine. Another interesting thing I did,
00:08:04
◼
►
I kind of defined my own data format, which is usually not a good idea.
00:08:10
◼
►
But in this case, I mentioned I use JSON for most of the server communication.
00:08:15
◼
►
Yes, I know about protocol buffers. I'm very aware of things like that.
00:08:19
◼
►
And there's a couple other like data formats that I'm theoretically supposed to use instead of JSON.
00:08:24
◼
►
But the fact is they all have
00:08:27
◼
►
requirements that I don't want to meet and they don't achieve enough of a gain
00:08:32
◼
►
for me to want to tackle their complexity and requirements. So I use JSON because it's everywhere.
00:08:39
◼
►
It's easy to read and write on both ends from both Apple's frameworks and from the built-in PHP stuff.
00:08:45
◼
►
And I don't need anybody's weirdo libraries. I don't need to define anybody's weirdo schema or anything like that.
00:08:49
◼
►
It's just super easy. So I use JSON. It compresses really well. It performs really well. The main problem though
00:08:54
◼
►
is that when you are parsing on the client side, when you're parsing a big list such as
00:09:01
◼
►
say a podcast has a thousand episodes and you're posting a thousand entries of that like in like the response from my server request of like
00:09:08
◼
►
"Hey, what episode do I need?"
00:09:10
◼
►
The client has to, when it's decoding that big blob of JSON, has to decode the entire thing in memory at once.
00:09:16
◼
►
Most JSON libraries including Apple's built-in one don't have what in the XML world was called a SAX parser.
00:09:23
◼
►
Basically, they don't have like a streaming JSON parser. You can't like stream out one object at a time
00:09:29
◼
►
from a giant response or a file.
00:09:32
◼
►
You have to load the whole thing into like one giant dictionary in memory and then access it.
00:09:37
◼
►
And this again would go against my memory requirements for like having things be very small and sparse so that they could fit on the Apple Watch.
00:09:44
◼
►
So I just defined a very slight modification where my servers are still sending JSON,
00:09:50
◼
►
but they are sending it in a streamed format.
00:09:53
◼
►
So they basically send a little tiny header to identify it as this format and then they send blobs that
00:09:59
◼
►
they first send the size of the following JSON blob and
00:10:04
◼
►
then they send the JSON blob. And then the next is another one of those integers
00:10:07
◼
►
that's the size of the next one and they send the next one. And so it allows on the client side very, very easy
00:10:12
◼
►
stream parsing of JSON data. So I read, if I see this header, I know it's a stream and so I
00:10:20
◼
►
read that size, read that chunk, parse it, deal with it, throw it away, read the next size, read the next chunk.
00:10:26
◼
►
It'll be great if these responses are being sent with transfer encoding chunked.
00:10:31
◼
►
Because that's what you basically have. Did I just reinvent something there?
00:10:34
◼
►
Yeah, but HTTP has a protocol where it does exactly that. The size of the next chunk, then a chunk of the size of the next chunk.
00:10:41
◼
►
It may be happening right now, it depends on what your client and server support, but I don't think that would help you because you'd have to
00:10:47
◼
►
interact. First of all, you wouldn't get to choose where the chunks are, I think. Right, which for JSON parsing would ruin the entire thing.
00:10:53
◼
►
Right, but you should check what's going over the wire. You may actually be double chunking this, which would be fun.
00:11:00
◼
►
Yeah, you know, I've seen the chunked encoding thing go by in headers here and there in my career.
00:11:06
◼
►
I never knew the details of what that was.
00:11:08
◼
►
Now I know, thank you.
00:11:11
◼
►
So anyway, though I may be double chunking, it does actually work.
00:11:15
◼
►
I'm keeping it very, very simple.
00:11:18
◼
►
I thought, oh, should I be fancier and maybe serialize
00:11:22
◼
►
some more of the common fields that are in my JSON objects into binary fields?
00:11:27
◼
►
And I thought, no, stop right there. That's crazy town. I don't want to reinvent protocol buffers.
00:11:31
◼
►
Like I just want to have a very simple streamable JSON format.
00:11:36
◼
►
And that's what I have. It took minimal modification to either side. And here we go.
00:11:41
◼
►
So that's what I've been doing. It's almost done.
00:11:44
◼
►
I will probably submit to the App Store in the next week or so. And that's it.
00:11:51
◼
►
Making me feel bad. That's a good thing.
00:11:54
◼
►
So I'm curious, how is your photo hashing problem coming?
00:11:57
◼
►
I haven't had much time to look at it since we last spoke.
00:12:00
◼
►
I did, however, I wasn't actually planning on bringing this up,
00:12:04
◼
►
but I did get some very useful feedback from a couple of people who had said,
00:12:08
◼
►
hey, and well, and they were both very polite, which is very nice,
00:12:11
◼
►
because this is totally the sort of thing that your typical, you know, internet jerk would be like,
00:12:17
◼
►
didn't you know that, but that was not the emails I got, which I very much appreciated.
00:12:21
◼
►
The emails I got were, hey, man, did you know that I think it was session 222,
00:12:26
◼
►
I'll put a link in the show notes, of this past WWDC,
00:12:30
◼
►
Apple actually had a very brief part of a vision framework presentation wherein they said,
00:12:36
◼
►
hey, here's how you can figure out duplicate images.
00:12:39
◼
►
And I watched, which was at first very frustrating,
00:12:42
◼
►
I watched that it seemed way more complex and maybe not as useful as it was painted to be.
00:12:53
◼
►
In a perfect world, it will be useful and it will replace my kind of homegrown hashing algorithm thing.
00:13:00
◼
►
But I'm unconvinced it is an exact fit for what I want.
00:13:05
◼
►
And this was in the context, this session was largely about classifying things within images.
00:13:10
◼
►
So if you have a picture of a cat, you know that there's a cat in a bowl of something,
00:13:13
◼
►
I was going to say bowl of milk, but I guess all you would know is that there's a bowl there,
00:13:16
◼
►
and a kitty cat, and a person or whatever the case may be.
00:13:19
◼
►
And so they obviously, with duplicate detection, they talk about more than just, you know, classification.
00:13:27
◼
►
So yeah, two cat images are by no means necessarily the same.
00:13:31
◼
►
But anyway, I got to look at this again and see if it's useful.
00:13:35
◼
►
But I was just thinking to myself earlier tonight that I really need to stop procrastiworking about iOS 12 stuff
00:13:42
◼
►
and really got to get into like dark mode and a couple of the kind of low hanging fruit pieces of iOS 13.
00:13:48
◼
►
And I've been trying to convince myself to really try SwiftUI again,
00:13:55
◼
►
which I tried briefly earlier in the summer and wanted to go bald and rip all my hair out because it was so frustrating.
00:14:01
◼
►
And I really, the siren call is strong, gentlemen, but I know the adult in me knows it's just too early for that.
00:14:07
◼
►
You know, this is like jumping in Swift, and I love Swift, and I am a Swift apologist,
00:14:11
◼
►
but this is like jumping onto Swift when it was Swift 1 timeframe.
00:14:15
◼
►
You can do it. I would recommend it, but you can do it.
00:14:19
◼
►
In some way, sometimes, somehow I might get into a deeper rant about SwiftUI,
00:14:23
◼
►
but I think Syracuse is going to give me the Apollo hook if we don't get to follow up soon.
00:14:28
◼
►
But in summary, I got some stuff to look at, and I very genuinely, I very much appreciate the emails that came in,
00:14:32
◼
►
not only just pointing me in that direction, like it would have been useful even if these people were jerks,
00:14:37
◼
►
and said, "You dummy, look at this."
00:14:40
◼
►
But I doubly appreciate that they were nice and said, "Hey man, check this out." So I need to look again.
00:14:45
◼
►
And there were also, there were a bunch of recommendations for like simple algorithms,
00:14:48
◼
►
and I didn't mention during it, but I think I've talked about it before,
00:14:51
◼
►
but I actually wrote a similar algorithm for an overcast feature, I think it's still there,
00:14:57
◼
►
where sometimes a podcast would embed in its MP3 the same image as its cover art, but in worse quality.
00:15:08
◼
►
And so I wanted to detect whether the embedded image was the cover art,
00:15:13
◼
►
and then if it was, I would pick whichever had like the bigger pixel size to be the one that I actually showed.
00:15:20
◼
►
And so a number of people wrote in to basically suggest what I ended up doing, you know, five years ago,
00:15:25
◼
►
which was I would resize the image down to some very small size, I think it was like 16 by 16 or something like that,
00:15:32
◼
►
resize both images down to a very small size, and then go through pixel by pixel, and just track like,
00:15:37
◼
►
and I think I did it in the HSB space, so you know, hue, saturation, brightness, instead of RGB,
00:15:44
◼
►
because it was easier to detect, you know, certain differences, and just say like, you know,
00:15:48
◼
►
what percentage different are these pixels in these two images?
00:15:52
◼
►
And is this pixel, you know, a 50% difference in saturation from the other one, et cetera?
00:15:57
◼
►
And then like you take the average of like how different these values are across these two very small scaled down versions.
00:16:03
◼
►
And you can do all this very, very quickly on modern hardware, like even five years ago, that was nothing to do.
00:16:09
◼
►
It isn't incredibly sophisticated, like it wouldn't detect things like 90 degree rotations,
00:16:13
◼
►
or like, you know, having an image have like a different crop on it, but be like two parts of the same image.
00:16:19
◼
►
Like it wouldn't detect a major difference like that.
00:16:21
◼
►
But if it's just like two different versions of the same picture, just like with different services, sizes,
00:16:27
◼
►
and crappy JPEG compressions, it detects those flawlessly.
00:16:32
◼
►
I assume, like when you said, you were talking about like an image hashing thing,
00:16:36
◼
►
I assume that was the kind of thing you were talking about?
00:16:38
◼
►
- Well, so it's similar, so I can go into slightly more detail about this, and this was,
00:16:43
◼
►
based on algorithm, I'll put a link in the show notes to the source, not as in source code,
00:16:47
◼
►
but sources in the webpage that had instruction about this algorithm
00:16:51
◼
►
that a dear friend of the show, Craig Hockenberry, had pointed me to.
00:16:54
◼
►
The general gist of the algorithm, it's similar but not the same.
00:16:57
◼
►
So the first thing I do is I shrink them to the images to 16 by 16.
00:17:01
◼
►
Then I convert to grayscale.
00:17:03
◼
►
Then I take an average of what those,
00:17:06
◼
►
like the float values of those colors, and I average it out, and I'm making this up.
00:17:11
◼
►
Let's say, you know, the average is five,
00:17:13
◼
►
and I'm dramatically oversimplifying,
00:17:15
◼
►
but let's just say the average is five.
00:17:17
◼
►
Well, any of the colors on each of those pixels,
00:17:21
◼
►
any of the colors that are above or equal to five gets treated as a one.
00:17:25
◼
►
Any of the colors that are below or less than five,
00:17:28
◼
►
oh, that's the same thing, below five gets treated as a zero,
00:17:31
◼
►
and suddenly I now have a 64-bit numeral,
00:17:36
◼
►
because I've got a 16 by 16, I did that math right,
00:17:39
◼
►
a 16 by 16 image that I've now
00:17:43
◼
►
gotten one bit per pixel.
00:17:47
◼
►
So now I have a 256-bit integer,
00:17:51
◼
►
and that is the hash.
00:17:53
◼
►
And then once I have two of those integers,
00:17:56
◼
►
I compute what's called the Hamming distance,
00:17:57
◼
►
which is to say how many of these ones or zeros match each other.
00:18:02
◼
►
So if you look at the zeroth position of both integers,
00:18:05
◼
►
are they both one or are they both zero?
00:18:08
◼
►
If you look at the first position, are they both one or are they both zero?
00:18:10
◼
►
And the amount of non-matching positions is the distance.
00:18:17
◼
►
So if you have five non-matching positions,
00:18:19
◼
►
which is I think the threshold I'm using right now,
00:18:21
◼
►
which I probably have to tweak as we spoke about last time,
00:18:23
◼
►
if you have five as the distance,
00:18:25
◼
►
those are probably pretty damn similar images.
00:18:28
◼
►
If you have 50 out of 64 as your distance,
00:18:32
◼
►
they're probably not the same.
00:18:33
◼
►
And again, I'm oversimplifying a little bit,
00:18:35
◼
►
because it's kind of hard to paint a word picture here,
00:18:37
◼
►
but I'll put a link in the show notes
00:18:39
◼
►
so you can dig a little deeper into it.
00:18:40
◼
►
I do like what I've done.
00:18:42
◼
►
I think, I'm not saying it's flawless,
00:18:43
◼
►
but I think it's a pretty solid way of approaching the problem.
00:18:46
◼
►
To your point earlier, Mark,
00:18:47
◼
►
it wouldn't handle rotation or things like that.
00:18:50
◼
►
And it's not flawless, as John has pointed out,
00:18:52
◼
►
with things as simple as JPEG compression.
00:18:54
◼
►
Now, I think some of that I could tweak with,
00:18:56
◼
►
you know, by tweaking the threshold
00:18:58
◼
►
between what I consider to be the same
00:18:59
◼
►
and what I consider to be different.
00:19:01
◼
►
It seems to be going okay so far,
00:19:03
◼
►
but I definitely need to do more tweaking.
00:19:05
◼
►
As a quick side note before I let you guys comment on this algorithm,
00:19:08
◼
►
I had written this so that, you know,
00:19:11
◼
►
when I had these two, you know,
00:19:13
◼
►
these two 64-bit integers, I needed to, you know,
00:19:16
◼
►
figure out, well, what bits match and what bits don't?
00:19:20
◼
►
And I wanted to know when one or the other was,
00:19:25
◼
►
you know, when they were not matching, basically.
00:19:27
◼
►
So I have one, if I have two bits,
00:19:30
◼
►
one is one and one is zero, or one is zero and one is one.
00:19:33
◼
►
And I wrote this like super, super ridiculous,
00:19:36
◼
►
like I think it was a nested loop to figure this out.
00:19:39
◼
►
And then it occurred to me, wait, wait, wait, wait, wait.
00:19:41
◼
►
- You forgot what, that XOR exists?
00:19:43
◼
►
- Then, as I was telling my father about this,
00:19:45
◼
►
'cause he happened to be there right as I'd finished this up,
00:19:48
◼
►
I was like, wait a second, this sounds, oh God,
00:19:51
◼
►
I can definitely use an XOR here, can't I?
00:19:53
◼
►
So I felt like such a damn fool
00:19:57
◼
►
when I realized they were in my ways.
00:19:58
◼
►
Thankfully, I realized it before I shipped to anyone.
00:20:01
◼
►
- You're reinventing it from first principles, Casey.
00:20:04
◼
►
- I mean, to be fair, like,
00:20:05
◼
►
I bet the majority of working programmers
00:20:07
◼
►
don't know what XOR is.
00:20:08
◼
►
Second of all, even those who know what it is,
00:20:12
◼
►
I'm pretty sure I've had zero times
00:20:14
◼
►
when I actually had to use it in my career.
00:20:16
◼
►
- Exactly, exactly.
00:20:18
◼
►
- I've totally used it.
00:20:19
◼
►
- Of course you have.
00:20:20
◼
►
- Of course you have.
00:20:20
◼
►
- Back in the day, you were looking for an excuse
00:20:22
◼
►
to do bitwise operations in C.
00:20:24
◼
►
It was like, what clever, you know,
00:20:26
◼
►
it was like your first option.
00:20:27
◼
►
- I do bitwise operations all the time.
00:20:29
◼
►
I just have never had a use for XOR.
00:20:32
◼
►
I even do them in PHP.
00:20:34
◼
►
- It's funny to me that both of you picked it out
00:20:36
◼
►
as I was starting down this path.
00:20:37
◼
►
- I've used it in conditional expressions.
00:20:40
◼
►
As in, you know, you can do like double ampersand
00:20:44
◼
►
and double pipe for the OR, like in a big if or whatever.
00:20:47
◼
►
Well, Perl, no surprise, has XOR operations.
00:20:50
◼
►
So does C for that matter, but Perl has logical XOR,
00:20:53
◼
►
not just bitwise.
00:20:54
◼
►
And I've used logical XOR.
00:20:55
◼
►
- Oh, you're so fancy.
00:20:57
◼
►
- Yep, and then you have a big comment at the top
00:20:59
◼
►
that says, look how clever I am, did you know this?
00:21:03
◼
►
So anyway, so I was both humiliated
00:21:06
◼
►
and then ultimately proud of myself
00:21:08
◼
►
for having realized as I was just kind of walking Dad
00:21:10
◼
►
through the general gist of the algorithm.
00:21:13
◼
►
'Cause Dad has never written code,
00:21:14
◼
►
but he's a reasonably tech-savvy guy.
00:21:17
◼
►
And so if I give him the broad strokes of something,
00:21:19
◼
►
he can usually follow along.
00:21:20
◼
►
And yeah, as I was describing it, I was like,
00:21:22
◼
►
wait, holy crap, I think that's an XOR.
00:21:24
◼
►
I gotta double check that and look that up.
00:21:26
◼
►
So turns out that made that code a lot quicker
00:21:28
◼
►
and a lot smaller.
00:21:29
◼
►
Who'd have thunk it?
00:21:30
◼
►
- I'm glad none of us say XOR.
00:21:32
◼
►
- Does anybody say that?
00:21:33
◼
►
Let's just celebrate that.
00:21:34
◼
►
- That sounds like something I would do,
00:21:36
◼
►
be it deliberately or otherwise, but no.
00:21:39
◼
►
It's an XOR, thank you very much.
00:21:41
◼
►
- Yeah, your description of that algorithm
00:21:43
◼
►
just makes me think of all the ways it can fail.
00:21:44
◼
►
But setting that aside, it's a perfect opportunity
00:21:49
◼
►
for you to make unit tests.
00:21:50
◼
►
Every time someone sends you a pair of images that fail,
00:21:54
◼
►
you add it to the test data and you tweak the thing.
00:21:56
◼
►
And then if you end up chasing your tail
00:21:58
◼
►
and you can't get it to pass on all the images,
00:22:00
◼
►
then maybe it is actually time to dive in
00:22:03
◼
►
and try to get some kind of machine learning thing.
00:22:06
◼
►
'Cause by then you'll have a good data set
00:22:08
◼
►
of images that you think are the same,
00:22:09
◼
►
and then you can train the thing
00:22:10
◼
►
to also think they're the same.
00:22:12
◼
►
- You know, I know that you are correct.
00:22:15
◼
►
I don't think I am smart enough to handle
00:22:18
◼
►
anything related to machine learning.
00:22:19
◼
►
I'm sure that it's not as complex as I'm painting it, but--
00:22:22
◼
►
- Oh, really?
00:22:23
◼
►
You could use that GUI app that Mike Mattis makes
00:22:25
◼
►
or whatever, you just connect a bunch of boxes together
00:22:27
◼
►
and throw a bunch of images at it
00:22:29
◼
►
and click on things and correct it,
00:22:30
◼
►
and then it out pops a model that you just jam into CoreML
00:22:33
◼
►
and you just run it.
00:22:33
◼
►
- Just like that.
00:22:34
◼
►
Small matter of programming.
00:22:35
◼
►
- And then it gets bizarre results that you can't explain.
00:22:38
◼
►
But you're already getting bizarre results
00:22:40
◼
►
that you can't explain, so it's like you're already there.
00:22:42
◼
►
- I do wanna also echo your thoughts
00:22:46
◼
►
before we leave this entire genre of topics on SwiftUI.
00:22:49
◼
►
It is very similar to what you said
00:22:52
◼
►
of it's just like the first year of Swift,
00:22:55
◼
►
where it obviously is changing constantly.
00:22:59
◼
►
And there's a lot of people having a lot of fun
00:23:02
◼
►
and getting a lot of stuff done,
00:23:04
◼
►
like writing tutorials and playing with it
00:23:07
◼
►
and making test apps or making real apps.
00:23:10
◼
►
But it is so not for me,
00:23:13
◼
►
because it is still so much in flux
00:23:18
◼
►
that you have to, the things that are changing
00:23:21
◼
►
between betas are pretty significant things still.
00:23:25
◼
►
I am very tempted to rewrite my entire watch app in SwiftUI.
00:23:29
◼
►
I haven't started that yet.
00:23:30
◼
►
I'm very, very tempted.
00:23:31
◼
►
But there's so much churn in using SwiftUI right now.
00:23:36
◼
►
And the tools are so early and the frameworks are so early,
00:23:38
◼
►
and all of this is gonna be so much better next year
00:23:42
◼
►
when next year's betas come out and they fix all the,
00:23:45
◼
►
well, they fix many of the problems
00:23:46
◼
►
with this version of SwiftUI.
00:23:48
◼
►
I'm probably not gonna write any SwiftUI until next year,
00:23:51
◼
►
because it'll just be so much easier then.
00:23:54
◼
►
- Yeah, that's the thing.
00:23:55
◼
►
So I don't remember if it was Swift 2 or Swift 1
00:23:59
◼
►
where I really started, it was 2016,
00:24:01
◼
►
so it might have even been three.
00:24:02
◼
►
What was the awful, I can't ask you to,
00:24:04
◼
►
but whatever the awful transition was,
00:24:07
◼
►
I think that was three to four maybe?
00:24:09
◼
►
Maybe it was two to three, I forget now.
00:24:10
◼
►
But I was writing Swift professionally
00:24:14
◼
►
when there was that god-awful transition
00:24:16
◼
►
where everything under the sun changed names.
00:24:18
◼
►
And that's where Swift, I think,
00:24:19
◼
►
really got a bad reputation.
00:24:21
◼
►
The chat room was saying it was two to three,
00:24:24
◼
►
because everyone had to rewrite
00:24:25
◼
►
like half their darn code base,
00:24:26
◼
►
and it was very frustrating.
00:24:27
◼
►
Nevertheless, I had been writing Swift,
00:24:30
◼
►
so starting maybe Swift 2.
00:24:32
◼
►
And early on, the tooling was bad.
00:24:34
◼
►
I'm not trying to say it wasn't bad,
00:24:36
◼
►
but the thing that drove me most nuts about it
00:24:38
◼
►
was even if we did get an error message,
00:24:41
◼
►
the error messages were completely and utterly inscrutable.
00:24:45
◼
►
There was no way to look at these error messages
00:24:49
◼
►
and figure out what in the name of Zeus's butthole
00:24:51
◼
►
they were talking about.
00:24:53
◼
►
And that was frustrating, but eventually--
00:24:54
◼
►
- Is that much better now?
00:24:56
◼
►
- Well, so that was very frustrating,
00:24:58
◼
►
but I actually feel, and I mean, granted,
00:25:00
◼
►
maybe this has to do with me getting to be a much more,
00:25:03
◼
►
I'm just gonna say senior,
00:25:04
◼
►
but I don't know if that's really what I mean,
00:25:05
◼
►
but a more experienced Swift developer.
00:25:07
◼
►
And now I feel like with normal, like vanilla Swift,
00:25:11
◼
►
I can look at a Swift error message,
00:25:12
◼
►
and not always, not always,
00:25:13
◼
►
but I'd say 60 to 80% of the time, which is not great,
00:25:17
◼
►
but 60 to 80% of the time,
00:25:19
◼
►
I can put together what the actual issue is.
00:25:22
◼
►
And when I can't, you just add type annotations
00:25:24
◼
►
all over the place, and usually it figures it out.
00:25:27
◼
►
But nevertheless, with Swift UI,
00:25:30
◼
►
all this is to say with Swift UI,
00:25:32
◼
►
I look at these error messages
00:25:34
◼
►
and I don't have a (beep) clue what is happening.
00:25:37
◼
►
Like what, huh?
00:25:39
◼
►
What, where?
00:25:40
◼
►
What are you talking about?
00:25:42
◼
►
And so often the error is many lines away
00:25:46
◼
►
from where the error is being reported,
00:25:49
◼
►
which also happens in regular vanilla Swift from time to time
00:25:51
◼
►
but it is bad with Swift UI.
00:25:54
◼
►
And that's really frustrating
00:25:56
◼
►
because it feels in so many ways,
00:25:58
◼
►
as a Swift person, it feels like a regression.
00:26:01
◼
►
You know, I'm like, I'm getting all of these,
00:26:05
◼
►
I'm getting all of these bad feelings
00:26:07
◼
►
from early days of Swift coming back
00:26:09
◼
►
and they're not welcome here and I don't want them.
00:26:11
◼
►
So that's the tough thing, right?
00:26:13
◼
►
'Cause when Swift UI is going well,
00:26:14
◼
►
and this is, I mean, like so many things
00:26:16
◼
►
in both computing and in life,
00:26:17
◼
►
when it's going well, it is incredibly fun.
00:26:21
◼
►
And I mean that, I mean that word deliberately.
00:26:24
◼
►
I'm using that word deliberately.
00:26:25
◼
►
It is incredibly fun to be writing these UIs
00:26:28
◼
►
and watching them refresh instantly.
00:26:30
◼
►
And it's so fast and so enjoyable and declarative and great.
00:26:35
◼
►
And then you put one thing in the wrong spot
00:26:38
◼
►
and everything falls apart.
00:26:40
◼
►
And it falls apart in ways that are,
00:26:42
◼
►
I would argue impossible to understand.
00:26:45
◼
►
And that's the thing that just sucks all the fun out of it.
00:26:49
◼
►
It sucks all the air out of the room
00:26:50
◼
►
and makes me agree with you, Marco,
00:26:51
◼
►
that yeah, you could, one, could write very good
00:26:56
◼
►
user interfaces with Swift UI today.
00:26:59
◼
►
But if you wanna do that without ripping all your hair out
00:27:02
◼
►
and causing yourself to go bald, eh, maybe wait a year.
00:27:05
◼
►
- Even if you're already bald,
00:27:06
◼
►
I can highly recommend waiting a year.
00:27:08
◼
►
Because everything you just mentioned
00:27:11
◼
►
is going to be better next year.
00:27:14
◼
►
To some degree, just because of the nature of Swift
00:27:16
◼
►
and because of the nature of compilers,
00:27:18
◼
►
there's always going to be some degree of obtuseness
00:27:21
◼
►
and weird error messages possible
00:27:23
◼
►
if you put a character in the wrong spot
00:27:25
◼
►
or miss one thing in the language.
00:27:27
◼
►
Right now, I think it's probably as bad
00:27:30
◼
►
as it's ever going to be because it's brand new.
00:27:32
◼
►
The tooling still hasn't really caught up
00:27:33
◼
►
very much yet to it.
00:27:35
◼
►
Everything is very early.
00:27:36
◼
►
And so over time, the tooling is gonna get a lot better,
00:27:40
◼
►
which means the error reporting's gonna get a lot better.
00:27:43
◼
►
You'll have more of those little fix it buttons
00:27:45
◼
►
that you could just click a button
00:27:46
◼
►
to have to fix a typo or something like that, hopefully.
00:27:48
◼
►
But also, this is an incredibly complex pile of hacks
00:27:53
◼
►
on top of an incredibly complex language.
00:27:58
◼
►
And so I think there's only ever going to be
00:28:01
◼
►
a certain amount of niceness that is possible to give
00:28:05
◼
►
in things like error messages in Swift UI
00:28:08
◼
►
because Swift UI, it isn't some native thing
00:28:13
◼
►
that came easily to the language.
00:28:15
◼
►
It's very much like a very complicated pile of complexity.
00:28:20
◼
►
- Well, I both agree and disagree there.
00:28:22
◼
►
Swift UI is built out of Swift, and that sounds stupid,
00:28:28
◼
►
but there's no, there's magic-ish there,
00:28:33
◼
►
but if you follow, like you can see
00:28:35
◼
►
how the magic is held together, you know?
00:28:36
◼
►
And that's not just because Swift is open source.
00:28:38
◼
►
I'm not talking about digging into like
00:28:40
◼
►
the Swift C++ compiler, God help me, no.
00:28:42
◼
►
- No. (laughs)
00:28:43
◼
►
- So a lot of Swift UI and like the DSL,
00:28:46
◼
►
it is screwtable if you're willing to put in the work,
00:28:50
◼
►
but I agree with you, Marco, that no regular human being,
00:28:54
◼
►
myself very much included, is going to put in the work
00:28:57
◼
►
to really and truly understand how the Swift UI DSL works.
00:29:01
◼
►
And so in that sense--
00:29:02
◼
►
- What do you mean no regular human being?
00:29:04
◼
►
Anybody who knows?
00:29:06
◼
►
I think, I don't want to talk about Swift UI yet
00:29:09
◼
►
'cause I still have some more research
00:29:10
◼
►
and session viewing that I'm watching,
00:29:13
◼
►
but the features that the Swift UI,
00:29:17
◼
►
that make the Swift UI DSL possible are language features.
00:29:20
◼
►
And anybody who knows Swift and is interested
00:29:25
◼
►
in writing Swiftie code, if making your own DSLs
00:29:28
◼
►
becomes a Swiftie thing, which I think it might,
00:29:30
◼
►
will know how it works and will be able
00:29:32
◼
►
to write their own DSLs that look just like Swift UI,
00:29:35
◼
►
but do their own cool things.
00:29:36
◼
►
And so I don't think, I mean, it may not be common,
00:29:39
◼
►
most people won't know, but anybody sort of skilled
00:29:42
◼
►
in the art will not be afraid, in the same way
00:29:44
◼
►
that people know how React works.
00:29:47
◼
►
Like not most of them don't, most of them
00:29:49
◼
►
are just futzing around, but if you start actually working
00:29:51
◼
►
with React in a serious way, you learn all the language
00:29:54
◼
►
features that it's using in JavaScript.
00:29:56
◼
►
So I don't think it is, I don't think it's gonna remain
00:30:00
◼
►
magical for very long.
00:30:01
◼
►
Once the normal people who know all the different corners
00:30:04
◼
►
of languages will also know this corner
00:30:06
◼
►
'cause it's part of the language, it's not some one-off
00:30:08
◼
►
thing that was just done for Swift UI.
00:30:10
◼
►
- Well, I do think that there's a certain amount of
00:30:13
◼
►
obsession with minimalism that we've had across
00:30:17
◼
►
the entire industry in the last decade or two
00:30:21
◼
►
that has crept into programming languages in a way
00:30:24
◼
►
that it seems at first like a good thing,
00:30:28
◼
►
but what actually has happened, there's this huge downside
00:30:32
◼
►
of when there's so much complexity beneath the surface,
00:30:38
◼
►
it makes it harder to understand what the system is doing
00:30:41
◼
►
and it makes it harder for new programmers to get up to speed
00:30:45
◼
►
with the language and to be productive
00:30:46
◼
►
in the face of problems.
00:30:47
◼
►
Now, granted, I'm not saying the languages of yesteryear
00:30:50
◼
►
were easy in those ways all the time.
00:30:52
◼
►
I mean, I still remember, we all probably remember
00:30:54
◼
►
the first time we were programming something in C
00:30:56
◼
►
in comp sci 200 whatever and you build something
00:31:01
◼
►
and run it and you see segmentation fault.
00:31:03
◼
►
And like, well that could be anything.
00:31:06
◼
►
And like, there's lots of hard learning
00:31:11
◼
►
in becoming an expert in programming.
00:31:13
◼
►
But I feel like a lot of our modern languages,
00:31:17
◼
►
and I think this even started with like Rails,
00:31:21
◼
►
so not even that modern, but especially when you look
00:31:23
◼
►
at things like modern frameworks, modern JavaScript
00:31:25
◼
►
frameworks, Swift, Swift UI, they seem to obsess over
00:31:30
◼
►
minimal amount of code possible in the ideal case.
00:31:35
◼
►
And in some ways that's good because minimal amount
00:31:37
◼
►
of user-facing code shoving all the complexity
00:31:40
◼
►
to frameworks and stuff means you have less code
00:31:43
◼
►
to maintain, so in some ways that's great.
00:31:45
◼
►
But when you need to like break outside
00:31:48
◼
►
of the bounds slightly or when you need to know
00:31:51
◼
►
how something works under the hood or when you hit an error
00:31:54
◼
►
or a bug that is because of something happening
00:31:57
◼
►
under the hood, it seems like these days we have
00:32:01
◼
►
more complexity than ever under that hood
00:32:04
◼
►
in this effort to make what's above it seem so minimal.
00:32:07
◼
►
And I feel like we've raised the bar so much
00:32:11
◼
►
for what new programmers have to understand
00:32:14
◼
►
in order to understand everything their app is doing
00:32:16
◼
►
and be able to diagnose tricky problems.
00:32:19
◼
►
- Yeah, I completely agree with you.
00:32:20
◼
►
And I was thinking about this a few days ago
00:32:22
◼
►
when I was also trying to work in the car
00:32:23
◼
►
when we were traveling somewhere else.
00:32:25
◼
►
And it occurred to me after having fought,
00:32:29
◼
►
and some of this was my own fault, but I had spent
00:32:32
◼
►
a trip to and from, an hour each direction from home.
00:32:37
◼
►
So we drove an hour and I was working on this
00:32:39
◼
►
and then I put it away for a while and then when we came
00:32:41
◼
►
back home I was working on this for another hour.
00:32:43
◼
►
So that was like 130 miles or 200 kilometers
00:32:46
◼
►
of me just fighting with Carthage and Git and GitHub issues,
00:32:50
◼
►
which happens very rarely, but it happens to me
00:32:52
◼
►
like once or twice a year where everything just decides
00:32:54
◼
►
to crap the bed and I just have to like rebuild everything
00:32:58
◼
►
from scratch and it is incredibly frustrating.
00:33:01
◼
►
And again, like okay, you shouldn't use
00:33:03
◼
►
third party libraries, yeah.
00:33:04
◼
►
Okay, whatever, I use third party libraries,
00:33:07
◼
►
I don't use a lot, I only use a few.
00:33:09
◼
►
They're extremely well tested, they work for me.
00:33:11
◼
►
May not work for you, works for me.
00:33:12
◼
►
And yeah, okay, CocoaPods is a thing, I understand that.
00:33:15
◼
►
I've had even worse experiences with CocoaPods.
00:33:17
◼
►
I prefer Carthage.
00:33:18
◼
►
- CocoaPods is the worst.
00:33:20
◼
►
The only thing worse than CocoaPods is Homebrew.
00:33:25
◼
►
- Oh, Homebrew has gotten so aggressive lately,
00:33:27
◼
►
but let's leave that for another time.
00:33:29
◼
►
But anyway, so yeah, I spent 130 miles, 200 kilometers,
00:33:32
◼
►
as a passenger, just fighting, balls, fighting bull crap.
00:33:37
◼
►
And it's so, so frustrating because it shouldn't
00:33:41
◼
►
be this hard.
00:33:42
◼
►
Now on the flip side of the coin, I can suck in thousands
00:33:45
◼
►
of lines of code that hundreds of other people
00:33:48
◼
►
have toiled over for thousands upon thousands of hours
00:33:51
◼
►
in no time, so there are benefits that come from this.
00:33:54
◼
►
But yeah, I agree with you, Marco.
00:33:55
◼
►
Like the whole way up and down the stack has gotten,
00:33:58
◼
►
even in my career, which has only been what, like 15 years,
00:34:02
◼
►
however long, Marco, you and I have been working at this,
00:34:04
◼
►
you know, it's only been 10, 15, 20 years
00:34:06
◼
►
that we've been doing this, and it has gotten
00:34:08
◼
►
just way harder than it used to be.
00:34:11
◼
►
And before I give John a chance to teach us youngsters
00:34:14
◼
►
what's going on, I wanted to call out,
00:34:16
◼
►
I think John had said a minute ago,
00:34:19
◼
►
well, people will be creating their own DSLs.
00:34:21
◼
►
I've been fascinated by watching John Sundell
00:34:24
◼
►
talk about rebuilding his own website
00:34:28
◼
►
by using server-side Swift and writing his own custom DSL
00:34:31
◼
►
to do it, and he has said numerous times
00:34:34
◼
►
that he's going to open source this eventually.
00:34:36
◼
►
And when I say eventually, it sounds like it's gonna be soon,
00:34:39
◼
►
just not yet, and I'll put a tweet in the show notes
00:34:41
◼
►
of an example of this that, to me,
00:34:43
◼
►
is just extremely, extremely cool.
00:34:46
◼
►
And I don't know if I have the wherewithal to understand
00:34:49
◼
►
what, how, I understand what's happening,
00:34:51
◼
►
but the how, I'm unconvinced I would be able to figure out.
00:34:55
◼
►
But I feel like if I can look through John's code
00:34:58
◼
►
when he open sources it, that'll really help me understand
00:35:00
◼
►
how this is all held together.
00:35:02
◼
►
Anyway, John, tell us why we're young and stupid.
00:35:05
◼
►
- So the general point about abstraction
00:35:09
◼
►
and the more stuff than ever beneath you,
00:35:11
◼
►
that's been true at every point of computers, obviously.
00:35:14
◼
►
Now, the sum total is still larger,
00:35:16
◼
►
so that point stands, like as time marches on,
00:35:19
◼
►
the amount of stuff that you're building
00:35:22
◼
►
on top of increases and we get to higher level stuff.
00:35:26
◼
►
That's just always going to be true,
00:35:27
◼
►
and it's just a question of, as we were discussing before,
00:35:30
◼
►
how mature are those abstractions,
00:35:32
◼
►
how mature is the tooling surrounding them,
00:35:33
◼
►
because back in the day, it was like,
00:35:35
◼
►
how the hell am I gonna deal with this C compiler,
00:35:37
◼
►
whatever, I can't even tell what the CPU is doing,
00:35:39
◼
►
I have no access to the registers, this is garbage,
00:35:41
◼
►
when something really goes wrong,
00:35:42
◼
►
I really need to get down to them anyway,
00:35:43
◼
►
and I have an account, but you know,
00:35:45
◼
►
so it's the same exact complaints,
00:35:46
◼
►
you just change around all the nouns and everything.
00:35:49
◼
►
But the stack does get bigger, right?
00:35:51
◼
►
And at various times, like oh, now C is mature,
00:35:54
◼
►
and people forget about the lower abstraction,
00:35:56
◼
►
it's so good that you don't really need to worry
00:35:57
◼
►
about that stuff, except for in a few weird cases,
00:35:59
◼
►
and we march up the stack, and as you guys both pointed out,
00:36:02
◼
►
SwiftUI is super young, so of course,
00:36:03
◼
►
it's gonna be the most painful time
00:36:05
◼
►
to be doing anything with it.
00:36:06
◼
►
The flip side of that, which I think I mentioned
00:36:07
◼
►
with Swift as well, is if you're into this type of thing,
00:36:10
◼
►
this is the time to be able to influence SwiftUI,
00:36:13
◼
►
give your input on how you think it should work,
00:36:14
◼
►
introduce your ideas into the community,
00:36:16
◼
►
you know, contribute your code to it,
00:36:18
◼
►
whatever you want it to be,
00:36:19
◼
►
because Swift is open, the evolution process is open,
00:36:21
◼
►
if that's something you're interested in,
00:36:24
◼
►
language for language's sake,
00:36:25
◼
►
frameworks for frameworks' sake,
00:36:27
◼
►
if you're one of those type people
00:36:28
◼
►
who likes to develop those,
00:36:29
◼
►
you would definitely get in early,
00:36:30
◼
►
and yes, it would be super painful and everything,
00:36:32
◼
►
but this is the time where you could have the most influence
00:36:34
◼
►
just as you could have back in Swift 1 and 2 or whatever.
00:36:37
◼
►
But if you just wanna use it as a tool,
00:36:39
◼
►
then wait for it to mature.
00:36:40
◼
►
And Marco's other point about the sort of fashion
00:36:44
◼
►
and culture of minimalism and the whole phrase of DSL,
00:36:48
◼
►
which I should really put scare quotes around,
00:36:49
◼
►
'cause I've never liked that phrase,
00:36:51
◼
►
and it is tied up with a bunch of specific fads or whatever,
00:36:54
◼
►
that is also a thing,
00:36:56
◼
►
and those kind of fashion trends in the tech world
00:36:59
◼
►
come and go.
00:37:01
◼
►
I think SwiftUI is,
00:37:04
◼
►
it's a little bit in the vein of that kind of minimalism,
00:37:07
◼
►
but I think it's more in the vein of adopting
00:37:10
◼
►
some of the fads from the web world and bringing them over,
00:37:12
◼
►
but you know, like I said, I'm still digging into SwiftUI,
00:37:16
◼
►
and I wanna sort of get my brain around it
00:37:18
◼
►
in a more significant way before I have
00:37:21
◼
►
anything more particularly intelligent to say about it.
00:37:24
◼
►
There was, speaking of Sundell,
00:37:28
◼
►
Brent Simmons was on, oh, it's Swift by Sundell,
00:37:32
◼
►
the same one you were on, Casey,
00:37:33
◼
►
what's the name of that podcast?
00:37:34
◼
►
- Yeah, it's Swift by Sundell.
00:37:36
◼
►
- Yeah, and they were talking about SwiftUI a little bit,
00:37:39
◼
►
and they were mentioning like,
00:37:41
◼
►
thinking off into the future,
00:37:43
◼
►
how, what a great fit it will be
00:37:45
◼
►
that I don't think it's gonna be next year,
00:37:46
◼
►
they're optimistic thinking it'll be next year,
00:37:48
◼
►
but I think like in two years,
00:37:50
◼
►
when the sort of Swiftified equivalent of core data comes
00:37:54
◼
►
and ties into SwiftUI,
00:37:56
◼
►
so you can sort of define your models
00:37:57
◼
►
with a domain-specific language, quote, unquote,
00:38:00
◼
►
and tie that to your SwiftUI views in a cool way,
00:38:03
◼
►
you know what I mean?
00:38:04
◼
►
Like, you can see how it might come together.
00:38:06
◼
►
If you buy into this way of programming
00:38:08
◼
►
and assume the tooling will get better
00:38:09
◼
►
and assume all the blah, blah, blah,
00:38:11
◼
►
you can see how a Swifty SwiftUI data layer
00:38:16
◼
►
would fit together with the UI layer in a really cool way.
00:38:19
◼
►
And again, I don't think that's coming next year.
00:38:21
◼
►
Next year, they should just work on SwiftUI
00:38:22
◼
►
and get the tools and everything better,
00:38:23
◼
►
and maybe the year after that there's a data layer,
00:38:25
◼
►
but I'm already looking forward to that.
00:38:27
◼
►
- See, for me, like, I have a hard time getting excited
00:38:29
◼
►
about that kind of stuff, usually,
00:38:30
◼
►
because like, it's actually kind of similar to SwiftUI,
00:38:34
◼
►
although not, a little bit worse in this way.
00:38:37
◼
►
Usually, you can only really take advantage of it
00:38:39
◼
►
if you're like starting an app from scratch.
00:38:41
◼
►
Like, there's usually not a lot of like,
00:38:43
◼
►
easy ways to take an existing code base
00:38:45
◼
►
and migrate it to a whole new data layer.
00:38:47
◼
►
- That's the beauty of this approach, though.
00:38:49
◼
►
Like, just like with SwiftUI,
00:38:50
◼
►
you can just use it in one place.
00:38:52
◼
►
It's not that you have to recommit your entire app to it,
00:38:54
◼
►
right, so if done in the right way,
00:38:57
◼
►
you don't have to say, oh, I've gotta just throw away
00:38:59
◼
►
all my model code and replace it all with this.
00:39:01
◼
►
You might be able to take your existing model code
00:39:03
◼
►
and like, have a shim or a series of protocols
00:39:06
◼
►
that allow it to conform so you can just chuck it
00:39:08
◼
►
over the wall to something that understands
00:39:09
◼
►
how to bind it to a SwiftUI view,
00:39:11
◼
►
but really, it's your model underneath,
00:39:12
◼
►
you know what I mean?
00:39:13
◼
►
There are ways to do it that won't be as painful,
00:39:17
◼
►
and they're not easy, right,
00:39:18
◼
►
but the job they've been able to do with SwiftUI,
00:39:21
◼
►
making it so you can adopt it in small chunks
00:39:25
◼
►
makes me hope that that philosophy will imbue
00:39:27
◼
►
whatever hypothetical Swifty data layer
00:39:31
◼
►
that we're speculating about.
00:39:33
◼
►
- I just wanted to reiterate what you said.
00:39:35
◼
►
The episode with Brent Simmons of the Swift by Sloane Dell
00:39:38
◼
►
podcast I thought was very good.
00:39:39
◼
►
I really enjoy listening to Brent's take on things
00:39:43
◼
►
because he has the experienced and learned opinion
00:39:48
◼
►
that I long to get better at having,
00:39:51
◼
►
but am too young and stupid to have yet.
00:39:53
◼
►
- I mean, he has wisdom.
00:39:54
◼
►
Like, what you need--
00:39:55
◼
►
- Wisdom is a better word for it, yep.
00:39:57
◼
►
- So much of success or failure in this business
00:40:01
◼
►
is not about specific language or technical achievements.
00:40:06
◼
►
It's about bigger picture strategies,
00:40:09
◼
►
figuring out what to do, what not to do,
00:40:11
◼
►
what's important, what's not important,
00:40:13
◼
►
and listening to Brent and reading his blog posts
00:40:17
◼
►
and everything, I learn a lot about that kind of stuff,
00:40:19
◼
►
so I suggest we'll put it into his blog as well.
00:40:21
◼
►
It's always a good read.
00:40:22
◼
►
We are sponsored this week by Clearbank.
00:40:26
◼
►
Clearbank is changing the way entrepreneurs raise money
00:40:29
◼
►
with equity-free capital.
00:40:31
◼
►
Co-founder Michelle Romano, star of Canada's Dragon's Den,
00:40:34
◼
►
which is the Canadian version of Shark Tank,
00:40:36
◼
►
co-founded Clearbank with her partner, Andrew D'Souza,
00:40:38
◼
►
after seeing how many companies were willing to part
00:40:41
◼
►
with precious equity in exchange
00:40:43
◼
►
for a bigger marketing budget.
00:40:45
◼
►
Clearbank believes that founders shouldn't give up
00:40:47
◼
►
a piece of their company to fund marketing
00:40:49
◼
►
and inventory expenses.
00:40:51
◼
►
Clearbank makes equity-free investments
00:40:53
◼
►
from 10,000 to $10 million and can get you a term sheet
00:40:56
◼
►
in less than 20 minutes.
00:40:58
◼
►
They charge a small, flat fee for the capital
00:41:00
◼
►
and you pay them back using a win-win rev share.
00:41:03
◼
►
This is not a loan, there's no interest rate,
00:41:05
◼
►
no fixed maturation date, no personal guarantees,
00:41:08
◼
►
no credit checks, and no financial covenants.
00:41:11
◼
►
Clearbank has relationships with marketing agencies,
00:41:13
◼
►
e-commerce professionals, venture capitalists,
00:41:16
◼
►
accountants, and more, giving you a true,
00:41:18
◼
►
unfair advantage in the market.
00:41:20
◼
►
Clearbank invested over $150 million in 2018
00:41:24
◼
►
and is on track to invest over a billion this year.
00:41:27
◼
►
Some notable portfolio companies include Public Goods,
00:41:29
◼
►
Lease Asleep, Laytote, Buffy, just to name a few.
00:41:33
◼
►
So if you're doing over 10,000 a month in revenue,
00:41:36
◼
►
find out how you can receive Clearbank capital
00:41:39
◼
►
by getting your 20-minute term sheet
00:41:41
◼
►
at clearbank.com/atp.
00:41:43
◼
►
That's bank at the end with a C instead of a K,
00:41:46
◼
►
so clearbank.com/atp.
00:41:50
◼
►
Clearbank, stop pitching and get back to doing
00:41:53
◼
►
what you love, growing your business.
00:41:55
◼
►
- All right, now that we're roughly 45 minutes in,
00:42:00
◼
►
do you wanna start some follow-up?
00:42:02
◼
►
- You two have such problems with a very simple show format
00:42:06
◼
►
we've been doing for a long time.
00:42:08
◼
►
Marco's gonna talk about his app a little bit,
00:42:09
◼
►
then we'll talk about this,
00:42:10
◼
►
then Kees is gonna talk about his image-jifing algorithm.
00:42:12
◼
►
Let's now talk about SwiftUI.
00:42:14
◼
►
It's not a complicated format, I don't understand.
00:42:17
◼
►
- I'm so sorry, Dad.
00:42:18
◼
►
- Like, usually you get like one, one and a half of those,
00:42:20
◼
►
but now you're just jamming three of them,
00:42:22
◼
►
so then it's gonna be the whole show,
00:42:23
◼
►
and then it's gonna be like, well, no time for follow-up,
00:42:25
◼
►
we've gone for two hours to talk about SwiftUI.
00:42:30
◼
►
- All right, which one of you wants to talk about
00:42:32
◼
►
Mimeo fonts and watermarking?
00:42:33
◼
►
- Can you guess?
00:42:34
◼
►
I'm assuming it's you.
00:42:36
◼
►
- Yeah, do you remember Mimeo, our friends at Mimeo?
00:42:39
◼
►
- So I'm back from my vacation, I'm making photo books,
00:42:44
◼
►
and Mimeo is the company that I tried.
00:42:46
◼
►
It used to be the, do the printing for Apple's photo books,
00:42:51
◼
►
so I printed one of my existing photo books with Mimeo
00:42:53
◼
►
and compared it to the Apple one,
00:42:54
◼
►
and it was nearly identical,
00:42:56
◼
►
save one extra Mimeo logo on the back.
00:42:58
◼
►
And so I said, all right, great, now,
00:43:01
◼
►
this was like last year, now,
00:43:03
◼
►
next year when I go to Long Island, I'll use Mimeo
00:43:05
◼
►
for my book, so I did that, I'm making the book--
00:43:06
◼
►
- Wait, you got a test book of a book you already had
00:43:10
◼
►
just to try it out?
00:43:12
◼
►
- That's so John.
00:43:12
◼
►
- That's incredible.
00:43:13
◼
►
- So anyway, I'm making the book, I'm using their UI,
00:43:17
◼
►
which in some ways is better than Apple's,
00:43:18
◼
►
but in many ways is worse,
00:43:19
◼
►
but it is less buggy, that's for sure, which is nice.
00:43:23
◼
►
Just question some of the UI features,
00:43:24
◼
►
but anyway, I'm placing images, I'm making pages.
00:43:27
◼
►
Downsize, I saw when I was making it, it was like,
00:43:31
◼
►
I think the page limit might be lower, but whatever,
00:43:34
◼
►
I'll make it work.
00:43:35
◼
►
So I'm all done with the book, except for the title page,
00:43:38
◼
►
we usually leave for last, so I go to the title page,
00:43:40
◼
►
I'm gonna type the imaginatively titled Long Island 2019
00:43:44
◼
►
title to match all my other Long Island books,
00:43:47
◼
►
and I go to type it there in this text box,
00:43:49
◼
►
and I type Long Island 2019, then I select all,
00:43:51
◼
►
then I go to the font menu to pick my normal font,
00:43:53
◼
►
which is like Helvetica something, whatever.
00:43:57
◼
►
And Helvetica is not in the font list.
00:44:02
◼
►
- You know what's in the font list?
00:44:03
◼
►
None of the fonts on my system, that's for sure,
00:44:05
◼
►
just this weird set of fonts that are part
00:44:08
◼
►
of the photos plugin, right?
00:44:11
◼
►
It doesn't look at your system fonts at all,
00:44:13
◼
►
it comes with its own fonts, most of which are fine
00:44:16
◼
►
and look nice, but Helvetica is not on the list.
00:44:19
◼
►
This is bad, this is bad for that book matching
00:44:22
◼
►
all my other books, 'cause when I reprinted my other book,
00:44:25
◼
►
I was printing it from a PDF, 'cause you could export
00:44:27
◼
►
the old things to PDF, and then I just chuck the PDF
00:44:29
◼
►
to Mimeo and they import it and make the book out of it.
00:44:33
◼
►
So this was bad, so I looked for lookalike fonts
00:44:38
◼
►
and I just couldn't bring myself to use any
00:44:39
◼
►
lookalike fonts, so I had to bite the bullet
00:44:41
◼
►
and export the cover image as a ping,
00:44:45
◼
►
bring it into Photoshop, put the title in Helvetica,
00:44:49
◼
►
like in the right place, which was really hard
00:44:52
◼
►
because the image I had for the cover
00:44:54
◼
►
wasn't exactly centered on the cover,
00:44:56
◼
►
so it took me like eight tries to get it lined up
00:44:59
◼
►
and sized correctly, and then just delete the text box
00:45:02
◼
►
and have the sort of, I did baked in subtitles, Casey,
00:45:06
◼
►
just for you, burned in subtitles.
00:45:09
◼
►
- Yeah, yeah, yeah, yeah.
00:45:11
◼
►
- Hard coded, what is it, hard coded Norwegian subs?
00:45:13
◼
►
Where's Merlin when I need him?
00:45:15
◼
►
So that was a painful process, and the text on the spine,
00:45:21
◼
►
same font problem, but I don't have a way to influence that,
00:45:24
◼
►
it's not a photo, so the spine font is going to be incorrect,
00:45:27
◼
►
which is a shame.
00:45:29
◼
►
Mimeo, please, please use the system fonts.
00:45:31
◼
►
I know it's probably some weird licensing thing
00:45:33
◼
►
that I don't understand, please, please,
00:45:34
◼
►
use the system fonts, 'cause I don't wanna go through
00:45:37
◼
►
what I went through with the cover next year.
00:45:40
◼
►
Second thing is, I'm like, okay, before I order this book,
00:45:42
◼
►
let me just do a PDF export, 'cause I always keep PDFs
00:45:44
◼
►
of all this stuff, just in case the books
00:45:47
◼
►
get water damage or the house burns down,
00:45:50
◼
►
at least I'll have the PDFs and I can interior reprint them.
00:45:53
◼
►
Or just basically preserving all the work I've done
00:45:55
◼
►
to select and size and crop and arrange all the photos,
00:45:58
◼
►
'cause that's a lot of work too.
00:46:01
◼
►
And I exported the PDF, and instead of it making a PDF
00:46:04
◼
►
on my computer, it's like, enter your email address
00:46:06
◼
►
and we'll email you a download link.
00:46:07
◼
►
I'm like, all right, well this is weird, whatever,
00:46:08
◼
►
I don't know why you don't just make the PDF on my computer,
00:46:10
◼
►
like you're right here, you're a native app,
00:46:12
◼
►
you're running on my computer.
00:46:13
◼
►
So I give the email address, it emails me a link,
00:46:15
◼
►
I download it, PDF downloads, I open it up,
00:46:18
◼
►
every single page is covered with a Mimeo watermark
00:46:20
◼
►
across, like repeated on an angle across the entire thing.
00:46:23
◼
►
- Nice. - That is not good,
00:46:25
◼
►
'cause that doesn't serve as a good backup really.
00:46:28
◼
►
I would have to redo, I couldn't print a book
00:46:30
◼
►
from the watermark thing.
00:46:31
◼
►
So good news, bad news.
00:46:33
◼
►
Good news is the watermarking is going away.
00:46:35
◼
►
There was some weird reason why they had to do it,
00:46:39
◼
►
and that reason is over and everyone hates it,
00:46:42
◼
►
so the watermarking, by the time you listen to this in fact,
00:46:44
◼
►
Mimeo may have removed the watermarking of the PDF.
00:46:46
◼
►
And even better news is someone at Mimeo
00:46:48
◼
►
was kind enough to send me a non-watermarked PDF
00:46:50
◼
►
of my thing, so I have a nice backup of it.
00:46:52
◼
►
Bad news is the font situation stands.
00:46:55
◼
►
So I have ordered my book.
00:46:57
◼
►
I'll let you know when it arrives
00:46:59
◼
►
how it looks with its hard, my God.
00:47:02
◼
►
Merlin, where are you?
00:47:03
◼
►
You say you listen to the show, jump in the chat.
00:47:05
◼
►
Hard coded Norwegian subs, I don't know this.
00:47:08
◼
►
You two don't even know what I'm talking about.
00:47:10
◼
►
I don't know why I bother. - Nope.
00:47:11
◼
►
- Well anyway, Casey knows about burned-in subtitles.
00:47:16
◼
►
Oh goodness, all right, tell me about your cameras, John.
00:47:19
◼
►
The Sony, I don't even, these names are so terrible.
00:47:22
◼
►
What happened to Sony having good names?
00:47:24
◼
►
Where were they just whining about this?
00:47:25
◼
►
This was just getting-- - The names aren't bad.
00:47:27
◼
►
They make some kind of sense.
00:47:29
◼
►
- This was on Cortex.
00:47:31
◼
►
- That's what it was. - And yeah, and it's like,
00:47:32
◼
►
I think we all think back like Walkman and Trinitron.
00:47:36
◼
►
Those were two products over the last 40 years.
00:47:41
◼
►
- Oh, but the Sony name, the Sony camera equivalent
00:47:44
◼
►
to that is Alpha, because Trinitron was not the name of a TV.
00:47:47
◼
►
You can say, what TV do you have?
00:47:48
◼
►
Oh, I have a Trinitron.
00:47:49
◼
►
There was a million Sony models.
00:47:50
◼
►
It was Sony, Trinitron, and then an Alphabet Soup.
00:47:53
◼
►
So these are all Sony Alpha.
00:47:54
◼
►
- That's fair. - Alphabet Soup.
00:47:56
◼
►
Right, these names aren't actually that bad.
00:47:58
◼
►
They are about the same as modern car names.
00:48:01
◼
►
In fact, they actually are similar to car names,
00:48:04
◼
►
and I blame Canon for a little bit of the Roman numeral crap
00:48:07
◼
►
'cause they were there first.
00:48:08
◼
►
Anyway, camera follow-up from last week,
00:48:11
◼
►
lots of suggestions for other cameras.
00:48:12
◼
►
One suggestion is actually related to naming.
00:48:16
◼
►
Someone suggested to me the Sony A6400,
00:48:19
◼
►
and I said to them, do you mean the 6500?
00:48:22
◼
►
'Cause we talked about it on the show,
00:48:23
◼
►
and they said, no, I don't mean the 6500.
00:48:25
◼
►
I mean the 6400.
00:48:26
◼
►
Sony, in its infinite wisdom,
00:48:28
◼
►
so they had the Alpha 6000,
00:48:30
◼
►
which is the predecessor of my computer's
00:48:33
◼
►
sort of size and shape many years ago,
00:48:35
◼
►
and that was followed up by the 6300, which is what I have,
00:48:38
◼
►
and then it was eventually followed up with the 6500,
00:48:40
◼
►
which is like what I have, but it has in-body stabilization.
00:48:42
◼
►
After the 6500, they released the 6400.
00:48:49
◼
►
- That's awesome.
00:48:50
◼
►
- And you're like, okay, well maybe,
00:48:51
◼
►
the number doesn't always go up.
00:48:52
◼
►
Maybe it's the model that slots in
00:48:53
◼
►
right between the 63 and the 65.
00:48:55
◼
►
- Right, is it like a lower-end model?
00:48:57
◼
►
- No, it's not.
00:48:58
◼
►
It's better than the 6500 in all ways,
00:49:00
◼
►
except it doesn't have,
00:49:01
◼
►
the shooting buffer is a little bit smaller
00:49:04
◼
►
and it doesn't have in-body stabilization,
00:49:06
◼
►
but has other advantages,
00:49:08
◼
►
and it has the smaller grip of the 6300.
00:49:10
◼
►
It is kind of in-between-y, but the bottom line is,
00:49:12
◼
►
if you had to pick one of these models to get,
00:49:15
◼
►
unless you really, really need in-body stabilization
00:49:18
◼
►
or the bigger buffers, you can shoot
00:49:19
◼
►
like literally 700 pictures
00:49:20
◼
►
before the buffer fills up or something,
00:49:23
◼
►
get the 6400, because it has the better processor,
00:49:26
◼
►
better motion tracking, the same sensor,
00:49:28
◼
►
better battery life,
00:49:30
◼
►
it just doesn't have in-body stabilization.
00:49:32
◼
►
So, I'm not doing any camera purchase stuff,
00:49:37
◼
►
but if I had known this before the vacation,
00:49:40
◼
►
if I had known this model even existed,
00:49:42
◼
►
like I probably saw the news fly by,
00:49:44
◼
►
but I'm like, 6400?
00:49:46
◼
►
We're on 6500 now,
00:49:47
◼
►
I don't need to be interested in that model.
00:49:48
◼
►
Anyway, the big thing it has going for it
00:49:51
◼
►
is the big, beefy processor from the A9
00:49:54
◼
►
or whatever that does this amazing
00:49:56
◼
►
object motion tracking autofocus,
00:49:59
◼
►
and a slightly better color reproduction,
00:50:01
◼
►
it's that inside this little dinky camera
00:50:03
◼
►
plus a bunch of other tweaks.
00:50:05
◼
►
So, if I needed to get another one of these little cameras,
00:50:07
◼
►
that's the one I'd, I'm still hoping they'll,
00:50:10
◼
►
do a major upgrade to this kind of server.
00:50:12
◼
►
Doesn't look like that's in the cards,
00:50:13
◼
►
'cause 6400 is actually a pretty recent model.
00:50:15
◼
►
Second thing I discovered about the A7R IV,
00:50:17
◼
►
whose name I kept getting wrong,
00:50:19
◼
►
and that's the one with the Roman numerals at the end,
00:50:21
◼
►
A7R IV, looking at reviews of that camera,
00:50:25
◼
►
the problem is that it just has too many
00:50:28
◼
►
damn pixels in the sensor.
00:50:30
◼
►
Like, I don't think I'm ever gonna buy that camera
00:50:32
◼
►
unless I have a major change in disk space.
00:50:35
◼
►
Like, as someone humorously pointed out
00:50:37
◼
►
in their YouTube video,
00:50:38
◼
►
the JPEGs of that camera are bigger than the RAWs
00:50:41
◼
►
from most other cameras.
00:50:43
◼
►
Like, the JPEGs are 30 megs each.
00:50:46
◼
►
- Oh my God, that's double the size of RAWs on my camera.
00:50:50
◼
►
- That's what I'm saying.
00:50:51
◼
►
So, I mean, I shot with RAW a little bit with my camera,
00:50:54
◼
►
and the images were just too big,
00:50:55
◼
►
and I wasn't getting any of the benefits
00:50:57
◼
►
to account for that, so I quickly switched back to JPEG.
00:51:00
◼
►
But the JPEGs, I mean, it's a, what is it, 61 megapixels?
00:51:05
◼
►
It's tremendous, right?
00:51:06
◼
►
Aside from the camera itself being large
00:51:09
◼
►
and all those other things,
00:51:11
◼
►
it's, I think that's too much for me.
00:51:15
◼
►
Now, what, the alternative that a lot of people
00:51:19
◼
►
are talking about is the, like,
00:51:21
◼
►
there is no alternative to that right now,
00:51:24
◼
►
but there is last year's, or last model's alternative,
00:51:26
◼
►
which is the a7 III without the R, right?
00:51:30
◼
►
So there used to be the a7 R III and the a7 III.
00:51:33
◼
►
The a7 III is like the a7, but the sensor has what,
00:51:36
◼
►
like a quarter as many pixels?
00:51:38
◼
►
Like, it's like 20 megapixel, 21 megapixel instead of 42?
00:51:41
◼
►
- Yeah, it's like, it's less megapixels,
00:51:44
◼
►
but otherwise everything else is pretty much the same,
00:51:46
◼
►
so you get, like, better battery life and faster processing,
00:51:49
◼
►
and a lot of advantages over the bigger model, actually.
00:51:52
◼
►
- Yeah, and bigger pixels, right?
00:51:53
◼
►
I mean, I would assume, like, it's the same sensor size,
00:51:56
◼
►
and there are fewer pixels, so it stands to reason
00:51:57
◼
►
those pixels are bigger, so, yeah.
00:51:59
◼
►
So that's, there is no a7 IV without the R.
00:52:04
◼
►
But in theory, if they follow their naming pattern,
00:52:08
◼
►
there should eventually be an a7 IV,
00:52:10
◼
►
which is like the a7 R IV, but with a sensor with,
00:52:14
◼
►
you know, 20, or not, maybe, I guess 30 megapixels
00:52:16
◼
►
or something like that.
00:52:17
◼
►
I don't know if that's in the cards,
00:52:18
◼
►
I don't follow the camera industry,
00:52:19
◼
►
didn't know if that's coming, but that sounds like
00:52:22
◼
►
a much more attractive, way too expensive camera
00:52:25
◼
►
for my needs, so I'm keeping my eye out for that.
00:52:28
◼
►
- Yeah, based on past Sony actions,
00:52:30
◼
►
it is very likely that that will come out after,
00:52:33
◼
►
like, you know, some deal of time,
00:52:34
◼
►
maybe six months after the a7 R IV.
00:52:37
◼
►
When did the R IV come out?
00:52:40
◼
►
- Pretty recently, like a month ago,
00:52:42
◼
►
or a couple weeks ago, yeah.
00:52:43
◼
►
Yeah, well, 'cause the R III came out
00:52:46
◼
►
somewhere around late 2017.
00:52:48
◼
►
So, yeah, they're on roughly like a year and a half cycle
00:52:52
◼
►
on these, usually, so, and then the a7 III, I think,
00:52:56
◼
►
came out maybe like three to six months later,
00:52:57
◼
►
or something like that, so, sorry if I'm getting
00:52:59
◼
►
all this wrong, this is all from memory,
00:53:00
◼
►
but, yeah, it stands to reason that, you know,
00:53:03
◼
►
maybe later this winter or in the spring,
00:53:05
◼
►
they would probably do an a7 IV,
00:53:08
◼
►
and for your priorities, that's probably the better buy.
00:53:11
◼
►
- Yeah, and finally, lots of people are pointing out
00:53:13
◼
►
the RX10, there's an RX10 IV,
00:53:16
◼
►
otherwise known as the RX10 IV, yeah.
00:53:18
◼
►
- That's their super zoom, right?
00:53:20
◼
►
- Yes, so they have a super zoom,
00:53:21
◼
►
and I've known about the super zoom,
00:53:22
◼
►
I knew about it, you know, before I bought this camera,
00:53:24
◼
►
like, it's huge, like, it's gigantic, yes,
00:53:27
◼
►
it is the superst of super zooms,
00:53:29
◼
►
but it's like bigger than the a7.
00:53:33
◼
►
It's just tremendous, it's not an interchangeable lens camera
00:53:36
◼
►
but it is a huge lens, and the camera itself is huge,
00:53:40
◼
►
and the body is huge, and everything about it is giant,
00:53:42
◼
►
it's just, like, I suppose, I should look
00:53:45
◼
►
at some image comparisons, I suppose, like,
00:53:46
◼
►
for the price of that camera, it may be less than the price
00:53:50
◼
►
of a zoom lens of equivalent, certainly is less
00:53:53
◼
►
than the price of a zoom lens with that kind of range,
00:53:56
◼
►
'cause the range is crazy, I think it goes to like
00:53:58
◼
►
600 millimeters or something like that,
00:54:02
◼
►
but that's, it's like a single purpose camera,
00:54:06
◼
►
like, you never slap on a good prime lens on there
00:54:10
◼
►
to take, like, portrait photos, like, it is what it is,
00:54:12
◼
►
it's a super zoom, but it's just so darn big,
00:54:14
◼
►
like, it's too, I don't, you know,
00:54:18
◼
►
I'm not even sure I can go up to an a7 level size,
00:54:20
◼
►
and this thing just, it's huge, so,
00:54:22
◼
►
that's, I know about that model,
00:54:25
◼
►
I know about that whole line, and I just feel like
00:54:28
◼
►
it's not for me, it's not the right set of trade-offs,
00:54:30
◼
►
and then, finally, I didn't put the notes,
00:54:32
◼
►
but someone was nice enough to send me a list
00:54:34
◼
►
of all my alternative options for better zooms,
00:54:36
◼
►
'cause I mentioned I'm not sure what I would get
00:54:38
◼
►
if I tried to get a better zoom,
00:54:39
◼
►
and I just listed them out, conveniently putting
00:54:42
◼
►
what percentage larger each one is than my current zoom,
00:54:45
◼
►
and it gets ridiculous, like, the top end one
00:54:48
◼
►
is literally three times the length of my current zoom,
00:54:52
◼
►
so, yeah, there is like, there's one option
00:54:54
◼
►
that is like 30% longer that is better,
00:54:58
◼
►
that I may consider, but, and it's 30% longer,
00:55:03
◼
►
and also thicker as well, 'cause there's no way
00:55:06
◼
►
to get out of this conversation, anyway, moving on,
00:55:09
◼
►
there are many options for me to spend money on cameras,
00:55:11
◼
►
and I'm not doing either one, we're gonna,
00:55:14
◼
►
I'm still getting myself psyched up
00:55:16
◼
►
for the macro configurator, if that ever appears
00:55:18
◼
►
on Apple's website. - Oh, goodness.
00:55:19
◼
►
And by the way, and I do think, like, you know,
00:55:21
◼
►
for your zoom range needs, I think you've had
00:55:23
◼
►
two very good ideas, number one is,
00:55:27
◼
►
you should avoid, you know, individual, like,
00:55:29
◼
►
fixed lens cameras like the RX10 Super Zoom series,
00:55:32
◼
►
number two, your idea that you kind of brushed by last week,
00:55:35
◼
►
of like, maybe you just have two camera bodies,
00:55:37
◼
►
and one of them has a telephoto,
00:55:38
◼
►
and one of them has a closer lens,
00:55:39
◼
►
that's a really good idea, actually, for your needs.
00:55:41
◼
►
- I'm still thinking about that,
00:55:43
◼
►
that's why I mentioned the 6400,
00:55:44
◼
►
'cause I wouldn't get rid of my 63, I would get the 64,
00:55:47
◼
►
and then I'd have two, but then I started thinking about,
00:55:48
◼
►
but which one gets the prime lens on it,
00:55:50
◼
►
you're like, oh, well, you put the zoom on the 64,
00:55:52
◼
►
because that has the motion tracking,
00:55:53
◼
►
like, oh, well, the 64 also has better color processing
00:55:56
◼
►
slightly, so wouldn't you want that with your prime lens?
00:55:59
◼
►
- Easy, you put the prime lens on the one
00:56:02
◼
►
that has more resolution, because--
00:56:04
◼
►
- They're the same.
00:56:06
◼
►
- Oh, well, then get a camera with higher resolution
00:56:08
◼
►
and put the prime lens on that one,
00:56:09
◼
►
because the zoom lenses have such terrible,
00:56:12
◼
►
like, actual effective optical resolution
00:56:15
◼
►
compared to primes, like, most zoom lenses, I think,
00:56:18
◼
►
are lucky to get, like, 20 megapixels
00:56:20
◼
►
of actual resolution out of them,
00:56:21
◼
►
usually it's far less than that,
00:56:22
◼
►
like, the good ones can get in that range,
00:56:24
◼
►
but only the very best ones.
00:56:27
◼
►
So you're kind of wasting your megapixels
00:56:30
◼
►
if you have, like, a really high megapixel sensor
00:56:33
◼
►
with the zoom lens on it, usually,
00:56:34
◼
►
or at least you're not getting anywhere
00:56:35
◼
►
near its full capacity, so that would actually be
00:56:39
◼
►
a fairly easy distinction for me, at least,
00:56:40
◼
►
but also, I would say that the category of zoom lenses
00:56:45
◼
►
that you're currently in is the, like,
00:56:48
◼
►
base model, but, like, slightly power user model
00:56:51
◼
►
of, like, I want a big range, but I'm not willing
00:56:54
◼
►
to, you know, carry or pay for some kind of giant thing.
00:56:57
◼
►
Then, on the other end, you have, like,
00:56:58
◼
►
the pro 70 to 200 f/2.8 zooms that most pro photographers
00:57:03
◼
►
use. - The white ones.
00:57:04
◼
►
- Don't get those, yeah. - Don't get the white lenses.
00:57:07
◼
►
- Don't get, well, maybe. - It's too much.
00:57:08
◼
►
- What you want, I think, is the f/4 version of those.
00:57:12
◼
►
Almost every line of lenses has the big f/2.8
00:57:17
◼
►
70 to 200 zoom, and they're big, and they're heavy,
00:57:19
◼
►
and they're very expensive.
00:57:21
◼
►
Usually there's an f/4 version, and there is one here,
00:57:23
◼
►
I'm pretty sure, and that is usually optically
00:57:28
◼
►
very similar in quality.
00:57:30
◼
►
It just only goes to f/4 instead of f/2.8,
00:57:31
◼
►
and for your purposes, where you're shooting,
00:57:33
◼
►
most of the time using this, you're shooting
00:57:35
◼
►
in the sunlight by the ocean, like,
00:57:37
◼
►
you don't need f/2.8 for most things, and--
00:57:39
◼
►
- Yeah, no, I definitely have that.
00:57:40
◼
►
- It's so much, it usually ends up being, like,
00:57:42
◼
►
half the weight and usually about half the cost,
00:57:45
◼
►
and that's usually the better bet.
00:57:47
◼
►
- Yeah, that option is 62% longer than my current lens,
00:57:50
◼
►
by the way, and it's 1500 bucks.
00:57:52
◼
►
- Right, well, but compared to probably a lot bigger
00:57:55
◼
►
and heavier for the 2.8 version.
00:57:56
◼
►
- Well, the other option before that is only 33% longer,
00:58:00
◼
►
and it's $1200.
00:58:02
◼
►
That's the 70 to 300, and it has more reach.
00:58:04
◼
►
- Oh, and it's like f/4 to 5.6, something like that, right?
00:58:08
◼
►
That might not be bad, I haven't looked at the reviews,
00:58:10
◼
►
but usually the optics, usually the f/4 version
00:58:13
◼
►
better achieves what you want.
00:58:15
◼
►
- Renee Schneider wrote in to tell us,
00:58:19
◼
►
since we were wondering where all these new Apple employees
00:58:22
◼
►
due to the Intel modem acquisition would be sitting
00:58:24
◼
►
pretty far away from San Diego, the biggest part of them
00:58:28
◼
►
is probably in some German town near Munich.
00:58:31
◼
►
Intel's mobile communication division was originally part
00:58:33
◼
►
of a German semiconductor manufacturer Infineon,
00:58:36
◼
►
which was sold to Intel in 2011, so these individuals
00:58:38
◼
►
have now been sold for the second time in this decade.
00:58:43
◼
►
I did not see that coming.
00:58:45
◼
►
- I think there are a bunch of them in San Diego,
00:58:47
◼
►
but maybe I'm misremembering the city name.
00:58:48
◼
►
No one came in to tell us the actual city name,
00:58:50
◼
►
but yeah, apparently most of them are in Germany,
00:58:52
◼
►
so there's that.
00:58:54
◼
►
Marco, why don't you tell me about your Dropbox
00:58:56
◼
►
in iCloud drive hack theory thing.
00:59:00
◼
►
- Yeah, so I had mentioned last week how I had this theory
00:59:04
◼
►
and I wanted to know if anything weird might happen
00:59:07
◼
►
of why don't I just create a folder named Dropbox
00:59:10
◼
►
in my iCloud drive and hard link it to home/Dropbox,
00:59:14
◼
►
and that way I would have Dropbox still existing,
00:59:18
◼
►
I would have the file paths all the same,
00:59:20
◼
►
so I wouldn't have to change all my muscle memory
00:59:23
◼
►
or any kind of shell script that I have
00:59:26
◼
►
that refer to home/Dropbox/something,
00:59:29
◼
►
but I could have iCloud drive doing the actual syncing
00:59:31
◼
►
and I could uninstall Dropbox.
00:59:32
◼
►
And a few people wrote in, and there was this article
00:59:36
◼
►
on Michael Tsai's website that kind of collected
00:59:39
◼
►
all the links, but basically this won't work
00:59:42
◼
►
for a pretty hilarious reason.
00:59:44
◼
►
It turns out that you can't have a folder named Dropbox
00:59:49
◼
►
in iCloud drive, it won't sync.
00:59:53
◼
►
iCloud drive has a list of blacklisted file names
00:59:56
◼
►
and file name patterns that it just won't sync files
01:00:00
◼
►
or folders that contain these words and their names.
01:00:03
◼
►
And I'll link to a list of the full name in the show notes,
01:00:06
◼
►
but Dropbox is one of these names.
01:00:08
◼
►
iCloud drive will not sync a folder named Dropbox
01:00:11
◼
►
no matter what you do with it.
01:00:13
◼
►
- Yeah, the other exceptions are what you would think.
01:00:15
◼
►
It's exact match, case insensitive, Dropbox, OneDrive,
01:00:19
◼
►
iPhoto library, which is funny,
01:00:23
◼
►
iDrive sync, .dropbox, .dropbox.adurb,
01:00:28
◼
►
it contains .nosync anywhere, is.ubd,
01:00:33
◼
►
which is Ubiquity demon, of course, is a DS store.
01:00:37
◼
►
If the document, if the file name begins with open parens,
01:00:40
◼
►
a document being saved, it begins with that string,
01:00:43
◼
►
and then there's a whole list of extensions
01:00:45
◼
►
mostly having to do with photos.
01:00:46
◼
►
So this is one of those things where,
01:00:50
◼
►
like you talk about the old Dropbox browser
01:00:54
◼
►
'cause of a folder that syncs, right?
01:00:56
◼
►
There are always weird exceptions like this,
01:00:58
◼
►
but you would hope the exceptions are obscure
01:01:02
◼
►
and not likely to be run across.
01:01:03
◼
►
So for example, .ubd, whatever, like fine,
01:01:06
◼
►
you're at work at Apple, you work on the Ubiquity demon,
01:01:10
◼
►
you wanna make a special file, or .nosync,
01:01:13
◼
►
you wanna make some special file name extensions
01:01:14
◼
►
that no one's ever actually gonna use,
01:01:16
◼
►
but for the purposes of the system itself, it excludes.
01:01:19
◼
►
Once you start including names of competitors' products
01:01:23
◼
►
or things that people might actually want to
01:01:26
◼
►
call their own folders,
01:01:28
◼
►
like even if the Dropbox the company didn't exist,
01:01:30
◼
►
I can imagine making a folder called Dropbox,
01:01:32
◼
►
like if you didn't know the company existed,
01:01:34
◼
►
you can make a folder, it's a word
01:01:35
◼
►
that someone might type for a folder name.
01:01:38
◼
►
If there's gonna be this long a list of exclusions,
01:01:41
◼
►
it needs to be surfaced somewhere
01:01:42
◼
►
in the UI, like for example,
01:01:44
◼
►
if you make a folder called Dropbox,
01:01:46
◼
►
I would hope the thing would pop up,
01:01:47
◼
►
maybe it does this, I don't know,
01:01:48
◼
►
I would hope it would pop up dialogue and say,
01:01:51
◼
►
just so you know, for weird political reasons,
01:01:53
◼
►
we're not gonna sync that folder,
01:01:54
◼
►
so you might wanna give it a different name.
01:01:56
◼
►
Like maybe that's why there isn't,
01:01:57
◼
►
if there is no UI, maybe that's why,
01:01:59
◼
►
because how do you explain this?
01:02:00
◼
►
Well, this list is long, and it contains things
01:02:02
◼
►
that I feel like are legit, like temp, .TMP.
01:02:07
◼
►
People make files with .TMP extensions,
01:02:09
◼
►
like I suppose vaguely nerdy people do, whatever,
01:02:12
◼
►
but anyway, that is weird, we will put the link
01:02:14
◼
►
in the show notes, so beware iCloud Drive
01:02:17
◼
►
is stranger than you imagine.
01:02:19
◼
►
Oh, and related to that, Marco tab-completing
01:02:24
◼
►
his SimLink and not having a tab complete to the slash,
01:02:26
◼
►
and I mentioned I thought that Bash surely has a feature
01:02:29
◼
►
to change the setting, apparently it does,
01:02:31
◼
►
if you put this particular incantation
01:02:33
◼
►
in your .inputrc file, set mark SimLink directories,
01:02:37
◼
►
with hyphens between the last three words,
01:02:40
◼
►
and set it to on, that apparently will do it,
01:02:42
◼
►
we'll put a link in the show notes if you're interested
01:02:44
◼
►
in changing how Bash works when tab-completing SimLinks.
01:02:47
◼
►
- It's always good to read out shell commands in a podcast.
01:02:50
◼
►
- Yeah, well, pretty soon Siri will be
01:02:52
◼
►
executing them for us, though.
01:02:54
◼
►
- Apple has stopped letting contractors
01:02:57
◼
►
listen to Siri voice recordings,
01:02:58
◼
►
and will offer opt-out later,
01:03:00
◼
►
because Apple doesn't believe in web services,
01:03:03
◼
►
and so it has to go in an iOS release, I guess.
01:03:05
◼
►
But this is with regard to the contractors
01:03:07
◼
►
apparently listening in to some of our conversations,
01:03:09
◼
►
sort of, kind of, and everyone understandably
01:03:12
◼
►
getting their tinfoil hats on, as did I,
01:03:16
◼
►
but I guess that's not happening anymore, as per Apple.
01:03:19
◼
►
- Well, I mean, temporarily spent,
01:03:21
◼
►
like it's a reasonable reaction,
01:03:23
◼
►
which is everyone hates this thing we're doing,
01:03:26
◼
►
let's just stop doing it, and then regroup,
01:03:28
◼
►
and figure out a better thing,
01:03:29
◼
►
'cause as you noted, Casey, they're not exactly
01:03:33
◼
►
nimble on their feet when it comes to
01:03:34
◼
►
rolling out features like this,
01:03:35
◼
►
and they probably shouldn't be,
01:03:36
◼
►
'cause you could mess things up,
01:03:37
◼
►
so the best thing to do is just stop it,
01:03:38
◼
►
stop doing it, tell everyone you stopped doing it,
01:03:41
◼
►
actually stop doing it, and then probably
01:03:44
◼
►
roll out some improved way to communicate this,
01:03:48
◼
►
and a way to opt out of it, and so on and so forth.
01:03:50
◼
►
Someone did point out there actually is a way
01:03:52
◼
►
to opt out of this for enterprises, for big companies,
01:03:55
◼
►
'cause big companies don't want audio leaking out
01:03:58
◼
►
of their company's phones and going to Apple or whatever,
01:04:01
◼
►
so there's this very convoluted way
01:04:03
◼
►
using enterprise profiles or something
01:04:05
◼
►
to convince all of the iPhones that are used
01:04:09
◼
►
by employees of a particular corporation
01:04:10
◼
►
not to send any audio to Apple, blah, blah, blah,
01:04:14
◼
►
but it's a process that no regular person
01:04:16
◼
►
would ever go through, and it's obviously
01:04:18
◼
►
not a solution to this problem,
01:04:19
◼
►
so the solution for now is Apple, stop doing that.
01:04:23
◼
►
- And similarly, apparently Google,
01:04:24
◼
►
because GDPR, if I understand this right,
01:04:26
◼
►
has been ordered to halt human review
01:04:28
◼
►
of voice AI recordings over privacy risks,
01:04:30
◼
►
and this happened specifically
01:04:32
◼
►
because of a German privacy watchdog.
01:04:34
◼
►
- Yeah, I remember reading about this story.
01:04:36
◼
►
Someone had a big leak of 1,000 different recordings
01:04:40
◼
►
and dumped it out.
01:04:42
◼
►
That's the problem with this.
01:04:42
◼
►
If you collect this information,
01:04:44
◼
►
and even if what you're doing with
01:04:45
◼
►
is just trying to improve your program,
01:04:46
◼
►
once you have this information, it is a danger.
01:04:50
◼
►
Some contractor who's supposed to be
01:04:52
◼
►
just reviewing this stuff could copy it
01:04:54
◼
►
and take it out of the company illegally
01:04:56
◼
►
and distribute it on the internet.
01:04:59
◼
►
That's why you don't want any of this information,
01:05:01
◼
►
'cause even if you don't ever intend
01:05:03
◼
►
to do anything bad with it, merely having it
01:05:06
◼
►
means you are now a target for people
01:05:08
◼
►
to take that information and just spread it
01:05:10
◼
►
all over the internet.
01:05:11
◼
►
Glad to see that some part of this world
01:05:15
◼
►
has some kind of laws that actually try
01:05:17
◼
►
to protect consumers in some vague way,
01:05:20
◼
►
even if they are themselves flawed.
01:05:22
◼
►
- Definitely not here.
01:05:23
◼
►
That I'm confident in.
01:05:25
◼
►
- We are sponsored this week by Fracture,
01:05:28
◼
►
who prints your photos in vivid color directly on glass.
01:05:33
◼
►
Almost all of us take photos, and usually
01:05:36
◼
►
we maybe share them to a feed somewhere online,
01:05:39
◼
►
and then that's it.
01:05:39
◼
►
You don't see them again after that.
01:05:41
◼
►
Very few of those photos end up getting printed.
01:05:43
◼
►
Even fewer end up being seen by anybody
01:05:46
◼
►
past those first couple days.
01:05:48
◼
►
Let Fracture help you focus on the moments
01:05:50
◼
►
that mean the most in your life
01:05:52
◼
►
by turning your favorite digital memories
01:05:54
◼
►
into actual printed photos that make your house look great
01:05:58
◼
►
or make wonderful gifts for someone else.
01:06:01
◼
►
So these Fracture prints look amazing.
01:06:02
◼
►
They go edge to edge.
01:06:04
◼
►
They're printed directly on glass.
01:06:06
◼
►
So there's this nice thin glass layer.
01:06:08
◼
►
They're printed kind of on the back of it,
01:06:09
◼
►
shining through the front, and then behind that
01:06:11
◼
►
is a thin layer of like a foam core kind of material,
01:06:13
◼
►
and that's how you can hook it onto like a screw
01:06:16
◼
►
or something to hold it up.
01:06:17
◼
►
They even include the screw and the wall anchor
01:06:19
◼
►
in the box for you.
01:06:20
◼
►
So you get everything you need,
01:06:22
◼
►
and they're super nice, modern edge to edge,
01:06:24
◼
►
and also lightweight pieces of glass.
01:06:27
◼
►
You don't have to worry about them like falling off the wall
01:06:28
◼
►
and, you know, shattering into a thousand pieces.
01:06:30
◼
►
I've never seen that happen.
01:06:31
◼
►
They're super light, so like even the big ones,
01:06:33
◼
►
they're not gonna like pull the anchor out of the wall
01:06:35
◼
►
or anything, and they're just amazing gifts for people.
01:06:38
◼
►
Maybe, you know, send your parents pictures of your kids
01:06:40
◼
►
or your pets or whatever else.
01:06:41
◼
►
People love photos as gifts,
01:06:43
◼
►
and Fracture prints make amazing gifts.
01:06:45
◼
►
We have them all over our house.
01:06:47
◼
►
We've given them as tons of gifts.
01:06:48
◼
►
Everyone has positive things to say about them,
01:06:51
◼
►
and you can feel good about Fractures too
01:06:52
◼
►
because they are handmade from US source materials
01:06:55
◼
►
in Gainesville, Florida by real nice people,
01:06:57
◼
►
and they're a green company
01:06:59
◼
►
operating a carbon neutral factory.
01:07:01
◼
►
So see for yourself at fractureme.com/atp.
01:07:06
◼
►
That'll get you a special discount
01:07:07
◼
►
on your first Fracture order.
01:07:09
◼
►
After checkout, they will ask you,
01:07:10
◼
►
where'd you hear about them?
01:07:11
◼
►
Make sure to tell them you heard about them from ATP.
01:07:13
◼
►
Once again, fractureme.com/atp
01:07:16
◼
►
for a special discount on your first order,
01:07:18
◼
►
and tell them you came from here.
01:07:20
◼
►
Thank you so much to Fracture for sponsoring our show.
01:07:23
◼
►
(upbeat music)
01:07:25
◼
►
- Do we have time for topics?
01:07:30
◼
►
- We can talk briefly about Apple Card.
01:07:33
◼
►
I tried yesterday, I had signed up
01:07:36
◼
►
for whatever early access thing way back when,
01:07:38
◼
►
and I got my email yesterday saying,
01:07:40
◼
►
"Hey, you can sign up for Apple Card,"
01:07:41
◼
►
and I tried to do it knowing full well
01:07:42
◼
►
it would probably not work,
01:07:43
◼
►
and I'll explain why in a moment,
01:07:44
◼
►
and it did not work, but it's my fault.
01:07:47
◼
►
- Are you on the betas?
01:07:48
◼
►
- No, I'm not on the betas.
01:07:50
◼
►
It's my fault because I had frozen my credit
01:07:52
◼
►
a couple of years ago.
01:07:53
◼
►
- Oh yeah, I did that too.
01:07:54
◼
►
- We all did when the Equifax, whatever, right?
01:07:57
◼
►
I think I had done it even quite a while before then.
01:08:00
◼
►
Wow, look at me getting hipster about freezing my credit.
01:08:02
◼
►
This is a new low, but anyway.
01:08:06
◼
►
I had done it a couple of years ago
01:08:07
◼
►
'cause we haven't really made any large purchases
01:08:09
◼
►
and hadn't planned on making any large purchases
01:08:11
◼
►
wherein a credit check would be involved,
01:08:14
◼
►
so whenever it was I did it,
01:08:15
◼
►
I'd frozen it with all three bureaus in the United States,
01:08:18
◼
►
and I honestly don't have the faintest idea
01:08:20
◼
►
how this works in other countries,
01:08:21
◼
►
but speaking for America,
01:08:22
◼
►
there are I think three major credit bureaus
01:08:25
◼
►
that companies can use to figure out
01:08:28
◼
►
if you're likely to pay back money owed
01:08:31
◼
►
in a reasonable fashion,
01:08:32
◼
►
and so if you freeze your credit,
01:08:34
◼
►
that means they will refuse to answer the question,
01:08:36
◼
►
so Apple understandably,
01:08:38
◼
►
when they were I guess strictly speaking it was Goldman Sachs,
01:08:41
◼
►
whatever it's called,
01:08:42
◼
►
understandably wanted to know,
01:08:43
◼
►
hey, is this guy a total putz
01:08:45
◼
►
or is he actually gonna pay back the money
01:08:47
◼
►
that he accrues on this credit card,
01:08:49
◼
►
and when they went to,
01:08:50
◼
►
and I guess TransUnion happens to be the one that they use,
01:08:54
◼
►
they went to TransUnion,
01:08:55
◼
►
and TransUnion said I can't answer that question
01:08:56
◼
►
'cause dude's frozen his credit,
01:08:58
◼
►
and so the process was I verified my contact information,
01:09:03
◼
►
I verified the last four of my social security number,
01:09:05
◼
►
which is our government identification number,
01:09:08
◼
►
I then verified my full social for some reason or another,
01:09:11
◼
►
and then it actually said to me,
01:09:13
◼
►
hey, you've got a credit freeze,
01:09:15
◼
►
there's nothing we can do,
01:09:16
◼
►
and by the way,
01:09:18
◼
►
we typically use TransUnion to figure this out,
01:09:21
◼
►
which I thought was extremely helpful and actionable,
01:09:23
◼
►
and I mean that genuinely.
01:09:25
◼
►
You know, rather than just being like,
01:09:26
◼
►
oh, we couldn't figure out what the story is, so sorry,
01:09:29
◼
►
they actually said,
01:09:31
◼
►
not only we recognize the fact
01:09:33
◼
►
that you have frozen your credit,
01:09:34
◼
►
but furthermore,
01:09:36
◼
►
this is the particular of the three bureaus
01:09:38
◼
►
that we tend to use,
01:09:40
◼
►
go ahead and talk to them,
01:09:43
◼
►
and so in the heat of the moment,
01:09:44
◼
►
I was like, you know, okay, fine,
01:09:45
◼
►
I should probably try this for the show,
01:09:47
◼
►
and so I went to TransUnion's website,
01:09:49
◼
►
and I had a record for it in one password
01:09:51
◼
►
from whenever it was I had frozen my credit,
01:09:53
◼
►
and I logged in with that username and password,
01:09:56
◼
►
and TransUnion said, we can't verify your identity,
01:09:58
◼
►
and guess what you need to do
01:10:00
◼
►
in order to verify your identity?
01:10:02
◼
►
You have to call them,
01:10:03
◼
►
and I said, nope, not happening,
01:10:05
◼
►
and then I gave up.
01:10:06
◼
►
- Yeah, that's, actually,
01:10:08
◼
►
I mean, that actually is gonna hit me too
01:10:12
◼
►
if I decide to apply for this card,
01:10:14
◼
►
which I have thoughts on the card, but it's boring,
01:10:18
◼
►
but I will say that I also keep my credit frozen
01:10:21
◼
►
as of a few years ago because of the Equifax thing,
01:10:23
◼
►
and I recently applied for,
01:10:26
◼
►
I think it was the Amazon Prime Rewards card,
01:10:30
◼
►
'cause it gives you like 5% back on Whole Foods and Amazon,
01:10:32
◼
►
which is pretty significant,
01:10:34
◼
►
and I spent a lot of money in both of those places,
01:10:36
◼
►
so I did that, and it registered at first,
01:10:39
◼
►
but it told me the same thing,
01:10:41
◼
►
like we use Equifax for our thing,
01:10:44
◼
►
and I was able to go to Equifax and not unfreeze my thing,
01:10:49
◼
►
just get a one-time passcode that I could give them.
01:10:53
◼
►
- That's a little interesting.
01:10:53
◼
►
- And say, and it was backed by Chase,
01:10:56
◼
►
and so I called up the help number,
01:10:57
◼
►
and I gave them this code, and it worked,
01:11:00
◼
►
and they verified it over the phone,
01:11:02
◼
►
and then I got approved over the phone,
01:11:03
◼
►
and it went through just fine, so that, I think, is great.
01:11:06
◼
►
It's, I'm kind of, I don't know what Apple's options are
01:11:10
◼
►
with TransUnion, but it would be a lot easier
01:11:13
◼
►
if they support that kind of one-time passcode thing.
01:11:16
◼
►
I don't know whether they do or not,
01:11:17
◼
►
because this is gonna be a problem that anybody will face
01:11:19
◼
►
who has a credit freeze.
01:11:21
◼
►
- John, did you try this in any way, shape, or form?
01:11:23
◼
►
I assume not.
01:11:24
◼
►
- I would have liked to,
01:11:25
◼
►
but I was not blessed enough to get the invite.
01:11:27
◼
►
I'm pretty sure I signed up for it
01:11:28
◼
►
back when they said whatever.
01:11:30
◼
►
I'm going to get this card.
01:11:32
◼
►
I had totally forgotten that my credit was frozen,
01:11:33
◼
►
but yes, it also is frozen,
01:11:34
◼
►
so I'll try it with whatever my thing is to see,
01:11:38
◼
►
you know, what, to see if it gives me any options,
01:11:41
◼
►
but I'm assuming it'll be another big cluster
01:11:43
◼
►
involving calling banks on phones.
01:11:46
◼
►
- Yeah, probably.
01:11:47
◼
►
- And being terrified by their supposed security procedures,
01:11:49
◼
►
realizing how many people could have stole my entire life
01:11:52
◼
►
if they knew three facts about me or whatever.
01:11:54
◼
►
Yeah, no, I'm interested in trying this out.
01:11:57
◼
►
I'm kind of sad that I didn't get,
01:11:59
◼
►
although I guess this works on iOS 12.
01:12:02
◼
►
You're not, you know, you just mentioned
01:12:04
◼
►
you're not on the may-dos.
01:12:05
◼
►
- I was on iOS 12, whatever the most recent version is,
01:12:07
◼
►
which just came out in the last few days.
01:12:08
◼
►
That's what I was doing this on.
01:12:10
◼
►
- Yeah, the thing that's going around now, by the way,
01:12:11
◼
►
related to Apple Card is in the contract,
01:12:14
◼
►
like every contract from large corporations,
01:12:17
◼
►
this entire godforsaken country,
01:12:19
◼
►
there's an arbitration clause,
01:12:20
◼
►
but apparently there's a way to opt out of it
01:12:22
◼
►
if you scratch a message onto a piece of wood
01:12:26
◼
►
and put it in a bottle and throw it in a ship and whatever.
01:12:30
◼
►
There is a way to opt out, but you only have 90 days
01:12:32
◼
►
after applying for the card to opt out of arbitration.
01:12:35
◼
►
I've heard theories that you can do it over iMessage
01:12:38
◼
►
with the business chat thing,
01:12:39
◼
►
but you're probably just gonna have to end up
01:12:40
◼
►
calling somebody and you have to give them
01:12:42
◼
►
a bunch of information and say you want to opt out
01:12:43
◼
►
of arbitration, and really, it only opts you out
01:12:45
◼
►
of some arbitration, so you're probably screwed either way,
01:12:47
◼
►
but this is another one of those things
01:12:49
◼
►
that people pass around to make them think
01:12:51
◼
►
that they're doing all that they can to defend themselves
01:12:53
◼
►
against these giant faceless corporations,
01:12:55
◼
►
and it's probably pointless, but we all do it anyway
01:12:58
◼
►
because what if it's not pointless?
01:13:00
◼
►
So there's that.
01:13:02
◼
►
Sorry for the vague information.
01:13:03
◼
►
I was looking for instructions like here's exactly
01:13:05
◼
►
what you need to do, but the instructions in the contract
01:13:07
◼
►
just say you need to contact us,
01:13:10
◼
►
and it says by message, email, I'm doing it from memory,
01:13:13
◼
►
but they say by message, I'm assuming they mean iMessage,
01:13:16
◼
►
but there's no message address.
01:13:17
◼
►
iMessage to who, to what?
01:13:19
◼
►
Doesn't say in the contract.
01:13:21
◼
►
By mail, it's an address somewhere.
01:13:23
◼
►
Anyway, try to opt out of arbitration, you pass it again,
01:13:26
◼
►
because arbitration is code for you get screwed.
01:13:29
◼
►
- Also, I would just add, while it is exciting
01:13:32
◼
►
to have the newest, greatest Apple thing,
01:13:36
◼
►
although I would argue it's also decreasingly exciting
01:13:39
◼
►
when the newest, greatest Apple thing is a credit card.
01:13:42
◼
►
- 3% back on your Mac Pro?
01:13:45
◼
►
That's exciting to me.
01:13:46
◼
►
- Right, so I understand people are excited to get it
01:13:50
◼
►
and to start getting that glorious 2% back on Apple Pay,
01:13:53
◼
►
3% on Mac Pro, that's wonderful,
01:13:55
◼
►
but I would also maybe caution you,
01:13:59
◼
►
do you wanna help Apple beta test a financial instrument
01:14:03
◼
►
that is heavily service dependent?
01:14:06
◼
►
I don't, like that to me, that's a big red flag.
01:14:11
◼
►
And this is another thing,
01:14:13
◼
►
if something about Apple's back end messes this up for you,
01:14:17
◼
►
not only is there probably likely to be only very painful
01:14:22
◼
►
to no recovery methods available,
01:14:25
◼
►
but they're messing with your money,
01:14:28
◼
►
they're messing with your credit.
01:14:30
◼
►
I trust Apple's motives, I trust that they're not gonna do
01:14:34
◼
►
creepy things intentionally, but I don't trust them
01:14:37
◼
►
to get web services really that right on day one.
01:14:40
◼
►
So I would not wanna trust my finances and my credit
01:14:45
◼
►
and my payment methods on my phone or whatever else,
01:14:49
◼
►
I don't wanna trust that to the very first few days
01:14:52
◼
►
of this roll out, give them a chance to work out the kinks,
01:14:55
◼
►
maybe try it next month if you're gonna try it.
01:14:59
◼
►
- Well you can add the card and get it set up
01:15:01
◼
►
and just not actually use it.
01:15:03
◼
►
I think it's probably just as safe,
01:15:05
◼
►
if not safer than Apple Pay,
01:15:06
◼
►
'cause it's all, both of them are just using the actual
01:15:09
◼
►
plain old disgusting ancient credit card system
01:15:11
◼
►
under the covers and there's just a thin veneer of Apple
01:15:13
◼
►
in this thrown over the top of it and I'm hoping that,
01:15:16
◼
►
'cause that's how Apple Pay works too,
01:15:19
◼
►
and this card is not Apple's card, it's Goldman Sachs card,
01:15:22
◼
►
which we all feel great about.
01:15:24
◼
►
And it's a, what is it, a MasterCard under the covers?
01:15:29
◼
►
- I think so, yeah.
01:15:30
◼
►
- Yeah, whatever. - I think that's right.
01:15:31
◼
►
- Anyway, credit cards are not exciting,
01:15:34
◼
►
the only reason I'm getting one is for the increased cash
01:15:38
◼
►
back on Apple purchases because I have pending
01:15:40
◼
►
Apple purchases.
01:15:41
◼
►
- Yeah, you can probably get like $1500 back on your Mac Pro.
01:15:44
◼
►
- Yeah, 3% is a lot when the numbers get big.
01:15:47
◼
►
I'm exploring all options to save money on the Mac Pro.
01:15:50
◼
►
Including a billionaire who's listening to the podcast
01:15:54
◼
►
now just buying me one.
01:15:55
◼
►
- Well if you're gonna buy one, why not buy three?
01:15:58
◼
►
- Yeah, you hear that Bill Gates, if you weren't bored
01:16:00
◼
►
by all the Swift UI talk, now's the time to buy me a Mac Pro.
01:16:03
◼
►
- I'm sure he's still listening.
01:16:05
◼
►
- He doesn't even buy his kids college tuition, right?
01:16:07
◼
►
- I have no idea.
01:16:08
◼
►
- He's the whole thing of like, he doesn't want his kids
01:16:10
◼
►
to like, they mustn't like earn everything they have
01:16:14
◼
►
- It's a valid concern.
01:16:16
◼
►
I don't know if that's true or not, but that is a respectable
01:16:18
◼
►
position to take.
01:16:19
◼
►
- Yeah, I remember that from way back when,
01:16:21
◼
►
I'm not sure if he's held firm on that.
01:16:23
◼
►
- I don't know.
01:16:24
◼
►
I remember there was a meme before we called it a meme,
01:16:27
◼
►
not really a meme, but like a thing, a viral thing
01:16:30
◼
►
going around that, this was like when I was in college,
01:16:33
◼
►
that somebody had computed based on Bill Gates' earnings
01:16:36
◼
►
that if he saw, and I'm making this up, but it was like,
01:16:39
◼
►
if he had seen a thousand dollar bill on the sidewalk
01:16:42
◼
►
as he was walking to work, and I don't even think
01:16:44
◼
►
a thousand dollar bill is a thing,
01:16:45
◼
►
but for the sake of discussion, he sees a thousand dollars
01:16:47
◼
►
sitting on the sidewalk as he's walking to work,
01:16:49
◼
►
it would actually behoove him to just continue walking
01:16:51
◼
►
to work because he will make more than a thousand dollars
01:16:54
◼
►
in the time it would take to pick up that, you know,
01:16:56
◼
►
the thousand dollars in cash or laying on the sidewalk.
01:16:58
◼
►
And I remember as like an 18 year old, I was like,
01:17:00
◼
►
how can that be possible?
01:17:03
◼
►
I just thought it was insane.
01:17:04
◼
►
- I remember as a 20 something year old
01:17:07
◼
►
thinking this analogy is dumb because he's not
01:17:08
◼
►
an hourly employee.
01:17:10
◼
►
- Well, there's that too.
01:17:11
◼
►
- Also, I'm pretty sure this was from like email forwards.
01:17:13
◼
►
- No, it's not an analogy, this meme is dumb.
01:17:16
◼
►
It is a dumb meme, but yes, he has a lot of money.
01:17:18
◼
►
- We are sponsored this week by Linode,
01:17:22
◼
►
my favorite web host for running servers.
01:17:24
◼
►
Go to linode.com/atp to learn more,
01:17:27
◼
►
and get a $20 credit with code ATP2019.
01:17:30
◼
►
Whatever you wanna build, you can build it on Linode.
01:17:33
◼
►
You can build distributed applications, hosted services,
01:17:36
◼
►
back ends for your iOS apps, websites, CI and CD
01:17:40
◼
►
environments, whatever you wanna build using virtual
01:17:42
◼
►
servers, you can do it on Linode.
01:17:44
◼
►
And these servers are fast in the Linode cloud.
01:17:47
◼
►
They have native SSD storage, a 40 gigabit network
01:17:50
◼
►
behind it all, industry leading processors,
01:17:53
◼
►
and they have 10 worldwide data centers
01:17:55
◼
►
and they're always adding more.
01:17:57
◼
►
I believe they just added Mumbai, India,
01:17:59
◼
►
they added Toronto, Canada recently.
01:18:01
◼
►
They're always adding more around the world,
01:18:02
◼
►
so you can serve your customers wherever they are,
01:18:05
◼
►
with hourly billing across all plans and add-on services.
01:18:08
◼
►
So if you only need a server for a couple hours,
01:18:11
◼
►
only pay for it for a couple hours, no big deal.
01:18:13
◼
►
And I gotta say, one thing I love Linode,
01:18:15
◼
►
I've been with Linode for I think about eight or nine years
01:18:17
◼
►
now, and they've always been an incredible value.
01:18:20
◼
►
The entire time, it isn't just like a one time sale
01:18:23
◼
►
and then they kinda coast on that forever,
01:18:25
◼
►
they're constantly adjusting their plans and pricing
01:18:27
◼
►
so that they are always the best value in the business.
01:18:30
◼
►
For the entire eight or nine years I've been with them,
01:18:32
◼
►
they've been the best value that entire time.
01:18:35
◼
►
And I like them for other reasons too.
01:18:37
◼
►
Cost is very important, but they also have
01:18:38
◼
►
a really nice control panel, they have amazing capabilities,
01:18:41
◼
►
they have amazing support if you ever need it.
01:18:43
◼
►
Occasionally you probably need support from your web host,
01:18:45
◼
►
I need it sometimes too.
01:18:46
◼
►
And they've been just the top of their game
01:18:48
◼
►
every single time I've needed anything from them.
01:18:50
◼
►
So check it out today at linode.com/atp.
01:18:54
◼
►
And you can use promo code ATP2019 to get a $20 credit.
01:18:58
◼
►
Now, their plan started just $5 a month,
01:19:01
◼
►
so that could get you four months free
01:19:03
◼
►
on their one gig server plan.
01:19:04
◼
►
So check it out today, linode.com/atp.
01:19:08
◼
►
I love them as a web host, they are my favorite web host.
01:19:11
◼
►
Linode.com/atp, promo code ATP2019 for a $20 credit.
01:19:16
◼
►
Thank you so much to Linode for being so awesome
01:19:18
◼
►
and for sponsoring our show.
01:19:19
◼
►
(upbeat music)
01:19:23
◼
►
- All right, let's move on to Ask ATP,
01:19:24
◼
►
and let's start with Brad Seifert who writes,
01:19:26
◼
►
"FaceApp has been incredibly popular,"
01:19:28
◼
►
and this was actually written a few weeks ago,
01:19:29
◼
►
"has been incredibly popular in the past week or so
01:19:31
◼
►
"with many folks aging or de-aging themselves.
01:19:33
◼
►
"My Twitter feed was full of people worried
01:19:35
◼
►
"that the app was made in Russia
01:19:36
◼
►
"and that giving the app permission to view your photos
01:19:38
◼
►
"allowed them to upload all your photos to their servers.
01:19:40
◼
►
"Is this something we should be worried about?
01:19:41
◼
►
"Does the iOS photo permission really give the app maker
01:19:44
◼
►
"copies of everyone's photos who has used the app?"
01:19:47
◼
►
I actually don't know what the granularity is for photos.
01:19:50
◼
►
I know vaguely that there's a mechanism
01:19:53
◼
►
by which you can ask for a single photo,
01:19:56
◼
►
and I think that iOS will only give you that one photo.
01:20:00
◼
►
You don't get rights as an app developer
01:20:02
◼
►
to the entire library.
01:20:04
◼
►
I've never used FaceApp, so I have no idea
01:20:05
◼
►
if that's what they did and how it worked.
01:20:08
◼
►
Marco, do you happen to know anything
01:20:10
◼
►
about how photo selection works in iOS?
01:20:13
◼
►
- Yeah, okay, John, any thoughts?
01:20:15
◼
►
- I know about what you know is that
01:20:17
◼
►
a well-behaved application will ask for access,
01:20:20
◼
►
throw up a picker, and just get access
01:20:22
◼
►
to the one photo that the person picked.
01:20:24
◼
►
I don't know if there is a bigger option,
01:20:26
◼
►
which is just give me access to all the photos.
01:20:28
◼
►
There might be, but that's besides the point.
01:20:30
◼
►
I feel like the FaceApp issue is like,
01:20:32
◼
►
like anything else on the internet, right?
01:20:34
◼
►
If you're giving a photo of yourself to an app,
01:20:39
◼
►
however it gets it, or giving any of your photos,
01:20:41
◼
►
giving any of your information,
01:20:42
◼
►
there is an implicit trust relationship
01:20:44
◼
►
between you and the app vendor.
01:20:46
◼
►
Do you care that an app has a picture of your face?
01:20:51
◼
►
- It depends.
01:20:52
◼
►
I mean, there's pictures of my face all over the internet.
01:20:55
◼
►
Giving one to this application and it associating with me
01:20:59
◼
►
is probably worse than it finding one on the internet,
01:21:01
◼
►
but everyone's mileage may vary.
01:21:03
◼
►
This happens whenever there's anything related to faces
01:21:05
◼
►
that comes up on the internet,
01:21:06
◼
►
like you're just giving your information
01:21:09
◼
►
to a thing that's feeding machine learning
01:21:11
◼
►
and they're building a database
01:21:12
◼
►
and robots will come and eat your medicine.
01:21:15
◼
►
You know, like, there is definitely danger here.
01:21:18
◼
►
The danger is exactly what you think it is.
01:21:20
◼
►
If you don't wanna give anyone your photo,
01:21:21
◼
►
don't give anyone your photo.
01:21:22
◼
►
If you give someone your photo, they have your photo.
01:21:25
◼
►
That's basically what it is.
01:21:26
◼
►
The larger mass thing is like,
01:21:27
◼
►
oh, I just thought I was giving them my photo,
01:21:28
◼
►
but I didn't realize that based on my photo,
01:21:30
◼
►
they could predict my future and steal all my money.
01:21:33
◼
►
They can do that without your photo.
01:21:36
◼
►
That said, I did not download this app.
01:21:38
◼
►
I do not want to give my,
01:21:40
◼
►
I never do any of these face things.
01:21:42
◼
►
I never answer any of these questions.
01:21:44
◼
►
There's a meme that tell everyone
01:21:47
◼
►
your last six addresses you lived at
01:21:49
◼
►
and your mother's maiden name
01:21:51
◼
►
and your first dog's name.
01:21:55
◼
►
Don't do any of that stuff.
01:21:55
◼
►
Don't give out information for fun, right?
01:21:59
◼
►
We give away enough information unintentionally
01:22:02
◼
►
that it's probably not a good idea
01:22:04
◼
►
to be giving out information intentionally.
01:22:06
◼
►
If you wanna derive fun from these things,
01:22:08
◼
►
look at all the fun that other people are having with it.
01:22:10
◼
►
Or another option is to upload pictures of celebrities,
01:22:12
◼
►
which a lot of people did.
01:22:14
◼
►
You probably still have to give face app access
01:22:18
◼
►
to your photos, so I don't know the deal there.
01:22:20
◼
►
Again, I don't know if they have access
01:22:21
◼
►
to all your photos or just one.
01:22:23
◼
►
That's why web apps are better.
01:22:24
◼
►
Go to a web app and upload a picture
01:22:26
◼
►
of your favorite celebrity and see how they look
01:22:28
◼
►
when they're old and they're young.
01:22:30
◼
►
That is probably slightly safer than using the iOS app.
01:22:36
◼
►
All right, moving on.
01:22:37
◼
►
Nathan would like to know,
01:22:39
◼
►
I'd love John's advice on reconciling my love for RTS games
01:22:43
◼
►
with my disdain for the need to have a giant gaming PC
01:22:45
◼
►
in my house.
01:22:46
◼
►
So John, do you tolerate having a Mac as your main machine
01:22:49
◼
►
and a PC for gaming?
01:22:50
◼
►
That's my current setup, but I'm growing tired
01:22:51
◼
►
of seeing a giant PC sitting on my floor.
01:22:53
◼
►
In last week's episode, I don't know if that is literally
01:22:56
◼
►
this past week or several weeks ago,
01:22:57
◼
►
you talked about folks who modify cheese graters
01:22:59
◼
►
into hot rods of sorts.
01:23:01
◼
►
Is that an option you'd consider?
01:23:02
◼
►
I have a dream of being able to use an iMac
01:23:04
◼
►
that I can boot into Windows for the sole purpose
01:23:06
◼
►
of playing RTS games, but I'm not sure the performance
01:23:08
◼
►
is quite sufficient.
01:23:09
◼
►
If you were in my position, would you bother
01:23:10
◼
►
with trying to modify a cheese grater as you mentioned?
01:23:12
◼
►
And also, John, would you start by explaining
01:23:14
◼
►
what the hell an RTS game is, please?
01:23:16
◼
►
Real time strategy game.
01:23:17
◼
►
Even I know this one.
01:23:19
◼
►
So we're talking like Starcraft and--
01:23:20
◼
►
Total annihilation, man.
01:23:23
◼
►
Starcraft, who plays Starcraft?
01:23:26
◼
►
So I am kind of in Nathan's position,
01:23:29
◼
►
and my choice is and has always been not to buy
01:23:32
◼
►
an additional gaming PC.
01:23:33
◼
►
Unfortunately, the age when you could have
01:23:36
◼
►
a single glorious computer that could serve
01:23:38
◼
►
as your gaming PC and your Mac and be decent at both
01:23:40
◼
►
is more or less over.
01:23:42
◼
►
The Mac Pro probably can be a reasonable gaming PC,
01:23:46
◼
►
but it costs a lot more money than you would think.
01:23:49
◼
►
Even if you ignore the monitor thing, it's not a good deal.
01:23:52
◼
►
It's much cheaper to get a Mac and then buy a gaming PC.
01:23:55
◼
►
That is the best solution.
01:23:56
◼
►
Even for RTS games, you're like, "Oh, RTS games?
01:23:58
◼
►
"So you could run that at iMac, it's probably fine, right?"
01:24:01
◼
►
RTS games can be demanding these days.
01:24:03
◼
►
Especially if you wanna run them at native resolution
01:24:04
◼
►
on an iMac, it might chug a little bit.
01:24:06
◼
►
So I think still the cheapest solution has always been
01:24:11
◼
►
to have a Mac and a gaming PC, but now the actual best
01:24:15
◼
►
and most, you know, the best solution to get decent
01:24:17
◼
►
gaming performance is still to have a gaming PC.
01:24:21
◼
►
You can't do a boot your Mac Pro like you used to
01:24:23
◼
►
back in the day and have a reasonable gaming PC performance
01:24:26
◼
►
alongside a really good Mac.
01:24:27
◼
►
You just can't anymore.
01:24:28
◼
►
And I do not recommend the current or the upcoming Mac Pro
01:24:32
◼
►
for that purpose 'cause it's just too much money.
01:24:34
◼
►
- Finally, Ryan Monahan writes, "I haven't started
01:24:37
◼
►
"with my new job yet, but have any of you ever had
01:24:39
◼
►
"to deal with imposter syndrome?
01:24:41
◼
►
"If so, how did you overcome it or work through it?
01:24:42
◼
►
"Do you have any tips for a new developer?"
01:24:45
◼
►
I've definitely been through this a couple of times
01:24:47
◼
►
when I have quote unquote pivoted my career.
01:24:50
◼
►
When I started out, I was doing C++ professionally,
01:24:53
◼
►
and then I eventually switched to doing C# stuff natively,
01:24:56
◼
►
as in not the web, and then that became web development,
01:24:59
◼
►
and then I eventually changed into iOS development.
01:25:01
◼
►
And every single time, you know, I was extremely worried
01:25:05
◼
►
that I didn't know what the crap it was I was talking about
01:25:07
◼
►
because, candidly, I didn't really know what the crap
01:25:09
◼
►
it was I was talking about.
01:25:10
◼
►
And I think the best advice I have is to own up
01:25:15
◼
►
to when you don't know something.
01:25:16
◼
►
Don't try to act like you're smarter than you are.
01:25:19
◼
►
Most people that I've worked with,
01:25:21
◼
►
most developers I've worked with, have appreciated
01:25:23
◼
►
when I've said to them, "Look, I'm sorry,
01:25:25
◼
►
"but I really don't understand what you're talking about.
01:25:27
◼
►
"Can you explain it deeper, differently, et cetera?"
01:25:30
◼
►
And sometimes they'll get annoyed, but generally speaking,
01:25:32
◼
►
they'll appreciate the fact that I'm being candid
01:25:34
◼
►
with what I do and don't know.
01:25:35
◼
►
And I guess just believe in yourself,
01:25:39
◼
►
which is such a cheesy thing to say,
01:25:40
◼
►
but even problems that I've had,
01:25:43
◼
►
like issues I had with vignette,
01:25:45
◼
►
like the duplicate image detection,
01:25:47
◼
►
like I didn't have the faintest idea
01:25:48
◼
►
how I was gonna solve that.
01:25:49
◼
►
And as we discussed earlier, maybe it's not solved yet,
01:25:52
◼
►
but certainly it's a lot closer than it was a month ago.
01:25:55
◼
►
And I didn't have the faintest clue
01:25:58
◼
►
what I was going to do about that.
01:25:59
◼
►
And I worked through it and I figured it out.
01:26:01
◼
►
So you'd be surprised what you're capable of.
01:26:03
◼
►
Marco, as someone else who doesn't have a job,
01:26:06
◼
►
why don't you give us advice about having a job?
01:26:09
◼
►
- Yeah, I mean, obviously this depends a lot on context.
01:26:12
◼
►
Like it depends on whether you are working
01:26:14
◼
►
with other people, whether they are smarter than you
01:26:17
◼
►
or more experienced than you,
01:26:19
◼
►
whether you are kind of comparing yourself
01:26:22
◼
►
to the public or being in public.
01:26:24
◼
►
So it's different for all sorts of different contexts.
01:26:26
◼
►
But no one starts out being an expert in anything.
01:26:31
◼
►
No one starts out being an expert in their own job.
01:26:33
◼
►
Some people never get there.
01:26:35
◼
►
There are idiots in every field at every level.
01:26:39
◼
►
And if you simply care and try,
01:26:43
◼
►
you will generally put yourself ahead of the pack
01:26:48
◼
►
because most people don't care and don't try.
01:26:50
◼
►
- That's well put, I agree with that.
01:26:52
◼
►
- Everyone is putting on an image
01:26:53
◼
►
that they are fully competent.
01:26:55
◼
►
Everyone is, at least, and you,
01:26:58
◼
►
like if you feel these kind of feelings,
01:27:00
◼
►
you especially are kind of self-selecting
01:27:02
◼
►
what you perceive from other people.
01:27:04
◼
►
You are thinking everyone else has it all together.
01:27:08
◼
►
But the reality is most people are just getting by.
01:27:12
◼
►
We're just plowing through.
01:27:13
◼
►
We are doing the best we can with the knowledge
01:27:17
◼
►
and experience that we have at any given moment.
01:27:19
◼
►
And it's never perfect and it's never complete
01:27:21
◼
►
and we're never experts.
01:27:23
◼
►
We just are more or less clueless as time goes on
01:27:27
◼
►
or depending on what we're dealing with at the time.
01:27:29
◼
►
But most people are just kind of plowing through
01:27:32
◼
►
and doing their best.
01:27:33
◼
►
And so if you try and if you put in the effort
01:27:37
◼
►
to try to better yourself,
01:27:39
◼
►
if you care about getting things right and about learning,
01:27:42
◼
►
you will be literally better than most people out there.
01:27:47
◼
►
- John, as someone with an actual job,
01:27:49
◼
►
what is the best advice you can give?
01:27:52
◼
►
- They didn't have the term,
01:27:54
◼
►
at least I hadn't heard the term imposter syndrome
01:27:56
◼
►
back when I was starting out,
01:27:57
◼
►
so I don't think I ever suffered from this,
01:28:00
◼
►
mostly because I, as in so many things in life,
01:28:03
◼
►
traveled the sort of expected path,
01:28:05
◼
►
which is you go to school for the thing you wanna do
01:28:09
◼
►
for your job and then you get a job
01:28:10
◼
►
doing the thing you went to school for.
01:28:12
◼
►
So I always felt like I had the skills and training
01:28:15
◼
►
I needed to do the thing I was doing.
01:28:17
◼
►
I never felt like, oh, all these people know
01:28:19
◼
►
what they're doing and I don't,
01:28:20
◼
►
'cause it's like, well, I'm coming out of school
01:28:23
◼
►
and doing a job that I studied for
01:28:26
◼
►
and yeah, I'm the new person or whatever,
01:28:28
◼
►
but the other thing is it helped,
01:28:31
◼
►
I was coming up in the, my first job after school
01:28:33
◼
►
was like I was coming up with the dot com boom days,
01:28:35
◼
►
so my first job I was literally the only programmer
01:28:37
◼
►
in the entire company, so it's hard to have
01:28:39
◼
►
imposter syndrome when no one else
01:28:41
◼
►
in the entire company is a programmer.
01:28:42
◼
►
I was by default the best and the worst programmer
01:28:45
◼
►
in the entire company, just like Margot.
01:28:47
◼
►
So, or Casey for that matter now,
01:28:51
◼
►
I'm the only programmer, the best and the worst.
01:28:55
◼
►
- So I don't have a lot of good advice
01:28:58
◼
►
to think about, but I would echo Margot's point
01:29:00
◼
►
that if you show up and are vaguely competent
01:29:04
◼
►
and care, you are already above average.
01:29:06
◼
►
- Yeah. (laughs)
01:29:08
◼
►
And I would also say too, building on what you said
01:29:10
◼
►
a second ago, if you don't feel any degree of this,
01:29:15
◼
►
if you don't think that the people who you are working with
01:29:18
◼
►
are smarter than you, you might want to get a new job
01:29:21
◼
►
because you're probably not getting any better
01:29:23
◼
►
and if you never feel any part of this,
01:29:27
◼
►
I feel this all the time.
01:29:29
◼
►
Not to a large degree anymore,
01:29:31
◼
►
'cause I've been doing this for a long time now,
01:29:34
◼
►
and I don't work with anybody else,
01:29:35
◼
►
so I am the dumbest person here,
01:29:37
◼
►
but also because, I feel it in small ways.
01:29:42
◼
►
I feel the imposter syndrome in areas of my skillset
01:29:46
◼
►
that I'm either new at or that have not been my forte.
01:29:49
◼
►
So things like design.
01:29:50
◼
►
I've done an increasing amount of my own design
01:29:55
◼
►
over the years, but I'm not a designer
01:29:57
◼
►
and I've never been trained as one
01:29:58
◼
►
and I have very little artistic ability and things like that
01:30:00
◼
►
and so in areas of my skillset like that
01:30:03
◼
►
that I'm not super strong in,
01:30:05
◼
►
but that I've been slowly trying to get better
01:30:06
◼
►
and slowly pushing myself out of my comfort zone in,
01:30:09
◼
►
I do feel this still.
01:30:12
◼
►
And any time I tackle something brand new like that,
01:30:15
◼
►
I do feel this.
01:30:16
◼
►
Or any time I even, certainly whenever I make a mistake,
01:30:19
◼
►
I certainly feel like, oh god, I'm an idiot,
01:30:21
◼
►
but also every time I have an app update
01:30:25
◼
►
that I put in the app store,
01:30:27
◼
►
I get nervous every single release.
01:30:30
◼
►
Every time I get the email that says,
01:30:31
◼
►
your app's in review, I get nervous.
01:30:33
◼
►
I'm nervous the whole rest of the day.
01:30:35
◼
►
Every time my app goes for sale,
01:30:37
◼
►
I get nervous for the whole next 12 hours
01:30:39
◼
►
to see did I break something?
01:30:41
◼
►
Did I make some kind of critical mistake?
01:30:43
◼
►
Am I gonna lose everyone's data?
01:30:45
◼
►
Literally, I am afraid of every single release.
01:30:48
◼
►
That's just part of the way I react to these things, I guess.
01:30:51
◼
►
Part of my personality.
01:30:52
◼
►
I don't know if everyone else does this, probably.
01:30:54
◼
►
- Oh yeah, oh yeah.
01:30:55
◼
►
- But like, I'm always, every time I do a push
01:30:59
◼
►
to my servers and I sync 'em all up to the newest code base,
01:31:03
◼
►
I check frantically error logs, error rates, server load,
01:31:06
◼
►
things like that, just to see like,
01:31:08
◼
►
did I mess everything up?
01:31:09
◼
►
Did I make a mistake?
01:31:10
◼
►
Every one of these things makes me nervous
01:31:13
◼
►
every time I do it.
01:31:15
◼
►
And occasionally, I have made a mistake
01:31:17
◼
►
and that nervousness is warranted.
01:31:21
◼
►
But most of the time I haven't.
01:31:23
◼
►
But it's just part of doing this, I guess.
01:31:26
◼
►
So if you have the impression that everyone out there
01:31:30
◼
►
is an expert and they're confident in their skills
01:31:33
◼
►
and they don't question themselves, that's not reality.
01:31:37
◼
►
A lot of people out there, most people out there,
01:31:40
◼
►
are not as confident as they appear to be.
01:31:43
◼
►
They do question their skills more than zero
01:31:46
◼
►
and probably as much as you do.
01:31:48
◼
►
Except for all the pompous idiots out there.
01:31:51
◼
►
They don't question their skills,
01:31:52
◼
►
but they are the ones who should.
01:31:54
◼
►
So if you are questioning your skills,
01:31:56
◼
►
you're not being one of them, so good job.
01:31:59
◼
►
Thanks to our sponsors this week,
01:32:01
◼
►
Fracture, Linode, and Clearbank,
01:32:03
◼
►
and we will see you next week.
01:32:05
◼
►
(upbeat music)
01:32:08
◼
►
♪ Now the show is over ♪
01:32:10
◼
►
♪ They didn't even mean to begin ♪
01:32:13
◼
►
♪ 'Cause it was accidental ♪
01:32:14
◼
►
♪ Accidental ♪
01:32:15
◼
►
♪ Oh, it was accidental ♪
01:32:17
◼
►
♪ Accidental ♪
01:32:18
◼
►
♪ John didn't do any research ♪
01:32:20
◼
►
♪ Marco and Casey wouldn't let him ♪
01:32:23
◼
►
♪ 'Cause it was accidental ♪
01:32:25
◼
►
♪ Accidental ♪
01:32:26
◼
►
♪ Oh, it was accidental ♪
01:32:27
◼
►
♪ Accidental ♪
01:32:29
◼
►
♪ And you can find the show notes at ATP.FM ♪
01:32:34
◼
►
♪ And if you're into Twitter ♪
01:32:37
◼
►
♪ You can follow them at C-A-S-E-Y-L-I-S-S ♪
01:32:42
◼
►
♪ So that's Casey List M-A-R-C-O-A-R-M ♪
01:32:47
◼
►
♪ N-T Marco R ♪
01:32:49
◼
►
♪ M-N-S-I-R-A-C ♪
01:32:52
◼
►
♪ U-S-A-C-R-A-Q-S-A ♪
01:32:55
◼
►
♪ It's accidental ♪
01:32:56
◼
►
♪ Accidental ♪
01:32:58
◼
►
♪ They didn't mean to ♪
01:33:00
◼
►
♪ Accidental ♪
01:33:02
◼
►
♪ Accidental ♪
01:33:03
◼
►
♪ Tech podcast ♪
01:33:05
◼
►
♪ So long ♪
01:33:07
◼
►
- I have some cheese grater updates.
01:33:10
◼
►
- Oh! - Okay.
01:33:11
◼
►
- So this was my foray into finding electric cheese graters.
01:33:17
◼
►
Apparently all of Europe has these great electric
01:33:20
◼
►
cheese graters, you know, starting in Italy,
01:33:22
◼
►
but they're actually everywhere.
01:33:24
◼
►
So I bought one, I think I mentioned this in the show,
01:33:26
◼
►
I bought one from some German,
01:33:28
◼
►
like from Amazon Germany or something.
01:33:31
◼
►
It's like, but it looks the same as all the Italian
01:33:33
◼
►
cheese graters, it might actually be made
01:33:34
◼
►
by an Italian company, I don't know.
01:33:35
◼
►
Came in the mail, eventually, took a while to get here.
01:33:38
◼
►
And of course it's got a European plug on it,
01:33:42
◼
►
and I got an adapter to turn it into a US plug,
01:33:44
◼
►
and I put the adapter on, it's just a physical adapter,
01:33:46
◼
►
it's not a voltage or whatever,
01:33:47
◼
►
'cause I assume a lot of these power supplies,
01:33:49
◼
►
like Apple power supplies, they actually work
01:33:51
◼
►
with all the different voltages and stuff,
01:33:53
◼
►
it's just a question of physically adapting them.
01:33:55
◼
►
And this one didn't, so I physically adapted it,
01:33:57
◼
►
I plugged it in, pulled a little trigger
01:33:59
◼
►
to turn the little thing, and it went,
01:34:01
◼
►
like turned like a millimeter, but then stopped.
01:34:04
◼
►
So I'm like, all right, well this doesn't work.
01:34:05
◼
►
So I said, forget that, now I'm gonna just look
01:34:08
◼
►
at the little, what do you call it?
01:34:11
◼
►
Not transformer, whatever the hell it is,
01:34:13
◼
►
the AC/DC adapter.
01:34:15
◼
►
- Power supply.
01:34:17
◼
►
- And it was, you know, whatever,
01:34:18
◼
►
the rating was like 3.2 volts, 600 milliamps,
01:34:21
◼
►
so I'm gonna get one of those little adjustable
01:34:24
◼
►
AC/DC adapters, lets you adjust the voltage
01:34:25
◼
►
and everything with the little different tips
01:34:27
◼
►
you can put on it, you've seen those things, right?
01:34:29
◼
►
- Yeah, I think so, so you're talking about it has
01:34:31
◼
►
like one of those, it's not coax, but it's like
01:34:34
◼
►
one of those plugs that plugs into the cheese grater itself,
01:34:37
◼
►
and so, then those have different like circumferences,
01:34:40
◼
►
and so you-- - The barrel jacks.
01:34:42
◼
►
- Is that what it's called, okay.
01:34:44
◼
►
And yeah, I know what you're talking about.
01:34:45
◼
►
So you can just like crank to whatever it's expecting
01:34:47
◼
►
and then put on whatever tip it needs,
01:34:49
◼
►
and then you're in business, hopefully.
01:34:52
◼
►
- Yep, so I did that, and that arrived today,
01:34:54
◼
►
and so I turned it to match the voltage,
01:34:57
◼
►
and the amperage was within the range of the thing,
01:35:00
◼
►
and so I plugged it in, and did exactly the same thing,
01:35:03
◼
►
went, like the little cheese grater turned
01:35:05
◼
►
like a couple of millimeters, and then it just
01:35:07
◼
►
didn't go anymore, and if you pull the trigger again,
01:35:09
◼
►
maybe it'll go a little bit more.
01:35:11
◼
►
And now I'm annoyed, 'cause I'm like,
01:35:12
◼
►
well, what's your problem?
01:35:13
◼
►
'Cause this is like, it's an AC to DC adapter,
01:35:17
◼
►
and it's putting out DC exactly what you say
01:35:19
◼
►
you're supposed to, and no, I didn't get
01:35:21
◼
►
the polarity reversed, it was, you know,
01:35:22
◼
►
positive, internal, negative, external,
01:35:24
◼
►
like I did all the right things.
01:35:26
◼
►
And so that makes me think, you know what,
01:35:28
◼
►
that physical adapter actually probably did work,
01:35:30
◼
►
and maybe just this stupid grater doesn't work.
01:35:33
◼
►
So then I got angry and cranked up the voltage
01:35:35
◼
►
until it actually started turning,
01:35:37
◼
►
and then a little bit of the magic smoke might've escaped.
01:35:40
◼
►
- Oh, God. (laughing)
01:35:41
◼
►
- Not all the magic smoke, but a little bit
01:35:44
◼
►
of the magic smoke escaped, and then I was like,
01:35:45
◼
►
all right, well, let's consider this a failed experiment.
01:35:48
◼
►
So either I got a bad grater, or I cannot figure out
01:35:53
◼
►
how to get this thing to work on US power.
01:35:57
◼
►
I think I got a bad grater, because honestly,
01:36:00
◼
►
like, DC is DC, right, and if I match the voltage
01:36:03
◼
►
and current, and it still just doesn't turn,
01:36:06
◼
►
I think this is just dead, and if everything wasn't
01:36:09
◼
►
in German, I would attempt to return it
01:36:10
◼
►
and get my money back, but I'm not even gonna bother.
01:36:14
◼
►
Just chalk it up to a learning experience.
01:36:16
◼
►
Having seen one of these things in person,
01:36:17
◼
►
I feel like there's a potential for it
01:36:19
◼
►
to actually be viable and work, so I'm still interested
01:36:23
◼
►
in if anyone knows of a US product from a store
01:36:27
◼
►
that I speak the language of and can actually return things
01:36:29
◼
►
to if it doesn't work, that electrically-grit cheese
01:36:33
◼
►
that looks like these German ones.
01:36:34
◼
►
I shouldn't even ask for this, 'cause you don't know
01:36:35
◼
►
what the one I'm talking about looks like.
01:36:36
◼
►
Maybe I'll put it in the show notes,
01:36:38
◼
►
but history as a judge will probably just forget.
01:36:40
◼
►
Anyway, I'm still looking for something
01:36:43
◼
►
to grate the cheese for me, and in the meantime,
01:36:46
◼
►
my hand grater is what I'm using still.
01:36:50
◼
►
I'll probably take this one apart, by the way,
01:36:51
◼
►
to see what the heck is going on inside there,
01:36:52
◼
►
if there's something obvious wrong or whatever.
01:36:54
◼
►
- Yeah, it sounds like, based on the symptoms
01:36:58
◼
►
and the smell, I'm not an expert in this area,
01:37:01
◼
►
but I would guess that the motor can't turn.
01:37:03
◼
►
Something is jamming it from turning,
01:37:05
◼
►
and that the smell you're smelling is like the motor
01:37:08
◼
►
basically trying to burn itself out,
01:37:10
◼
►
trying to turn.
01:37:11
◼
►
- Well, it's not that it can't turn,
01:37:12
◼
►
'cause when given the proper, the quote-unquote,
01:37:16
◼
►
proper voltage and current, it turns in little bits
01:37:20
◼
►
when you pull the trigger, right?
01:37:22
◼
►
When given way too much voltage with the adjustable thing,
01:37:26
◼
►
it spun, like it went ring, and actually spun at probably
01:37:29
◼
►
what I assume is the correct maximum speed,
01:37:31
◼
►
'cause it's not supposed to spin very fast, right?
01:37:33
◼
►
It spun for a little while, and then a little bit
01:37:35
◼
►
of the magic smoke came in.
01:37:36
◼
►
So I like, the smoke was only involved
01:37:39
◼
►
when I was obviously doing bad things to it
01:37:42
◼
►
by putting too much power into it,
01:37:44
◼
►
but it did actually spin, but it makes me wonder,
01:37:47
◼
►
like, what is your problem?
01:37:47
◼
►
Like, it makes me think that it was exactly the same
01:37:50
◼
►
with the adapter that I bought and the one
01:37:53
◼
►
that I physically adapted.
01:37:54
◼
►
It makes me think that those ought to have worked.
01:37:57
◼
►
Everything, you know, they should have been getting,
01:37:59
◼
►
the behavior was so identical between them.
01:38:02
◼
►
So I just think, you know, it's screwed up in some way.
01:38:06
◼
►
I could be totally wrong.
01:38:07
◼
►
I don't even know, but I do want to take this thing apart.
01:38:09
◼
►
I was looking at how to take it apart,
01:38:10
◼
►
and it was like no visible screws,
01:38:11
◼
►
so this is gonna be fun for me.
01:38:13
◼
►
- Do you check, like, under the rubber feet,
01:38:15
◼
►
or like, they oftentimes will hide screws
01:38:17
◼
►
under rubber plugs or rubber feet?
01:38:18
◼
►
- Yeah, yeah, and I know all the usual places to look.
01:38:21
◼
►
I just didn't see anything particularly obvious.
01:38:22
◼
►
I really needed to go in there
01:38:23
◼
►
and start prying off some trim pieces,
01:38:25
◼
►
but I wasn't particularly impressed
01:38:27
◼
►
with the quality of the thing.
01:38:28
◼
►
It was cheap.
01:38:29
◼
►
I mean, I didn't buy an expensive thing.
01:38:30
◼
►
I knew this was gonna be an experiment.
01:38:31
◼
►
I think it was like 30 bucks or something like that,
01:38:33
◼
►
so maybe I'm expecting too much from it,
01:38:36
◼
►
but I'm intrigued by the design of the thing.
01:38:38
◼
►
It's basically, I don't know,
01:38:40
◼
►
I'll find a link to it if I can,
01:38:42
◼
►
and we'll put it in the show notes,
01:38:43
◼
►
and Marco will make a chapter art or something
01:38:45
◼
►
so people can look at this
01:38:46
◼
►
and know if there's anything in the US,
01:38:50
◼
►
and yes, everyone has been telling me
01:38:52
◼
►
I'm supposed to attach the thing to my stand mixer,
01:38:54
◼
►
but I haven't found a good adapter for that yet.
01:38:58
◼
►
I do have a stand mixer, and I can attach things to it,
01:39:00
◼
►
but all the little, tiny things I've seen
01:39:02
◼
►
have not had the right holes.
01:39:04
◼
►
I don't want to go through this again.
01:39:05
◼
►
Don't send me suggestions.
01:39:06
◼
►
I'm just letting the world know
01:39:08
◼
►
I'm still on the lookout.