WEBVTT

1
00:00:07.080 --> 00:00:12.279
Hello everybody, and welcome to this
episode of JavaScript Jabber. My name is

2
00:00:12.320 --> 00:00:16.559
Steve Edwards, coming from a very
frigid Portland, Oregon. And with me

3
00:00:16.640 --> 00:00:20.280
today I have Max Miliano. I
guess you go by Max, right,

4
00:00:20.480 --> 00:00:26.000
yeah, fine, Fersmand is coming
to us from Winnos, Irish, Argentina.

5
00:00:26.199 --> 00:00:28.960
So Max wants to tell us a
little bit about yourself and your history

6
00:00:29.000 --> 00:00:32.600
and what you do. Yeah,
sure, well thank you for the avitation.

7
00:00:32.840 --> 00:00:36.200
So yeah, I can go by
Max. I'm a mobile web developer.

8
00:00:36.280 --> 00:00:40.240
That's how I define myself today.
I've been doing web development for twenty

9
00:00:40.479 --> 00:00:44.880
something years. Before then, I
started being doing mobile around two thousand and

10
00:00:45.000 --> 00:00:48.200
one, so before the iPhone,
before the Android. In the middle,

11
00:00:48.240 --> 00:00:52.719
I've been doing a lot of Worships
trainings, you know, for a couple

12
00:00:52.719 --> 00:00:58.799
of books, mostly on mobile and
web both. These days, I'm more

13
00:00:58.799 --> 00:01:03.120
focused on baw Us progressive webs as
well as web performance. Okay, so

14
00:01:03.239 --> 00:01:06.640
let's go back a little bit.
You said you've been doing this for about

15
00:01:06.640 --> 00:01:08.599
twenty four years. So if you're
like me, that mede you started doing

16
00:01:08.640 --> 00:01:15.599
web development when the first tools you
either handwriting HTML and CSS, or maybe

17
00:01:15.599 --> 00:01:22.439
you were using tools like Microsoft Front
page, dream weaver what we're using when

18
00:01:22.439 --> 00:01:26.159
you started out? So when I
started, I was using adit from MS

19
00:01:26.239 --> 00:01:30.359
does. Okay, that was my
first website with those three one. I

20
00:01:30.400 --> 00:01:34.640
think I didn't have Windows ninety five
yet, so then yes, I moved

21
00:01:34.640 --> 00:01:38.480
into front page. By My first
websites were p R HTML. There were

22
00:01:38.519 --> 00:01:42.439
no CSS at the time. And
yeah, then I moved into front Page

23
00:01:42.519 --> 00:01:46.560
ninety eight I think, and then
I was a green we were user for

24
00:01:46.560 --> 00:01:49.879
a couple of years before going back
to a simple editor. So what was

25
00:01:49.920 --> 00:01:53.879
your first scripting language was at ASP? Yeah, it was ASP, the

26
00:01:53.920 --> 00:01:57.879
classic ESP before PHP, but yeah, SP. I think I did something

27
00:01:57.920 --> 00:02:02.640
on Burl before that, but most
of the time was APP. Yeah,

28
00:02:02.760 --> 00:02:07.560
I started I think about ninety eight
probably. Yeah, where I started was

29
00:02:07.680 --> 00:02:13.000
ninety eight with front Page, and
I went down the PHP route on my

30
00:02:13.199 --> 00:02:17.479
SQL. And I can remember doing
my first website and straight HTML just using

31
00:02:17.520 --> 00:02:24.159
a JavaScript goodies or HTML goodies and
using the web space provided by my hosting

32
00:02:24.159 --> 00:02:28.639
provider, which was AT and T
Broadband at the time. My first two

33
00:02:28.639 --> 00:02:32.120
websites were I hosted in GeoCities.
Oh, there you go. That's old

34
00:02:32.159 --> 00:02:36.879
school for those of us who remember
GeoCities. Okay, so you started doing

35
00:02:36.919 --> 00:02:42.240
web development and then when you start
doing it, say professionally here, I

36
00:02:42.240 --> 00:02:46.960
think it was immediately because I started
doing HTML. Before that, I was

37
00:02:46.000 --> 00:02:52.199
doing some cleeper apps, like some
software for MSS. But I started professionally

38
00:02:52.199 --> 00:02:55.759
doing web pretty fast. I think
it was my third website, but the

39
00:02:55.800 --> 00:03:00.719
first one I started to some money
from it. So it's probably in nineteen

40
00:03:00.879 --> 00:03:06.479
seven six something like that. Yeah, here, I am still working on

41
00:03:06.520 --> 00:03:12.560
the same HTML language exactly. I
can remember when the Internet first started coming

42
00:03:12.560 --> 00:03:15.400
out, like ninety two, ninety
three. I think I remember using my

43
00:03:15.439 --> 00:03:20.879
friends dial up connection taking download a
photo and he's yelling at me because I'm

44
00:03:20.919 --> 00:03:23.159
using up all his hours. And
so you started getting into mobile. So

45
00:03:23.360 --> 00:03:28.800
I remember the first iPhone coming out
around two thousand and eight, somewhere around

46
00:03:28.800 --> 00:03:32.319
there if I remember right. I
just remember where seven was the first one.

47
00:03:32.479 --> 00:03:37.479
I thought that sixty years before that. So I started with WML,

48
00:03:38.159 --> 00:03:43.319
so it was on WML and WML
script, so there were four websites for

49
00:03:43.800 --> 00:03:50.240
for what patients, then moving to
Sham to Java Micro Edition. Then I

50
00:03:50.240 --> 00:03:54.120
did BlackBerry is Seen Beyond and many
other platsforms before the iPhone and animal,

51
00:03:54.360 --> 00:04:00.360
But yeah, I find I started
into and seven and then we started seeing

52
00:04:00.360 --> 00:04:04.240
Android in the market as well.
Right, okay, so mobile developments,

53
00:04:03.319 --> 00:04:09.199
So what's been what have you worked
on over the years with the mobile development

54
00:04:09.240 --> 00:04:13.319
where you're just basically doing websites that
you could see on a phone, and

55
00:04:13.360 --> 00:04:16.920
what was the progression from doing that
into doing mobile specific apps like we see

56
00:04:16.959 --> 00:04:21.160
today? Might like to see that. I always try to offer services or

57
00:04:21.240 --> 00:04:26.920
products over mobile, and then the
technology that I was using might be different.

58
00:04:26.959 --> 00:04:30.800
So sometimes it was a website or
web web based technology, sometimes it

59
00:04:30.920 --> 00:04:36.160
was native. So I've been working
from probably fifteen s the case for doing

60
00:04:36.240 --> 00:04:41.519
native as well. But I always
try to bring the web into the mobile

61
00:04:41.560 --> 00:04:46.040
space. So I always liked the
idea of the web, the open web,

62
00:04:46.079 --> 00:04:49.680
and bringing that into the mobile space. So yeah, I did phone

63
00:04:49.759 --> 00:04:56.639
app before that, I did some
other web solutions available for some platforms like

64
00:04:56.680 --> 00:05:03.079
BlackBerry. These days it's mostly about
PWAs or pressive web ups. But I'm

65
00:05:03.079 --> 00:05:09.240
also doing worships and deliverery trainings on
nating television. Next week I'm traveling to

66
00:05:09.360 --> 00:05:12.639
the Bay Area to deliberate training for
a company, and it will be a

67
00:05:12.720 --> 00:05:16.120
swift OBJECTIVEC. So I'm also a
native developer, but I part of my

68
00:05:16.279 --> 00:05:20.839
heart is with the web, so
I always tried to bring the web into

69
00:05:20.879 --> 00:05:24.519
the mobile space. Okay, yeah, so going back a little bit,

70
00:05:24.600 --> 00:05:28.480
I can I can recall I was
doing a jupil development for for a number

71
00:05:28.519 --> 00:05:31.519
of years if people have heard me
mentioned, and when I first started getting

72
00:05:31.560 --> 00:05:35.399
to mobile development or when sites that
I was working on needed to do that.

73
00:05:35.439 --> 00:05:40.959
The way we did it was separate
themes, so you had one for

74
00:05:41.079 --> 00:05:44.959
desktop and then you'd create a whole
separate theme for mobile that was designed differently

75
00:05:45.000 --> 00:05:48.680
and so on. So you're basically
maintaining two things for two different presentations for

76
00:05:48.720 --> 00:05:54.240
the same content. And then you
started getting things like Bootstrap. I believe

77
00:05:54.279 --> 00:05:57.160
that was with the first sort of
framework that came out that was it was

78
00:05:57.160 --> 00:06:00.639
interually a Twitter Bootstrap that was designed
to accommodate you whether you're on a desktop

79
00:06:00.720 --> 00:06:04.160
and then a mobile. Is that
your recollection in terms of the progression,

80
00:06:04.720 --> 00:06:09.240
So yeah, I have I have
other other things before that, so I

81
00:06:09.839 --> 00:06:14.199
think if you remember the first the
first thing was was a mobile version of

82
00:06:14.240 --> 00:06:17.480
the website that was completely in the
different language that was WML. After that

83
00:06:17.759 --> 00:06:21.800
we have the first iPhone. When
the first iPhone, we started to support

84
00:06:21.879 --> 00:06:25.879
the desktop web on mobile, so
it was the first time you can actually

85
00:06:25.920 --> 00:06:30.720
render a desktop website on a mobile
device. And then we had a pinch

86
00:06:30.839 --> 00:06:34.000
Chest tour soon in then we moved
into this idea that yeah, maybe we

87
00:06:34.040 --> 00:06:40.399
need to do something special, and
we had a moment ventually out so n

88
00:06:40.519 --> 00:06:45.480
dot CNN dot com like you separate
HTML version and then responsive web design appear,

89
00:06:45.959 --> 00:06:48.959
that's what you are paying. So
the idea that one code can serve

90
00:06:49.360 --> 00:06:56.279
different platforms. The problem was that
we didn't realize that responsive web design had

91
00:06:56.319 --> 00:07:01.000
a very high cost web performance for
mobile devices. So then that's why after

92
00:07:01.079 --> 00:07:06.759
a while we started to see different
approaches, not just responsible design. Okay,

93
00:07:06.879 --> 00:07:11.720
so the cost was in what the
extra JavaScript or the extra code that

94
00:07:11.839 --> 00:07:15.319
was needed to handle the responsive changes. Yeah, it's it's JavaScript, but

95
00:07:15.360 --> 00:07:19.920
it's also CSS and resourcely so just
to keep you an idea, but if

96
00:07:19.959 --> 00:07:25.439
you have different CSS fights with even
with media query, the browser needs to

97
00:07:25.480 --> 00:07:30.399
download all the CSS fights. Even
if the media quarried falls regarding what performance,

98
00:07:30.439 --> 00:07:33.439
the browser will not render any pixel
on the screen at least at the

99
00:07:33.519 --> 00:07:40.040
time if all the CSS was not
downloaded on parts. So talking about mobile

100
00:07:40.079 --> 00:07:45.279
phones and CELAR networks and probably slow
three G networks at the time, that

101
00:07:45.480 --> 00:07:49.040
was a problem because then the mobile
phone needed to download on parts a lot

102
00:07:49.079 --> 00:07:55.199
to CSS that would never use and
that lead to some performance issues on mobile

103
00:07:55.199 --> 00:08:01.360
devices and conversion problems. That's why
a lot of big companies have to move

104
00:08:01.480 --> 00:08:07.959
back to the and dot version of
the time because they were having money problems,

105
00:08:07.040 --> 00:08:11.639
so they were having less users,
less pisits because basically people were not

106
00:08:11.839 --> 00:08:16.879
waiting for the page low. I
mean, that's still a problem anytime I

107
00:08:16.959 --> 00:08:22.680
heard a discussion about developing for mobile
and performance. I mean places like maybe

108
00:08:22.680 --> 00:08:26.120
if I'm sitting here, you know, my desktop with my powerful iMac and

109
00:08:26.319 --> 00:08:28.000
you know, nice piece, and
something's going to be pretty quick for me,

110
00:08:28.319 --> 00:08:31.600
or you know on a phone on
a new Android or Samsung or iPhone

111
00:08:31.679 --> 00:08:35.360
or whatever. But a lot of
other parts of the world, you know,

112
00:08:35.440 --> 00:08:39.879
maybe you have older phones and you've
got slower downloads, and so it's

113
00:08:39.919 --> 00:08:43.279
always an issue of dealing with performance
if you want your customers to be able

114
00:08:43.320 --> 00:08:48.399
to see your site. So there
are a couple of views on this,

115
00:08:50.200 --> 00:08:52.840
this problem on the network. Let
me let me tell you this. First,

116
00:08:52.120 --> 00:08:54.879
let's say that everyone is in four
G. Let's say that. Of

117
00:08:56.000 --> 00:08:58.720
course it's not true, but let's
say that everyone is in four GLD.

118
00:08:58.360 --> 00:09:01.600
The problem with that is that we
are thinking about the band with and yeah,

119
00:09:01.759 --> 00:09:05.080
four G is better than three G
and TG, but in terms of

120
00:09:05.240 --> 00:09:11.480
latency, it's better, but it's
ten times bigger than the latency that we

121
00:09:11.679 --> 00:09:16.240
have at home on a cable or
DSL connection. And the latency is the

122
00:09:16.320 --> 00:09:20.399
time that it takes to get the
bytes from the server per TCP packet.

123
00:09:20.879 --> 00:09:26.320
So even those four G lucky users
that today is around forty five percent of

124
00:09:26.480 --> 00:09:33.120
the users worldwide, even those users, they have a big latency on every

125
00:09:33.200 --> 00:09:37.000
TCP packet. So that's the problem. That's why we t have a performance

126
00:09:37.039 --> 00:09:39.279
issue. Let me tell you this. So I'm traveling a lot. I've

127
00:09:39.279 --> 00:09:43.519
been to seventy two countries so far, seventy two and different cities, and

128
00:09:43.679 --> 00:09:48.960
sometimes I'm in the middle of Silicon
Valley. I remember this having my late's

129
00:09:50.000 --> 00:09:54.519
iPhone with a four G data plan
and I was being downgraded to two G.

130
00:09:56.399 --> 00:10:00.799
So this is still something that happens
when you get out of the city.

131
00:10:01.200 --> 00:10:03.879
Sometimes you get out of main cities
and you are in three G or

132
00:10:03.000 --> 00:10:07.840
JUG, but even in four G. Okay, we need to remember the

133
00:10:07.919 --> 00:10:11.120
latency. That's the biggest problems that
we have. No matter where you are,

134
00:10:11.799 --> 00:10:16.200
you can still have a slow connection
even if you're in in an area

135
00:10:16.240 --> 00:10:18.440
that has four G. Yeah,
just a little bit outside of town.

136
00:10:18.559 --> 00:10:24.279
Okay. So the solution is PWAs
in. Is that sort of seen as

137
00:10:24.080 --> 00:10:30.080
the solution from a performance standpoint for
some of these issues? Or I guess

138
00:10:30.600 --> 00:10:31.840
let's go this way. What is
a PWA? Can you give me a

139
00:10:31.879 --> 00:10:37.000
definition? I've heard various I know
there are various rules that you have to

140
00:10:37.039 --> 00:10:39.639
have, but what is it that
makes up a PWA and what is the

141
00:10:39.720 --> 00:10:43.440
benefit of a PWA. Okay,
let me give you my definition, because

142
00:10:43.480 --> 00:10:46.200
there is no definition. So that's
the first thing. There is no real

143
00:10:46.279 --> 00:10:52.399
definition of pws. But a PWA
shows the designed pattern, like responsive design,

144
00:10:52.440 --> 00:10:56.840
it's a design pattern, a set
of best practices in this case to

145
00:10:56.000 --> 00:11:01.480
create web apps that are install level
and they can work offline and fast on

146
00:11:01.600 --> 00:11:05.919
several operating systems. So it's not
that they can act as a normal website

147
00:11:07.039 --> 00:11:11.159
inside the oustes out the browser window. And also they can be installed,

148
00:11:11.320 --> 00:11:16.799
and after they're installed, they have
a first class experience of do os meaning

149
00:11:16.919 --> 00:11:20.919
in a stand alone Windows on macof
Linux or Windows, or meaning being an

150
00:11:20.960 --> 00:11:26.399
APK an Android package and Android,
or being a stand alone app on iOS.

151
00:11:26.960 --> 00:11:31.360
So that's a baby. So it's
a website using new APIs and new

152
00:11:33.000 --> 00:11:39.000
solutions from browsers vendors. The will
let us install the app and make that

153
00:11:39.159 --> 00:11:43.320
up available offline, and after it's
installed it looks like any other app on

154
00:11:43.360 --> 00:11:48.080
the system. That's roughly the ideas
which a design pattern. So then if

155
00:11:48.120 --> 00:11:52.120
it's going to be able to run
locally with the idea that it doesn't have

156
00:11:52.200 --> 00:11:56.840
an Internet connection and offline mode,
so that means that it's generally going to

157
00:11:56.919 --> 00:12:01.639
have some sort of local data storage. Yeah, exactly. For that,

158
00:12:01.799 --> 00:12:05.200
we have the service worker. So
if you have a horrible service worker,

159
00:12:05.240 --> 00:12:09.519
it's a childscript file that we set
in our web and that service worker will

160
00:12:09.519 --> 00:12:15.519
be responsible for cashing and serving those
files when the user is software, but

161
00:12:15.600 --> 00:12:18.919
also when the user is online because
maybe we are online, but yeah,

162
00:12:18.960 --> 00:12:22.799
we want to be passed. We
want to react like a native app.

163
00:12:22.879 --> 00:12:26.799
So that's the service worker will serve
those files locally. In fact, I

164
00:12:26.960 --> 00:12:31.399
usually one like to say that the
service worker is like a web server that

165
00:12:31.559 --> 00:12:37.000
we are installing in the client.
Britain, in childscript, a service worker

166
00:12:37.080 --> 00:12:39.840
is mandatory for a PWA, so
it's the brain. It's the brain of

167
00:12:41.159 --> 00:12:45.960
a PWA. Okay, so that's
a service worker. It's purely JavaScript then

168
00:12:46.399 --> 00:12:50.559
yes, okay, and it's currently
compatible with all the browser it's available.

169
00:12:50.960 --> 00:12:56.320
That API is available on the latest
version of every major browser Safari, Edge,

170
00:12:56.840 --> 00:13:01.600
Chrome and Firefox, an Opera,
so it's in the browser. But

171
00:13:01.919 --> 00:13:05.679
if you're running okay, now I'm
confused. So if it's a browser standard,

172
00:13:05.759 --> 00:13:11.000
if you're running natively, it's somewhere
they needn't havember browser. The browser

173
00:13:11.120 --> 00:13:13.480
is always there even if you don't
see the browser. So on aw A

174
00:13:13.799 --> 00:13:18.840
on a pw A, when even
when an APK is install, APK is

175
00:13:18.840 --> 00:13:22.519
the android package on Android, so
when you starty a PAW an Android,

176
00:13:22.759 --> 00:13:26.240
you actually get a native package.
But inside that NATI package, the only

177
00:13:26.320 --> 00:13:31.600
thing that is a store is a
URL and Chrome or the browser you're using

178
00:13:33.120 --> 00:13:37.360
is the one that is going to
render your app without the browser UI,

179
00:13:37.519 --> 00:13:39.600
so in full screen mode or a
stand alone mode, but this is still

180
00:13:39.679 --> 00:13:45.759
the browser Okay, so your your
app is being rendered, So is the

181
00:13:45.840 --> 00:13:50.879
rendering handled by the native libraries or
the native toolkits for you know, rendering

182
00:13:50.919 --> 00:13:54.600
a toolbar or a window. That's
still all the browser, that's from you.

183
00:13:54.720 --> 00:13:58.200
No, it's it's all the browser. It's not like React Native or

184
00:13:58.320 --> 00:14:03.799
native screen. In those cases you
use JavaScript, but then that childscript will

185
00:14:03.919 --> 00:14:09.879
render on the screen native components from
the from the se case, from my

186
00:14:09.000 --> 00:14:13.799
us around at p w A will
use just HTM and FFS to render the

187
00:14:13.840 --> 00:14:18.840
content on the script or SBG or
or web web content in general. You

188
00:14:18.879 --> 00:14:22.679
can use web assembly if you want, but you cannot access native a PI.

189
00:14:22.919 --> 00:14:26.759
So if you want to access the
five system, for example, you

190
00:14:26.879 --> 00:14:31.759
need to wait for the browser to
have support for that a bi Okay,

191
00:14:31.919 --> 00:14:35.879
I see. So it's basically you
are using the browser in both places,

192
00:14:35.559 --> 00:14:39.440
whether you're using that on the browser, on the phone, the browsers.

193
00:14:39.840 --> 00:14:43.480
Okay, that makes a little more
sense. So are there any other additional

194
00:14:43.879 --> 00:14:48.399
pieces of code or files that you
have to have for p w A other

195
00:14:48.519 --> 00:14:52.200
than your service worker. Yeah,
you need at least one more one more

196
00:14:52.320 --> 00:14:56.320
file. It's known as the web
manifest. It's just a Jason file.

197
00:14:56.399 --> 00:15:01.919
That you link into your htmal document
the jason file. We have the meta

198
00:15:01.039 --> 00:15:05.559
data for the US for example,
that inkuilds the app name, the icons,

199
00:15:07.120 --> 00:15:09.480
and other meta data that is useful
for that OS. In particularly,

200
00:15:09.679 --> 00:15:13.039
it's on a standard from the W
three C so it's not OS specific,

201
00:15:13.200 --> 00:15:18.679
but the browser will use information from
that manifest to actually integrate with the US

202
00:15:20.159 --> 00:15:22.679
when that app is install. So
let me tell you this, that's not

203
00:15:22.759 --> 00:15:28.240
the only way that we have to
distribute an app the browser today. You

204
00:15:28.320 --> 00:15:33.519
can actually distribute officially. Bwas on
some app stores, for example Google Blaystore.

205
00:15:35.000 --> 00:15:37.720
So there is a way that we
have an official way from the Chrome

206
00:15:37.799 --> 00:15:43.480
team. You create what I like
you to call a bww A launcher,

207
00:15:43.240 --> 00:15:48.360
and that's a native APK that will
not contain your chanldscrep or egitimeal files,

208
00:15:48.399 --> 00:15:52.240
will not contain the files which has
contained the u URL. Then the user

209
00:15:52.279 --> 00:15:54.120
will download the app from the store
like any other app from the store.

210
00:15:54.480 --> 00:15:58.919
But then Chrome a visible Chrome because
the user is not actually seeing any Chrome

211
00:16:00.080 --> 00:16:04.440
user interface. Chrome will take care
of downloading the resources, update in the

212
00:16:04.559 --> 00:16:10.279
resourcing when when resources are changing,
server file, and rendering the app on

213
00:16:10.360 --> 00:16:12.919
the screen. Okay, so you
provide RL that has all the reasons for

214
00:16:14.039 --> 00:16:18.840
your particular application that you have to
store somewhere, manage somewhere. Yeah,

215
00:16:18.879 --> 00:16:22.399
the service worker, the service worker, that little piece of childcrip that we

216
00:16:22.600 --> 00:16:26.159
write with with the p w A
will be responsible when you open the app

217
00:16:26.200 --> 00:16:32.000
for the first time to cash all
the resources that are needed later. That

218
00:16:32.200 --> 00:16:34.919
cash is not the normal standard cache
that if the user clears, the cash

219
00:16:36.240 --> 00:16:40.440
will be deleted, so it has
a different life cycle. You can even

220
00:16:40.600 --> 00:16:45.159
request with some childcreap apies, you
can request a way for the so the

221
00:16:45.200 --> 00:16:49.360
browser will not delete those files,
so a way to guarantee that those files

222
00:16:49.399 --> 00:16:52.919
will be there no matter what.
Okay, yeah, it's a separate cash,

223
00:16:52.919 --> 00:16:56.480
so it's not going to get cleaned
out automatically and you're going to lose

224
00:16:56.519 --> 00:17:00.600
all of your application right exactly.
So when you're hosting file these resources that

225
00:17:00.919 --> 00:17:04.960
the service workers calling, is that
something you store like in a GitHub repost

226
00:17:06.039 --> 00:17:08.880
somewhere. It's just that GTP So
wherever wherever you want to score, you

227
00:17:10.200 --> 00:17:15.319
just need a g GPS. So
okay, standard hosting. You can still

228
00:17:15.400 --> 00:17:19.640
use FTP service if you want an
Amazon A three bucket or drama anywhere.

229
00:17:21.519 --> 00:17:23.680
Static assets, like like a normal
website. So we are not changing the

230
00:17:25.160 --> 00:17:29.519
foundations of how the web works.
It's just a website that is used in

231
00:17:29.559 --> 00:17:33.960
a new API and what that API
is there, then that app come be

232
00:17:33.039 --> 00:17:37.880
installed. Okay, So if I'm
loading a PWA on my say, on

233
00:17:38.000 --> 00:17:41.680
my computer, on my desktop.
You said the service workers you know,

234
00:17:41.720 --> 00:17:47.279
working Safari, Chrome, Firefox and
so on and so forth, which browser

235
00:17:47.519 --> 00:17:51.440
is it using for doing all the
rendering? So that's a good question.

236
00:17:51.599 --> 00:17:56.079
So the answer is it depends on
how are you installing or how are from

237
00:17:56.160 --> 00:18:00.359
where are you installing the app?
So to install a PWh should they you

238
00:18:00.519 --> 00:18:03.640
have a couple of options. Typically
you're installing a p w A from a

239
00:18:03.759 --> 00:18:07.279
browser. That browser is going to
be the engine. So if you have

240
00:18:07.960 --> 00:18:11.920
two browsers and Android, for example, Firefox and Chrome, and you instill

241
00:18:11.960 --> 00:18:15.599
the same pew A twice, you
cannot do that with Chrome, but let's

242
00:18:15.599 --> 00:18:21.079
say you can. You will have
two instances of the same paw A using

243
00:18:21.119 --> 00:18:23.039
two different browsers. I mean,
it's not common an Android that that will

244
00:18:23.160 --> 00:18:26.279
happen anyway. So the answer is
that it will use the engine that you

245
00:18:26.480 --> 00:18:30.519
used to install the app. What
happens with what happens with the store.

246
00:18:30.960 --> 00:18:34.200
If you're installing the app from the
app store, in this case Google Play

247
00:18:34.240 --> 00:18:37.759
Store for Android, let's talk about
the Android only for now. So in

248
00:18:37.920 --> 00:18:42.240
that case, it will use your
default browser. I mean the browser needs

249
00:18:42.279 --> 00:18:48.279
to support the new service. For
PWA's Chrome is supporting that service and also

250
00:18:48.359 --> 00:18:53.599
something Internet browser and Firefox is about
to support that pretty soon. So if

251
00:18:53.640 --> 00:18:57.680
you're a Firefox user, then if
you install apps PWA is from the store,

252
00:18:57.960 --> 00:19:00.759
and by the way, as a
user, you don't know if it's

253
00:19:00.799 --> 00:19:04.039
a pw A or not. But
if you're a Firefox user, then that

254
00:19:04.160 --> 00:19:08.319
pw A will use the Firefox engine. Okay, so yeah, it just

255
00:19:08.400 --> 00:19:14.200
depends on however you downloaded ten.
So going to this scenario where you said

256
00:19:14.279 --> 00:19:18.200
maybe you could have two instances of
the same p w A on the phone,

257
00:19:18.680 --> 00:19:21.799
does that mean they both would have
their own local data stores? And

258
00:19:22.440 --> 00:19:25.720
well, it depends on the engine. On iOS, for example, each

259
00:19:25.839 --> 00:19:30.759
instance will have its own separate storage. So for example Tinder Tinder dot com.

260
00:19:30.799 --> 00:19:33.559
I'm sure if you know that I
haven't used Tinder, but anyway,

261
00:19:33.880 --> 00:19:37.839
yes, okay, thin that if
you go to tinner dot com you can

262
00:19:37.880 --> 00:19:44.160
actually install it from your iPhone,
Android, or desktop computer and on iOS.

263
00:19:44.799 --> 00:19:48.200
So every time you install Tinder you
will have a different instance, and

264
00:19:48.279 --> 00:19:52.799
you can have one account to icon
because each instance we have its own local

265
00:19:52.880 --> 00:19:57.599
storage, cookies, indexv and even
its own storage for the files. On

266
00:19:57.759 --> 00:20:03.000
Android's if you use Chrome, you
won't be able to start more than one

267
00:20:03.480 --> 00:20:07.599
because Chrome is actually creating an APK
in ash it won't re install another one.

268
00:20:07.759 --> 00:20:10.160
But if you use other browsers,
you can actually have more than one

269
00:20:10.240 --> 00:20:12.799
instance, and in this case it
will use the endshine of each browser.

270
00:20:14.039 --> 00:20:15.640
But of course it's not shared with
the others. Okay, does it makes

271
00:20:15.640 --> 00:20:21.000
any sense? So sandbox is w
there is? Yeah, exactly exactly,

272
00:20:21.400 --> 00:20:25.680
But let me let me add this
because that's important on Android and dexktop when

273
00:20:25.759 --> 00:20:29.839
those Mac Linux and chromeo ads.
When you are installed in a pw A

274
00:20:30.279 --> 00:20:37.359
with Chrome, the storage of that
app is shared with the normal Chrome,

275
00:20:37.880 --> 00:20:41.799
which means that if you are already
logged in in dinner dot com the website,

276
00:20:42.359 --> 00:20:47.480
you are also locked in in tender
dot com the app, because it's

277
00:20:47.559 --> 00:20:51.920
it's the same Chrome enshine and it's
sharing the storage. Okay, yeah,

278
00:20:51.960 --> 00:20:56.480
that makes sense if I'm writing a
pw A progressive web app. What are

279
00:20:56.519 --> 00:20:59.839
the different tools that I can use
to do it? For instance, can

280
00:20:59.880 --> 00:21:06.799
I use like a view, Angular
React framework with something like React Native or

281
00:21:07.079 --> 00:21:11.200
some of the native scripts. Is
it only for you know, Swift or

282
00:21:11.279 --> 00:21:15.640
Objective c or the tools used for
Android. What are the different tools that

283
00:21:15.720 --> 00:21:19.160
you can use to write pw A. Okay, you will definitely use tool

284
00:21:19.240 --> 00:21:23.480
chains from the web space, not
from the native space. So no j

285
00:21:23.599 --> 00:21:30.400
GPC, no Swift, no React
Native. You can use Angular, React

286
00:21:30.839 --> 00:21:37.440
JS or View. In fact,
the CLIs from these tools creates pw as

287
00:21:37.480 --> 00:21:41.000
for you if you enable. In
the case of Angular, it's an schematic.

288
00:21:41.079 --> 00:21:42.880
It's like plugging, So if you
enable the p w A plugging,

289
00:21:44.200 --> 00:21:47.839
Angular will create the p w A
and the service worker for you, and

290
00:21:47.960 --> 00:21:51.839
the same you see if you use
create React app to create React ups.

291
00:21:52.119 --> 00:21:55.960
So it's always on the on the
web space. So this is we're talking

292
00:21:55.960 --> 00:22:02.160
about W three c APIs. Everything
is done with childscript and web technologies and

293
00:22:02.319 --> 00:22:07.359
browser engines, so it's on that
side. In the case that you want

294
00:22:07.440 --> 00:22:11.640
to publish your PEW in the Google
Place store to create that launchair, you

295
00:22:11.799 --> 00:22:17.079
might want to use under a Studio. That's the say, the native SDK

296
00:22:17.920 --> 00:22:22.559
for native apps, but also there
are some freeware and open source tools on

297
00:22:22.640 --> 00:22:26.759
the web that will do that for
you. Microsoft has launched pw A builder

298
00:22:27.079 --> 00:22:32.079
pw A builder dot com and that
website. We create that launcher for you,

299
00:22:32.240 --> 00:22:34.720
so you don't even need to get
into native tools. You just use

300
00:22:36.160 --> 00:22:40.319
Visual Studio, code O, whatever
editor you're using. You publish that on

301
00:22:40.640 --> 00:22:45.519
any posting or cloud based provider and
that's all you need. Okay, So

302
00:22:45.880 --> 00:22:51.079
it's pretty transparent to create your launcher. So you got all these different tools,

303
00:22:51.079 --> 00:22:52.920
but it's definitely web based. Okay, all right, that makes sense.

304
00:22:53.359 --> 00:22:57.720
Anything I'm missing in terms of building
PEDGBA is I think we covered the

305
00:22:59.079 --> 00:23:03.279
what you need. So it's a
web app and then a service worker that

306
00:23:03.519 --> 00:23:07.640
metadata. We've been talking about publishing
the BWA, so you install it from

307
00:23:07.680 --> 00:23:12.759
the browser. That's I think that's
the trickiest part today. So in terms

308
00:23:12.799 --> 00:23:18.359
of how users will know about the
installations or us know about bwuas today,

309
00:23:18.640 --> 00:23:22.599
if you're U seeing Chrome on desktop, maybe you have seen this, maybe

310
00:23:22.680 --> 00:23:26.559
not, but sometimes when you're on
the website that is actually a PWA,

311
00:23:27.160 --> 00:23:30.440
you will see a little install button
of a peers. In the omnibox,

312
00:23:30.519 --> 00:23:34.640
the only box is the urlbar,
so in the url bar and an install

313
00:23:34.960 --> 00:23:40.119
icon with a plus sign will appear
when you're in a PWA, So that's

314
00:23:40.160 --> 00:23:41.960
how users will know, oh,
this website is a PWA. It can

315
00:23:42.000 --> 00:23:48.039
actually install. This is something that
is still unknown from a user's point of

316
00:23:48.119 --> 00:23:52.000
views. Not every user knows about
this, and how are you installing a

317
00:23:52.039 --> 00:23:56.119
website? So this is something that
is getting better with time. The new

318
00:23:56.160 --> 00:24:00.960
browsers. Now you can actually create
your own install button in your own user

319
00:24:00.039 --> 00:24:03.519
interface, so you can have a
button somewhere in your RL say hey,

320
00:24:03.559 --> 00:24:07.680
do you want to install the app? Get here and that will trigger the

321
00:24:07.839 --> 00:24:11.839
installation dialog. This is a tricky
part from a marketing point of view because

322
00:24:11.880 --> 00:24:18.119
you sometimes don't know about this.
Despite that technologies are premature, so an

323
00:24:18.160 --> 00:24:23.119
effort for basic app. Now you
can use a web share. Well,

324
00:24:23.599 --> 00:24:27.640
you can use web payments request payment
API, so all the web APIs available

325
00:24:27.680 --> 00:24:33.160
out there are available on bwas.
So not every app can be a bit

326
00:24:33.200 --> 00:24:38.559
of value because sometimes you actually need
some natives case, but a lot of

327
00:24:38.640 --> 00:24:44.480
apps can be bawwa. So if
your app it's just consuming web content or

328
00:24:44.559 --> 00:24:48.759
web services, which is downloading Jason
Fly from the server and rendering that on

329
00:24:48.839 --> 00:24:52.079
the Spring. Maybe it's a good
candidate for a BWUA because it's just a

330
00:24:52.160 --> 00:24:56.880
website basically. So if you need
to go native with some hardware access,

331
00:24:57.359 --> 00:25:02.960
well then we need to check if
the web technologies and web APIs are mature

332
00:25:03.119 --> 00:25:07.599
enough for that particular approject So I
want to come back to the local storage

333
00:25:07.599 --> 00:25:11.599
real quick. What are the common
tools or is there one or the other

334
00:25:11.680 --> 00:25:15.519
that are used for your local storage? Is just like a local storage in

335
00:25:15.559 --> 00:25:18.519
a browser type thing. You're talking
like, you know databases that you can

336
00:25:18.640 --> 00:25:22.599
like my sq A light for instance, as the one that comes to mind,

337
00:25:22.680 --> 00:25:25.599
or what are the options for that? So for b w A,

338
00:25:25.799 --> 00:25:29.920
we are running under the browser umbrella, right, so that means that we

339
00:25:30.000 --> 00:25:34.480
can only use APIs available from the
browser. So that means that takes seql

340
00:25:34.519 --> 00:25:40.200
Light or my sequel out of the
equation. So what do we have right

341
00:25:40.240 --> 00:25:44.680
now? If we have one storage
known as cash storage. That storage is

342
00:25:44.759 --> 00:25:48.119
for the actual files of the app, so the resources of the app,

343
00:25:48.519 --> 00:25:53.680
the HTMAL, the CSS, and
an emails. On iOS, we have

344
00:25:53.799 --> 00:25:59.039
a limit of fifteen megabytes on all
the other platforms, there is no limits,

345
00:25:59.119 --> 00:26:03.240
so you can actually tell as many
space as you want from the storage.

346
00:26:03.680 --> 00:26:07.000
Then we have the data storage,
so the actual data that the user

347
00:26:07.160 --> 00:26:14.039
is generating or downloading from web services. In that case we can use indextv

348
00:26:14.799 --> 00:26:18.400
that is a no sequel database well
known in the web space today. Or

349
00:26:18.480 --> 00:26:25.640
local storage is for more simple key
value storage that is very limited in space,

350
00:26:26.200 --> 00:26:30.119
so we have one storage for the
actual app and another storage for the

351
00:26:30.240 --> 00:26:33.599
data. Are the limitations the same
for the data storage as for the app

352
00:26:33.640 --> 00:26:38.759
storage? In terms of physical it's
similar, so you have another fifty x

353
00:26:40.079 --> 00:26:45.240
on the index CV for iOS.
In terms of let's say Android, Chrome

354
00:26:45.599 --> 00:26:52.960
Base, typically you can request more
space with user permission, and right now

355
00:26:52.279 --> 00:26:56.160
it's a percentage of your available space. So if you have a device with

356
00:26:56.359 --> 00:27:00.960
no space, no available space in
the memory, or a computer with no

357
00:27:02.400 --> 00:27:06.400
space in the hard drive, maybe
the space that you have will be just

358
00:27:06.680 --> 00:27:10.880
two megs or something like that.
If you have enough space, it's pretty

359
00:27:10.960 --> 00:27:15.200
unlimited. To be honest, today
it sounds scary that every website can store

360
00:27:15.799 --> 00:27:19.039
as much as they want, but
that's basically how it works today. Are

361
00:27:19.079 --> 00:27:22.440
you able to access like an SD
card that's in a mold. Devices are

362
00:27:22.440 --> 00:27:27.599
strictly the internal storage that's on the
phone itself. So today it's a complete

363
00:27:27.839 --> 00:27:32.359
it's an agnostic API, so you
just store somewhere. You don't know where.

364
00:27:33.000 --> 00:27:34.920
It's up to the browser, so
it's a sundbox, so you don't

365
00:27:34.960 --> 00:27:41.119
know exactly the real file system.
Chrome is working on a new API that

366
00:27:41.240 --> 00:27:45.079
it's called the Native file System API
is currently better, so it's started testing

367
00:27:45.160 --> 00:27:48.279
that and it will come in the
next next one or two versions of Chrome.

368
00:27:48.799 --> 00:27:53.440
Only on the Chrome side and with
user permission, you can actually access

369
00:27:53.960 --> 00:27:59.119
the real file system, so you
can actually create a text editor or visually

370
00:27:59.160 --> 00:28:03.160
studio code that is basically childscript.
It can be directly a website or a

371
00:28:03.240 --> 00:28:07.079
BWA. You don't actually need a
native wrapper with that API that's coming.

372
00:28:07.160 --> 00:28:12.400
It's not exactly today, So the
STORAGEEPS that you have available are storageeets that

373
00:28:12.480 --> 00:28:17.720
are diagnostic from the real file system. You shous a store somewhere. You

374
00:28:17.799 --> 00:28:22.240
have an API your store you retrieve, but you don't know exactly from where,

375
00:28:22.799 --> 00:28:23.960
Which is the point of an API
in the first place, right,

376
00:28:25.279 --> 00:28:27.000
You just give it what you need
and it handles everything behind the scenes.

377
00:28:27.039 --> 00:28:32.079
So exactly. Yeah, okay,
that makes sense. I'm just curious,

378
00:28:32.400 --> 00:28:33.960
since you've been doing this for a
while, can you give us some examples

379
00:28:34.079 --> 00:28:37.839
of PWA's that you work on,
you know, just in a generic sense

380
00:28:37.880 --> 00:28:41.079
in terms of functionalities, maybe that
are sort of cool or unique. Well,

381
00:28:41.079 --> 00:28:45.359
in terms of functionality, I've been
working on bwas for games, for

382
00:28:45.920 --> 00:28:52.279
apps that are taking here coats,
apps that are for example, so when

383
00:28:52.279 --> 00:28:55.279
you order a pizza or something like
that, you know, maybe a small

384
00:28:55.359 --> 00:28:57.640
pizza place that you have in town. You don't need a native up and

385
00:28:59.200 --> 00:29:03.279
hire Java Epelow or Cotlin developer for
Android, or a Swiss developer on a

386
00:29:03.440 --> 00:29:08.079
US but you want to have an
order app. Well, maybe pew as

387
00:29:08.400 --> 00:29:14.359
just web so it's simple to maintain
for small businesses. That's one example.

388
00:29:14.440 --> 00:29:17.480
But I've been working for a lot
of I've been consulting for a lot of

389
00:29:17.599 --> 00:29:22.680
big companies doing PWAs. Today,
they're big names doing PWA's like Google,

390
00:29:22.759 --> 00:29:27.440
Maps, Twitter, Tinder. As
I mentioned before, a lot of newspapers

391
00:29:27.720 --> 00:29:33.480
are also having bwua's. I remember
one that is in the store. It's

392
00:29:33.559 --> 00:29:37.119
one a hundred flowers in the US
one hundred flowers. They used to have

393
00:29:37.319 --> 00:29:41.880
a native app on the Google Play
Store and then replace that with the React

394
00:29:42.279 --> 00:29:45.480
based PEWA in the store. So
if you go down to the store and

395
00:29:45.559 --> 00:29:48.720
download that app, you will actually
see a pewgw A. You don't know

396
00:29:48.799 --> 00:29:52.119
that as a user, just an
app, but it's the same code based

397
00:29:52.200 --> 00:29:56.240
because it's not the same codes,
it's actually the same URL that the one

398
00:29:56.279 --> 00:30:00.640
that when you go to the website. That's a big advantage. Oh yeah,

399
00:30:00.759 --> 00:30:03.960
so right, once you use multiple
places I can see. Yeah,

400
00:30:03.160 --> 00:30:07.599
definitely use So another way that I
know that you can, you know,

401
00:30:07.759 --> 00:30:12.519
write web apps and use them on
computers or someone is something like Electron,

402
00:30:14.359 --> 00:30:15.880
you know, slack, you know, it's the classic example that's written in

403
00:30:15.920 --> 00:30:21.599
an Electron. Have you ever compared
like performance or any characteristics between the two.

404
00:30:22.599 --> 00:30:25.599
Well, most of the time,
I mean, as a rule,

405
00:30:26.160 --> 00:30:32.359
bwas will run faster. Why because
you're not actually shipping a Crown engine.

406
00:30:32.599 --> 00:30:36.480
With Electron, you're actually shipping a
Crown engine. And also I know the

407
00:30:36.559 --> 00:30:40.400
engine. That means that when you
have a pw A, you're actually going

408
00:30:40.480 --> 00:30:44.160
to use the engine that you have
in sound in your browser. That's being

409
00:30:44.200 --> 00:30:47.200
a ball with time. So Chrome
every couple of weeks you get a new

410
00:30:47.319 --> 00:30:51.480
version, so your p w A
will always use the latest version of the

411
00:30:51.559 --> 00:30:55.680
engine. So that's why it's typically
faster. But compared with Electron, I

412
00:30:55.759 --> 00:31:00.960
think Electron might disappear in the future
if we have a lot of new API

413
00:31:00.119 --> 00:31:03.640
is coming to the web and Chrome
is working on that with something known as

414
00:31:03.680 --> 00:31:10.000
Project Fugu. Project Fugu it's the
project work that they're trying to bring all

415
00:31:10.079 --> 00:31:12.960
the API from the native world to
the web. So then we don't need

416
00:31:14.119 --> 00:31:18.480
Electron or phone gap anymore. So
we don't need to wrap web into a

417
00:31:18.680 --> 00:31:22.680
native container that might have security issues
because you are not in control of the

418
00:31:22.759 --> 00:31:26.880
engine. Today, electronics are still
needed for some reasons because sometimes you need

419
00:31:26.880 --> 00:31:30.119
to actually execute NATICO, for example
for accessing the five system. So that's

420
00:31:30.160 --> 00:31:34.880
why now they are creating new APIs. But yeah, that's Chrome on the

421
00:31:36.000 --> 00:31:41.039
iOS world or macware. Things are
moving slower, so yeah, you can

422
00:31:41.119 --> 00:31:44.640
start p w as, but they're
not adding so many APIs. They are

423
00:31:44.759 --> 00:31:49.440
usually on Twitter the web keep guys, they tend to be more how can

424
00:31:49.480 --> 00:31:56.599
I say it should be more critical
saying like we don't want to push too

425
00:31:56.720 --> 00:32:00.880
hard on APIs, We want to
be more private when I want to be

426
00:32:00.039 --> 00:32:04.799
more let's say slower, they want
to be slower in terms of implementation of

427
00:32:04.839 --> 00:32:08.359
API. So we have like a
kind of a raise here between Chrome and

428
00:32:08.440 --> 00:32:14.680
Safari. Chrome is trying to push
the limits of the browser a lot and

429
00:32:15.440 --> 00:32:19.920
Apple is trying to play safe.
So at that point, it depends on

430
00:32:19.960 --> 00:32:24.000
the platform that you want to target. Okay, that makes sense, pretty

431
00:32:24.039 --> 00:32:28.839
consistent with what we tend to see
from Apple anyway. Okay, anything else

432
00:32:29.400 --> 00:32:31.680
do you want to cover that I
have failed to bring up? No,

433
00:32:31.839 --> 00:32:36.319
I think the best way to try
peas is to test one. Just go

434
00:32:36.480 --> 00:32:39.799
with a browser to one of the
PW's. There is a place up scope.

435
00:32:40.200 --> 00:32:44.119
Just google a scope. A guide
of pw A is available, so

436
00:32:44.160 --> 00:32:47.359
you just go on install one so
you can actually experience that a lot.

437
00:32:47.759 --> 00:32:52.000
That's the best way to experience a
pw A. Just use your iPhone,

438
00:32:52.400 --> 00:32:55.400
add to the home screen and p
w A, use your Android and try

439
00:32:55.480 --> 00:33:00.480
one so you actually experience how it
looks like and what you can do it.

440
00:33:00.200 --> 00:33:04.640
Okay, So yeah, here's abscope
a p P s c O dot

441
00:33:04.759 --> 00:33:07.200
p E. Yeah, okay,
the u r L it's actually appscope,

442
00:33:07.240 --> 00:33:14.160
so they're using dot domain exactly.
Okay, that's brilliant. Okay. So

443
00:33:15.119 --> 00:33:17.359
noticing here that you've got quite a
number of books, especially, it looks

444
00:33:17.359 --> 00:33:22.599
like you write a lot for O'Reilly. Yeah, high performance mobile web programming

445
00:33:22.640 --> 00:33:27.000
for the mobile web, web mobile. So which ones your most current?

446
00:33:27.519 --> 00:33:32.119
The last one is free for free
on my website. It's hacking web performance,

447
00:33:32.440 --> 00:33:37.039
and the previous one is high performance
Mobile Web. So my books,

448
00:33:37.160 --> 00:33:42.599
the latest books were more targeting on
web performance for mobile, price hacking mobile.

449
00:33:43.200 --> 00:33:45.640
Okay. Yeah, so your site
is f I R T, DOT

450
00:33:45.720 --> 00:33:50.799
and Mobile. That's correct. Yeah, okay, cool, So we'll put

451
00:33:50.839 --> 00:33:52.480
that in the show notes for sure. And then it looks like they can

452
00:33:52.519 --> 00:33:57.240
see links to all your articles and
books and other stuff. Well, great,

453
00:33:57.480 --> 00:34:00.960
thanks, I've learned a lot,
okay about ways and mobile apps.

454
00:34:01.000 --> 00:34:05.480
I've been pretty desktop focused, so
it's good to learn more about the mobile

455
00:34:05.480 --> 00:34:08.199
apps. So now let's go into
picks or you wear picks or what we

456
00:34:08.320 --> 00:34:12.639
do for picks. Just anything that
you want to talk about that you think's

457
00:34:12.679 --> 00:34:15.679
cool, whether it's technical or non
technical, A movie, a book,

458
00:34:15.079 --> 00:34:21.679
a tool, something that's been really
useful or interesting to you lately. Let

459
00:34:21.760 --> 00:34:23.440
me think why you think I'm going
to go ahead and do mine real quick.

460
00:34:24.000 --> 00:34:28.239
My pick for today is an oldie
but a goodie, and it's called

461
00:34:28.360 --> 00:34:30.519
the Club. And the club is
basically a thing you can put on your

462
00:34:30.599 --> 00:34:36.199
car steering wheel sort of deter fees
from it. And it's a particular interest

463
00:34:36.239 --> 00:34:39.320
to me because I bought my kids
a car a couple of years ago and

464
00:34:39.679 --> 00:34:45.480
it's a two thousand Honda Civic.
And here in the US, those cars

465
00:34:45.519 --> 00:34:49.800
made around then, we're very easy
to steal because of the keys and they're

466
00:34:49.920 --> 00:34:54.079
just really poor security. It's easy
to break in. So last December my

467
00:34:54.280 --> 00:34:59.599
daughter had it stolen from work and
we found a couple days later some guy

468
00:34:59.760 --> 00:35:02.639
was just of an in it.
And then last week my son's been driving

469
00:35:02.679 --> 00:35:06.880
it and it got stolen from in
front of our house in the middle of

470
00:35:06.920 --> 00:35:08.599
the night and we just found it
last night and got it back. In

471
00:35:08.800 --> 00:35:13.559
both cases, they forgot to put
the club on. Every other day we've

472
00:35:13.599 --> 00:35:15.760
had the club on there, and
people say, oh, it really doesn't

473
00:35:15.800 --> 00:35:17.039
work. Professional fiefs, you can
get past it, and that may be

474
00:35:17.159 --> 00:35:21.360
true, but for the casual feef
it's going to stop them. But in

475
00:35:21.480 --> 00:35:24.000
both cases, the one times that
they didn't put the club on is when

476
00:35:24.039 --> 00:35:27.840
it got stolen when the club's on
there, and never have any problems even

477
00:35:27.880 --> 00:35:30.039
for a car like that. So
there's a few different versions of the club

478
00:35:30.119 --> 00:35:35.440
out now. You can get red
and yellow versions, and two hooks and

479
00:35:35.519 --> 00:35:37.440
one hook and so on. But
my son in this case, he put

480
00:35:37.480 --> 00:35:39.920
it on but didn't lock it,
which really didn't make it very useful.

481
00:35:40.840 --> 00:35:44.440
So I got him a club now
that auto locks, so when you put

482
00:35:44.480 --> 00:35:46.639
it on the stream, we only
spread it part it automatically locks and you

483
00:35:46.760 --> 00:35:50.440
don't and then you have to use
the key to unlock it. So that's

484
00:35:50.480 --> 00:35:53.519
my vote for the club. It's
certainly never never had a car stolen when

485
00:35:53.599 --> 00:35:58.280
the club has been on it and
properly locked. So Max, what's your

486
00:35:58.360 --> 00:36:00.000
pick? You got me? I
think we'll go back to the p w

487
00:36:00.199 --> 00:36:04.079
A so I will I will not
talk about cars. We go watch your

488
00:36:04.079 --> 00:36:07.559
paws. So something I've been trying
going back to the pw A thing.

489
00:36:07.800 --> 00:36:13.760
It's a new tool from Google known
as Yama so ll A m A.

490
00:36:14.320 --> 00:36:19.039
It's a CLI that they it's on
it HAB's open source that we'll create a

491
00:36:19.119 --> 00:36:22.480
pw A launcher for you. So
you have a p w A or a

492
00:36:22.559 --> 00:36:30.320
website, and that CLI will create
an Android project that will actually be ready

493
00:36:30.360 --> 00:36:32.519
for the play start, so you
don't need to know anything about Android development.

494
00:36:32.920 --> 00:36:37.320
It's like a shortcut to your p
w A, it's only one month

495
00:36:37.519 --> 00:36:40.199
old and something like that. Yeah, I'm looking AT's it's on NPM.

496
00:36:40.840 --> 00:36:45.400
Yes, it's MP chaos Lama.
Oh maybe it's not that one. Oh

497
00:36:45.440 --> 00:36:46.280
no, no, no it's not. Okay, that's for AWS. Let

498
00:36:46.280 --> 00:36:49.599
me find another one here. Okay, we'll find it and put it in

499
00:36:49.679 --> 00:36:52.679
the show notes. But awesome,
so that your only pick, it's yama

500
00:36:52.760 --> 00:36:55.760
pack. Yeah, yama pack that
I'm based in the URL right now.

501
00:36:57.199 --> 00:37:00.360
Okay, awesome, we will put
that in the show notes. All right,

502
00:37:00.440 --> 00:37:02.320
Well, thank you very much,
Max. Very good to hear from

503
00:37:02.360 --> 00:37:06.800
you from down in Buenos Aires.
Oh. Where can people get ahold of

504
00:37:06.880 --> 00:37:08.280
you if they want a hold of
you, whether it's Twitter or GitHub or

505
00:37:08.480 --> 00:37:12.519
what's the basic plus get a hold
of you? Typically Twitter? I'm f

506
00:37:13.239 --> 00:37:15.480
f I r T on Twitter.
So four letters, that's a simple use

507
00:37:15.599 --> 00:37:20.440
name, the same as my most
third one is my my last name is

508
00:37:20.599 --> 00:37:23.039
it's the first four letters of my
last name, f I r T f

509
00:37:23.159 --> 00:37:27.360
I r T on Twitter. All
right, all right, well thank you

510
00:37:27.519 --> 00:37:30.679
Max and we will see you around
the internets. Yeah sure, thank you

511
00:37:30.719 --> 00:37:31.920
Stive. Bye bye,

