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: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: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: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: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: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: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: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: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: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: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: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
◼
►
- 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: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:45
◼
►
I've always been like a low level nerd.
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: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: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: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: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: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: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: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: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: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:11
◼
►
Do that, too.
01:27:12
◼
►
After you update the ROAS.
01:27:16
◼
►
Gotta have priorities.