PodSearch

ATP

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:42 ◼   ► Anyway,

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:48 ◼   ► Busy bee.

00:11:51 ◼   ► Yep.

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:01 ◼   ► (laughing)

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:07 ◼   ► (laughing)

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:22 ◼   ► (laughing)

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:01 ◼   ► - Sure.

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:27 ◼   ► (laughing)

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:38 ◼   ► - No.

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:11 ◼   ► - Yes.

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:01 ◼   ► - Oh no.

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:08 ◼   ► (laughing)

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:15 ◼   ► - Mm-hmm.

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:40 ◼   ► (laughs)

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:47 ◼   ► (laughing)

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 ◼   ► - Oh, okay.

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:53 ◼   ► - Indeed.

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:53 ◼   ► - Oh, God.

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:58 ◼   ► That's bad.

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 ◼   ► - No.

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:28 ◼   ► (laughing)

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:04 ◼   ► (laughing)

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:13 ◼   ► in life.

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:12 ◼   ► - Nope.

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:35 ◼   ► (laughing)

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:34 ◼   ► - Slightly.

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:22 ◼   ► Okay, okay.

01:23:23 ◼   ► Starcraft, who plays Starcraft?

01:23:24 ◼   ► (laughing)

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:54 ◼   ► - Hooray!

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:20 ◼   ► (laughs)

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:53 ◼   ► (laughs)

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.

01:39:09 ◼   ► (beeping)