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 ]