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