PodSearch

ATP

97: You Have to Know When to Stop

 

00:00:00 ◼   ► So, uh, John, I may not talk to you before your birthday, it sounds like.

00:00:04 ◼   ► So if I don't have a happy 40th, sir.

00:00:06 ◼   ► Can we make that the beginning of the show, please?

00:00:11 ◼   ► Absolutely.

00:00:12 ◼   ► Is it a secret that you're turning 40, John?

00:00:14 ◼   ► No, I don't think so.

00:00:15 ◼   ► It's crappy though.

00:00:16 ◼   ► If we need to talk about something, I both bought my first iPad in a while and

00:00:24 ◼   ► have a new opinion on the iPad.

00:00:26 ◼   ► I also did something in a new programming language for the first time in a while.

00:00:29 ◼   ► - Okay, I am genuinely-

00:00:32 ◼   ► - Oh yeah, I saw your tweet tantrum about PHP.

00:00:35 ◼   ► - Yeah.

00:00:36 ◼   ► - Yeah, I genuinely wanna hear about this.

00:00:38 ◼   ► So let's put that in, both of them actually.

00:00:40 ◼   ► So let's put that right.

00:00:41 ◼   ► - You can even write them in the notes to remind us.

00:00:42 ◼   ► - That's exactly what I was gonna do.

00:00:44 ◼   ► - Not you, Marco.

00:00:45 ◼   ► - Well, naturally I won't do it.

00:00:47 ◼   ► - You need to.

00:00:48 ◼   ► - I'm coughing too much.

00:00:48 ◼   ► I gotta keep my hand on the mute button.

00:00:50 ◼   ► - I was coughing a little bit last night

00:00:52 ◼   ► and I was like, is it possible to catch it?

00:00:54 ◼   ► (laughing)

00:00:55 ◼   ► I blamed you like somehow you transmitted this to me

00:00:58 ◼   ► over the internet.

00:00:59 ◼   ► All right, do you wanna do some follow-up?

00:01:02 ◼   ► - Do we have any follow-ups

00:01:02 ◼   ► since we last recorded two days ago?

00:01:04 ◼   ► We should point out also, we are recording this show

00:01:06 ◼   ► almost a week in advance

00:01:08 ◼   ► of when it's going to likely be released.

00:01:10 ◼   ► So please pardon us if anything we say is out of date

00:01:12 ◼   ► or if we miss some giant news that for some reason happens

00:01:15 ◼   ► during Christmas week.

00:01:17 ◼   ► - And the last episode was just released,

00:01:18 ◼   ► what, yesterday, right?

00:01:19 ◼   ► So we've only had like one day to accumulate follow-up,

00:01:23 ◼   ► but we got two items.

00:01:25 ◼   ► All right, so the first one is from S. Mike Lewis,

00:01:28 ◼   ► unless that S is his typo and his name is actually Mike Lewis.

00:01:31 ◼   ► - Maybe his name is Smike Lewis.

00:01:33 ◼   ► - Yeah, could be.

00:01:34 ◼   ► The Super Mikey on Twitter.

00:01:36 ◼   ► He pointed us to an article from the summer actually,

00:01:40 ◼   ► and I remember we were hearing about this at the time,

00:01:42 ◼   ► that Google is going to start taking HTTPS

00:01:45 ◼   ► into account for their search ranking.

00:01:47 ◼   ► So they will give you a slightly higher rank

00:01:49 ◼   ► if your site is SSL.

00:01:51 ◼   ► They said it's not gonna be a big boost

00:01:53 ◼   ► and it should only affect fewer than 1% of global queries.

00:01:57 ◼   ► But they're trying to encourage sites to switch from HTTP to HTTPS, and this is exactly what we're talking about last show about

00:02:03 ◼   ► Marking things as secure insecure

00:02:07 ◼   ► for customers instead I was

00:02:10 ◼   ► Suggesting that they need to work on the people who own the websites and the best way to do that

00:02:14 ◼   ► This is a great way to do that to hit him where it hurts

00:02:16 ◼   ► Hey, we will ever so slightly hurt your search ranking if you don't use HTTPS so suddenly

00:02:21 ◼   ► Having a secure server becomes something that every SEO person says oh, you just got to do that you get that extra

00:02:27 ◼   ► extra whatever percent boost and anyway.

00:02:30 ◼   ► Yeah, this is a using their power for good

00:02:33 ◼   ► instead of evil, I think.

00:02:34 ◼   ► - The best part is, you don't actually,

00:02:38 ◼   ► like they don't have to actually ever change it.

00:02:40 ◼   ► All they have to do is say,

00:02:41 ◼   ► we will probably change it starting on this date.

00:02:44 ◼   ► And then, 'cause SEO is all based on, you know,

00:02:46 ◼   ► some evidence and mostly like intuition and guessing

00:02:51 ◼   ► and outdated information and all sorts of like,

00:02:54 ◼   ► you know, voodoo and BS that is common wisdom

00:02:58 ◼   ► or everything else.

00:02:58 ◼   ► So yeah, they don't have to actually

00:03:02 ◼   ► de-rank or plus rank anything.

00:03:04 ◼   ► They just have to say they will and that's enough.

00:03:06 ◼   ► - And they said it's gonna be like a lightweight thing.

00:03:08 ◼   ► These are these quotes from them.

00:03:10 ◼   ► Less weight than other signals such as high quality content

00:03:13 ◼   ► in terms of the search ranking.

00:03:14 ◼   ► But they also said they may decide to strengthen the signal

00:03:17 ◼   ► because they want to encourage a website.

00:03:18 ◼   ► You know, so they're threatening to like this,

00:03:20 ◼   ► oh, it's only gonna be a small effect.

00:03:21 ◼   ► You know, that's to not scare people who, you know,

00:03:24 ◼   ► are worried that they need to get a cell right now,

00:03:25 ◼   ► but they said, "But we may decide to strike them."

00:03:27 ◼   ► I mean, they can do whatever they want.

00:03:28 ◼   ► Like they could change their search algorithm

00:03:31 ◼   ► to favor whatever the hell they want.

00:03:32 ◼   ► And if it doesn't work for customers, that'll be bad.

00:03:34 ◼   ► But website owners will do whatever it takes

00:03:36 ◼   ► because Google is still pretty much

00:03:38 ◼   ► the only important game in town

00:03:39 ◼   ► when it comes to website search.

00:03:41 ◼   ► - Hey, so let me ask a genuine question.

00:03:44 ◼   ► For a website like mine or either of yours

00:03:46 ◼   ► where there's no interactivity,

00:03:48 ◼   ► it's just a series of pages

00:03:51 ◼   ► and there's no forms or anything like that,

00:03:53 ◼   ► What's the advantage of going secure?

00:03:55 ◼   ► What is gonna get snooped?

00:03:57 ◼   ► - Well, there are a handful of privacy advantages to it.

00:04:02 ◼   ► I think one of the biggest, is it still the case,

00:04:04 ◼   ► chat room, that HTTPS pages don't serve referrers

00:04:07 ◼   ► when you link out of them or into them?

00:04:09 ◼   ► I forget, I think there's no referrer data,

00:04:11 ◼   ► which is annoying for analytics packages,

00:04:14 ◼   ► but I don't know if that's out of date.

00:04:15 ◼   ► But anyway, I think it's mostly,

00:04:19 ◼   ► there are some benefits here,

00:04:20 ◼   ► But for pure content sites like blogs and everything,

00:04:24 ◼   ► I think the benefit is pretty small.

00:04:27 ◼   ► - Right, that's what I thought.

00:04:28 ◼   ► - Yeah, I probably wouldn't do it.

00:04:30 ◼   ► Even if they say, oh, your search ranking's

00:04:32 ◼   ► gonna go down by whatever.

00:04:33 ◼   ► I mean, well, it's kind of unfair for my thing

00:04:35 ◼   ► 'cause no one reads my site and it's small.

00:04:38 ◼   ► But like Casey said, there's nothing,

00:04:41 ◼   ► there's no login, there's no authentication,

00:04:43 ◼   ► there's no cookies on my site,

00:04:44 ◼   ► there's nothing related to my site

00:04:46 ◼   ► that would need to be kept from prying eyes.

00:04:50 ◼   ► So I probably wouldn't go SSL but that's mostly because it's kind of a hassle and usually cost money and there

00:04:57 ◼   ► I mentioned last show about the EFF electronic frontier foundations plan to give away

00:05:02 ◼   ► free SSL certificates to anybody who wants them to try to encourage more people to

00:05:07 ◼   ► Have certificates and this is other site unless it's the same exact one. I don't think it is like again two days for the

00:05:15 ◼   ► I haven't a chance to look at this stuff, but a couple people said that it's let's encrypt org

00:05:19 ◼   ► And the tagline says here lets encrypt is a new certificate Authority. It's free automated and open arriving summer 2015

00:05:25 ◼   ► Well, it brush says brought to you by EFF. Maybe it is that thing that I was talking about anyway if

00:05:31 ◼   ► SSL certificates were free and slightly less hassle

00:05:35 ◼   ► I probably would do it because what the hell like I can set it up, you know

00:05:38 ◼   ► And and I would probably redirect people days to DPS like why not?

00:05:41 ◼   ► You know, why not get the free tiny Google boost? Why not make people feel slightly better?

00:05:46 ◼   ► The only reason why not is because it's expensive in a hassle

00:05:49 ◼   ► And hopefully if they could reduce those down to about the same hassle as you know

00:05:53 ◼   ► Just having a hosting account at all then I'd probably do it

00:05:56 ◼   ► on some level I do kind of

00:05:59 ◼   ► I'm a little skeptical about the possible effect this might have on

00:06:04 ◼   ► Smaller self hosted sites because it's it's now like, you know

00:06:08 ◼   ► If it wasn't a hard enough battle

00:06:10 ◼   ► to be a self-run, self-owned site,

00:06:13 ◼   ► now you have to deal with, oh, if you don't have SSL,

00:06:16 ◼   ► you're not ranking with the big kids anymore.

00:06:18 ◼   ► So now, I feel like in a small way,

00:06:22 ◼   ► maybe not a huge way, but in a small way,

00:06:24 ◼   ► this is going to reinforce the mediums of the world

00:06:29 ◼   ► and make it that much harder for so many people out there

00:06:33 ◼   ► to have an independent presence on the web.

00:06:35 ◼   ► - Well, don't you think it'll just raise the bar?

00:06:37 ◼   ► then hosting providers like the various WordPress blog hosting

00:06:41 ◼   ► services and Squarespace and stuff, they'll just say, OK,

00:06:44 ◼   ► well, if that's where the bar is now,

00:06:46 ◼   ► then we basically have to-- kind of like how Squarespace

00:06:48 ◼   ► or whatever will give you a free domain name and stuff.

00:06:51 ◼   ► That didn't used to be the bar.

00:06:52 ◼   ► You could just have marker-armament.editthispage.com,

00:06:55 ◼   ► and that felt fine.

00:06:55 ◼   ► But it's like, oh, no, I've got to have my own domain.

00:06:57 ◼   ► And now the hosting provider said, all right,

00:06:59 ◼   ► if that's where the bar is now, we'll give you a domain

00:07:01 ◼   ► with your hosting purchase.

00:07:03 ◼   ► And we'll set it up for you, and it's all right.

00:07:05 ◼   ► well, if SSL is a thing, we'll set that up for you.

00:07:07 ◼   ► Like there's no reason they can't automate

00:07:09 ◼   ► going through this, you know,

00:07:10 ◼   ► let's encrypt.org or whatever.

00:07:12 ◼   ► And just, it makes it harder to be a full featured

00:07:16 ◼   ► hosting provider that provides everything we want.

00:07:17 ◼   ► But I think kind of raising the bar for the entire web

00:07:20 ◼   ► is the whole point of this.

00:07:21 ◼   ► So I don't think it'll be that bad.

00:07:23 ◼   ► - All right.

00:07:24 ◼   ► So any other follow-up about perhaps Google Authenticator?

00:07:29 ◼   ► - Yeah, this is about them putting the space

00:07:31 ◼   ► between the six digit number.

00:07:32 ◼   ► A couple of people asked, I didn't mention this,

00:07:35 ◼   ► but it's worth addressing because people have this question.

00:07:38 ◼   ► What if they put a space between the three digit numbers?

00:07:41 ◼   ► And the answer to that is it shouldn't matter

00:07:45 ◼   ► because that's another example of like, say,

00:07:48 ◼   ► if you're doing some simple task

00:07:51 ◼   ► and you ask yourself for even a moment,

00:07:54 ◼   ► what about this simple task?

00:07:56 ◼   ► What things about the simple task do I look at

00:07:59 ◼   ► to decide whether I did a good job on it?

00:08:00 ◼   ► And there's usually very few things.

00:08:02 ◼   ► And so if the thing you're doing is showing a number,

00:08:04 ◼   ► One of the things you could think about is,

00:08:05 ◼   ► hey, it's kind of hard to transcribe a six digit number,

00:08:08 ◼   ► let me split it up.

00:08:09 ◼   ► Another thing you might think about,

00:08:10 ◼   ► if you have a text field

00:08:12 ◼   ► that's accepting a six digit number,

00:08:14 ◼   ► don't worry about spaces.

00:08:17 ◼   ► Like get rid of the spaces.

00:08:18 ◼   ► You know, this is like perhaps the oldest frustration

00:08:20 ◼   ► of web developers in the entire web,

00:08:22 ◼   ► of the old websites that want you to enter

00:08:24 ◼   ► a telephone number, a credit card number, anything.

00:08:26 ◼   ► And they're like, please enter digits only,

00:08:28 ◼   ► no hyphens, no parentheses.

00:08:30 ◼   ► - You must use this format.

00:08:32 ◼   ► - Right, if you know the here,

00:08:33 ◼   ► or like dates, date parsing is a little harder,

00:08:36 ◼   ► but credit card numbers and phone numbers are the worst.

00:08:37 ◼   ► It's like perhaps the simplest programming task possible

00:08:41 ◼   ► to strip everything except digits.

00:08:43 ◼   ► And it's inexcusable, both on the client side

00:08:46 ◼   ► and the server side, not to do that.

00:08:47 ◼   ► So any web form that tells you write digits only here,

00:08:50 ◼   ► like immediately you just think that entire website

00:08:52 ◼   ► and everyone who made it is terrible

00:08:54 ◼   ► and there's no excuse for that.

00:08:55 ◼   ► - So wait, which do you think is worse

00:08:57 ◼   ► out of these three options?

00:08:59 ◼   ► That, so like a numeric field that requires

00:09:02 ◼   ► a certain format, otherwise it'll reject it.

00:09:04 ◼   ► - The ones that don't let you type numbers?

00:09:05 ◼   ► Is that the next one?

00:09:06 ◼   ► - Or a reset button on a form.

00:09:09 ◼   ► - Oh, I haven't seen those in years.

00:09:11 ◼   ► - Or a checkbox that does not have a label set

00:09:15 ◼   ► so that you can't just click the label,

00:09:17 ◼   ► you have to click the actual checkbox.

00:09:18 ◼   ► - Browsers used to do that.

00:09:19 ◼   ► Did you know back in the olden days,

00:09:21 ◼   ► even if you did the label for ID, whatever,

00:09:24 ◼   ► so on and so forth, it still wouldn't work.

00:09:26 ◼   ► That was actually, I remember,

00:09:28 ◼   ► preferring, I don't remember which one it was this,

00:09:30 ◼   ► I remember preferring one browser or another

00:09:31 ◼   ► because one browser did let you click the label

00:09:33 ◼   ► and the other one didn't, you know, with the same markup.

00:09:36 ◼   ► - Did you lose it in all your windows?

00:09:38 ◼   ► - Yeah, I think that, no.

00:09:39 ◼   ► I think the one you didn't list is like

00:09:42 ◼   ► where it's a numeric field and either it beeps

00:09:45 ◼   ► or puts up an alert or just simply doesn't,

00:09:47 ◼   ► or like back auto backspaces for you

00:09:49 ◼   ► when you type anything that's not a letter.

00:09:50 ◼   ► You ever see those?

00:09:51 ◼   ► - Yeah. - No, I haven't seen that.

00:09:53 ◼   ► - My favorite is when you're starting to type a phone number

00:09:55 ◼   ► and there's just a blank field.

00:09:58 ◼   ► And as you start typing, suddenly a parenthesis appears

00:10:01 ◼   ► and as you continue to type hyphens appear

00:10:03 ◼   ► or even better yet actually

00:10:06 ◼   ► is automatic tabbing between fields.

00:10:09 ◼   ► - Yeah, when you get to the end of the field

00:10:10 ◼   ► jumps to the other one, yeah.

00:10:11 ◼   ► - Uh-huh, oh, it drives me nuts.

00:10:14 ◼   ► - Right, and like if you made a mistake

00:10:15 ◼   ► you can't backspace into the other one.

00:10:17 ◼   ► - Oh, it drives me crazy.

00:10:18 ◼   ► - People think they're being clever with this,

00:10:19 ◼   ► but all those things are hostile.

00:10:22 ◼   ► At least the ones that are active

00:10:23 ◼   ► show that someone thought about it.

00:10:24 ◼   ► They made bad choices, but they thought about it.

00:10:26 ◼   ► But the worst are the ones that things are so aggressive

00:10:29 ◼   ► that they're yelling at you for entering incorrect data

00:10:32 ◼   ► when it's like, just remove things that aren't numbers.

00:10:34 ◼   ► So I haven't even tested this,

00:10:36 ◼   ► but I just assume that every place you can type in

00:10:38 ◼   ► a Google Authenticator number thing,

00:10:41 ◼   ► you can put spaces in it, doesn't matter.

00:10:42 ◼   ► 'Cause if that's not true,

00:10:44 ◼   ► then those applications needs to be burned to the ground.

00:10:46 ◼   ► And I'm assuming it is true because that's just,

00:10:48 ◼   ► that's like 101, web 101 stuff.

00:10:51 ◼   ► So that's why I'm not worried about people typing the space

00:10:54 ◼   ► because they should be allowed to type the space.

00:10:55 ◼   ► It shouldn't be a big deal.

00:10:57 ◼   ► - All right, why don't you tell us about something

00:10:59 ◼   ► that's cool, Marco?

00:11:00 ◼   ► - I would love to.

00:11:01 ◼   ► It's our friends, once again, @backblaze,

00:11:05 ◼   ► or maybe you pronounce it,

00:11:07 ◼   ► it's probably pronounced backblaze.

00:11:08 ◼   ► Yeah, I'm pretty sure it's backblaze.

00:11:09 ◼   ► All right, backblaze is unlimited, unthrottled,

00:11:13 ◼   ► online backup for $5 a month.

00:11:15 ◼   ► Really truly unlimited disk space,

00:11:18 ◼   ► and unthrottled meaning they will take your files

00:11:20 ◼   ► as fast as you're willing to upload them.

00:11:22 ◼   ► Truly five bucks a month for unlimited space,

00:11:25 ◼   ► per computer of course,

00:11:26 ◼   ► I gotta set a limit somewhere, so it's per computer.

00:11:28 ◼   ► So really, Backblaze is awesome.

00:11:31 ◼   ► They have iOS and Android apps,

00:11:33 ◼   ► you can access your files when you're on the go,

00:11:35 ◼   ► you can restore files individually,

00:11:37 ◼   ► or of course the whole thing,

00:11:39 ◼   ► they'll do all the options like mail you a hard drive

00:11:41 ◼   ► or something, you can restore a whole lot of files.

00:11:43 ◼   ► Backblaze was founded by ex-Apple engineers,

00:11:46 ◼   ► and so they respect the Mac as a platform.

00:11:48 ◼   ► And so their app runs in native code.

00:11:51 ◼   ► This is not a Java app, this is not some kind of weird flash

00:11:54 ◼   ► or any other kind of runtime.

00:11:56 ◼   ► It is a real native Mac app,

00:11:58 ◼   ► runs great on every version of Mac OS

00:12:00 ◼   ► that I've had in the last, I don't know,

00:12:02 ◼   ► four years that I've been a customer, something like that.

00:12:04 ◼   ► Including on day one, Yosemite, they were there.

00:12:08 ◼   ► There's no add-ons, there's no gimmicks,

00:12:09 ◼   ► there's no additional charges.

00:12:10 ◼   ► Really, this is truly it.

00:12:11 ◼   ► $5 a month per computer for unlimited, unthrottled backup.

00:12:16 ◼   ► And it's just so simple.

00:12:18 ◼   ► Let me tell you, I mean, Backblaze,

00:12:20 ◼   ► again, I've been a customer of them

00:12:22 ◼   ► since long before they sponsored the show,

00:12:23 ◼   ► since before we even started the show.

00:12:25 ◼   ► and I've tried other online backup solutions.

00:12:28 ◼   ► Backplace is by far my favorite.

00:12:30 ◼   ► And let me tell you,

00:12:31 ◼   ► if you don't have an online backup solution,

00:12:33 ◼   ► right now, we're gonna release this during the holiday week,

00:12:35 ◼   ► I think, you should really consider giving this

00:12:39 ◼   ► to your family if they don't have online backup.

00:12:41 ◼   ► If you're visiting family over this break,

00:12:44 ◼   ► for God's sake, install online backup.

00:12:46 ◼   ► It is so easy, it's so inexpensive,

00:12:49 ◼   ► and it can save you from a world of trouble.

00:12:50 ◼   ► Like back when Apple introduced Time Machine,

00:12:53 ◼   ► probably all of us nerds had the idea,

00:12:54 ◼   ► oh, we'll go visit our parents

00:12:55 ◼   ► and we'll set up a time machine drive,

00:12:57 ◼   ► and maybe some of us actually did that.

00:12:59 ◼   ► But there's so many possible issues with that.

00:13:02 ◼   ► Backblaze is automatic,

00:13:04 ◼   ► and it doesn't matter what happens in your house,

00:13:06 ◼   ► or what happens to your electricity supply,

00:13:08 ◼   ► or what happens to a single hard drive

00:13:11 ◼   ► sitting on your desk

00:13:12 ◼   ► that you may or may not remember to plug in.

00:13:14 ◼   ► It is just automatic.

00:13:15 ◼   ► It even emails you periodically to say,

00:13:17 ◼   ► hey, just so you know, here's our current backup status.

00:13:20 ◼   ► If it doesn't see you for a while,

00:13:22 ◼   ► it'll email you and say,

00:13:23 ◼   ► hey, you know what?

00:13:23 ◼   ► haven't seen this computer or this disk connected to it in a while. It'll back up

00:13:27 ◼   ► all your drives that are connected to your computer external, internal, whatever

00:13:30 ◼   ► you want to back up, it'll back that up. Really it is the simplest online backup

00:13:35 ◼   ► program to use. Just install it and it does the rest. Go to backblaze.com/ATP

00:13:40 ◼   ► to learn more. That is backblaze.com/ATP. Unlimited, unthrottled, online backup for

00:13:46 ◼   ► just five bucks a month. I use it, my wife uses it, we put it on my mom's computer,

00:13:50 ◼   ► she uses it, my whole family uses it, it is amazing and I highly recommend them.

00:13:54 ◼   ► Thanks a lot to Backblaze for sponsoring.

00:13:56 ◼   ► People ask about this sometimes.

00:13:57 ◼   ► You can make Backblaze backup anything you want.

00:14:00 ◼   ► I don't know if this is supported, so I'm not going to say that Backblaze recommends

00:14:03 ◼   ► this or there's a...

00:14:04 ◼   ► But it's just an XML file that says which file should be included or excluded.

00:14:07 ◼   ► And you can just edit that XML file.

00:14:09 ◼   ► So if there are people, a lot of listeners out there who are like, "I don't want to get

00:14:12 ◼   ► Backblaze because I heard it doesn't backup X."

00:14:14 ◼   ► As of right now and as of the entire history of Backblaze, you can make it backup anything.

00:14:18 ◼   ► I have my thing back up user local for me.

00:14:19 ◼   ► I have a backup slash applications.

00:14:21 ◼   ► I have a backup tons of stuff that by default it doesn't do

00:14:24 ◼   ► and will, it's sort of hard coded to exclude.

00:14:27 ◼   ► It's not hard coded in the sense that you can't change it.

00:14:29 ◼   ► It's hard coded and it's not visible in the GUI.

00:14:31 ◼   ► But if you just go to the XML file and edit it, you can.

00:14:33 ◼   ► - Well it also, and the UI has added options over the years.

00:14:36 ◼   ► Like there used to be I think a five gig file limit,

00:14:39 ◼   ► something like that, eight gig maybe.

00:14:40 ◼   ► - You could change that too.

00:14:41 ◼   ► Even when that was the limit, you could just go change that.

00:14:44 ◼   ► - Right, but now that's even in the GUI.

00:14:46 ◼   ► Now you can even set that to unlimited if you want to.

00:14:49 ◼   ► So you were complaining about PHP recently,

00:14:53 ◼   ► which in and of itself is not terribly remarkable,

00:14:57 ◼   ► but you were complaining with a vigor and an angst that I don't

00:15:02 ◼   ► recall having seen from you in a long time. And I was curious,

00:15:07 ◼   ► what was the issue if you can share and have you tried anything different or

00:15:12 ◼   ► you still just stuck in PHP hell?

00:15:14 ◼   ► So remember when the Poodle attack was coming around?

00:15:18 ◼   ► Mm-hmm. The Poodle attack was, for those of you who missed it, it was basically one of the many SSL shortcomings and vulnerabilities discovered in the past year.

00:15:27 ◼   ► And it basically completely breaks SSL v3

00:15:31 ◼   ► So that you you really should disable SSL 3 and force people to use TLS. That's the gross overview

00:15:39 ◼   ► Please, you know research it if you want more details than that. It's called Poodle. Anyway, the problem I had

00:15:44 ◼   ► which I discovered last night when somebody kept tweeting at me saying, "Hey, my podcast

00:15:49 ◼   ► feed doesn't work in Overcast. It's not getting updates." And they had recently upgraded

00:15:54 ◼   ► their SSL cipher suite and they are serving a podcast feed over SSL because they wanted

00:16:00 ◼   ► to go all SSL. So, you know, as we were saying ten minutes ago, that makes some sense. Anyway,

00:16:04 ◼   ► I discovered through this that my PHP feed crawlers, which are using libcurl and which

00:16:11 ◼   ► itself uses OpenSSL somewhere along the line,

00:16:14 ◼   ► basically refused to use anything but SSLv3

00:16:19 ◼   ► and seemed to be totally ignoring any configuration flags

00:16:23 ◼   ► I passed them to the contrary.

00:16:25 ◼   ► And doing some quick searching around the web last night

00:16:28 ◼   ► and trying to fix this problem,

00:16:29 ◼   ► I discovered there's actually quite a lot of people

00:16:31 ◼   ► complaining about this problem that,

00:16:32 ◼   ► like whatever they're doing with their PHP apps

00:16:35 ◼   ► that are using cURL to crawl something,

00:16:38 ◼   ► they keep breaking under sites that have disabled SSLv3.

00:16:41 ◼   ► which is really obnoxious and basically there is no good fix yet that I can find.

00:16:47 ◼   ► I'm hoping to find at least a crappy fix in the meantime, but right now there's basically

00:16:51 ◼   ► no good fix.

00:16:52 ◼   ► Like I basically can't make this work.

00:16:54 ◼   ► This is not the first problem I've had with PHP's version of SSL as curl using it being

00:17:00 ◼   ► totally out of date and being a problem like this.

00:17:03 ◼   ► Secondarily, so Overcast right now crawls something along the lines of 240,000 RSS feeds

00:17:09 ◼   ► every few minutes.

00:17:12 ◼   ► And so it's doing a lot of crawling of these feeds.

00:17:16 ◼   ► And it does the basic web stuff to hopefully get a 304 response with most fetches, but

00:17:22 ◼   ► obviously, it's still doing a whole lot of network requests, and then a whole lot of

00:17:26 ◼   ► feeds come back.

00:17:28 ◼   ► And then I do basic MD5 checking to see if this is actually changed, and then decode

00:17:34 ◼   ► all the XML and do everything there and so on.

00:17:38 ◼   ► The feed crawlers are by far the vast majority of the cost of running Overcast.

00:17:47 ◼   ► They take up almost all the server resources, almost all the RAM, almost all the CPU power

00:17:52 ◼   ► on all the servers.

00:17:53 ◼   ► It's almost all being taken up by feed crawling.

00:17:56 ◼   ► The actual serving of the application and doing the sync request and everything is almost

00:18:01 ◼   ► nothing.

00:18:02 ◼   ► It's nothing on the servers at all.

00:18:05 ◼   ► This is all doing feed crawling.

00:18:07 ◼   ► To try to solve both of these problems at once, I did an experiment last night.

00:18:10 ◼   ► I tried writing a basic feed puller in Node.

00:18:15 ◼   ► What?

00:18:16 ◼   ► The main problem I have with this feed crawling problem with PHP, you know, PHP is single-threaded.

00:18:24 ◼   ► It's single-process, single-threaded.

00:18:26 ◼   ► The crawlers all run as background tasks like terminal tasks being run by supervisor, which

00:18:33 ◼   ► is a great little Python thing, supervisor D.

00:18:36 ◼   ► So it's all being run by that and then Beanstalk queue manages the whole thing.

00:18:40 ◼   ► So the Beanstalk queue has all these tasks and then these PHP queue processing processes

00:18:45 ◼   ► basically are there popping stuff off the Beanstalk queue and then re-encode or then

00:18:49 ◼   ► re-enqueue things when it's done.

00:18:51 ◼   ► Right now this is running something along the lines of 240 processes simultaneously

00:18:55 ◼   ► across I think seven VPS's, seven line instances.

00:18:59 ◼   ► So roughly 240 simultaneous consumers making this happen and that's you know crushing these

00:19:05 ◼   ► servers and taking up so much RAM and it's it's just really really obnoxious

00:19:10 ◼   ► and if this was the best way to do it I would just suck it up and just deal with

00:19:14 ◼   ► the cost accordingly and deal with all that complexity accordingly but I

00:19:18 ◼   ► decided you know what maybe PHP is not the best tool for this job why is it

00:19:23 ◼   ► taking up so much RAM and why do you need seven machines to have 240 processes

00:19:26 ◼   ► like how big are these processes I off the top of my head I don't know I think

00:19:30 ◼   ► there's something like 40 or 50 megs each something like that but it's you

00:19:34 ◼   ► I think it's under 100, but still.

00:19:36 ◼   ► - But the math isn't working out.

00:19:38 ◼   ► So why can't you have 240, 50 meg processes on one machine?

00:19:42 ◼   ► - How extreme is that?

00:19:43 ◼   ► - Not a lot, and it should be even less,

00:19:45 ◼   ► because if you're forking, all the memory

00:19:47 ◼   ► from the parent process is shared,

00:19:49 ◼   ► and the only thing that's different is the pages you dirty

00:19:51 ◼   ► during the child process is doing its work, right?

00:19:55 ◼   ► - I'm not doing a fork situation here.

00:19:57 ◼   ► Maybe I should be, maybe I'll look into that.

00:19:59 ◼   ► Right now, it's literally just running independent processes.

00:20:02 ◼   ► - All right, all right, go ahead, go ahead.

00:20:03 ◼   ► So anyway, I, so and this is just, you know,

00:20:08 ◼   ► it's crushing the CPUs in the machine.

00:20:10 ◼   ► CPU seems to be the main limiting factor here, not RAM.

00:20:14 ◼   ► RAM prevents me from running too many of them

00:20:16 ◼   ► on one box economically, but it seems like CPU power

00:20:20 ◼   ► is my main limiting factor here.

00:20:22 ◼   ► And I don't, honestly I haven't looked into exactly

00:20:25 ◼   ► like what the most, you know, the single biggest function is

00:20:28 ◼   ► 'cause PHP is notoriously very hard to profile.

00:20:30 ◼   ► - There's no PHP profile, not even with the

00:20:33 ◼   ► Facebook thing?

00:20:34 ◼   ► - There is one.

00:20:35 ◼   ► There are actually a couple of profilers,

00:20:38 ◼   ► but they all kind of suck in different ways

00:20:39 ◼   ► and they're hard to run in production.

00:20:41 ◼   ► Yeah, it's kind of a mess, the whole situation with PHP

00:20:44 ◼   ► and profiling and debugging.

00:20:46 ◼   ► Anyway, which is itself a problem, but anyway.

00:20:49 ◼   ► So what I really wanted here was some kind of parallelism

00:20:52 ◼   ► that was not just process parallelism.

00:20:54 ◼   ► There's no reason I need to have a process sitting there,

00:20:58 ◼   ► taking up RAM, taking up all the OS overhead

00:21:02 ◼   ► of having another process to just be sitting there

00:21:04 ◼   ► waiting for each feed individually that it's processing.

00:21:09 ◼   ► Now, you can do, the one way you can do parallelism in PHP

00:21:13 ◼   ► is you can do curl multi.

00:21:15 ◼   ► And I actually, a while ago, I wrote the feed crawler

00:21:19 ◼   ► to do this and it's a mess.

00:21:22 ◼   ► It is really not a good implementation.

00:21:25 ◼   ► That is the one thing PHP can do multiple times,

00:21:28 ◼   ► multiple things at once is you can execute

00:21:31 ◼   ► a multi-handled cURL resource together at once.

00:21:35 ◼   ► But there's so many issues with that.

00:21:36 ◼   ► And the main reason is that it's incredibly inefficient

00:21:39 ◼   ► because you can't provide a constant pipeline,

00:21:42 ◼   ► a constant queue saying, okay, as soon as you finish one,

00:21:46 ◼   ► add one from this list to it.

00:21:47 ◼   ► You have to queue up 10, run through all 10,

00:21:51 ◼   ► the slowest one will block everything else.

00:21:54 ◼   ► And then once you've finished all 10,

00:21:56 ◼   ► then I can give you more things to do.

00:21:58 ◼   ► So there's just a whole bunch of little problems.

00:22:00 ◼   ► like PHP again is really not the best tool for this job.

00:22:03 ◼   ► I heard Node was good at this stuff

00:22:05 ◼   ► and the reason I started looking into Node

00:22:07 ◼   ► was because two reasons.

00:22:09 ◼   ► Number one, this GitHub camo project,

00:22:13 ◼   ► the Atmos camo project that I mentioned last week

00:22:16 ◼   ► to do an SSL proxy for serving big files,

00:22:18 ◼   ► that's written in Node and I figured I want to at least

00:22:21 ◼   ► look into what it takes to host this

00:22:22 ◼   ► if I wanted to host it myself

00:22:23 ◼   ► because I can do it on Heroku

00:22:25 ◼   ► but it's probably gonna be really expensive

00:22:26 ◼   ► and so yeah, I wanna look into what it takes to host it.

00:22:29 ◼   ► Also, secondarily, I'm a huge fan of the event-driven

00:22:34 ◼   ► parallelism kind of model.

00:22:36 ◼   ► I like that a lot, I've seen it work a lot.

00:22:39 ◼   ► Almost every good web tool these days

00:22:42 ◼   ► that scales really well is the event-driven model.

00:22:46 ◼   ► If you look at Memcache, look at Nginx,

00:22:48 ◼   ► obviously Node itself, this is really a very good model.

00:22:51 ◼   ► And it's very practical for hosting big things like this

00:22:53 ◼   ► because you're able to make very, very good use

00:22:56 ◼   ► of server resources without risking overrunning them too much.

00:23:01 ◼   ► I decided, let me see how,

00:23:03 ◼   ► like I already know JavaScript a little bit.

00:23:06 ◼   ► I'm not a JavaScript expert by any means.

00:23:08 ◼   ► The whole thing people do these days

00:23:09 ◼   ► with all like the crazy prototype stuff

00:23:11 ◼   ► and try to force an object system onto JavaScript,

00:23:14 ◼   ► I think is as clunky as crap.

00:23:16 ◼   ► - That's more than these days, but yeah.

00:23:17 ◼   ► - I know, I know, okay, thanks.

00:23:19 ◼   ► (laughing)

00:23:20 ◼   ► I know Opera did it in the '70s,

00:23:21 ◼   ► but it's a terrible language for many things,

00:23:24 ◼   ► but I wanted to try Node.

00:23:26 ◼   ► And one thing, this sounds really stupid.

00:23:28 ◼   ► When I installed Node on, you know, brew install Node,

00:23:31 ◼   ► huh, that was easy.

00:23:33 ◼   ► And then I did a little, you know,

00:23:36 ◼   ► console.log hello world.

00:23:38 ◼   ► I didn't even know that console.log existed in Node,

00:23:41 ◼   ► I just knew it from browsers, let me see if it exists.

00:23:44 ◼   ► And I did that and I ran it from the command line

00:23:47 ◼   ► and just running that program on the command line

00:23:53 ◼   ► was so frickin' fast, that is faster than PHP.

00:23:56 ◼   ► If you do Hello World in PHP,

00:23:58 ◼   ► it loads the whole interpreter, and it's not,

00:24:01 ◼   ► I wouldn't describe PHP as slow before I tried this,

00:24:05 ◼   ► but once I saw that, I immediately recognized,

00:24:08 ◼   ► oh my god, this is a different level of speed.

00:24:10 ◼   ► This is insane how fast, how quickly

00:24:13 ◼   ► that Hello World thing just launched and ran.

00:24:15 ◼   ► And again, I know that's a stupid way to measure things,

00:24:18 ◼   ► but it was noticeable.

00:24:20 ◼   ► after using PHP for years, believe me, that's noticeable.

00:24:23 ◼   ► - Let me interrupt you right there

00:24:24 ◼   ► 'cause I have a related story

00:24:25 ◼   ► that I think you'll get a kick out of.

00:24:26 ◼   ► - Sure, yeah.

00:24:27 ◼   ► - When I was living in Austin, when I was in middle school,

00:24:30 ◼   ► my dad and I wanted to buy a new computer

00:24:32 ◼   ► and I don't recall what we had at the time,

00:24:34 ◼   ► but living in Austin,

00:24:35 ◼   ► we decided to go to the one and only Dell store.

00:24:38 ◼   ► And I believe at the time,

00:24:40 ◼   ► what we were looking to get was a Pentium Pro.

00:24:43 ◼   ► - Nice.

00:24:44 ◼   ► - And I will never forget going in to the Dell outlet store

00:24:49 ◼   ► And the way we benchmarked all of the computers

00:24:52 ◼   ► they had on display was watching them deal solitaire hands.

00:24:56 ◼   ► (laughing)

00:24:58 ◼   ► Because the ones that were really quick

00:25:00 ◼   ► at dealing solitaire at the time,

00:25:03 ◼   ► as far as I knew, that was a CPU bound operation.

00:25:06 ◼   ► And so those that dealt the solitaire hands

00:25:08 ◼   ► really, really fast,

00:25:09 ◼   ► you knew that was a computer you wanted.

00:25:11 ◼   ► And sure enough, the Pentium Pro dealt those things.

00:25:13 ◼   ► It was so fast.

00:25:15 ◼   ► Dude, I couldn't even see it.

00:25:17 ◼   ► It was so fast.

00:25:18 ◼   ► It was amazing.

00:25:19 ◼   ► - That's awesome.

00:25:20 ◼   ► - So I know what you mean.

00:25:21 ◼   ► - Yeah, so anyway, so I decide, you know what,

00:25:24 ◼   ► let me just see, you know, I really don't wanna have to go

00:25:27 ◼   ► and rewrite the entire feed parser,

00:25:30 ◼   ► the entire feed handler, the decoder,

00:25:32 ◼   ► how it normalizes everything, how it puts it in my database,

00:25:34 ◼   ► how it, you know, like I parse all the,

00:25:36 ◼   ► I parse the episode descriptions to remove harmful HTML tags

00:25:40 ◼   ► and try to summarize them and make them all nice

00:25:42 ◼   ► and everything, and there's so much processing

00:25:44 ◼   ► that's all written in PHP that has so many, like,

00:25:46 ◼   ► build up over time bug fixes and capabilities

00:25:49 ◼   ► and dealing with crappy feeds.

00:25:51 ◼   ► I have so much of that over time,

00:25:52 ◼   ► I really don't wanna have to rewrite that.

00:25:54 ◼   ► But I suspect I can get a big savings

00:25:57 ◼   ► out of having a thing in the front

00:25:59 ◼   ► that fetches all the feeds,

00:26:00 ◼   ► it's written in something faster than PHP for this purpose.

00:26:03 ◼   ► Something in the front that pulls and fetches all the feeds

00:26:06 ◼   ► and then only sends to the PHP processes

00:26:08 ◼   ► the actual changed feeds.

00:26:10 ◼   ► Because most of the requests, as I said,

00:26:12 ◼   ► are not resulting in new information.

00:26:14 ◼   ► So that I bet would cut things down by enough

00:26:18 ◼   ► that it would be worth the hassle

00:26:21 ◼   ► of running something else in front of it.

00:26:23 ◼   ► I decided to write this thing up

00:26:24 ◼   ► and I stumbled throughout most of the day in Node,

00:26:29 ◼   ► figuring out how it works,

00:26:30 ◼   ► getting the whole HTTP request thing,

00:26:33 ◼   ► the URL parsing nonsense, getting all this stuff in.

00:26:35 ◼   ► I guess I know there's a million different libraries

00:26:37 ◼   ► that make it simpler, blah, blah, blah,

00:26:39 ◼   ► but I just wanted to do things

00:26:40 ◼   ► in the most low-level way possible.

00:26:44 ◼   ► so I knew what was going on.

00:26:45 ◼   ► And so using as many, the way I do things,

00:26:47 ◼   ► using as many core modules as possible

00:26:49 ◼   ► and trying to minimize my reliance

00:26:51 ◼   ► on infrequently used third-party code.

00:26:53 ◼   ► So I made a thing that would pull the feeds

00:26:56 ◼   ► every X seconds or every X minutes

00:26:58 ◼   ► and do basic 304 tracking and then call a callback function

00:27:03 ◼   ► when it has new information for one of the feeds.

00:27:06 ◼   ► And I load it up and it starts flying through all of them.

00:27:11 ◼   ► and it was incredible until it just seemed to stop.

00:27:16 ◼   ► And I noticed, all of a sudden it went to 100% CPU usage

00:27:21 ◼   ► and it stopped and it was using approximately

00:27:23 ◼   ► 1.7 gigs of RAM.

00:27:25 ◼   ► Do you know what happened, Casey?

00:27:26 ◼   ► 'Cause you know JavaScript.

00:27:28 ◼   ► - I'm guessing that something wasn't cleaned up,

00:27:31 ◼   ► but no, I don't know specifically what happened.

00:27:34 ◼   ► - John?

00:27:35 ◼   ► - I don't know, I don't do any Node.js programming.

00:27:39 ◼   ► I only do JavaScript in the browser

00:27:41 ◼   ► And then in that case, I would say you accidentally

00:27:43 ◼   ► kept the reference to a DOM node,

00:27:45 ◼   ► to a node that's no longer in the DOM,

00:27:46 ◼   ► or you're using IE, which has an amazing set

00:27:50 ◼   ► of Byzantine rules about what you can and can't reference

00:27:52 ◼   ► from JavaScript that will end up leaking memory.

00:27:54 ◼   ► But no, I don't know.

00:27:56 ◼   ► - Turns out the V8 engine, which I believe Node is based on,

00:27:59 ◼   ► the Chrome JavaScript V8 engine,

00:28:01 ◼   ► just has a RAM limit of like roughly 1.6 to 1.7 gigs

00:28:06 ◼   ► that like the garbage collector just kind of dies

00:28:08 ◼   ► at that point.

00:28:09 ◼   ► - It's like Java where you have to give an argument

00:28:11 ◼   ► on the command line to tell it how much heap space to use.

00:28:13 ◼   ► I had this hilarious experience recently at work

00:28:15 ◼   ► where I was trying to run a Java command

00:28:16 ◼   ► to tell me what version of Java I have,

00:28:18 ◼   ► you know, whether it's Java seven or whatever.

00:28:20 ◼   ► If you just do Java minus version, it says,

00:28:22 ◼   ► "Sorry, not enough memory."

00:28:23 ◼   ► You have to get that on our system.

00:28:25 ◼   ► This could be a configuration thing,

00:28:26 ◼   ► could be a file in Etsy, could be a dot file,

00:28:29 ◼   ► could be an environment variable I have set,

00:28:30 ◼   ► but whatever it is, the situation on our work computer

00:28:32 ◼   ► was you type Java minus version

00:28:34 ◼   ► and it says it's not enough memory

00:28:36 ◼   ► and heap for you to do that for you, so.

00:28:38 ◼   ► (laughs)

00:28:39 ◼   ► - That's amazing.

00:28:40 ◼   ► So I know I did not know that that was a thing though, Marco.

00:28:42 ◼   ► That is news to me.

00:28:44 ◼   ► - Yeah, and you know, the reality is like,

00:28:46 ◼   ► you're just not expected to use more than one and a half

00:28:49 ◼   ► gigs of RAM in a node process, but anyway, that's a thing,

00:28:52 ◼   ► and you can't change it.

00:28:53 ◼   ► You know, obviously you can just run multiple processes

00:28:56 ◼   ► and split the load and everything,

00:28:57 ◼   ► so there's ways around it, but it's still annoying.

00:28:58 ◼   ► And again, not like PHP doesn't have its own set

00:29:01 ◼   ► of obnoxious limitations and badly documented options

00:29:05 ◼   ► and things like that.

00:29:06 ◼   ► Anyway, one thing I like is that everything in node

00:29:07 ◼   ► is stream and callback based,

00:29:10 ◼   ► And so even like the MD5 calculator is a streamable thing.

00:29:15 ◼   ► And so in the data callback for each URL request,

00:29:19 ◼   ► I'm like, you know, if I don't actually need

00:29:20 ◼   ► the body of the feed, if I just need to know

00:29:23 ◼   ► whether it has changed, I can just pipe it

00:29:26 ◼   ► through the MD5 hasher and just never keep

00:29:28 ◼   ► any part of it in RAM.

00:29:30 ◼   ► That could really cut this down.

00:29:31 ◼   ► So I did that, it cut it down substantially.

00:29:33 ◼   ► - You weren't doing that in PHP?

00:29:35 ◼   ► - No, in PHP I was loading the whole thing.

00:29:37 ◼   ► I mean, I was doing like, you know, basic ETag

00:29:39 ◼   ► if modified since, but if the server gave me a 200 and gave me the whole page, then

00:29:44 ◼   ► I would do an MB5 over the whole body to make sure, like, do I actually need to do anything?

00:29:47 ◼   ► Is this actually new?

00:29:49 ◼   ► If it is new, I need to process it.

00:29:52 ◼   ► So there's no reason for me to feed it all in and then immediately fetch it again.

00:29:56 ◼   ► Like that, I figured, you know, I might as well just process it.

00:29:59 ◼   ► Anyway, so I decided, let me see for this node thing.

00:30:02 ◼   ► Maybe I don't have to do that.

00:30:03 ◼   ► If I remove that and if I say that, well, anything that actually is new, I'll just fetch

00:30:07 ◼   ► a second time, like from PHP, you know, that's not the best scenario, but let me see what

00:30:12 ◼   ► that does to RAM usage.

00:30:14 ◼   ► Ran it again, and same thing, slam into that 1.6 gig limit pretty quickly.

00:30:19 ◼   ► If I make a node process only do, say, a quarter of the feeds, I can make this entire thing

00:30:25 ◼   ► run and do that entire polling thing where it crawls them every, depending on how many

00:30:32 ◼   ► subscribers, every two to thirty minutes roughly.

00:30:35 ◼   ► One process can crawl 60,000 feeds like that and tell me when each one has actually changed

00:30:41 ◼   ► with about 20% CPU power on one core and about 600 megs of RAM.

00:30:49 ◼   ► Why did you have to split it up into processes though?

00:30:51 ◼   ► Couldn't you just have your single process have a window of a quarter of like a maximum

00:30:55 ◼   ► window of a quarter of a thing?

00:30:56 ◼   ► I'm still not quite sure where the memory is going because if they're all just streaming

00:30:59 ◼   ► things through there's just like one buffer's worth of stuff and so you just that's just

00:31:03 ◼   ► how many web requests do you have in flight at once?

00:31:05 ◼   ► And if you just keep that limit small,

00:31:08 ◼   ► then it should work through, you know,

00:31:09 ◼   ► basically you're trading.

00:31:11 ◼   ► - Oh yeah, I see, I see what you mean.

00:31:12 ◼   ► - Like just have the, anyway, four processes isn't that much

00:31:16 ◼   ► but now you've got like a sharding problem

00:31:18 ◼   ► where you're divvying up the workload

00:31:20 ◼   ► like manually between them, right?

00:31:21 ◼   ► So you just make one process that,

00:31:23 ◼   ► or one master process that divvies them up into child,

00:31:25 ◼   ► anyway, go on.

00:31:26 ◼   ► - So the problem there is, so when I first did this,

00:31:28 ◼   ► I initially went, okay, well, how do you, you know,

00:31:30 ◼   ► Let me look for a node-based message queue.

00:31:34 ◼   ► So maybe I can get rid of the Beanstalk queue

00:31:36 ◼   ► that I run this on, 'cause Beanstalk has a number

00:31:38 ◼   ► of limitations that make this kind of thing annoying

00:31:40 ◼   ► to do with it.

00:31:41 ◼   ► So let me just see, hey, what can I do here?

00:31:44 ◼   ► And I looked up some of the node message queues,

00:31:46 ◼   ► and I looked at the source to one of them,

00:31:48 ◼   ► and it was like 100 lines.

00:31:51 ◼   ► I'm like, what is this doing?

00:31:53 ◼   ► And then of course, it's just doing set timeout.

00:31:56 ◼   ► (laughing)

00:31:57 ◼   ► And I'm like, oh, like duh.

00:31:59 ◼   ► And so I tried, okay, let me write this entire thing

00:32:01 ◼   ► using setTimeout as my queuing method,

00:32:04 ◼   ► and then when the function finishes,

00:32:05 ◼   ► it just enqueues the next one, and it works great.

00:32:10 ◼   ► Now the problem is I then have no way,

00:32:13 ◼   ► well, I have no straightforward way

00:32:15 ◼   ► to limit the number of simultaneous requests

00:32:18 ◼   ► that are kept in memory at once.

00:32:20 ◼   ► - Where are you getting your work, your queue of work from?

00:32:22 ◼   ► You're pulling it from a database?

00:32:24 ◼   ► - Yeah.

00:32:24 ◼   ► - So why don't you just pull from the database in chunks

00:32:27 ◼   ► and just work on your chunk,

00:32:30 ◼   ► and as things fall off the end,

00:32:31 ◼   ► pull in new things, you know.

00:32:33 ◼   ► You just need a window size of like,

00:32:35 ◼   ► this is my current set of things that I'm working on,

00:32:37 ◼   ► and as soon as you complete one, a new one comes in,

00:32:40 ◼   ► and you could chunk the pulls from the database

00:32:42 ◼   ► so you're not selecting a single row at the time,

00:32:43 ◼   ► but other than that.

00:32:45 ◼   ► - Oh, I'm actually selecting all the rows at once.

00:32:47 ◼   ► At the beginning, every so often,

00:32:49 ◼   ► it's just like, you know, select ID, comma, URL

00:32:51 ◼   ► from database, and give me this giant--

00:32:54 ◼   ► - Didn't working at Tumblr make you

00:32:56 ◼   ► never want to do those queries.

00:32:58 ◼   ► Always say, if anything, what would happen

00:33:01 ◼   ► if I multiplied my traffic by 100?

00:33:03 ◼   ► And if the answer is it blows up,

00:33:04 ◼   ► the discipline of saying never have everything in memory,

00:33:08 ◼   ► always be limited by just by your buffer size.

00:33:11 ◼   ► I don't care how big the file is,

00:33:12 ◼   ► 'cause I'm only gonna be working on

00:33:14 ◼   ► X amount of it at a time.

00:33:15 ◼   ► I don't care how many jobs there are,

00:33:17 ◼   ► because I'm only gonna have this many at a time.

00:33:18 ◼   ► I don't care how many there are in the database,

00:33:20 ◼   ► I'm never gonna select them all,

00:33:21 ◼   ► I'm always gonna go Windows.

00:33:22 ◼   ► - No, in most cases, I would agree with you.

00:33:24 ◼   ► However, the fact is the world of podcasts is so damn small.

00:33:28 ◼   ► Every podcast feed that I know about,

00:33:32 ◼   ► in all of Overcast, 240,000 of them.

00:33:35 ◼   ► And they grow very slowly.

00:33:37 ◼   ► Two months ago, it was probably 220,000.

00:33:39 ◼   ► The fact is, from what I've heard,

00:33:41 ◼   ► I've heard the entire iTunes directory

00:33:43 ◼   ► is somewhere along the order of 400,000 to 500,000.

00:33:47 ◼   ► In the world of database stuff,

00:33:48 ◼   ► these are tiny numbers, really.

00:33:49 ◼   ► This is not a big deal.

00:33:51 ◼   ► I can do queries for stats and stuff

00:33:54 ◼   ► with these ridiculous group bys and ridiculous joins

00:33:57 ◼   ► that on something like the size of Tumblr

00:34:00 ◼   ► you just can't even do.

00:34:02 ◼   ► But I can do that on these tables

00:34:03 ◼   ► 'cause everything is just so damn tiny.

00:34:05 ◼   ► - If you weren't limited by the crazy node memory limit

00:34:07 ◼   ► you wouldn't have to do any windowing at all probably.

00:34:09 ◼   ► - You're right.

00:34:10 ◼   ► - KJ Healey posted in the chat room

00:34:12 ◼   ► the text from what I assume is the node site

00:34:15 ◼   ► and it seems to confirm that yeah, there's a limit.

00:34:18 ◼   ► And it's less, it's one gigabyte in 32-bit machines,

00:34:21 ◼   ► 1.7 in 64-bit, and it's recommended

00:34:23 ◼   ► that you split your single process into several workers

00:34:25 ◼   ► if you're hitting memory limits,

00:34:26 ◼   ► which I think is pretty lame.

00:34:28 ◼   ► You should write in Go,

00:34:29 ◼   ► you don't have to deal with that crap.

00:34:31 ◼   ► - Actually, I am interested in Go, theoretically, however,

00:34:35 ◼   ► as stupid as it is, the fact that I already know

00:34:39 ◼   ► all the JavaScript syntax, even if I don't know

00:34:41 ◼   ► a lot of the languages, like nitty-gritty details,

00:34:43 ◼   ► the fact that I already know all the syntax

00:34:44 ◼   ► and a lot of the basic functions made it a lot easier

00:34:47 ◼   ► for me to just jump in and start making

00:34:48 ◼   ► something productive here.

00:34:49 ◼   ► - All right, well, how about this, Marco?

00:34:51 ◼   ► Are you familiar with NSURL session?

00:34:53 ◼   ► - I thought about that too.

00:34:54 ◼   ► - 'Cause you can write it in Swift as a command line script.

00:34:58 ◼   ► - I thought about that too, but where would I run it?

00:35:00 ◼   ► I'd have to get like a Mac Mini Colu kind of thing,

00:35:02 ◼   ► and that's like, if I can't just run it on my Linode boxes

00:35:06 ◼   ► in my existing setup, like that's kind of annoying.

00:35:08 ◼   ► - I forgot that Swift doesn't cross-compile, does it?

00:35:10 ◼   ► - Nope.

00:35:11 ◼   ► - Yeah, it's not even open source yet.

00:35:13 ◼   ► - And also, like I don't think there's a whole,

00:35:15 ◼   ► I don't think there's a lot of reason to do it

00:35:17 ◼   ► in Swift or Objective-C over Node,

00:35:20 ◼   ► because the model would be the same,

00:35:22 ◼   ► Like you'd have basically single-threaded networking

00:35:25 ◼   ► with all this event-based callback stuff.

00:35:28 ◼   ► That would basically be the way to do it in Objective-C also.

00:35:31 ◼   ► Like that'd be the smart way to do it.

00:35:32 ◼   ► Whether it's that or Node,

00:35:33 ◼   ► there's not a huge gain to one or the other,

00:35:36 ◼   ► except that Node I can host anywhere.

00:35:38 ◼   ► - So in the end, you tried something new,

00:35:41 ◼   ► which admittedly was new-ish insofar as, like you said,

00:35:44 ◼   ► you knew the language.

00:35:46 ◼   ► But you tried something new.

00:35:48 ◼   ► - It was a little jarring when I went to some of the pages

00:35:51 ◼   ► for some of the modules and on their GitHub page,

00:35:53 ◼   ► it's like, "Last modified four years ago."

00:35:56 ◼   ► I'm like, man, this is so not new.

00:35:59 ◼   ► - But either way, you tried something new to you

00:36:03 ◼   ► and it sounds like so far so good.

00:36:07 ◼   ► - Yeah, I haven't deployed it to the servers yet

00:36:10 ◼   ► 'cause that'll take a little bit more work

00:36:11 ◼   ► and I'm actually about to go traveling,

00:36:13 ◼   ► so I figured this would be a bad time

00:36:14 ◼   ► to start messing with things.

00:36:16 ◼   ► But I suspect as soon as I get back from this trip,

00:36:19 ◼   ► I'm most likely going to install this front end in place

00:36:22 ◼   ► and have it take over all the polling

00:36:24 ◼   ► and maybe even the initial crawling

00:36:26 ◼   ► if I can figure out how to do the memory

00:36:28 ◼   ► in a relatively efficient way

00:36:30 ◼   ► or somehow overcome those limits, but we'll see.

00:36:34 ◼   ► But yeah, so far I would say it was a big success.

00:36:36 ◼   ► It was exciting.

00:36:37 ◼   ► I was very happy the whole day.

00:36:39 ◼   ► Like I was satisfied with what I was doing.

00:36:42 ◼   ► I'm a sucker for speed.

00:36:44 ◼   ► That's it.

00:36:45 ◼   ► I've always been like a low level nerd.

00:36:47 ◼   ► I love C.

00:36:48 ◼   ► I love programming things in C.

00:36:49 ◼   ► I love using the crazy vector functions.

00:36:52 ◼   ► I love all this crazy stuff

00:36:53 ◼   ► that makes things super, super fast.

00:36:55 ◼   ► PHP can't do that for me.

00:36:58 ◼   ► It's like, this is a need, it's not serving for me.

00:37:00 ◼   ► PHP is not, I wouldn't call it slow.

00:37:02 ◼   ► It is not a slow language as things generally go.

00:37:07 ◼   ► But when it comes to massive parallel tasks like this,

00:37:11 ◼   ► there's just no good way to do it in PHP.

00:37:13 ◼   ► And Node is made for stuff like this.

00:37:16 ◼   ► It's really good at stuff like this.

00:37:18 ◼   ► And so to have something with really pretty little effort

00:37:22 ◼   ► that is very easy to host that I think,

00:37:25 ◼   ► I'll find out about that,

00:37:26 ◼   ► I'll report back on how easy it is to host later.

00:37:28 ◼   ► But it hit all the boxes for me.

00:37:31 ◼   ► And the fact that all the crazy,

00:37:33 ◼   ► like everything is a callback kind of stuff,

00:37:35 ◼   ► to write a whole web app in this

00:37:37 ◼   ► I think would be pretty clunky.

00:37:38 ◼   ► I think it would definitely be callback hell,

00:37:40 ◼   ► lots of weird spaghetti code type things.

00:37:43 ◼   ► I can't imagine writing a whole web app in it

00:37:45 ◼   ► and I don't plan to.

00:37:46 ◼   ► But for components or for simple things,

00:37:49 ◼   ► I can definitely see the value of it here.

00:37:52 ◼   ► And so I think I'm gonna start mixing it in

00:37:55 ◼   ► in places and see what happens.

00:37:57 ◼   ► - I am extremely happy about this.

00:37:59 ◼   ► Although it would be remiss of me not to point out

00:38:01 ◼   ► that you've said in basically the same breath

00:38:03 ◼   ► that you love low-level stuff and you love speed

00:38:06 ◼   ► and then you talked about node,

00:38:07 ◼   ► which is about as far away from low-level as you can get.

00:38:10 ◼   ► - Well, it's not like PHP was failing here

00:38:13 ◼   ► because like the quote-unquote language is slow

00:38:15 ◼   ► because JavaScript, like you said,

00:38:17 ◼   ► is also another high level language.

00:38:18 ◼   ► Neither one of them is directly dealing with memory.

00:38:20 ◼   ► They all have these dynamic types and all this other stuff

00:38:23 ◼   ► that is generally slow.

00:38:24 ◼   ► The thing that was falling down is that PHP

00:38:26 ◼   ► either doesn't provide,

00:38:27 ◼   ► or Marko wasn't willing to try to make happen,

00:38:31 ◼   ► the control at sort of the infrastructure level,

00:38:35 ◼   ► the process level,

00:38:36 ◼   ► if you could do something event-driven like that in PHP,

00:38:41 ◼   ► it sounds like you can't, except for that one cURL thing.

00:38:43 ◼   ► Like it's not sort of part of the language

00:38:46 ◼   ► or not a language supported thing.

00:38:48 ◼   ► I'm assuming forking and everything

00:38:50 ◼   ► is a language supported thing.

00:38:51 ◼   ► So you could have done that

00:38:52 ◼   ► and that would have been sort of a half step towards this.

00:38:54 ◼   ► - It is.

00:38:55 ◼   ► - But yeah, like node, you know,

00:38:57 ◼   ► sort of the event driven thing is baked into language.

00:38:59 ◼   ► The example I'm familiar with is Perl

00:39:00 ◼   ► where of course you can do the forking thing

00:39:02 ◼   ► and there are multiple event driven languages

00:39:04 ◼   ► that are based on various event libraries.

00:39:07 ◼   ► Or you could do it yourself in Perl if you wanted

00:39:10 ◼   ► 'cause it gives you full access

00:39:11 ◼   ► to all the Unix system calls

00:39:12 ◼   ► these things are all implemented and so you can just do it that way as well. So

00:39:16 ◼   ► in all those cases all the languages we're talking about are slow compared to

00:39:19 ◼   ► you know C/C++ and stuff like that but that's not the limiting factor. The limiting factor

00:39:22 ◼   ► is your thing was wasting time and resources not doing anything

00:39:27 ◼   ► you know like processes would be stuck in IO8 or something like that. Right it's

00:39:30 ◼   ► it's very inefficiently using the resources. Right and the event

00:39:34 ◼   ► driven thing is like well I can't do anything more with this thing I'll move

00:39:36 ◼   ► on to the next thing oh I can actually do a little work on this and what about

00:39:38 ◼   ► you I can do some work on that oh but this has some data right for me because

00:39:41 ◼   ► is that compared to the speed of the CPU,

00:39:44 ◼   ► the speed that IO happens across the network

00:39:46 ◼   ► is just glacial.

00:39:46 ◼   ► So the CPU is always just like twiddling its thumbs

00:39:49 ◼   ► and you know, give me something to do.

00:39:51 ◼   ► Because I sent this HTTP request

00:39:55 ◼   ► and it's not gonna come back for another few million

00:39:56 ◼   ► or billion cycles, so I would like to spend those cycles

00:39:59 ◼   ► doing something.

00:40:00 ◼   ► - Exactly.

00:40:01 ◼   ► And also, you know, you mentioned, yeah,

00:40:03 ◼   ► these are all high-level languages,

00:40:05 ◼   ► they're all gonna be slow compared to something like C.

00:40:08 ◼   ► but my biggest frustration with PHP over the years

00:40:11 ◼   ► has been everybody else who uses it

00:40:13 ◼   ► and the people who make it.

00:40:14 ◼   ► (laughing)

00:40:17 ◼   ► Like it's, I don't say this, like this is not,

00:40:19 ◼   ► I'm not actually joking, that like, it is that bad.

00:40:23 ◼   ► Like a handful of people are able to use PHP

00:40:27 ◼   ► in a reasonable way and they mostly keep quiet

00:40:29 ◼   ► and don't participate in the community

00:40:31 ◼   ► and aren't contributors to the PHP project.

00:40:35 ◼   ► PHP itself has been so erratically

00:40:37 ◼   ► and relatively poorly maintained over the years.

00:40:41 ◼   ► Third party code for it is a disaster.

00:40:43 ◼   ► It's all over the map, mostly being pretty bad.

00:40:46 ◼   ► It's getting a little bit better these days,

00:40:48 ◼   ► although it's also getting really Java-y.

00:40:51 ◼   ► The whole composer era of PHP

00:40:54 ◼   ► and the Zen framework era and all this,

00:40:57 ◼   ► oh, they're turning into Java, it's horrible.

00:40:59 ◼   ► And the frickin' backslash, how did that get through?

00:41:02 ◼   ► Seriously, the backslash as a namespace divider?

00:41:07 ◼   ► Why is the backslash anything but an escape character?

00:41:10 ◼   ► Anyway, PHP is not maintained in a direction

00:41:15 ◼   ► or to a level of quality that I have much confidence in.

00:41:18 ◼   ► The Chrome JavaScript engine, on the other hand,

00:41:22 ◼   ► is really good and there's a fantastic engineering company

00:41:27 ◼   ► behind it that even though I think Google is creepy as hell

00:41:30 ◼   ► most of the time and I don't use many of their products

00:41:33 ◼   ► because I'm just a little creeped out by them.

00:41:35 ◼   ► You can't deny their engineering prowess

00:41:37 ◼   ► is just insanely good.

00:41:38 ◼   ► The Chrome JavaScript engine is something

00:41:41 ◼   ► that gets a lot of attention.

00:41:42 ◼   ► There's a lot of incentive for Google

00:41:44 ◼   ► to keep that being awesome.

00:41:46 ◼   ► Their whole company basically depends on that being awesome.

00:41:49 ◼   ► So you have this company with fantastic engineering

00:41:53 ◼   ► resources and throughput having a really good incentive

00:41:56 ◼   ► to maintain this one component this language is based on.

00:42:00 ◼   ► Then you look at PHP and it's just kind of all over the place.

00:42:02 ◼   ► It's sloppily maintained.

00:42:05 ◼   ► Deploying it is weird.

00:42:06 ◼   ► There's still so many language shortcomings that will never be fixed.

00:42:11 ◼   ► A lot of the new directions language is taking have really been questionable and I don't

00:42:16 ◼   ► have a lot of confidence in.

00:42:17 ◼   ► Facebook's whole thing with hack and HHVM is its own pile of gains and losses.

00:42:25 ◼   ► That just shows how bad PHP has maintained that Facebook decided they had to do that

00:42:29 ◼   ► and that they were probably right.

00:42:31 ◼   ► Even though this is all the same class of language,

00:42:35 ◼   ► generally speaking, I have a lot more faith

00:42:38 ◼   ► in the technical prowess and the long-term stability

00:42:43 ◼   ► and long-term efficiency of Node than I do of PHP.

00:42:47 ◼   ► - So if you were to write Overcast today,

00:42:51 ◼   ► I think the obvious answer is you'd probably write it

00:42:54 ◼   ► the exact same way you did, but assume that you're maybe

00:42:59 ◼   ► a little more comfortable with Node than you are today,

00:43:01 ◼   ► but you're equally impressed by it.

00:43:03 ◼   ► What pieces of Overcast do you think

00:43:05 ◼   ► you would write in Node, if any?

00:43:07 ◼   ► Like, for example, the Overcast web interface

00:43:10 ◼   ► that I would use, it probably stands to reason

00:43:13 ◼   ► you would still do that in PHP, would you not?

00:43:16 ◼   ► - I'm not sure it would make sense

00:43:17 ◼   ► to maintain large portions of the app

00:43:20 ◼   ► in two different languages.

00:43:22 ◼   ► Like, I think that would just be

00:43:23 ◼   ► kind of a deployment nightmare.

00:43:24 ◼   ► Generally, I bet you do things all in one language.

00:43:28 ◼   ► As I said, I don't like JavaScript enough

00:43:30 ◼   ► and its weird object system enough,

00:43:32 ◼   ► and I don't like Node's lack of blocking calls

00:43:37 ◼   ► in many ways to do a lot of common web app type tasks.

00:43:41 ◼   ► Honestly, I probably wouldn't pick either of them

00:43:42 ◼   ► if I had to pick just one language for the whole project.

00:43:45 ◼   ► Or in reality, the reality is,

00:43:47 ◼   ► if I was writing Overcast from scratch today,

00:43:49 ◼   ► I would probably write it with CloudKit

00:43:51 ◼   ► and just not even have servers.

00:43:53 ◼   ► I can be honest, I mean, that like,

00:43:55 ◼   ► and I've thought about too, like,

00:43:57 ◼   ► do I really need to still maintain the servers for much?

00:43:59 ◼   ► Like could I move all of the user data to CloudKit

00:44:03 ◼   ► and then just have the servers doing feed crawling

00:44:05 ◼   ► and have it be publicly available

00:44:07 ◼   ► to all the app installations?

00:44:08 ◼   ► I could do that.

00:44:10 ◼   ► Right now there's not a lot of reason to do that,

00:44:12 ◼   ► but if I was writing it from scratch today

00:44:14 ◼   ► and I didn't already have all the server stuff in place

00:44:16 ◼   ► and written, I would probably do it that way instead.

00:44:20 ◼   ► - That's interesting.

00:44:21 ◼   ► - And if I was gonna learn a brand new language

00:44:24 ◼   ► to write a whole, to replace PHP as my main web language

00:44:29 ◼   ► of something I was gonna use for the next 15 years,

00:44:32 ◼   ► hopefully not, but something I was gonna use

00:44:34 ◼   ► for the next long time in my web development career.

00:44:38 ◼   ► I'm not entirely sure I would pick either of them

00:44:41 ◼   ► for that either.

00:44:42 ◼   ► Like, I think, again, I love the whole

00:44:46 ◼   ► event-driven model a lot.

00:44:48 ◼   ► I don't love JavaScript or some parts of Node enough.

00:44:53 ◼   ► And again, I've been using it for a few days,

00:44:55 ◼   ► so this opinion could change.

00:44:57 ◼   ► But Go is very interesting to me.

00:45:00 ◼   ► I don't know enough about it to know

00:45:02 ◼   ► whether it would be substantially better in this regard.

00:45:06 ◼   ► I like the idea of Go being this almost C-level language

00:45:11 ◼   ► and being very fast and very efficient.

00:45:14 ◼   ► I like that a lot.

00:45:16 ◼   ► I kind of wish Swift could be that language

00:45:18 ◼   ► and there could be a service.

00:45:19 ◼   ► So that way I could kind of consolidate

00:45:21 ◼   ► my language expertise for the next generation

00:45:23 ◼   ► and just have this one language I can really deeply master

00:45:26 ◼   ► and have it be available in both places.

00:45:27 ◼   ► I would love that, but right now Swift

00:45:31 ◼   ► can't reasonably be a web language

00:45:32 ◼   ► 'cause there is no open tools for it and everything.

00:45:35 ◼   ► So maybe in the future, I don't know, we'll see.

00:45:37 ◼   ► Maybe Node can carry me over until you can run Swift

00:45:39 ◼   ► on the server if that can ever happen,

00:45:41 ◼   ► but I wouldn't count on that happening anytime soon.

00:45:44 ◼   ► - Well, that's reasonable.

00:45:45 ◼   ► I was just curious and I think that Node is really good

00:45:50 ◼   ► at doing proof of concepts.

00:45:52 ◼   ► It's really good at event-driven stuff,

00:45:54 ◼   ► which is exactly what you're talking about using it for.

00:45:57 ◼   ► You can definitely get into callback hell

00:45:59 ◼   ► and it can get really ugly really quickly.

00:46:01 ◼   ► So even as someone who really likes Node,

00:46:06 ◼   ► I completely concur with pretty much everything

00:46:08 ◼   ► you just said.

00:46:09 ◼   ► So yeah, that makes a lot of sense,

00:46:10 ◼   ► but I am genuinely very proud of you

00:46:12 ◼   ► for trying something new.

00:46:13 ◼   ► And it's as self-serving as it may have been,

00:46:16 ◼   ► You typically are not too enthusiastic

00:46:19 ◼   ► about getting outside the PHP comfort zone,

00:46:22 ◼   ► so kudos to you, my friend.

00:46:23 ◼   ► - You can say it, I never do it.

00:46:25 ◼   ► I never leave my comfort zone, you can say it,

00:46:27 ◼   ► that's correct.

00:46:28 ◼   ► - And so kudos to you, my friend,

00:46:30 ◼   ► for trying something new.

00:46:31 ◼   ► - Thank you.

00:46:32 ◼   ► - All right, why don't you tell us

00:46:33 ◼   ► about something else that's awesome?

00:46:35 ◼   ► - Let me tell you about Automattic.

00:46:36 ◼   ► Automattic is your smart driving assistant

00:46:38 ◼   ► on your smartphone.

00:46:39 ◼   ► You may remember Automattic from last week's show,

00:46:41 ◼   ► where they sponsored us then, too.

00:46:43 ◼   ► I'm gonna tell you about them again

00:46:44 ◼   ► because they're just that good.

00:46:45 ◼   ► go to automatic.com/ATP.

00:46:48 ◼   ► That's spelled the usual way, automatic.com/ATP.

00:46:52 ◼   ► Automatic monitors how you drive,

00:46:54 ◼   ► so you can monitor your fuel economy,

00:46:56 ◼   ► read check engine error codes,

00:46:57 ◼   ► automatically signal for help in a crash, and more.

00:47:00 ◼   ► But the best part is that this intelligently monitors

00:47:02 ◼   ► how you drive to tell you how to optimize your fuel economy.

00:47:05 ◼   ► This gives you all the data you need

00:47:07 ◼   ► to track your cost and efficiency every week,

00:47:09 ◼   ► and it can give you tips on small changes you can make

00:47:11 ◼   ► to save a lot of money in the long run.

00:47:13 ◼   ► Automatic can even make subtle audio cues

00:47:15 ◼   ► when you drive inefficiently

00:47:17 ◼   ► to help guide you towards better habits

00:47:18 ◼   ► or to reach the goals you set for economy.

00:47:21 ◼   ► If you accelerate too hard,

00:47:24 ◼   ► if you really slam it or you break too hard,

00:47:26 ◼   ► it can beep if you want it to

00:47:28 ◼   ► and it can kind of guide you towards these better habits

00:47:30 ◼   ► to be like, "I was trying to keep this level

00:47:32 ◼   ► "of average gas mileage.

00:47:33 ◼   ► "I was trying to keep my fuel cost

00:47:34 ◼   ► "to below X dollars a month."

00:47:36 ◼   ► And if you're not reaching those goals

00:47:37 ◼   ► the way you're driving,

00:47:38 ◼   ► you can have it gently remind you,

00:47:40 ◼   ► if you want to, again, this is all optional,

00:47:41 ◼   ► you can have it gently remind you

00:47:43 ◼   ► to guide you towards the goal.

00:47:44 ◼   ► Automatic can help you save hundreds of dollars in gas,

00:47:47 ◼   ► it can diagnose your check engine light codes

00:47:48 ◼   ► so you don't have to go necessarily immediately

00:47:50 ◼   ► to get your car serviced if it's a really minor error.

00:47:53 ◼   ► And also the getting help in a serious crash thing,

00:47:56 ◼   ► this is pretty cool.

00:47:57 ◼   ► So this, you know, if you're in a crash,

00:48:00 ◼   ► God forbid, if you're in a crash,

00:48:01 ◼   ► it can use your phone,

00:48:03 ◼   ► 'cause it communicates with your phone over Bluetooth,

00:48:04 ◼   ► it can use your phone to call for help automatically,

00:48:08 ◼   ► because of course the name is automatic,

00:48:09 ◼   ► so it would be weird if it wasn't automatic,

00:48:12 ◼   ► Automatically ready for help in a crash and this could I mean no joke this could save somebody's life this you know

00:48:16 ◼   ► This is a big deal

00:48:18 ◼   ► Anyway, there's even you know less serious things. There's like a parking locator that automatically remembers where you park

00:48:23 ◼   ► Great stuff like this the app supports both iPhone and Android and there's no monthly fees to use it

00:48:30 ◼   ► There's no monthly service charge. All you have to do is buy the automatic. I don't know

00:48:35 ◼   ► What is it? What do you call these things dongles plugins? Yeah dongle buy the automatic dongle upfront

00:48:41 ◼   ► Normally it was a hundred bucks now. They're running a holiday promotion that brings it down to 80 bucks

00:48:45 ◼   ► But even better than that, they're running a promotion for ATP listeners. It's just 60 bucks. So go to automatic.com

00:48:53 ◼   ► ATP this is a special limited time offer

00:48:55 ◼   ► automatic.com

00:48:58 ◼   ► ATP

00:48:59 ◼   ► Just 60 bucks. You can get this thing. No monthly fees after that

00:49:03 ◼   ► It's literally just 60 bucks one time forever and there's free shipping ships in two business days

00:49:09 ◼   ► 45 day return policy.

00:49:11 ◼   ► So there's no risk here, it's fantastic.

00:49:14 ◼   ► Automatic.com/ATP, your smart driving assistant

00:49:16 ◼   ► on your smartphone.

00:49:17 ◼   ► Thanks a lot to Automatic.com.

00:49:19 ◼   ► - All right, so this episode will be coming out

00:49:23 ◼   ► during Christmas week, and a lot of people

00:49:27 ◼   ► are traveling home during that time.

00:49:29 ◼   ► So John, what do you recommend people do

00:49:32 ◼   ► if you're of a particularly nerdy and technological bent

00:49:36 ◼   ► for your family who may not be quite so nerdy?

00:49:39 ◼   ► - I think this is a question that comes up

00:49:41 ◼   ► for tech nerds all the time.

00:49:43 ◼   ► Visiting for the holidays or any time.

00:49:45 ◼   ► When you visit relatives or friends even,

00:49:49 ◼   ► but mostly relatives who are less technically savvy than you

00:49:53 ◼   ► sometimes there's an expectation,

00:49:55 ◼   ► formal or informal, that you're going to help them

00:49:59 ◼   ► with whatever problems they're having

00:50:01 ◼   ► because you have to understand

00:50:02 ◼   ► that the life of someone who is not tech savvy

00:50:05 ◼   ► but who is also a tech enthusiast,

00:50:07 ◼   ► and I think we each know some of those people

00:50:10 ◼   ► who are interested in gadgets,

00:50:12 ◼   ► but aren't really that interested enough

00:50:13 ◼   ► to learn a lot about them.

00:50:15 ◼   ► So they'll have a bunch of gadgets.

00:50:17 ◼   ► Maybe they have an iPad, maybe they have a smartphone,

00:50:19 ◼   ► they have a computer, a TV, whatever.

00:50:21 ◼   ► They're interested in all these things,

00:50:23 ◼   ► and when they have problems,

00:50:24 ◼   ► I can't quite figure out why it's not working.

00:50:27 ◼   ► Maybe they spend some time in tech support,

00:50:29 ◼   ► maybe that solves it, maybe it doesn't,

00:50:30 ◼   ► but they tend to suffer in silence

00:50:32 ◼   ► until a tech-savvy friend or relative shows up,

00:50:34 ◼   ► And then it's like, depending on what the relationship is

00:50:37 ◼   ► between these people,

00:50:38 ◼   ► oh, maybe you can help me with this thing.

00:50:39 ◼   ► And the formal version is just like parents who will say,

00:50:44 ◼   ► you just build up a big queue

00:50:45 ◼   ► of broken things in their house.

00:50:46 ◼   ► And like, well, next time you visit,

00:50:47 ◼   ► here's the things you're gonna do.

00:50:48 ◼   ► You're gonna fix this for me, fix that for me,

00:50:50 ◼   ► look at that, tell me why this is doing that.

00:50:53 ◼   ► Some people like that responsibility.

00:50:54 ◼   ► Some people don't like it.

00:50:55 ◼   ► I think it's kind of our duty as tech nerds

00:51:01 ◼   ► to help those in need.

00:51:02 ◼   ► And obviously we can't help everybody,

00:51:04 ◼   ► but if it's like your family,

00:51:05 ◼   ► especially your immediate family

00:51:06 ◼   ► is definitely something you should do.

00:51:08 ◼   ► So this topic is,

00:51:10 ◼   ► say you're going to a friend or relative's house

00:51:12 ◼   ► and there is some expectation

00:51:14 ◼   ► that you're going to help them with stuff,

00:51:16 ◼   ► you know, like they actually want this from you.

00:51:19 ◼   ► What things should or shouldn't you do sort of on your own

00:51:22 ◼   ► as part of your work in there?

00:51:24 ◼   ► Like they say, "Oh, I'm having problems with my computer.

00:51:25 ◼   ► It's slow or I can't get something to work or whatever."

00:51:28 ◼   ► You know, what should you do?

00:51:31 ◼   ► What should you look for in their house?

00:51:32 ◼   ► Potential problem areas.

00:51:33 ◼   ► again, you talk to these people, you get the permission,

00:51:35 ◼   ► you tell them what you're doing.

00:51:36 ◼   ► You're not going to screw with their stuff

00:51:37 ◼   ► without their permission.

00:51:37 ◼   ► This is the assumption that they want you to help them

00:51:39 ◼   ► and then you could offer other services.

00:51:41 ◼   ► And I'll start off with the one that I talked about

00:51:43 ◼   ► last year, which I still think is a good idea.

00:51:46 ◼   ► There's a blog post about it back when I used to write

00:51:48 ◼   ► up my blog called Fill Your TV.

00:51:50 ◼   ► This is about high-definition television sets,

00:51:52 ◼   ► most of which are configured out of the box

00:51:53 ◼   ► not to show the full 1080p or 720p picture.

00:51:58 ◼   ► They're configured to cut off the top, bottom, right,

00:52:01 ◼   ► and left edges by a certain amount.

00:52:02 ◼   ► So you are buying an HD television and then they're zooming the picture

00:52:06 ◼   ► and cutting off parts of the picture and effectively running, you know, and slightly zoomed.

00:52:10 ◼   ► You call it non-native resolution, but that's not quite accurate for Plasmids and stuff.

00:52:14 ◼   ► But anyway, that's bad.

00:52:16 ◼   ► And these days, almost all shows and all appliances that you buy, at the very least,

00:52:22 ◼   ► have some expectation that maybe this person isn't running their TV in a screwed-up mode.

00:52:28 ◼   ► To give you an example, the PlayStation 4 I just got,

00:52:31 ◼   ► when you first launch like the applications or when you first launch certain things in games, it will prompt you to say

00:52:36 ◼   ► uh, you know, press this button on your controller to adjust the size of your the visible image of your screen

00:52:42 ◼   ► It starts out with it shows like a well, you know rectangle

00:52:44 ◼   ► That did not fill my tv screen

00:52:47 ◼   ► Of course because my television is configured to show the actual signal and not cut off the things

00:52:50 ◼   ► And you basically hold down the joystick or the d-pad

00:52:52 ◼   ► I forget which one it is

00:52:54 ◼   ► And it zooms this thing out until the rectangle actually fills your entire tv screen

00:52:57 ◼   ► And I had to do that twice once for applications the ones for you know game UI or something like that one

00:53:02 ◼   ► Maybe once for video or whatever

00:53:04 ◼   ► That's what you want so the setting

00:53:06 ◼   ► You know this goes into this blog post most televisions have a setting in the television itself that says

00:53:12 ◼   ► How do you want me to display the signal?

00:53:14 ◼   ► I'm getting and like I said the default is I'll make it a little bit bigger and cut off all the edges

00:53:18 ◼   ► You don't want that default you have to find your way to whatever setting sometimes

00:53:22 ◼   ► It's like size number one size number two sometimes. It's called zoom sometimes

00:53:26 ◼   ► It's called over scan support on/off like

00:53:28 ◼   ► You have to google for it most almost all televisions have a way to find this setting and to change

00:53:34 ◼   ► You know disable the zooming so it displays natively

00:53:37 ◼   ► This is a feature you can usually sell to people when you visit if you're visiting a relative you say hey

00:53:42 ◼   ► Can I just adjust the size on your television so you can see more of the picture and it's great if?

00:53:47 ◼   ► It's great if you're showing a program like maybe a football game or something where these days the football things will

00:53:54 ◼   ► Get closer to the edges. They won't go all the way to the edge because then it would be cut off on everybody's TV

00:53:58 ◼   ► But if you can show them hey, there's a little part of this play that was broadcast

00:54:01 ◼   ► But that you are not seeing like if it's if it's instant replay and they're you know

00:54:04 ◼   ► You can pause it during instant replay

00:54:06 ◼   ► And you can say if you want to see an extra inch on the right edge of the screen where you're wondering what's happening

00:54:10 ◼   ► Over there, you know, I think you can sell this feature to people

00:54:13 ◼   ► And there usually aren't any harmful effects and there used to be

00:54:17 ◼   ► More more the case with like analog cable and stuff like that where you might get noise in the fringes

00:54:22 ◼   ► That doesn't happen as much these days with digital HDTV.

00:54:26 ◼   ► So that's my suggestion for one of the things

00:54:28 ◼   ► you should suggest.

00:54:29 ◼   ► Read this blog post, internalize it,

00:54:32 ◼   ► explain it to your relatives,

00:54:33 ◼   ► offer to make this adjustment.

00:54:35 ◼   ► This is a one-time adjustment,

00:54:36 ◼   ► they never need to change it again.

00:54:37 ◼   ► You do it once and you've essentially quote-unquote

00:54:39 ◼   ► fixed their television set.

00:54:41 ◼   ► - Yeah, I don't have any go-to impressive,

00:54:46 ◼   ► let me show you a whole new world sort of recommendation.

00:54:49 ◼   ► And in fact, um, so my family is split, not only in terms of in-laws versus my

00:54:57 ◼   ► actual family, but split in terms of Apple users and non Apple users.

00:55:03 ◼   ► So my, most of my family uses Apple products.

00:55:06 ◼   ► Most of Aaron's family uses, um, not Apple products.

00:55:11 ◼   ► They mostly have PCs, mostly have Android phones.

00:55:14 ◼   ► And it's gotten to the point that even though Aaron's family is local, and even though I do

00:55:21 ◼   ► something that they think of as basically tech support for a living, I will not fix any of their

00:55:28 ◼   ► computer issues because I'm tired of dealing with Windows problems. I've told them a thousand times,

00:55:33 ◼   ► "If you really don't want to have these problems, just get a Mac." And they always snicker and say,

00:55:37 ◼   ► "No, it's too expensive." And so it's gotten to the point that I've told them, "I will not fix your

00:55:41 ◼   ► problems until you buy a Mac. And yes, that's obnoxious and no, that's not very helpful,

00:55:46 ◼   ► but sure enough, I don't get bothered by all of their stupid windows issues. So if you're

00:55:53 ◼   ► a jerk like me, that's the approach I would recommend.

00:55:58 ◼   ► The jerky version of my, I'm just looking at my fill your TV post, the jerky version

00:56:01 ◼   ► of this is your suggested and don't tell them implied by the last paragraph of my blog post

00:56:07 ◼   ► is like just make the adjustment for your own peace of mind and

00:56:10 ◼   ► They probably won't notice it all but you'll just feel better about it

00:56:14 ◼   ► The nice thing to do is to talk to them about it if their eyes glaze over like you just want to get permission to

00:56:19 ◼   ► mess with their their things

00:56:21 ◼   ► My other suggestion is like the obvious one which is it's usually on my queue for whenever I visit my parents or they visit me

00:56:27 ◼   ► Update all their computers to whatever the latest version of everything which we think oh, you don't want to do that

00:56:32 ◼   ► They're gonna get angry. They know version X don't update their stuff. Everything will break

00:56:37 ◼   ► If you subscribe to that policy of giving in to people's sort of

00:56:43 ◼   ► Conservative notion of like this works for me. Just don't change anything

00:56:46 ◼   ► That will work for a while

00:56:48 ◼   ► but eventually they're gonna be using things that are so incredibly old and

00:56:52 ◼   ► The transition from that super old thing to the super new thing is much more painful than a series of small ones

00:56:56 ◼   ► so the policy I take with my family is continual small updates and

00:57:00 ◼   ► Leading eventually to replacing their computers every like five years or something reasonable like that

00:57:05 ◼   ► If that's viable in your family, I recommend that approach

00:57:07 ◼   ► You have to know when to stop obviously, you know, my dad has like a white MacBook that yeah

00:57:13 ◼   ► We're not updating that anymore. Like even at their updates are available for it

00:57:17 ◼   ► You just you have to stop at some place like 2 gigs of RAM or something and saying like that

00:57:20 ◼   ► So you have to know when to stop but during the useful lifetime of like fairly recent hardware

00:57:25 ◼   ► Keep the updates going install the security update to update their flash for them because yes, they need to have flash installed

00:57:30 ◼   ► You know make sure you know check desk check their discs for your error

00:57:34 ◼   ► HFS plus errors repair that is do a full backup for them do a full backup for them before they do anything

00:57:40 ◼   ► I whenever my parents visit I back up their computers to my sonology

00:57:43 ◼   ► Just you know just for peace of mind and like lone bill recently my mother emailed me and said I think I deleted my whole

00:57:48 ◼   ► iPhone library well good news. I have her entire

00:57:50 ◼   ► Sonology I have no way to get it to her until the next time we see each other because I'm not gonna try to upload

00:57:58 ◼   ► 48 gigs over her insane terrible cable connection, but

00:58:01 ◼   ► You know sort of sort of like

00:58:04 ◼   ► changing the oil changing all the fluids swapping out the air filters checking the tire pressure the equivalent of that and

00:58:10 ◼   ► my main recommendation is if you're going to do those type of things and

00:58:14 ◼   ► Try to make a complete backup of their system before you start doing that stuff

00:58:18 ◼   ► So worst worst case scenario and you totally hose their system, which can happen

00:58:22 ◼   ► You can just be like well this this visit is a wash

00:58:25 ◼   ► I'm just gonna restore you from the backup that I made

00:58:27 ◼   ► The only tricky thing in there is do you do HFS plus repair before or after you do the backup?

00:58:32 ◼   ► Wait, so what is the right answer? I'm curious. I

00:58:37 ◼   ► Usually do the backup before because it is possible to make things worse by trying to repair each of us plus corruption

00:58:45 ◼   ► I like to just say this is the state the disc is in I'm going to try to back it up in this state

00:58:50 ◼   ► If I do the repair after that and it finds tons of errors and it successfully repairs them you can do a

00:58:55 ◼   ► Second backup after that and just ditch your first backup if it tries to do an incremental repair

00:59:00 ◼   ► After that and hoses things at least you can restore from whatever you had before

00:59:04 ◼   ► There's no perfect answer because there are still situations where they just could be so hosed that the backup doesn't catch this entire

00:59:08 ◼   ► Directory tree because it's like some kind of corruption and then you can't get it from backup because you didn't back it up and trying

00:59:14 ◼   ► To repair it also hoses the desk. I mean, what are you gonna do if you have a disk in this situation?

00:59:18 ◼   ► There's no move that is safe like there is no way forward except for

00:59:21 ◼   ► Maybe disk warrior which is the king of I will resurrect this disk from hfsplus corruption

00:59:26 ◼   ► Yeah tough choices, but if you keep doing that on a regular basis and especially because people who aren't like us don't have

00:59:34 ◼   ► Literally four million files on their boot disks they have a smaller number of files, and they don't have as much stuff

00:59:40 ◼   ► So it's it's a tractable amount of stuff

00:59:42 ◼   ► All right Marco. Do you have any such tips? I know that um you've talked in the past about how?

00:59:47 ◼   ► going and visiting your mom can be a little challenging

00:59:51 ◼   ► in this department.

00:59:52 ◼   ► So anything you would like to share?

00:59:55 ◼   ► - I don't really need to ever do anything anymore.

00:59:57 ◼   ► Like occasionally she'll have a problem,

00:59:59 ◼   ► like hey, you know, by the way,

01:00:01 ◼   ► my computer hasn't been charging for the last two weeks

01:00:04 ◼   ► and I've just been using it for five minutes a day

01:00:07 ◼   ► and hoping it doesn't die.

01:00:08 ◼   ► Can you maybe do something about it?

01:00:09 ◼   ► Yeah, okay, you can tell me earlier.

01:00:11 ◼   ► - That's what I talk about, the people who will like

01:00:13 ◼   ► silently suffer and limp along with like this situation.

01:00:16 ◼   ► Like you wouldn't think that's acceptable,

01:00:18 ◼   ► but it's like, what do you mean it won't charge?

01:00:20 ◼   ► How have you been using it?

01:00:21 ◼   ► I just use it a little bit each day.

01:00:22 ◼   ► - Right, yeah. - Like that's crazy,

01:00:23 ◼   ► but people will do that because they'll be like,

01:00:25 ◼   ► I'll just wait until next time I see Marco.

01:00:27 ◼   ► - Yeah, it'll probably last.

01:00:28 ◼   ► Yeah, so there's stuff like that occasionally,

01:00:30 ◼   ► but really it's pretty rare.

01:00:32 ◼   ► A while ago, she first learned how to use a computer,

01:00:37 ◼   ► maybe seven or eight years ago,

01:00:39 ◼   ► somebody handed her down an old iBook.

01:00:43 ◼   ► And I mean, it was old and in terrible shape

01:00:45 ◼   ► even when she got it, because she got it from some friend

01:00:48 ◼   ► who was handing it down and it was pretty worthless

01:00:50 ◼   ► even then, and she used it into the ground.

01:00:52 ◼   ► I mean, it was really, really bad.

01:00:56 ◼   ► But she learned how to use it.

01:00:57 ◼   ► And so one time I was there for Thanksgiving,

01:01:01 ◼   ► I don't know, a few years ago, I think 2011-ish era,

01:01:05 ◼   ► 'cause I'm thinking, well, we got her,

01:01:07 ◼   ► and we decided to just get her a new MacBook Air,

01:01:11 ◼   ► 'cause it was right after, it was like the 2011 model,

01:01:14 ◼   ► I think, was that the one where the MacBook Air

01:01:15 ◼   ► became really good, like the second generation.

01:01:17 ◼   ► Anyway, around then, so we just got her a new MacBook Air,

01:01:20 ◼   ► and she's still using that one, and it's been fine.

01:01:22 ◼   ► It's been awesome.

01:01:23 ◼   ► The one thing I would recommend,

01:01:25 ◼   ► as I said during the ad read,

01:01:26 ◼   ► and as I said in the past,

01:01:27 ◼   ► is install an online backup program.

01:01:29 ◼   ► I use Backblaze, and so that's what I install.

01:01:31 ◼   ► That covers a lot of your Synology restoration.

01:01:34 ◼   ► Obviously, it's not perfect,

01:01:35 ◼   ► and it wouldn't help you restore 40 gigs faster

01:01:39 ◼   ► to her computer, necessarily,

01:01:41 ◼   ► if the problem is her connection.

01:01:42 ◼   ► But I installed back please on my mom's computer.

01:01:45 ◼   ► The entire backup set of what she really needs

01:01:48 ◼   ► to be backed up was only like 28 gigs or 30 gigs.

01:01:51 ◼   ► It was not a whole lot, it's mostly just photos

01:01:53 ◼   ► and a handful of documents and emails.

01:01:57 ◼   ► It wasn't a whole lot of data,

01:01:58 ◼   ► so yeah, I think it was like 30 gigs.

01:02:00 ◼   ► And that's it.

01:02:01 ◼   ► - Problem with online backups is unless it's a relative

01:02:04 ◼   ► that you're close enough to that you're going to pay

01:02:05 ◼   ► the bill for them, trying to convince someone

01:02:08 ◼   ► that it's worth $5 a month to do a backup

01:02:10 ◼   ► actually surprisingly hard because it's like you know, you know who buys batteries again all over again

01:02:16 ◼   ► like it just seems like something you shouldn't have to spend money for even though it is a tiny amount of money and you cannot

01:02:20 ◼   ► Express to them how important it is to have backups and how this is such a small amount of money

01:02:24 ◼   ► But you just sound like you're selling like the extended warranty and best buy to them because they're

01:02:27 ◼   ► Apparently suspicious of this. So if it's your parents you can just buy it for them and just say you're you're this is a new

01:02:34 ◼   ► Thing you have now don't worry if you don't don't even tell them it costs money

01:02:36 ◼   ► They don't need to know it costs money, right?

01:02:38 ◼   ► But if it's you know a distant cousin or something

01:02:40 ◼   ► Maybe you don't feel like paying their $5 a month bill, and then you're stuck with like trying to have that argument

01:02:44 ◼   ► Time machine is even harder because they have to have a second disk and yeah

01:02:49 ◼   ► It's a backup is still a bit of a challenge

01:02:52 ◼   ► But it's something you should at least at least discuss depending on how you know it's like the what was that thing Casey the?

01:02:59 ◼   ► Messaging medium pyramid, what was it called?

01:03:02 ◼   ► Communication pyramid, it's I think what we call the communication pyramid. Yeah, this is like the

01:03:07 ◼   ► the technology pyramid, depending on how close you are to the person, should you talk to

01:03:13 ◼   ► them about backups, should you talk to them about security updates, should you talk to

01:03:17 ◼   ► them about Flash?

01:03:19 ◼   ► The closer you are, the more sensitive subjects you can bring up.

01:03:22 ◼   ► Mom, we have to talk.

01:03:23 ◼   ► The other thing these days is that I think most, you know, not everyone has a computer

01:03:28 ◼   ► that they maintain or care about, but increasingly people have things like smartphones or iPads

01:03:32 ◼   ► and stuff like that, and dealing with that, especially when they advent of iOS 8, when

01:03:37 ◼   ► My parents visited recently, I updated them to iOS 8 and I had to do it through iTunes

01:03:41 ◼   ► because they were at their storage limits or close to them or thought they were at their

01:03:44 ◼   ► storage limits and they really just had a bunch of crap that they could delete and they

01:03:47 ◼   ► really weren't using even half of the space.

01:03:49 ◼   ► But anyway, doing those type of updates either because they've been dismissing them and not

01:03:54 ◼   ► allowing them to happen because they've been nervous or because they think they're out

01:03:57 ◼   ► of space or because they're legitimately out of space, helping people with their big yellow

01:04:00 ◼   ► other bar in iTunes that they can't figure out how to get rid of, updating their apps,

01:04:06 ◼   ► Look at the apps that are installed on their iOS device.

01:04:09 ◼   ► Are they running like a free ad festooned,

01:04:12 ◼   ► disgusting iOS app that you know

01:04:15 ◼   ► there is a really awesome 99 cent alternative for?

01:04:18 ◼   ► Buy them the 99 cent alternative.

01:04:20 ◼   ► You know, like you can, you know,

01:04:22 ◼   ► you're not getting rid of their other one or whatever,

01:04:23 ◼   ► but if you know that there is a better,

01:04:25 ◼   ► whatever app out there that does this job better,

01:04:27 ◼   ► a better free one or a better 99 cent one,

01:04:29 ◼   ► just, you know, have them enter their password,

01:04:32 ◼   ► stuff a dollar bill in their pocket,

01:04:33 ◼   ► You know you can you can make their life a lot better that way and if they don't like it

01:04:37 ◼   ► IOS is easy enough they can still delete the thing you just bought for them and go back to their old terrible

01:04:42 ◼   ► infest and piece of crap

01:04:44 ◼   ► You just because people go to the App Store and they don't know which applications are good or better

01:04:50 ◼   ► They just do a search and you know what comes up in the search we've talked about this before just terrible keyword spam fake

01:04:57 ◼   ► Applications that I mean it's not malware. They're not viruses, but they're as close as you can get without actually being a malware virus

01:05:03 ◼   ► They're just and they'll only ever use free apps. So they go to that first

01:05:06 ◼   ► Yeah, right and they're just at a front front to all of your senses like

01:05:09 ◼   ► audio-visual and just performance wise and yeah, so that is a

01:05:15 ◼   ► Nice thing you can do for their iOS devices and iOS devices are just so much more resilient and easy that you can be more

01:05:23 ◼   ► Free with what you're doing a because like I said

01:05:25 ◼   ► You can just keep stuffing dollar bills into their pockets as you buy 99 cent apps

01:05:28 ◼   ► You don't have to worry about the money. Everything is so cheap

01:05:31 ◼   ► They usually in my experience most people usually know how to delete an app

01:05:35 ◼   ► If they've done it once like they figure it out, and they're not afraid of it

01:05:38 ◼   ► They just go it makes the icon go away like visually it seems simple so conceptually

01:05:42 ◼   ► They're they're comfortable with it despite. You know that it's under the covers. You know slightly more complicated than that

01:05:47 ◼   ► So and you can always restore it to me your press purchases are always there

01:05:51 ◼   ► You don't have to worry about did I buy it in the Mac App Store did I not buy in the Mac App Store?

01:05:54 ◼   ► so all the advantages of the Iowa of the iOS ecosystem mean you can be slightly more aggressive there with your

01:06:00 ◼   ► helping hand

01:06:02 ◼   ► Alright, why don't you tell us about one last thing? That's awesome Marco. I would love to we're finally sponsored this week by Warby Parker

01:06:08 ◼   ► Warby Parker believes that prescription glasses simply should not cost $300 or more

01:06:13 ◼   ► They bypass the traditional channels and sell higher quality better-looking prescription

01:06:17 ◼   ► Eyeglasses online at a fraction of the usual retail prices starting at just $95

01:06:23 ◼   ► dollars go to warby Parker comm slash ATP

01:06:26 ◼   ► warby Parker comm slash ATP

01:06:30 ◼   ► Warby Parker's designs are vintage inspired with a contemporary twist.

01:06:34 ◼   ► Every pair is custom fit with anti-reflective, anti-glare polycarbonate prescription lenses.

01:06:40 ◼   ► And every pair comes with a very nice hard case and cleaning cloth so you don't need

01:06:43 ◼   ► to buy any overpriced accessories.

01:06:45 ◼   ► They now offer progressive lenses.

01:06:47 ◼   ► Is that like their replacement for bifocals?

01:06:49 ◼   ► I think that's what they mean.

01:06:51 ◼   ► I'm not quite at the bifocal stage yet but I'm getting close.

01:06:54 ◼   ► Progressive lenses have a distance prescription at the top and transition to a reading lens

01:06:57 ◼   ► near the bottom.

01:06:58 ◼   ► sounds like a modern bifocal but a better version because it's gradual.

01:07:02 ◼   ► Warby Parker's progressive lenses are digital freeform lenses which is the most advanced

01:07:05 ◼   ► progressive technology with higher precision and a larger field of vision than traditional

01:07:09 ◼   ► progressive lenses.

01:07:11 ◼   ► Now buying glasses online sounds like it would be risky.

01:07:13 ◼   ► How would you know for instance whether they would fit or how they would look on you?

01:07:17 ◼   ► Well Warby Parker's website has a helpful tool that uses your computer's webcam to

01:07:20 ◼   ► give you a preview of how the glasses will look on your face.

01:07:23 ◼   ► They can even help measure your eyes and face with the webcam thing to help get your fit

01:07:28 ◼   ► exactly right. In fact, that's how I don't wear glasses, but we did this for my wife

01:07:33 ◼   ► back when they first sponsored us and she measured with the webcam thing and the measurements

01:07:37 ◼   ► we then later on got the official measurements from her eye doctor and the ones that Warry

01:07:43 ◼   ► Parker took were perfect. They were exactly the right measurements. Anyway, the best part

01:07:47 ◼   ► of all this is their home try-on program. You can borrow up to five pairs of glasses

01:07:52 ◼   ► risk-free, they ship to you for free, and then you try them on in the comfort of your

01:07:57 ◼   ► home for five days. Then you can send them back with a pre-paid return label. So you've

01:08:01 ◼   ► paid nothing this whole time. They shipped them to you for free, you had to keep them

01:08:04 ◼   ► for five days, send them back with a pre-paid return label, and there's no obligation to

01:08:08 ◼   ► buy after that. So you can get the five frames, try them out for five days, send them back,

01:08:14 ◼   ► and never buy anything again. They're confident though that you probably will, that's why

01:08:17 ◼   ► they offer this. And I gotta say, this stuff is great. My wife now has I think three pairs

01:08:22 ◼   ► of their glasses and they're really good. They also have sunglasses. They have prescription

01:08:26 ◼   ► and non-prescription polarized sunglasses.

01:08:29 ◼   ► Lots of great options there.

01:08:30 ◼   ► I love polarized sunglasses.

01:08:32 ◼   ► If you have not ever worn polarized sunglasses

01:08:33 ◼   ► or if you've only worn bad polarized sunglasses,

01:08:36 ◼   ► you don't know what you're missing.

01:08:37 ◼   ► You gotta try it.

01:08:38 ◼   ► And $95 even for good polarized sunglasses

01:08:42 ◼   ► is a really good price.

01:08:44 ◼   ► Anyway, go to warbyparker.com/atp.

01:08:47 ◼   ► Check out their great selection

01:08:48 ◼   ► of premium quality affordable eyewear.

01:08:51 ◼   ► Get a home try-on kit risk-free.

01:08:53 ◼   ► Thanks a lot to Warby Parker

01:08:54 ◼   ► for sponsoring our show once again.

01:08:57 ◼   ► - So I wanted to talk about something really quickly

01:08:59 ◼   ► and I wish I could do a really good Italian accent

01:09:02 ◼   ► because if I could, I would do this entire small segment

01:09:05 ◼   ► in an Italian accent, but I cannot,

01:09:08 ◼   ► so I'll just do it as me.

01:09:10 ◼   ► I've been playing with Workflow lately,

01:09:12 ◼   ► which is an app for iOS that lets you automate stuff.

01:09:15 ◼   ► Have either of you guys played with this?

01:09:17 ◼   ► - I keep hearing about it and here's my problem

01:09:20 ◼   ► and maybe you can help me with it.

01:09:21 ◼   ► I'm trying to think of things I do with my iOS devices,

01:09:26 ◼   ► whether it's a phone or iPad or whatever,

01:09:30 ◼   ► that are repetitive and tedious that I could automate.

01:09:34 ◼   ► And I'm having trouble coming up with one.

01:09:36 ◼   ► I'm sure they're there, but like I have blind spots,

01:09:39 ◼   ► either I have blind spots for them,

01:09:40 ◼   ► or I've trained myself not to do

01:09:42 ◼   ► even remotely complicated things with my iOS devices

01:09:44 ◼   ► because like it's too tedious.

01:09:46 ◼   ► So I'm still working on it,

01:09:47 ◼   ► but I haven't even downloaded the app.

01:09:48 ◼   ► But as soon as I can think of one,

01:09:49 ◼   ► I will download it because I want to try it out.

01:09:51 ◼   ► - Can I have it automatically delete on my support email?

01:09:54 ◼   ► (laughing)

01:09:55 ◼   ► - I don't think so, but I like where your head's at.

01:09:57 ◼   ► So I was, the reason I didn't download it for a long time,

01:10:01 ◼   ► even after Federico Viticci said a thousand times

01:10:04 ◼   ► that it was amazing, and it is his influence

01:10:09 ◼   ► that makes me wish that I could do this entire segment

01:10:12 ◼   ► in an Italian accent, but anyway.

01:10:14 ◼   ► - We would love to hear you attempt it.

01:10:16 ◼   ► - No, it's not happening.

01:10:17 ◼   ► The thing is that I wanted to download it

01:10:19 ◼   ► just to see what the hubbub was about.

01:10:21 ◼   ► And when I downloaded it,

01:10:22 ◼   ► I completely agree with you, Jon.

01:10:24 ◼   ► I didn't really know what I was gonna do with this.

01:10:28 ◼   ► I started fiddling and just kind of seeing what I could do.

01:10:30 ◼   ► And I ended up trying to think of,

01:10:33 ◼   ► well, what do I do a lot on my iOS device

01:10:36 ◼   ► that is kind of a pain?

01:10:39 ◼   ► What I came up with was,

01:10:40 ◼   ► I like to download all the copies of ATP and analog

01:10:45 ◼   ► that have ever been posted.

01:10:46 ◼   ► So if for some reason the internet disappeared tomorrow,

01:10:51 ◼   ► I would still have a copy of all of these

01:10:52 ◼   ► and I have them on my Synology.

01:10:55 ◼   ► Yes, it's a little bit weird.

01:10:56 ◼   ► Yes, it's a little crazy, but just bear with me.

01:10:58 ◼   ► And granted, all I'm really talking about

01:11:02 ◼   ► is going to either of these pages,

01:11:05 ◼   ► the analog show page or the ATP show page

01:11:08 ◼   ► and copying the link that's on that page.

01:11:11 ◼   ► But it was a really good example of,

01:11:14 ◼   ► hmm, how could I do this using workflow?

01:11:17 ◼   ► And what I ended up doing was writing

01:11:20 ◼   ► two very different workflows to do exactly that.

01:11:23 ◼   ► So I can jump into workflow

01:11:25 ◼   ► and I have a download the latest ATP workflow

01:11:28 ◼   ► and I can run it.

01:11:28 ◼   ► And what it does is it goes to the RSS feed,

01:11:32 ◼   ► gets the most recent item,

01:11:34 ◼   ► figures out what episode number it is.

01:11:36 ◼   ► And then because Marco's a gentleman

01:11:39 ◼   ► and he uses extremely consistent file names

01:11:43 ◼   ► for every single episode, all I need to do

01:11:45 ◼   ► is figure out what number it is,

01:11:47 ◼   ► and I build a URL out of that,

01:11:49 ◼   ► and then I can open it in the Synology DS download app,

01:11:54 ◼   ► or maybe it's DS file, it doesn't matter,

01:11:55 ◼   ► one of the Synology apps, and it will download it for me.

01:12:00 ◼   ► Stupid, yes.

01:12:02 ◼   ► Pretty simple, yes.

01:12:04 ◼   ► Freaking cool that you can do that with an iOS device, yes.

01:12:07 ◼   ► And so that's a great example.

01:12:09 ◼   ► - So would you say you've been using Workflow

01:12:11 ◼   ► for a few days now and you really like it?

01:12:14 ◼   ► - I would say that.

01:12:15 ◼   ► - I like the idea that you can make your own extensions.

01:12:17 ◼   ► - Yes.

01:12:18 ◼   ► - Like that people would tell you,

01:12:19 ◼   ► you can make a little icon up here

01:12:20 ◼   ► in one of the little sheet type things,

01:12:21 ◼   ► because that's, when I was trying to think of things I do

01:12:23 ◼   ► that are annoying and repetitive,

01:12:24 ◼   ► it's usually because like I'm in one application

01:12:26 ◼   ► and I wanna do something,

01:12:27 ◼   ► but some piece of information is in some other applications,

01:12:29 ◼   ► so I gotta go back and forth or, you know, like,

01:12:31 ◼   ► and it's like, well, in iOS 8 or,

01:12:34 ◼   ► a lot of these applications,

01:12:35 ◼   ► now I can bring up that little sheet

01:12:36 ◼   ► with a little set of icons,

01:12:37 ◼   ► and if I could put an icon there

01:12:39 ◼   ► that would instead of, you know,

01:12:40 ◼   ► send Instapaper, for example, which is great

01:12:42 ◼   ► that that's everywhere now.

01:12:43 ◼   ► I could also, you know, run this workflow on this thing

01:12:46 ◼   ► that I've selected type of thing.

01:12:47 ◼   ► So I'm looking for something like that.

01:12:48 ◼   ► Like your case where you're downloading your things,

01:12:50 ◼   ► that's a thing that you can do with workflow,

01:12:52 ◼   ► but I wouldn't do that all server side.

01:12:53 ◼   ► I wouldn't, you know, your iOS device

01:12:55 ◼   ► doesn't need to be involved in that process at all,

01:12:56 ◼   ► except that you just wanted to do,

01:12:58 ◼   ► you just wanted to try out workflow app.

01:13:00 ◼   ► It's a good thing to play around with it,

01:13:01 ◼   ► but like, why is the iOS device involved

01:13:03 ◼   ► in that process at all?

01:13:04 ◼   ► - And that's a fair point.

01:13:05 ◼   ► So let me give you a more concrete example

01:13:07 ◼   ► that I think you might be interested in,

01:13:09 ◼   ► is I made one to generate affiliate links for Amazon.

01:13:12 ◼   ► So if I'm on Amazon and I want to post about something,

01:13:17 ◼   ► or maybe I just want to send a link to somebody

01:13:19 ◼   ► and hope I get a small kickback,

01:13:21 ◼   ► I have one of the extension style workflows

01:13:24 ◼   ► that will look at the current URL in Safari,

01:13:28 ◼   ► because I'm going to run it from Safari,

01:13:31 ◼   ► and it will generate an Amazon affiliate link

01:13:34 ◼   ► based on that URL.

01:13:35 ◼   ► And so it's like two taps in order to generate an affiliate link.

01:13:40 ◼   ► Now, what I'm not mentioning is I had a JavaScript bookmarklet that did the same

01:13:44 ◼   ► thing, but at least the workflow one automatically copies it to my clipboard

01:13:48 ◼   ► rather than me having to do the whole hover and select or the tap and hold and

01:13:53 ◼   ► select all and copy dance.

01:13:55 ◼   ► And that's really nice.

01:13:56 ◼   ► The one thing though, that I should make clear about what you were talking about,

01:13:59 ◼   ► John, is that, um, when, when you have an extension,

01:14:04 ◼   ► Basically, there is only one icon that is run a workflow.

01:14:08 ◼   ► And then you tap that icon in the extension sheet

01:14:12 ◼   ► or whatever it is, and then workflow pops up and says,

01:14:14 ◼   ► okay, of all of the workflows that you have,

01:14:18 ◼   ► these are the workflows that you've specified

01:14:21 ◼   ► as extension workflows.

01:14:23 ◼   ► So the ATP workflow, for example,

01:14:25 ◼   ► and the analog workflow are not extension workflows.

01:14:28 ◼   ► So I don't see those as options.

01:14:29 ◼   ► However, the Amazon one is,

01:14:31 ◼   ► and so I do see that as an option.

01:14:33 ◼   ► - That makes sense, but I had it in my head

01:14:35 ◼   ► that you could actually put your own icons there.

01:14:37 ◼   ► I'm like, how are they getting away with that?

01:14:38 ◼   ► I guess, you know, the answer is they're not.

01:14:39 ◼   ► - Right, now that you can do that with home screen icons.

01:14:44 ◼   ► And I will say that I thought it was really neat

01:14:47 ◼   ► and I'm probably gonna butcher the technical details,

01:14:48 ◼   ► but it was something along the lines of

01:14:50 ◼   ► when you go to create that home screen icon,

01:14:53 ◼   ► what it does is it gives you a URL

01:14:56 ◼   ► with a whole bunch of HTML in a data blob, you know,

01:15:00 ◼   ► like you can do in CSS to like put an image

01:15:02 ◼   ► actually within CSS.

01:15:05 ◼   ► It was like, you know, base64 encoded binary data

01:15:08 ◼   ► or something like that, which I thought was kind of neat.

01:15:10 ◼   ► But anyway, I don't really have a particular angle here

01:15:14 ◼   ► to be honest with you, other than to say,

01:15:16 ◼   ► it's really, really cool that you can do this on iOS.

01:15:20 ◼   ► And I've actually really enjoyed the technical challenge

01:15:23 ◼   ► of doing something that would probably take me

01:15:25 ◼   ► five lines of code in any given programming language.

01:15:28 ◼   ► It doesn't matter which one you're talking about,

01:15:30 ◼   ► but doing it with the limited tools

01:15:33 ◼   ► that workflow gives you.

01:15:34 ◼   ► And to be fair, I mean, the tools that workflow gives you

01:15:37 ◼   ► are impressive for sure, but they're still very limited.

01:15:43 ◼   ► You know, I think the most,

01:15:44 ◼   ► basically you have a for each block and an if block,

01:15:48 ◼   ► and that's about as complex as it gets

01:15:50 ◼   ► in terms of control structures.

01:15:52 ◼   ► But just being, challenging myself to figure out ways

01:15:55 ◼   ► to do this with these primitive tools,

01:15:59 ◼   ► I've actually really enjoyed it, almost like a game.

01:16:02 ◼   ► But yeah, I don't know if it's,

01:16:05 ◼   ► it's probably one of those things where I now have a hammer

01:16:08 ◼   ► so everything looks like a nail, but it's been fun

01:16:11 ◼   ► and I definitely encourage everyone to try it out.

01:16:13 ◼   ► It's a really cool app.

01:16:14 ◼   ► - Thanks a lot to our three sponsors this week,

01:16:17 ◼   ► Backblaze, Automattic, and Warby Parker,

01:16:19 ◼   ► and we will see you next week.

01:16:21 ◼   ► (upbeat music)

01:16:24 ◼   ► ♪ Now the show is over ♪

01:16:26 ◼   ► ♪ They didn't even mean to begin ♪

01:16:29 ◼   ► 'Cause it was accidental

01:16:31 ◼   ► (Accidental)

01:16:32 ◼   ► Oh, it was accidental

01:16:33 ◼   ► (Accidental)

01:16:34 ◼   ► John didn't do any research

01:16:36 ◼   ► Margo and Casey wouldn't let him

01:16:39 ◼   ► 'Cause it was accidental

01:16:41 ◼   ► (Accidental)

01:16:42 ◼   ► Oh, it was accidental

01:16:43 ◼   ► (Accidental)

01:16:44 ◼   ► And you can find the show notes at ATP.fm

01:16:50 ◼   ► And if you're into Twitter

01:16:53 ◼   ► You can follow them

01:16:55 ◼   ► ♪ C-A-S-E-Y-L-I-S-S ♪

01:16:59 ◼   ► ♪ So that's Casey Liss ♪

01:17:00 ◼   ► ♪ M-A-R-C-O-A-R-M ♪

01:17:03 ◼   ► ♪ N-T-M-A-R-C-O-R-M-N ♪

01:17:06 ◼   ► ♪ S-I-R-A-C ♪

01:17:08 ◼   ► ♪ U-S-A-C-R-A-C-U-S-A ♪

01:17:11 ◼   ► ♪ It's accidental ♪

01:17:12 ◼   ► ♪ It's accidental ♪

01:17:14 ◼   ► ♪ They didn't mean to ♪

01:17:16 ◼   ► ♪ Accidental ♪

01:17:18 ◼   ► ♪ Accidental ♪

01:17:19 ◼   ► ♪ Tech podcast ♪

01:17:21 ◼   ► ♪ So long ♪

01:17:23 ◼   ► A little tiny bit of real-time follow-up from Slade 401 in the chat room that we should have talked about in the

01:17:29 ◼   ► People suffering in silence one more thing to add to the list Slade says today

01:17:34 ◼   ► I found out that my mother's white MacBook battery has been bulging for a month without oh my god

01:17:38 ◼   ► Oh, so add this to the list do do the thing that you do like in driver ed where you walk around the car

01:17:44 ◼   ► There is no, you know metal sticking out of the wheels that everything is

01:17:49 ◼   ► okay that there's no small children or cats under the wheels that you're gonna run over like check the hardware is the battery bulging like

01:17:56 ◼   ► Is there you know is there water on the keyboard does it look like you know just give the thing and in my parents can

01:18:02 ◼   ► I don't understand why they can't keep their laptops clean, but they are filthy so I clean them

01:18:06 ◼   ► You know clean the thing from top to bottom scrub off all this stuff like

01:18:09 ◼   ► Check the hardware check for hardware problems and check for hardware condition and the second thing that that

01:18:15 ◼   ► Just came to mind when Casey was talking about the the programming thing

01:18:19 ◼   ► What was it with workflows of that being able to do program retype stuff cut this this is vaguely tangentially related

01:18:26 ◼   ► There's an iOS app called hopscotch that I've had on my kids iPad for a long time. It's supposed to be like a

01:18:31 ◼   ► Teach kids programming type of thing and they haven't been into I'm like final just let it sit there

01:18:37 ◼   ► And I launched it recently to try to show yet my son who I think maybe you'd be interested in it

01:18:42 ◼   ► You know whatever and I was trying to show him something. Let me launch this, you know, my first little programming thing

01:18:46 ◼   ► It's got a little you can drag out a little loop block and you can drag out a little action thing you can make

01:18:51 ◼   ► Variables and the variables will become little draggable things and you know like it's supposed to be really nice

01:18:55 ◼   ► It starts off with like it was little sprites of like a little monster

01:18:58 ◼   ► And then you know it's a one-inch to play button the monster should and you could say like move to XY

01:19:02 ◼   ► Coordinated or whatever save something in a variable so I tried to make the simplest possible program

01:19:09 ◼   ► You can make which is I wanted to have two monsters chase each other around the screen

01:19:13 ◼   ► And in the one sitting that I had with this for five minutes

01:19:17 ◼   ► I could not for the life of me figure out how to do this

01:19:19 ◼   ► I'm pretty sure hopscotch is not Turing complete because it doesn't have a conditional

01:19:23 ◼   ► It has a loop but it doesn't have a conditional and you need if and while I don't think it's even friggin Turing complete

01:19:29 ◼   ► You could not I could not get their position and save them into variables

01:19:32 ◼   ► I could not I couldn't I couldn't do math as far as I mean

01:19:35 ◼   ► I'm not saying the program doesn't do this

01:19:36 ◼   ► I'm saying I could not as an actual programmer with like 20 years experience figure out how to do math on the

01:19:41 ◼   ► the XY coordinates to say move towards.

01:19:43 ◼   ► - Was it notification center?

01:19:45 ◼   ► - To move towards, yeah right, no calculations or a lot.

01:19:49 ◼   ► To make one character move towards another, right?

01:19:51 ◼   ► I can make them chase each other,

01:19:52 ◼   ► but they would only, they would warp to their positions.

01:19:55 ◼   ► Like I had them sort of chasing,

01:19:57 ◼   ► but I couldn't make it move smoothly

01:19:58 ◼   ► because I needed to like, you know,

01:19:59 ◼   ► draw a line between where they are now

01:20:01 ◼   ► and their destination and move along that line

01:20:03 ◼   ► in an increment so they move smoothly.

01:20:05 ◼   ► The best I could do was make them chase each other

01:20:07 ◼   ► by sort of like teleporting around the board,

01:20:09 ◼   ► you know, like they're warping.

01:20:11 ◼   ► It's just, and then I said, you know what?

01:20:13 ◼   ► I can't recommend this.

01:20:15 ◼   ► I was talking with my children, like, you know what?

01:20:16 ◼   ► Screw this program.

01:20:17 ◼   ► Like, I'm sorry to the hopscotch people

01:20:19 ◼   ► if conditionals are in there and I couldn't figure it out.

01:20:21 ◼   ► Maybe it's like a mental block where actual programmers

01:20:24 ◼   ► should never use this program,

01:20:25 ◼   ► but that was super disappointing.

01:20:28 ◼   ► - Yeah, I've never tried that.

01:20:30 ◼   ► - You should download it.

01:20:31 ◼   ► I think it's free.

01:20:32 ◼   ► You should download it anyway and just try it to see like,

01:20:33 ◼   ► can you use a kid's programming program

01:20:36 ◼   ► to do anything useful?

01:20:37 ◼   ► And I failed, I could not.

01:20:39 ◼   ► - Nice.

01:20:40 ◼   ► - I would also add, did we mention

01:20:42 ◼   ► to the parent tech checklist thing,

01:20:43 ◼   ► did we mention iCloud backups for on-device photos?

01:20:47 ◼   ► - That's a good idea, to see what the deal,

01:20:49 ◼   ► I mean, that falls into the category of backups,

01:20:50 ◼   ► but yeah, see what the deal is with their pictures.

01:20:52 ◼   ► - Right, 'cause like, don't assume

01:20:53 ◼   ► that your family members ever actually sync their phone

01:20:56 ◼   ► to their computer.

01:20:58 ◼   ► Set up iCloud backup on their device,

01:21:00 ◼   ► because, oh, I've known so many friends and family members

01:21:03 ◼   ► who have lost photos of their kids and stuff,

01:21:06 ◼   ► because they like lost a phone or a phone broke,

01:21:08 ◼   ► and it was never backed up anywhere.

01:21:10 ◼   ► It was never synced to anything,

01:21:11 ◼   ► it was never backed up to iCloud.

01:21:13 ◼   ► A lot of times this preceded iCloud backup being a thing,

01:21:15 ◼   ► but really, I mean, that's an easy one,

01:21:18 ◼   ► 'cause they can probably get away with the free plan,

01:21:21 ◼   ► so that's an easy one.

01:21:22 ◼   ► Make sure their devices are configured

01:21:23 ◼   ► for iCloud photo backup.

01:21:25 ◼   ► - That is a really good call.

01:21:27 ◼   ► - Yeah, another topic related to a follow-up thing.

01:21:30 ◼   ► One of you had put into the follow-up

01:21:32 ◼   ► about when we were talking about the spaces

01:21:34 ◼   ► in the Google Authenticator thing,

01:21:36 ◼   ► and so I was like, did we mention

01:21:37 ◼   ► that you can copy and paste those numbers.

01:21:40 ◼   ► And in last week's show that came up,

01:21:42 ◼   ► I was talking about having to remember the numbers,

01:21:44 ◼   ► transcribe them, which is what I would have to do

01:21:46 ◼   ► without a copy and paste utility

01:21:47 ◼   ► when I'm going between Mac and some other device

01:21:50 ◼   ► and my phone.

01:21:52 ◼   ► But when you're on the iOS device,

01:21:53 ◼   ► you can just hold down the thing

01:21:55 ◼   ► and copy and paste the thing, which I'd forgotten.

01:21:56 ◼   ► And so that happened in the show.

01:21:58 ◼   ► And I think it was maybe like a minute

01:22:00 ◼   ► or half a minute after we discussed that,

01:22:02 ◼   ► I relayed that information.

01:22:04 ◼   ► So at one point I said, "Oh, I had to remember the numbers

01:22:05 ◼   ► "and it was a pain and blah, blah, blah."

01:22:07 ◼   ► And then I said, oh, someone in the chat room

01:22:08 ◼   ► has just reminded me that you can just copy and paste them

01:22:10 ◼   ► if you're doing it on iOS, right?

01:22:12 ◼   ► The show came out, what, yesterday sometime?

01:22:15 ◼   ► Or was it Thursday?

01:22:16 ◼   ► Yesterday, I think.

01:22:17 ◼   ► And now I'm just watching the litany of tweets

01:22:19 ◼   ► of people telling me, did you know you can copy and paste

01:22:21 ◼   ► the numbers in Google Authenticator?

01:22:22 ◼   ► Hey, did you know you can just copy them?

01:22:24 ◼   ► Hey, dummy, you can copy and paste the numbers

01:22:25 ◼   ► in Google Authenticator, right?

01:22:27 ◼   ► And every time this happens, I am just,

01:22:29 ◼   ► so there's two things here.

01:22:30 ◼   ► One, I'm surprised at how many people tweet

01:22:32 ◼   ► like in real time, and I know the temptation.

01:22:34 ◼   ► I listen to Roderick on the line all the time,

01:22:36 ◼   ► and I say, do not tweet anything at them,

01:22:39 ◼   ► wait until you hear the whole show.

01:22:40 ◼   ► 'Cause you have no idea if they're gonna get to this,

01:22:42 ◼   ► you know, I know it's difficult,

01:22:43 ◼   ► but just wait for the next hour, hear the whole show,

01:22:46 ◼   ► then send your snarky tweet.

01:22:47 ◼   ► 'Cause you don't know how to put up during the thing, right?

01:22:49 ◼   ► - I should put this in as an overcast feature

01:22:51 ◼   ► of delayed tweeting.

01:22:52 ◼   ► - Yeah, like, I mean, you can take it back, all right?

01:22:55 ◼   ► So here's the thing with that.

01:22:56 ◼   ► So I see these tweets, right?

01:22:58 ◼   ► Now I'm faced with this decision.

01:23:00 ◼   ► Do I send a reply to the tweet that says,

01:23:04 ◼   ► just keep listening to this show?

01:23:05 ◼   ► because I'm a Twitter completionist,

01:23:08 ◼   ► I haven't yet seen the three tweets from now,

01:23:10 ◼   ► they're gonna say,

01:23:11 ◼   ► "Oh, I guess you just said that on the show, sorry."

01:23:13 ◼   ► So then I would be replying to their tweet

01:23:15 ◼   ► before they get to that.

01:23:17 ◼   ► And here's where I think I came down on this,

01:23:19 ◼   ► I've been thinking about it for a while.

01:23:20 ◼   ► I think it's okay,

01:23:23 ◼   ► I'm gonna say that it's okay for me to send that tweet,

01:23:26 ◼   ► even though seven tweets up, they could be saying that,

01:23:28 ◼   ► because Twitter is much more real time

01:23:31 ◼   ► than a recorded podcast.

01:23:32 ◼   ► Like we're talking,

01:23:34 ◼   ► I'm only like five minutes from,

01:23:35 ◼   ► maybe I'm actually literally in real time.

01:23:37 ◼   ► Like I'm just maybe as I'm typing the tweet there,

01:23:41 ◼   ► uh oh thing comes up.

01:23:42 ◼   ► 'Cause they're listening in real time while they're tweeting

01:23:43 ◼   ► too, it's obvious they're not there,

01:23:45 ◼   ► paused the program or didn't pause it.

01:23:46 ◼   ► As soon as they heard it, they sent the tweet, right?

01:23:49 ◼   ► I think that is a real time medium.

01:23:52 ◼   ► It's a reasonable expectation for me

01:23:54 ◼   ► to be able to reply to them.

01:23:55 ◼   ► Just because I'm not completely caught up

01:23:56 ◼   ► in this five tweets above my timeline,

01:23:58 ◼   ► I think it's okay to reply to that one.

01:24:00 ◼   ► Whereas if you are listening to a thing

01:24:03 ◼   ► that was recorded two days ago that's an hour long,

01:24:05 ◼   ► that time gap is too big

01:24:06 ◼   ► and you should wait for the program to be complete.

01:24:09 ◼   ► Most of the time I don't send a reply,

01:24:10 ◼   ► I just wait and scroll up and then see if they,

01:24:13 ◼   ► I assume they feel an appropriate amount of shame

01:24:15 ◼   ► when 30 seconds later on the podcast we describe this,

01:24:18 ◼   ► but I think it's two different things there.

01:24:20 ◼   ► If I'm super far behind, if I'm catching up from a day,

01:24:23 ◼   ► then I should probably hold off until I'm caught up.

01:24:25 ◼   ► But the problem with that is my Twitter client

01:24:26 ◼   ► doesn't have a good way to sort of,

01:24:28 ◼   ► oh, remember you're supposed to reply to this tweet

01:24:30 ◼   ► from five hours ago later,

01:24:32 ◼   ► It doesn't have a good sort of drafts bin where I can say when I catch up

01:24:34 ◼   ► Yes, this tweet is still legitimate. I'll send it or whatever

01:24:37 ◼   ► Anyway, the moral of the story is the only thing I can say unambiguously is if you are listening to a recorded

01:24:42 ◼   ► But not you know not live an actual pre-recorded podcast

01:24:45 ◼   ► Wait until you're done listening to the podcast to send snarky tweets or email to the people because you don't know

01:24:50 ◼   ► What they might have talked about later in the show. I am so guilty of doing this and and I agree with you

01:24:57 ◼   ► Nothing you said is wrong, but I do this all the time like poor faith and Jason especially

01:25:02 ◼   ► I feel like they get it the worst and

01:25:04 ◼   ► Luckily for them. I am really behind on IRL talks. So

01:25:08 ◼   ► Well, maybe that's unlucky actually because I've forgotten when they tweet about something relevant to that week's episode

01:25:14 ◼   ► But I do this all the time and I need to not do it

01:25:17 ◼   ► I think it's okay

01:25:18 ◼   ► If you're listening to an old episode like if you are three episodes behind and you you complete

01:25:23 ◼   ► The an episode as long as you say in the tweet, I'm not caught up yet

01:25:27 ◼   ► but I just listened to episode whatever whatever and so on and so forth is that that

01:25:32 ◼   ► Shows them that you listen to a whole episode. You're not replying in real time. You're admitting you're not caught up

01:25:37 ◼   ► So there's a possibility that this was talked about later

01:25:39 ◼   ► But you really feel like you really really need to get this out of your system

01:25:41 ◼   ► Like that's probably the only way you can do that

01:25:44 ◼   ► But that's that's I think still feel like that's different than in the middle of the show

01:25:47 ◼   ► Especially if the correction comes like a couple of seconds later a minute later. Oh

01:25:51 ◼   ► Hey someone sent me a link to something in the URLs as hopscotch is now Turing complete, so I guess it wasn't it just

01:25:58 ◼   ► understand you got a

01:26:00 ◼   ► Programming thing I mean I it could have been like Turing complete in the same way that C++ templates are Turing complete like not intentionally

01:26:07 ◼   ► so

01:26:08 ◼   ► Or send them out send mail is during complete, but we've added conditional statements good job guys

01:26:13 ◼   ► I mean presumably hopscotch is written by programmers. I know that's kind of you know a tautology, but like they know about programming, right?

01:26:21 ◼   ► The question is can you write hopscotch using hopscotch no no I couldn't even make two monsters chase each other I

01:26:27 ◼   ► Don't know let's do math yet, so I probably still can't do motion grab

01:26:31 ◼   ► I mean, maybe that's too complicated like once you give something give me something visual

01:26:34 ◼   ► I end up trying to like write a game like I want to oh

01:26:36 ◼   ► Yeah, I want to I'm not trying to give people like velocity vectors and stuff

01:26:40 ◼   ► I'm just trying to you know statically move them around a grid

01:26:42 ◼   ► You know in in at some speed so they smoothly animate, but anyway, maybe I'll run the updater and see if it gets any better

01:26:50 ◼   ► better.

01:26:51 ◼   ► Yeah, you wanna do titles?

01:26:52 ◼   ► None of these are particularly holiday-ish, are they, huh?

01:26:56 ◼   ► We didn't really talk, I mean, besides the fact that we said we were gonna be traveling

01:27:00 ◼   ► and you should fix your parents' stuff.

01:27:01 ◼   ► Well, we talk about things you do when you go with your family.

01:27:03 ◼   ► I guess we didn't say anything family-related, we just had a bunch of tech nerd crap.

01:27:06 ◼   ► Yeah, that's us.

01:27:08 ◼   ► Also tell your family that you love them.

01:27:10 ◼   ► I guess.

01:27:11 ◼   ► Do that, too.

01:27:12 ◼   ► After you update the ROAS.

01:27:16 ◼   ► Gotta have priorities.

01:27:17 ◼   ► [ Silence ]