1
00:00:01,120 --> 00:00:04,839
Speaker 1: How'd you like to listen to dot NetRocks with no ads? Easy?

2
00:00:05,360 --> 00:00:08,599
Become a patron For just five dollars a month you

3
00:00:08,640 --> 00:00:11,359
get access to a private RSS feed where all the

4
00:00:11,400 --> 00:00:14,599
shows have no ads. Twenty dollars a month will get

5
00:00:14,640 --> 00:00:18,440
you that and a special dot NetRocks patron mug. Sign

6
00:00:18,519 --> 00:00:22,640
up now at Patreon dot dot NetRocks dot com. Hey,

7
00:00:22,760 --> 00:00:26,559
Carl and Richard here with your twenty twenty four NDC schedule.

8
00:00:26,760 --> 00:00:29,480
Speaker 2: Will be at as many NDC conferences as possible this year,

9
00:00:29,519 --> 00:00:32,520
and you should consider attending no matter what. The Copenhagen

10
00:00:32,560 --> 00:00:36,119
Developers Festival happens August twenty sixth through the thirtieth. Tickets

11
00:00:36,159 --> 00:00:39,200
at Cphdevfest dot com.

12
00:00:39,399 --> 00:00:43,759
Speaker 1: Ndcporto is happening October fourteenth through the eighteenth. The early

13
00:00:43,840 --> 00:00:49,479
bird discount ends June fourteenth. Tickets at Ndcporto dot com.

14
00:00:49,520 --> 00:01:02,320
Speaker 3: And we'll see you there, we hope.

15
00:01:04,680 --> 00:01:07,680
Speaker 1: Hey, guess what it's Dot need rocks again. I'm Carl Franklin,

16
00:01:07,799 --> 00:01:12,280
that Richard Campbell here for the nineteen hundredth and seventeenth time.

17
00:01:12,599 --> 00:01:15,239
Speaker 2: It's World War One. It's World War one. It it's

18
00:01:15,280 --> 00:01:22,079
officially started. Okay, we're well into it at this point.

19
00:01:22,560 --> 00:01:26,680
Speaker 1: Yeah, you're right, yeah, yeah, right, So yeah, what's up

20
00:01:26,719 --> 00:01:29,200
with you, mister Campbell. We just got back from Dev Intersection.

21
00:01:29,280 --> 00:01:31,879
Had a great time there. Yeah, I had a great

22
00:01:31,879 --> 00:01:34,200
time there. I was just writing up some of the pieces,

23
00:01:34,280 --> 00:01:38,040
the keynotes and things. I mean, it's a crazy time, right,

24
00:01:38,159 --> 00:01:41,159
Like the software is moving fast. Some of the demos

25
00:01:41,159 --> 00:01:43,480
were astonishing. You had a good workshop, You're real happy

26
00:01:43,519 --> 00:01:45,760
with it, very happy. Yeah, it's like thirty people in

27
00:01:45,799 --> 00:01:50,280
it or something, and all about Blazer. Jeff Fritz did

28
00:01:50,280 --> 00:01:52,560
a sort of an intro to Blazer workshop, and I

29
00:01:52,680 --> 00:01:56,879
did a more more intermediate advanced workshop, and I also

30
00:01:56,959 --> 00:02:01,959
had a talk called Gotcha's in Blazer Web Apps and

31
00:02:02,000 --> 00:02:04,799
not at eight because there are some gotcha's. There are

32
00:02:04,840 --> 00:02:08,919
some things that Microsoft intended to work a certain way

33
00:02:08,960 --> 00:02:12,639
and then they didn't really work. So things that work around.

34
00:02:12,960 --> 00:02:15,599
Speaker 2: It's not that bleeding edge of technology anymore though. I

35
00:02:15,599 --> 00:02:17,599
mean you're kind of at V three. Things are sort

36
00:02:17,599 --> 00:02:20,199
of maturing out, like it's almost a grown up.

37
00:02:20,319 --> 00:02:22,080
Speaker 1: Yeah, And that's kind of why it was surprising that

38
00:02:22,120 --> 00:02:25,080
we had gotcha's in the first place. But I think

39
00:02:25,120 --> 00:02:29,360
they took everybody by surprise, not that there aren't workarounds

40
00:02:29,400 --> 00:02:32,120
for it. But you know, it's not a reason not

41
00:02:32,159 --> 00:02:34,000
to use Blazer, but you just need to know what

42
00:02:34,039 --> 00:02:34,319
they are.

43
00:02:34,400 --> 00:02:37,680
Speaker 2: I think you've also got a moving surface around you too.

44
00:02:37,680 --> 00:02:39,919
I've got the comment I've got will tie you into

45
00:02:39,960 --> 00:02:43,360
that pretty well. Yeah, because there's things on change in

46
00:02:43,400 --> 00:02:44,120
all the time.

47
00:02:44,039 --> 00:02:46,439
Speaker 1: And just to do a little plug, I'm also doing

48
00:02:46,479 --> 00:02:52,919
that Gotcha's talk with on Sean Walker's virtual event on

49
00:02:52,960 --> 00:02:56,439
October third. I don't have a time yet, but look

50
00:02:56,520 --> 00:02:59,800
for that. Okay, okay, So let's get into it with

51
00:02:59,840 --> 00:03:02,039
a little thing. We call it better no a framework.

52
00:03:02,120 --> 00:03:10,840
Speaker 2: Awesome, roll it all right, man?

53
00:03:10,879 --> 00:03:11,280
Speaker 3: What do you got?

54
00:03:11,439 --> 00:03:13,560
Speaker 1: Well, you know, this started out as me sort of

55
00:03:13,599 --> 00:03:15,919
pointing to little things in the dot net framework. It

56
00:03:15,960 --> 00:03:18,879
was even before dot net core, and quickly ran out

57
00:03:18,919 --> 00:03:20,960
of stuff to talk about. So it just turns into

58
00:03:21,080 --> 00:03:24,759
you know, hey, what caught my interest this week? I'd pointed.

59
00:03:24,879 --> 00:03:26,639
Speaker 2: It was not that quick. There was a period we

60
00:03:26,639 --> 00:03:29,240
were doing three of these a week, and you went

61
00:03:29,280 --> 00:03:30,960
through the whole flip and framework.

62
00:03:31,280 --> 00:03:34,039
Speaker 1: Yeah, pretty much. I mean the stuff that the stuff

63
00:03:34,080 --> 00:03:35,199
that was tricky.

64
00:03:35,120 --> 00:03:37,560
Speaker 2: Yeah, several years worth of content.

65
00:03:37,800 --> 00:03:41,719
Speaker 1: Yeah, you're right. Okay, So I found this event in

66
00:03:42,159 --> 00:03:45,159
the twenty through the twenty sixth of January coming up here.

67
00:03:45,479 --> 00:03:47,800
It's called Global Game Jam.

68
00:03:48,039 --> 00:03:48,919
Speaker 2: Oh, that sounds fun.

69
00:03:49,120 --> 00:03:52,520
Speaker 1: Globalgamejam dot org. And so just like when musicians get

70
00:03:52,560 --> 00:03:55,560
together and have jam sessions and they feed on each

71
00:03:55,599 --> 00:03:59,520
other and get creative together and good stuff comes out,

72
00:03:59,560 --> 00:04:05,560
that's the whole idea with this. It's it's there's sort

73
00:04:05,639 --> 00:04:10,199
of like four hundred and thirty nine thousand jammers. Wow,

74
00:04:10,360 --> 00:04:14,439
this is to date, eighty nine thousand games created, one

75
00:04:14,520 --> 00:04:20,120
hundred and thirty two countries participated. So it's it's all

76
00:04:20,160 --> 00:04:23,040
online of course, and they have a discord and a

77
00:04:23,079 --> 00:04:30,120
Twitch stream, and they have videos from last year keynote.

78
00:04:31,439 --> 00:04:33,480
It's just it looks like a lot of fun. And

79
00:04:33,560 --> 00:04:37,639
the thing is too that it's not just for gamers

80
00:04:37,720 --> 00:04:42,879
who you know, who have experience like this is for

81
00:04:43,000 --> 00:04:46,120
people who might be just game curious, like they don't

82
00:04:46,120 --> 00:04:47,720
know how games are created at all.

83
00:04:47,920 --> 00:04:50,519
Speaker 2: And the tooling these days is so good, like, yeah,

84
00:04:51,120 --> 00:04:54,160
don't need a huge team, you can do it by yourself,

85
00:04:54,160 --> 00:04:56,279
although I've seen lots of teams of three be very

86
00:04:56,279 --> 00:05:00,360
successful and make it maybe a mobile game, make a

87
00:05:00,360 --> 00:05:02,720
web game, like there's a lot of choices right.

88
00:05:03,079 --> 00:05:05,800
Speaker 1: Yeah, so that looks really cool. I might pop in

89
00:05:05,839 --> 00:05:08,839
and check it out and maybe create some games. Might

90
00:05:08,879 --> 00:05:09,199
be fun.

91
00:05:09,279 --> 00:05:10,120
Speaker 2: Yeah, that's a good idea.

92
00:05:10,240 --> 00:05:10,480
Speaker 3: Yep.

93
00:05:10,839 --> 00:05:11,959
Speaker 1: So who's talking to us today?

94
00:05:12,040 --> 00:05:15,040
Speaker 2: Richard and Grab a comment of a show eighteen fifteen,

95
00:05:15,120 --> 00:05:18,680
So about one hundred shows ago with our friend Debbie O'Brien.

96
00:05:18,720 --> 00:05:20,240
Maybe you heard of her, Yeah, and we were talking

97
00:05:20,240 --> 00:05:22,240
about play Right. This is back from October in twenty

98
00:05:22,240 --> 00:05:25,000
two and I got a few good comments on the show,

99
00:05:25,040 --> 00:05:27,319
but this one was very specific. Admittedly it's over a

100
00:05:27,360 --> 00:05:28,959
year ago now. This is from Chris Martin. He said,

101
00:05:29,120 --> 00:05:30,759
just getting into play right and it was great listening

102
00:05:30,800 --> 00:05:32,439
to the episode of Dot and Rocks on it. I'm

103
00:05:32,480 --> 00:05:36,879
currently getting this implemented for a Blazer app. What's the

104
00:05:36,920 --> 00:05:41,199
babe for authenticating with azure ad in our tests? Thanks?

105
00:05:41,879 --> 00:05:46,800
And Carl responded to this actually back then talking about

106
00:05:47,560 --> 00:05:51,480
azure ad B two c of through Blazer training include

107
00:05:51,480 --> 00:05:53,720
a link in the show notes for that particular show.

108
00:05:54,680 --> 00:05:57,680
Although it's changing, it's been a year.

109
00:05:57,839 --> 00:05:59,720
Speaker 1: Yeah, it's changed and stuff's changed.

110
00:06:00,040 --> 00:06:00,240
Speaker 3: Yeah.

111
00:06:01,839 --> 00:06:04,680
Speaker 1: We went through this period where we were using MSAL,

112
00:06:04,800 --> 00:06:08,600
the Microsoft Authentication Library right as a way to simplify

113
00:06:09,720 --> 00:06:12,519
accessing it, and now there's even more stuff that's like

114
00:06:12,639 --> 00:06:14,920
I haven't even i mean even kept up with it.

115
00:06:14,959 --> 00:06:16,079
That's how new it is.

116
00:06:16,199 --> 00:06:21,279
Speaker 2: Well, they call it an intra now, and so in

117
00:06:21,319 --> 00:06:25,480
some ways it's clearly better. I think definitely. My repertoire

118
00:06:25,480 --> 00:06:28,120
for the show's coming up is a whole conversation about

119
00:06:28,160 --> 00:06:31,759
managed identity. Yeah, specific And it's one thing to manage

120
00:06:31,800 --> 00:06:34,639
identity in production. It's another thing to talk about managed

121
00:06:34,680 --> 00:06:39,120
identity in tests and in the dev cycle. But you've

122
00:06:39,160 --> 00:06:43,600
heard on the news this whole Microsoft Future Security Initiative

123
00:06:43,800 --> 00:06:47,560
or Insecure Initiative, and a lot of that has to

124
00:06:47,600 --> 00:06:53,319
do with undersecured dev resources, demos things like that. So

125
00:06:53,439 --> 00:06:56,120
Microsoft is pushing hard for their own people to do

126
00:06:56,160 --> 00:06:56,879
this better.

127
00:06:56,720 --> 00:06:57,839
Speaker 1: Yeah, across all teams.

128
00:06:57,920 --> 00:07:00,839
Speaker 2: Yeah yeah, and to be that's super exciting because they're

129
00:07:00,879 --> 00:07:03,360
going to knock the snot out of this process, like

130
00:07:03,360 --> 00:07:06,000
they're going to make it better for their own needs.

131
00:07:06,079 --> 00:07:07,879
That means it's going to be better for all of us.

132
00:07:08,000 --> 00:07:10,120
Speaker 1: I mean we're talking about people who write white papers,

133
00:07:10,160 --> 00:07:14,040
who publish examples, who you know, maybe do this stuff

134
00:07:14,040 --> 00:07:19,279
with three sixty the developer team obviously, Yeah, I know

135
00:07:19,639 --> 00:07:22,079
I know my friend Jeff Fritz is in that.

136
00:07:22,519 --> 00:07:25,399
Speaker 2: Yep, lots of folks that are buried in it right now.

137
00:07:25,399 --> 00:07:28,079
And and again it's like there's a there's a feedback

138
00:07:28,120 --> 00:07:30,439
loop here. Not only should they follow the practices, but

139
00:07:30,480 --> 00:07:33,920
when the practices are just too awkward to use, they

140
00:07:33,959 --> 00:07:36,680
know where those guys live, Like they'll lay in wait

141
00:07:36,720 --> 00:07:38,600
in the bushes outside of the office building.

142
00:07:38,600 --> 00:07:40,800
Speaker 1: They'll tackle too soon, too soon.

143
00:07:41,240 --> 00:07:43,759
Speaker 2: No, No, I'm just saying, like I watched what happened

144
00:07:43,759 --> 00:07:46,560
to WPF back in the day when the studio team

145
00:07:46,600 --> 00:07:51,519
started implementing WPF, WPF got dramatically better, and it was

146
00:07:51,560 --> 00:07:52,639
that back and forth.

147
00:07:52,720 --> 00:07:55,360
Speaker 1: Hey, if you want to go way back when sql

148
00:07:55,399 --> 00:08:00,519
server implemented the dot Net framework inside SQL servert got

149
00:08:00,560 --> 00:08:03,240
better well, without a doubt, because the sequel team kicked

150
00:08:03,279 --> 00:08:03,720
its butt.

151
00:08:03,879 --> 00:08:07,560
Speaker 2: Yeah, no doubt. So anyway, I'm hopeful. Yeah, and Chris,

152
00:08:07,560 --> 00:08:09,040
thank you so much for your commented. A copy of

153
00:08:09,120 --> 00:08:10,519
music Cobe is on its way to you. And if

154
00:08:10,519 --> 00:08:12,120
you'd like a copy of music code by I write

155
00:08:12,120 --> 00:08:14,240
a comment on the website at dot at rocks dot

156
00:08:14,240 --> 00:08:16,519
com or on Facebook. We publish every show there and

157
00:08:16,560 --> 00:08:18,319
if you comment there in a reason the show. We'll

158
00:08:18,360 --> 00:08:19,399
send you a copy music cope.

159
00:08:19,399 --> 00:08:22,360
Speaker 1: He's code by still going strong and people using it

160
00:08:22,439 --> 00:08:25,079
every day to be more productive when they code or

161
00:08:25,120 --> 00:08:28,680
sleep or relax or focus or whatever. All right, so

162
00:08:29,079 --> 00:08:32,240
let's bring in Wi O'Brien. Before I do that, though,

163
00:08:32,279 --> 00:08:34,320
I need to mention that you can follow us on Twitter,

164
00:08:34,919 --> 00:08:38,159
and of course we've been on ex Twitter for years.

165
00:08:38,279 --> 00:08:41,840
But the cool kids are hanging out at Masdon. I'm

166
00:08:41,919 --> 00:08:44,240
Carl Franklin at tech Hub dot Social.

167
00:08:43,919 --> 00:08:45,720
Speaker 2: And I'm Riche Campbell at Masidon dot Angele.

168
00:08:45,840 --> 00:08:48,399
Speaker 1: Okay, so Debbie has been on the show before, of course,

169
00:08:48,440 --> 00:08:51,039
but if you don't remember, Wi O'Brien is a Principal

170
00:08:51,039 --> 00:08:54,759
program manager at Microsoft. Wie has over fifteen years of

171
00:08:54,799 --> 00:08:58,200
experience in front end development. She's worked as a tech

172
00:08:58,279 --> 00:09:01,200
lead and consultant for many important and clients with various

173
00:09:01,240 --> 00:09:05,799
technologies and often with a strong focus on performance, static

174
00:09:05,879 --> 00:09:10,240
sites and testing. She has led teams both in house

175
00:09:10,360 --> 00:09:13,960
and remotely, as well as giving workshops and training. Also

176
00:09:14,039 --> 00:09:16,759
has many years of experience as a mentor for online

177
00:09:16,840 --> 00:09:21,519
learning platforms, Treehouse and open classrooms. Debbie's also a Google

178
00:09:21,600 --> 00:09:27,279
developer expert in web technologies, cloud andary Media Developer Expert

179
00:09:27,360 --> 00:09:31,639
and next Ambassador. Boy, there's a mouthful, as well as

180
00:09:31,679 --> 00:09:35,559
a GitHub Star alumni and a previous Microsoft Most Valuable

181
00:09:35,559 --> 00:09:40,200
Professional and Developer Technologies Debbie, I think you need to

182
00:09:40,200 --> 00:09:43,080
be a little more What should we say, you know,

183
00:09:43,200 --> 00:09:44,480
just try try a little harder.

184
00:09:44,679 --> 00:09:47,799
Speaker 4: I think I know, right, I'm trying to get the

185
00:09:47,840 --> 00:09:49,919
YouTube Award. That's my next one, you know that like

186
00:09:49,960 --> 00:09:52,960
big thing on one hundred thousand followers. I've got five thousand,

187
00:09:53,000 --> 00:09:54,399
so got a long way to go. But yeah, I

188
00:09:54,440 --> 00:09:55,240
need more awards.

189
00:09:55,840 --> 00:09:59,159
Speaker 2: Yeah.

190
00:09:59,279 --> 00:10:01,919
Speaker 1: I tell people the kind of the same way. I

191
00:10:02,000 --> 00:10:03,399
just don't know what I want to do when I

192
00:10:03,440 --> 00:10:05,840
grow up. I certainly haven't grown up yet.

193
00:10:07,639 --> 00:10:08,440
Speaker 2: Why start now?

194
00:10:08,639 --> 00:10:13,840
Speaker 1: Why start now? Yes, we're talking about Playwright, and Playwright

195
00:10:13,960 --> 00:10:20,320
is sort of the canonical web testing and automation actually

196
00:10:20,519 --> 00:10:24,840
platform that does snapshot testing, like we talked about with

197
00:10:25,399 --> 00:10:27,840
our friend Simon Crop, and it does all sorts of

198
00:10:27,879 --> 00:10:30,559
other things. Why don't you tell us what's on your

199
00:10:30,559 --> 00:10:31,960
mind in terms of Playwright?

200
00:10:32,279 --> 00:10:36,000
Speaker 4: Yeah? So, I mean everyone should already at this stage

201
00:10:36,039 --> 00:10:39,879
be testing their applications, because there's absolutely no excuse in

202
00:10:39,919 --> 00:10:43,320
the whole world why people are not testing right. Go

203
00:10:43,440 --> 00:10:46,360
back a couple of years, like ten years ago, no

204
00:10:46,399 --> 00:10:49,559
one was testing, and I completely understood that because testing

205
00:10:49,679 --> 00:10:53,240
was hard. Testing to time testing, the slow testing costs money.

206
00:10:53,600 --> 00:10:56,039
And now it's the opposite. If you're not testing your application,

207
00:10:56,080 --> 00:10:59,559
you're losing money as a company. You're dealing with bugs

208
00:10:59,559 --> 00:11:03,240
that you should and even have to deal with. So yeah,

209
00:11:03,279 --> 00:11:05,799
I've been trying to get people to test their applications

210
00:11:05,879 --> 00:11:10,200
and I think still there's people not testing. I don't

211
00:11:10,200 --> 00:11:12,480
know how to fix Carl Richard, how do we fix this?

212
00:11:13,639 --> 00:11:16,399
Speaker 1: I think most people assume and I'm going to assume

213
00:11:16,440 --> 00:11:19,799
that they assume that, well, why should I test? Because

214
00:11:19,879 --> 00:11:23,200
I know this routine or this method or creates this

215
00:11:23,399 --> 00:11:26,399
UI result. Why do I need to prove it? Right now?

216
00:11:26,480 --> 00:11:28,919
I can see that it works. But the question is, well,

217
00:11:29,480 --> 00:11:32,000
how will you know when some other developer takes over

218
00:11:32,080 --> 00:11:35,000
your project and does something on the back end that

219
00:11:35,120 --> 00:11:41,159
changes the outcome? That's when testing becomes really valuable, right, yeah.

220
00:11:40,919 --> 00:11:44,799
Speaker 4: And just changing like little like think about forms, right,

221
00:11:45,320 --> 00:11:48,720
Forms are one of the hardest things to test manually.

222
00:11:49,399 --> 00:11:50,799
And I don't know if you've ever done this a

223
00:11:50,840 --> 00:11:53,039
manual test and you start manually and what I mean

224
00:11:53,080 --> 00:11:55,159
by manual is going to the computer's a user and

225
00:11:55,159 --> 00:11:57,720
filling it that form and then you find out the

226
00:11:57,759 --> 00:12:00,159
typical For me, it happened to me today. I was

227
00:12:00,159 --> 00:12:02,840
putting my name in. I have an apostrophe in my name. Well,

228
00:12:02,919 --> 00:12:05,759
nobody tested the web and I couldn't put a specific

229
00:12:05,879 --> 00:12:08,919
type of apostrophe in. It wasn't accepting it, so it

230
00:12:08,919 --> 00:12:12,679
wouldn't accept my name, right, And nobody tested that, so

231
00:12:12,799 --> 00:12:14,799
I couldn't. I couldn't just couldn't get in. I had

232
00:12:14,799 --> 00:12:16,720
to like go to the actual computer. I couldn't do

233
00:12:16,720 --> 00:12:17,879
it for my phone, had to go to the computer

234
00:12:17,960 --> 00:12:19,960
where I had had more access. I was able to

235
00:12:20,039 --> 00:12:22,480
do it. But when you're actually testing that out manually,

236
00:12:22,480 --> 00:12:24,200
you're filling in all those things and then you press

237
00:12:24,200 --> 00:12:26,600
submit and you get this error message and then something

238
00:12:26,679 --> 00:12:28,399
is broken, and then you go in and you fix it,

239
00:12:28,440 --> 00:12:30,480
and then you go and fill that it again, and

240
00:12:30,519 --> 00:12:33,679
you keep doing that process, a repetible, horrible process that

241
00:12:33,759 --> 00:12:35,519
I used to do, that you used to do back

242
00:12:35,559 --> 00:12:37,960
in the old days, when you know, that was the

243
00:12:37,960 --> 00:12:40,679
only way we could do things. But now you have

244
00:12:40,759 --> 00:12:44,320
tools such as Playwright that basically is an extremely fast

245
00:12:44,360 --> 00:12:48,399
you right, it is you times one hundred and that

246
00:12:48,519 --> 00:12:51,679
can fill that form in one hundred times faster. So

247
00:12:51,799 --> 00:12:56,039
that basically is automated. Once you write that test, that

248
00:12:56,080 --> 00:12:58,200
form is filled in. And this is the cool thing

249
00:12:58,840 --> 00:13:01,919
that you basically to that test. You just manually fill

250
00:13:01,919 --> 00:13:05,080
in that form once and you do that by using

251
00:13:05,159 --> 00:13:09,360
the code generator tool. You code gen the test by

252
00:13:09,399 --> 00:13:11,399
filling in that form, it's going to generate all that

253
00:13:11,480 --> 00:13:14,080
code for you, and then you just basically press play,

254
00:13:14,200 --> 00:13:16,960
press play and on your CI it just runs anytime

255
00:13:17,000 --> 00:13:19,919
the pull request is done in so if someone changes anything,

256
00:13:20,399 --> 00:13:23,120
it's going to run that and it saves so much

257
00:13:23,159 --> 00:13:26,279
time and it's so easy and quick to do it. Yeah.

258
00:13:26,320 --> 00:13:30,039
Speaker 1: So the thing that occurs to me about web testing

259
00:13:30,080 --> 00:13:33,559
tools like Playwright is that they have an advantage because

260
00:13:33,600 --> 00:13:38,000
they can inspect the HTML, which is just text. You know,

261
00:13:38,039 --> 00:13:40,440
they can inspect the output, whereas if you're trying to

262
00:13:40,480 --> 00:13:43,639
do that, say on a Windows forms application or graphical application,

263
00:13:44,200 --> 00:13:47,039
you have to do image you know, ocr for the

264
00:13:47,320 --> 00:13:50,240
for the text and image processing and all of that

265
00:13:50,320 --> 00:13:52,159
kind of stuff, and we just don't need to do

266
00:13:52,200 --> 00:13:55,399
that with you get. You can still do screenshot testing, right.

267
00:13:55,440 --> 00:13:57,279
You can say well, the screen should look like this,

268
00:13:58,080 --> 00:14:01,600
but you have that the webliner allows you to be

269
00:14:01,639 --> 00:14:02,559
a lot more accurate.

270
00:14:03,039 --> 00:14:05,120
Speaker 4: It brings it closer to the user. And what we're

271
00:14:05,120 --> 00:14:08,480
doing when we're testing Blaser applications, right, we're testing what

272
00:14:08,519 --> 00:14:12,039
the user sees, what the user does. Simple thing is

273
00:14:12,080 --> 00:14:14,519
testing dark mode and lightmode. This is the cool thing

274
00:14:14,600 --> 00:14:17,159
right nowadays everyone has to have their website in two colors, right,

275
00:14:17,960 --> 00:14:20,200
how can we test that? Well, we can test that

276
00:14:20,240 --> 00:14:22,720
the CSS class is there and that can be done

277
00:14:22,759 --> 00:14:25,600
true playwright, and then you can just easily have a test. Yeah,

278
00:14:25,639 --> 00:14:27,960
that's dark mode, light moode. That's a simple test.

279
00:14:28,039 --> 00:14:28,200
Speaker 3: Right.

280
00:14:28,279 --> 00:14:31,639
Speaker 4: You do you care? Well, maybe you should if that's

281
00:14:31,679 --> 00:14:35,879
important to you. What's more important is, you know, filling

282
00:14:35,919 --> 00:14:38,639
out the forms, making money, putting articles in a shopping car,

283
00:14:39,200 --> 00:14:43,279
actually purchasing things, and that's what the user does. What

284
00:14:43,320 --> 00:14:45,639
buttons does the user need to press to get to

285
00:14:46,039 --> 00:14:49,279
that payment? And if you can test that whole process

286
00:14:49,279 --> 00:14:51,519
from that start to finish, the money is going to

287
00:14:51,559 --> 00:14:52,080
be in your bank.

288
00:14:52,720 --> 00:14:56,279
Speaker 2: Yeah. Well, I mean lots of friction you can remove

289
00:14:56,279 --> 00:14:58,919
in that process. And turns out if it's easy to buy,

290
00:14:58,960 --> 00:15:02,440
people do buy more. So you know there's money to

291
00:15:02,480 --> 00:15:05,679
be made in creating good workflows that way, right. I

292
00:15:05,799 --> 00:15:08,240
just think these are the tools that help you detect

293
00:15:08,279 --> 00:15:10,759
where you're stumbling before you push it out there and

294
00:15:10,759 --> 00:15:11,759
start losing money on it.

295
00:15:11,799 --> 00:15:14,799
Speaker 1: Now. I use a tool called b unit from Egil

296
00:15:14,799 --> 00:15:20,159
Hanson for Blazer components. Does that work in concert with playwright?

297
00:15:20,440 --> 00:15:23,639
Is there something that does what b unit does in Playwright?

298
00:15:24,120 --> 00:15:28,399
What's the whole ecosystem look like with that?

299
00:15:29,399 --> 00:15:35,799
Speaker 4: So for component testing itself, we don't really support anything

300
00:15:35,840 --> 00:15:40,120
outside of the experimental, which is kind of you and

301
00:15:40,240 --> 00:15:42,039
like the component testing yourself. I'm not sure if you

302
00:15:42,080 --> 00:15:45,080
can put a Blazer thing inside of vat application that's

303
00:15:45,200 --> 00:15:49,320
something and push that up. That's something I've never tested out.

304
00:15:50,600 --> 00:15:53,600
But we're basically like, when it comes to a Blazer,

305
00:15:54,399 --> 00:15:57,519
you're testing what the user sees. That's already compiled, that's there,

306
00:15:57,600 --> 00:16:00,399
it's visual, it's on that front end. So you're coponents

307
00:16:00,440 --> 00:16:02,679
are making up a web page. Your components are making

308
00:16:02,720 --> 00:16:06,120
a story, and that story is taking you. It's more

309
00:16:06,159 --> 00:16:10,200
about the integration between those components. Sure, how they integrate

310
00:16:10,200 --> 00:16:13,360
together and when on the page they do what they're

311
00:16:13,399 --> 00:16:15,720
meant to do. That button is a component. For example,

312
00:16:15,759 --> 00:16:19,519
that shopping cart is a component, and that all interacts

313
00:16:19,559 --> 00:16:21,759
together to be able to get to that stage of

314
00:16:22,519 --> 00:16:25,360
filling out the form, to fill in your delivery address

315
00:16:25,399 --> 00:16:28,720
to get the product delivered to your home, etc.

316
00:16:29,240 --> 00:16:31,759
Speaker 1: So you can still a b unit test to test

317
00:16:31,799 --> 00:16:34,559
the individual components if you think you need to. But

318
00:16:34,679 --> 00:16:37,399
what you're saying is playwright works the macro level. It

319
00:16:37,519 --> 00:16:39,799
just works at the whole website. You fill in this form,

320
00:16:39,840 --> 00:16:42,679
you expect this result. If you don't get it, then

321
00:16:42,879 --> 00:16:43,759
the test breaks.

322
00:16:43,919 --> 00:16:46,320
Speaker 4: Yeah, Like think about it. The user doesn't care about

323
00:16:46,320 --> 00:16:49,399
your code, doesn't see your code. So unit tests is

324
00:16:49,480 --> 00:16:52,600
not covering what the user sees and does. It covers

325
00:16:52,639 --> 00:16:54,559
your code and is your code going to do the

326
00:16:54,679 --> 00:16:58,120
job right? But end to end test integation tests, they're

327
00:16:58,159 --> 00:17:02,240
covering what the use physically does in your website. And

328
00:17:02,320 --> 00:17:05,839
it's like manual testing years ago when I used to

329
00:17:05,880 --> 00:17:08,680
do this on a Friday right in a job ten

330
00:17:08,759 --> 00:17:12,200
years ago. Everyone stop, stop we are doing and start

331
00:17:12,359 --> 00:17:14,960
using the website as a user would use it. Go

332
00:17:15,000 --> 00:17:18,000
and start doing stuff right and then fill out issues.

333
00:17:18,039 --> 00:17:20,119
Oh this doesn't work, file boog, this doesn't work. File

334
00:17:20,119 --> 00:17:23,920
a bug. That's ridiculous doing that nowadays, and still people

335
00:17:23,960 --> 00:17:26,599
are doing that. Still people are paying manual people to

336
00:17:26,640 --> 00:17:29,759
press buttons, and that should not be happening. So Playwright

337
00:17:29,839 --> 00:17:33,160
is that manual person pressing the button. But that's much

338
00:17:33,200 --> 00:17:35,920
faster than that manual, physical person that would have done

339
00:17:35,960 --> 00:17:36,799
that ten years ago.

340
00:17:36,920 --> 00:17:38,519
Speaker 2: One of the things I run into when we start

341
00:17:38,559 --> 00:17:40,599
to build bigger websites is we have so many tests

342
00:17:40,640 --> 00:17:44,200
that it slows down the CICD pipeline. I've gone to

343
00:17:44,279 --> 00:17:47,440
great lengths to like break tests out across ponstible instances

344
00:17:47,440 --> 00:17:49,359
and things to try and shorten that time up. Is

345
00:17:49,400 --> 00:17:51,400
there tools in play right to make that easier.

346
00:17:51,640 --> 00:17:55,279
Speaker 4: Yeah, so's there's things you can do. Like basically, you've

347
00:17:55,279 --> 00:17:58,160
got to remember what's the slowest thing about testing when

348
00:17:58,200 --> 00:18:00,559
it comes to to Playwright, it's the brows right, It's

349
00:18:00,640 --> 00:18:04,519
it's you know, you're normally you should be testing as

350
00:18:04,599 --> 00:18:07,279
well your website across multiple browsers, you know, across the

351
00:18:07,319 --> 00:18:12,160
fire across Firefox, across Chromium. And once you're doing that,

352
00:18:12,200 --> 00:18:15,960
you're spinning up that headless browser. Right. There's headless means

353
00:18:15,960 --> 00:18:19,839
that there's no visual parts, there's no graphical interface, so

354
00:18:19,920 --> 00:18:22,319
on CI you don't need to see something. The CI

355
00:18:22,480 --> 00:18:26,279
basically spins up the browser without the actual graphical interface,

356
00:18:26,480 --> 00:18:29,559
but it's still spinning up a browser instance for your tests.

357
00:18:30,319 --> 00:18:33,559
And tests are running isolation, right, so that means you

358
00:18:33,559 --> 00:18:36,839
know there's a new browser instance being spun up every

359
00:18:36,880 --> 00:18:39,240
time there's a new test, because otherwise, you know your

360
00:18:39,240 --> 00:18:41,799
cookies would jump from the same if it was the

361
00:18:41,839 --> 00:18:43,839
same browser, right, and then you can messs of your

362
00:18:43,839 --> 00:18:47,559
test you have flaky tests, you'd go crazy. So when

363
00:18:47,559 --> 00:18:49,400
you have like a lot of tests, you're spinning up

364
00:18:49,400 --> 00:18:52,319
all these browser things. You can do a couple of things, right.

365
00:18:52,359 --> 00:18:57,400
You can go charting shot across multiple machines, which can

366
00:18:57,440 --> 00:18:59,160
be good and can be bad depending on how you

367
00:18:59,200 --> 00:19:02,720
set it up. Because if you shard too much, remember

368
00:19:02,839 --> 00:19:05,759
you've still got to download the browsers for that shard, right,

369
00:19:05,880 --> 00:19:08,759
So if you have eight shards, there's eight times you're

370
00:19:08,759 --> 00:19:11,880
going to do that. Are you saving time or are you?

371
00:19:11,920 --> 00:19:14,200
So sometimes you have to decide how many shards do

372
00:19:14,240 --> 00:19:17,640
I need and you've got to play around with those numbers. Now,

373
00:19:17,640 --> 00:19:21,400
another cool thing, cool thing that we have is the

374
00:19:21,440 --> 00:19:24,240
Microsoft Playright service, which is not the open source part

375
00:19:24,359 --> 00:19:28,759
of Playwright but the Azure part. So if you're in Azure,

376
00:19:28,880 --> 00:19:32,720
you can basically use cloud based browsers. So now the

377
00:19:32,759 --> 00:19:37,240
browsers that you normally are like downloading are in the cloud.

378
00:19:37,559 --> 00:19:39,039
And I know it's like we all talk about the

379
00:19:39,039 --> 00:19:41,039
cloud and we have to imagine this physical cloud and

380
00:19:41,039 --> 00:19:43,599
the browsers are up there, and you're basically sending your

381
00:19:43,640 --> 00:19:45,920
tests up to this cloud so it doesn't need to

382
00:19:45,960 --> 00:19:49,359
download anything. What that means is you're just running your

383
00:19:49,359 --> 00:19:52,599
tests and you're not doing the browser instance part, which

384
00:19:52,640 --> 00:19:55,279
saves a hell of a lot of time. Now, obviously

385
00:19:55,319 --> 00:19:58,440
this is an Azure feature, so it's it's costs money,

386
00:19:58,440 --> 00:20:00,839
of course, but you save my in the long run.

387
00:20:00,920 --> 00:20:04,200
If you're talking about scaling at an enterprise level, you're

388
00:20:04,240 --> 00:20:08,079
talking about large scale. You want to run I don't know,

389
00:20:08,160 --> 00:20:11,319
ten thousand tests and your pipeline is being slowed down

390
00:20:11,599 --> 00:20:13,400
forty five minutes is taken. You want to take it

391
00:20:13,440 --> 00:20:16,799
down to three minutes. You know, any company would pay for.

392
00:20:16,759 --> 00:20:19,400
Speaker 2: That, right, you know, if I'm running tests in the cloud,

393
00:20:19,480 --> 00:20:21,599
I'm paying for that. So the fact that you've made

394
00:20:21,599 --> 00:20:26,279
me a dedicated service for this purpose, that sounds good

395
00:20:26,279 --> 00:20:28,640
to me. That's just going to make fewer mistakes.

396
00:20:28,920 --> 00:20:31,799
Speaker 1: Is that ratio like forty five minutes turns to three

397
00:20:31,880 --> 00:20:32,759
minutes typical.

398
00:20:33,359 --> 00:20:35,079
Speaker 4: No, that's just me making up a number from the

399
00:20:35,119 --> 00:20:38,279
top of my head, because obviously everyone's tests are different

400
00:20:38,680 --> 00:20:42,279
and you'd have to test it out. But the amount

401
00:20:42,440 --> 00:20:45,640
of time saving across all the examples that we've kind

402
00:20:45,680 --> 00:20:47,640
of run it on and then the clients that are

403
00:20:47,720 --> 00:20:50,279
using it in the feedback they've been given us is

404
00:20:50,279 --> 00:20:52,920
the amount of time. No one is the same, right,

405
00:20:52,960 --> 00:20:57,240
but everyone has saved immense amount of time. And then

406
00:20:57,319 --> 00:20:59,799
also what's really important to a lot of people as

407
00:20:59,799 --> 00:21:02,680
well is being able to see, like, you know, to

408
00:21:02,759 --> 00:21:04,440
see those those tests in a kind of like a

409
00:21:04,519 --> 00:21:07,160
dashboard style, to be able to go back and forward

410
00:21:08,119 --> 00:21:10,039
and then like have a report, right and see a

411
00:21:10,079 --> 00:21:13,319
report of like this is what happened, this is where

412
00:21:13,319 --> 00:21:16,799
it failed, and have a trace of that test on

413
00:21:16,839 --> 00:21:19,279
your you know CEE I, on your on the on

414
00:21:19,359 --> 00:21:21,279
in the cloud, so that basically you don't have to

415
00:21:21,759 --> 00:21:25,920
you know, go to local and locally spin up that

416
00:21:25,920 --> 00:21:28,279
that trace file and then debug it. You can basically

417
00:21:28,480 --> 00:21:29,640
almost debugget in the cloud.

418
00:21:29,720 --> 00:21:29,839
Speaker 1: Right.

419
00:21:31,039 --> 00:21:34,400
Speaker 4: But yeah, so scaleability was an issue, and we solve

420
00:21:34,440 --> 00:21:36,799
that issue because we also need to solve that issue

421
00:21:36,799 --> 00:21:38,599
because otherwise we're losing time.

422
00:21:38,759 --> 00:21:39,559
Speaker 1: That's great news.

423
00:21:39,680 --> 00:21:42,160
Speaker 2: So testing as a service is that where we're going.

424
00:21:42,440 --> 00:21:44,880
Speaker 4: I think we just need to fix testing in general.

425
00:21:44,920 --> 00:21:48,559
And I'll be very truthful, we do not have it

426
00:21:48,640 --> 00:21:51,240
all figured out in Microsoft. We're still learning because we

427
00:21:51,279 --> 00:21:54,079
are so many people, so many teams. We're like so

428
00:21:54,160 --> 00:21:56,839
many mini companies if you if you kind of think

429
00:21:56,839 --> 00:22:00,400
about it that way, and everyone is trying to like,

430
00:22:00,559 --> 00:22:03,880
you know, deliver products. Right, We've got a lot of products, right,

431
00:22:04,799 --> 00:22:06,440
how do we test all these and how do we

432
00:22:06,480 --> 00:22:09,920
create a better solution across Microsoft? And then how do

433
00:22:09,960 --> 00:22:12,920
we let you all use that solution because if we

434
00:22:13,079 --> 00:22:15,559
just test it into in ourselves, we don't get the

435
00:22:15,680 --> 00:22:17,920
value from like, oh but what about this feature and

436
00:22:17,960 --> 00:22:20,680
we need this so, you know, making sure that Playwright

437
00:22:20,759 --> 00:22:24,480
is open source and then having those other services for

438
00:22:24,559 --> 00:22:29,000
the enterprise scale really helps us to make a better product.

439
00:22:29,079 --> 00:22:33,200
But yeah, we're not saying that we have everything sold

440
00:22:33,319 --> 00:22:36,599
in Microsoft and we know everything. No, we're building things

441
00:22:36,599 --> 00:22:39,599
as we go along, and we require like the Playwright

442
00:22:39,640 --> 00:22:43,400
service is going to the reporting is in basically GA

443
00:22:43,759 --> 00:22:46,960
this week, Right, It's like literally, it's new, so we

444
00:22:46,960 --> 00:22:48,799
don't have it all figured out because someone might come

445
00:22:48,799 --> 00:22:51,079
along and say, oh, we want this feature, Well cool,

446
00:22:51,519 --> 00:22:53,720
tell us let us know. We'll build that feature for you,

447
00:22:53,839 --> 00:22:56,440
because we might also think that feature is necessary for

448
00:22:56,480 --> 00:23:02,400
other people. But yeah, everything is being built around making

449
00:23:02,440 --> 00:23:06,640
lives easier, making testing easier. I think easier is our

450
00:23:06,640 --> 00:23:09,240
big word here. Easier and getting more people to test.

451
00:23:09,480 --> 00:23:11,960
Speaker 2: Yeah. Absolutely, And I could see it's still in preview too,

452
00:23:12,000 --> 00:23:13,720
So it's just a hint that you know, you're all

453
00:23:13,839 --> 00:23:16,720
learning by how people use it and what it's for.

454
00:23:17,720 --> 00:23:20,079
But I appreciate the idea that you know, this is

455
00:23:20,119 --> 00:23:23,200
the same angle as why would I build a bunch

456
00:23:23,240 --> 00:23:25,599
of virtual machines if I can use an app service?

457
00:23:25,759 --> 00:23:29,440
Why would I, you know, deploy my own caching if

458
00:23:29,480 --> 00:23:32,799
I could use a reddish cash service like you go

459
00:23:32,839 --> 00:23:37,319
as far up the stack as he can. That's cool,

460
00:23:37,400 --> 00:23:40,240
that's I'm excited to see that, just because yeah, I

461
00:23:40,279 --> 00:23:42,359
don't want to build these things. I'd like you to

462
00:23:42,359 --> 00:23:44,720
do it for me please and charge me by the

463
00:23:44,799 --> 00:23:46,440
test exactly.

464
00:23:46,480 --> 00:23:48,039
Speaker 4: And I think if you have that many tests and

465
00:23:48,079 --> 00:23:50,200
you're you're paying for that means you know you've got

466
00:23:50,240 --> 00:23:53,039
some good coverage going on there that it's worth paying for, right,

467
00:23:53,920 --> 00:23:54,720
it was just made.

468
00:23:54,519 --> 00:23:56,240
Speaker 2: Too many pages, you know, Yeah?

469
00:23:56,400 --> 00:23:58,519
Speaker 4: Maybe maybe.

470
00:24:00,079 --> 00:24:02,599
Speaker 2: Well, I mean it's been two years as you were

471
00:24:02,680 --> 00:24:04,799
on more or less, so it's lead to see Playwright

472
00:24:04,799 --> 00:24:06,599
continuing do evolve Like that's cool.

473
00:24:07,000 --> 00:24:11,839
Speaker 1: Yeah, so you have a special love for JavaScript frameworks.

474
00:24:12,920 --> 00:24:18,160
How does Yeah, that's writing your bio. I'm not hating, Nana,

475
00:24:18,200 --> 00:24:21,920
I'm just reading here, reading your bio. So how does

476
00:24:22,079 --> 00:24:27,960
a JavaScript play into Playwright? If at all is any JavaScript?

477
00:24:28,359 --> 00:24:31,279
Are there entry points for JavaScript in Playwright? If you

478
00:24:31,319 --> 00:24:35,519
want to do some custom things? How does you know?

479
00:24:35,680 --> 00:24:37,079
That's the question, I guess.

480
00:24:37,759 --> 00:24:40,640
Speaker 4: I think what's important to understand about Playwright is that

481
00:24:40,720 --> 00:24:43,400
it can be used across four languages. Right, So if

482
00:24:43,400 --> 00:24:46,720
you were like myself, I'm a JavaScript developer or typescript

483
00:24:46,759 --> 00:24:49,960
developer now is what the cool kids say, then I

484
00:24:50,000 --> 00:24:52,799
can basically use that language because that's what I'm familiar with,

485
00:24:52,920 --> 00:24:55,279
That's what my website is built in. So I'm naturally

486
00:24:55,279 --> 00:24:57,839
going to write my tests using the language that I know.

487
00:24:58,559 --> 00:25:01,759
But Carlin Richard, you're dot net people, right, and you

488
00:25:01,960 --> 00:25:06,440
you're c sharp probably better than JavaScript, and your website

489
00:25:06,480 --> 00:25:08,640
is probably built in Blazer, so you're gonna want to

490
00:25:08,640 --> 00:25:11,200
write your tests in c sharp and not in JavaScript.

491
00:25:11,240 --> 00:25:14,240
And I totally understand that. And that's why Playwright is

492
00:25:14,279 --> 00:25:16,680
so cool because you can just do that, because you

493
00:25:16,720 --> 00:25:19,519
can use Playwright as a dot net developer. And I

494
00:25:19,559 --> 00:25:21,279
know this is dot net rocks, but let's talk about

495
00:25:21,279 --> 00:25:23,240
the Java people and the Pithon people because they can

496
00:25:23,359 --> 00:25:27,440
also write tests using Python and using Java and it's

497
00:25:27,480 --> 00:25:30,119
the same API, and you don't have to learn new tricks,

498
00:25:30,160 --> 00:25:33,160
and you know, you can have one company, which we do.

499
00:25:33,200 --> 00:25:35,920
We're like in Microsoft, we have like you know, various

500
00:25:36,119 --> 00:25:39,839
and we're using different languages depending on the teams and

501
00:25:39,920 --> 00:25:42,599
depending on what we're testing and what people are comfortable with.

502
00:25:42,960 --> 00:25:45,359
So we use dot Net, use Pithon, we use Java,

503
00:25:45,359 --> 00:25:49,160
we use JavaScript. There are differences, of course, right, I'm

504
00:25:49,160 --> 00:25:51,599
not going to lie and say it's the same across

505
00:25:51,599 --> 00:25:53,759
the board. It can't be the same across the board

506
00:25:54,160 --> 00:25:57,960
for various reasons. Because test runners MS test, you can't

507
00:25:57,960 --> 00:26:01,519
compare the MS test to the pie test for example,

508
00:26:01,559 --> 00:26:04,920
they have different stuff, right, And in JavaScript, we built

509
00:26:04,920 --> 00:26:06,440
the test runner and play right, so it's a little

510
00:26:06,480 --> 00:26:08,559
bit different. We've got a little bit more leeway on,

511
00:26:08,960 --> 00:26:10,319
you know, doing certain things.

512
00:26:10,400 --> 00:26:12,160
Speaker 1: And I just want to say for the record that

513
00:26:12,440 --> 00:26:19,359
some of our best friends, right, JavaScript, Python and Java. Okay,

514
00:26:19,400 --> 00:26:22,279
so isn't that what they say usually when somebody uses

515
00:26:22,359 --> 00:26:27,359
you of anti say that some of our best friends.

516
00:26:28,920 --> 00:26:31,720
Speaker 2: But either way, you are testing a web app, you're

517
00:26:31,759 --> 00:26:33,839
just able to write the code for the test in

518
00:26:33,960 --> 00:26:34,480
c sharp.

519
00:26:34,599 --> 00:26:34,839
Speaker 1: Yeah.

520
00:26:34,960 --> 00:26:39,000
Speaker 4: Yeah, because playwright just sees like what's out on the website, right,

521
00:26:39,000 --> 00:26:41,599
what's what's being produced? The what the you know you

522
00:26:41,759 --> 00:26:44,240
inspect code, right, and so you can see what the

523
00:26:44,319 --> 00:26:48,319
user can see that accessibility role, right. It just sees

524
00:26:48,359 --> 00:26:49,960
that that is a role of a button, and it's

525
00:26:50,039 --> 00:26:53,640
looking for what a screen reader would read out or

526
00:26:53,680 --> 00:26:55,839
what a user would see. You sees a button and

527
00:26:55,880 --> 00:26:58,000
it clicks that button, and it does not care if

528
00:26:58,000 --> 00:27:01,839
your button is written in blazer React you write heighten whatever.

529
00:27:02,160 --> 00:27:05,720
Speaker 2: Yeah, no, and right, you know you don't want to

530
00:27:05,799 --> 00:27:09,759
make writing the test the barrier, exactly like you wanted

531
00:27:09,799 --> 00:27:12,480
to be as easy as possible. So I appreciate that

532
00:27:12,519 --> 00:27:16,000
writing the language you want. I could write tests in Python.

533
00:27:16,079 --> 00:27:18,119
That's one way to slow myself way down.

534
00:27:19,240 --> 00:27:22,279
Speaker 4: It could be fun there. You might learn something, maybe.

535
00:27:22,119 --> 00:27:24,480
Speaker 2: It's interesting you think about writing in different languages for

536
00:27:24,519 --> 00:27:25,240
different tasks.

537
00:27:25,319 --> 00:27:28,880
Speaker 1: Yeah, okay, that's cool. So break time. Want to take

538
00:27:28,880 --> 00:27:29,119
a break.

539
00:27:29,279 --> 00:27:29,960
Speaker 2: Let's take a little break.

540
00:27:30,000 --> 00:27:32,400
Speaker 1: All right, We'll be right back after these very important messages.

541
00:27:33,440 --> 00:27:36,359
Did you know you can easily migrate asp net web

542
00:27:36,400 --> 00:27:40,480
apps to Windows containers on Aws. Use the app to

543
00:27:40,599 --> 00:27:45,000
Container tool to containerize your iis websites and deploy to

544
00:27:45,039 --> 00:27:50,759
AWS managed container services with or without Kubernetes. Find out

545
00:27:50,799 --> 00:27:55,640
more about app to Container at aws, dot Amazon dot com, Slash,

546
00:27:55,680 --> 00:28:01,480
dot Net, slash modernize, Attention dot netdeville. Looking for the

547
00:28:01,559 --> 00:28:08,000
ultimate SDK to handle electronic document processing? Meet tx text Control.

548
00:28:08,599 --> 00:28:12,920
Txtext controls your go to solution for seamless PDF generation,

549
00:28:13,400 --> 00:28:18,400
secure electronic signatures, and efficient digital forms processing all within

550
00:28:18,440 --> 00:28:22,680
your dot net applications. Empower your products with robust document

551
00:28:22,759 --> 00:28:28,200
management capabilities, boost productivity, and deliver top notch solutions to

552
00:28:28,240 --> 00:28:32,519
your clients. Trusted by developers worldwide, including me and Richard,

553
00:28:32,839 --> 00:28:37,079
txtext control is the SDK that makes a difference. Check

554
00:28:37,119 --> 00:28:41,440
out demos dot textcontrol dot com for live online demos

555
00:28:41,720 --> 00:28:45,599
and see it in action. And we're back dot NetRocks on.

556
00:28:45,720 --> 00:28:48,759
Carl Franklin. That's my buddy Richard Campbell and our friend

557
00:28:48,920 --> 00:28:52,160
w O'Brien. We're talking about testing with playwright and just

558
00:28:52,200 --> 00:28:54,559
a reminder that if you don't like those ads and

559
00:28:54,599 --> 00:28:56,720
you don't want them, you can pay five bucks a

560
00:28:56,759 --> 00:28:59,559
month and be a patron and you can get a

561
00:28:59,599 --> 00:29:03,880
feed with ad free shows. All right, So we were

562
00:29:03,920 --> 00:29:06,880
talking about we're talking about all sorts of stuff and

563
00:29:06,920 --> 00:29:10,720
testing in different languages. But snapshot testing is something that

564
00:29:11,000 --> 00:29:16,480
I learned about from Simon Crop. And so the idea

565
00:29:16,599 --> 00:29:20,480
is that you have you have these following inputs and

566
00:29:20,519 --> 00:29:24,240
you expect the following output and I get is that

567
00:29:24,559 --> 00:29:31,200
primarily how playwright works or is it even simpler than that?

568
00:29:31,880 --> 00:29:35,880
Speaker 4: So it's just another part of something playwright can do. Right,

569
00:29:36,000 --> 00:29:39,839
So snapshots is like, you know, you're testing that something

570
00:29:39,880 --> 00:29:43,119
looks the same that for example, this is really good

571
00:29:43,119 --> 00:29:45,279
for Wednesday, like those banners up here at the top

572
00:29:45,279 --> 00:29:47,599
of your you know, the Black Friday banners that appear,

573
00:29:47,920 --> 00:29:51,119
and then what I like is there and you want

574
00:29:51,160 --> 00:29:53,880
it to be there, but you wanted to, I don't know,

575
00:29:53,960 --> 00:29:56,559
make sure it's not there after Black Friday eatin doesn't

576
00:29:56,559 --> 00:29:58,440
make sense. So you could, like you know, write a

577
00:29:58,480 --> 00:30:02,319
test that then I don't know, shows the banner, and

578
00:30:02,359 --> 00:30:04,680
then make sure that it is exactly the same as

579
00:30:04,680 --> 00:30:08,240
a banner right on the website. But yeah, there's a

580
00:30:08,279 --> 00:30:11,759
lot of people using snapshot testing or visual regression testing

581
00:30:12,200 --> 00:30:16,200
as a whole ballgame. It's not easy, right because because

582
00:30:16,200 --> 00:30:18,559
across browser as well, the slight little differences, so you've

583
00:30:18,559 --> 00:30:20,559
got to, like, you know, also make sure your pixel

584
00:30:20,599 --> 00:30:23,839
differences are kind of the same, because Safari will do

585
00:30:23,960 --> 00:30:26,279
something a little bit different to Firefox because that's just

586
00:30:26,319 --> 00:30:31,400
how they do things. But definitely, I think if people

587
00:30:31,440 --> 00:30:33,599
are getting started with testing, I wouldn't say, go and

588
00:30:33,839 --> 00:30:36,640
make sure your website looks exactly the same as the

589
00:30:36,680 --> 00:30:40,359
snapshots like everything, because you'll end up possibly things will

590
00:30:40,359 --> 00:30:43,880
fail if you change that button. You've got to re

591
00:30:43,880 --> 00:30:48,079
recreate those snapshots each time. So I would always say, like,

592
00:30:48,200 --> 00:30:51,039
that's an extra, that's great and it's cool, but first

593
00:30:51,279 --> 00:30:53,559
make sure that your user can do what the user

594
00:30:53,599 --> 00:30:56,400
should be doing. Whatever it is on that website is

595
00:30:56,440 --> 00:30:58,720
going to bring you money or make you click that

596
00:30:59,039 --> 00:31:03,680
patron button that you talked about, whatever it is, test that.

597
00:31:03,960 --> 00:31:07,559
Then do the accessibility testing, the regression testing, the API testing,

598
00:31:08,160 --> 00:31:10,480
there's a whole ballgame of things that you can.

599
00:31:10,359 --> 00:31:14,640
Speaker 2: Explore, sure, right, but I mean the snapshot test is

600
00:31:14,680 --> 00:31:17,839
really about a look and feel thing rather than a

601
00:31:17,880 --> 00:31:18,759
functionality thing.

602
00:31:19,119 --> 00:31:23,119
Speaker 4: Yeah, it's about that it looks the same basically that

603
00:31:23,160 --> 00:31:26,799
it hasn't changed that the designer didn't put a CSS

604
00:31:26,839 --> 00:31:28,480
hidden on a button and now they can't see the

605
00:31:28,519 --> 00:31:32,000
button for example. Right, But then if that was the case,

606
00:31:32,039 --> 00:31:34,559
player wouldn't be able to click the button, so that

607
00:31:34,640 --> 00:31:35,359
test would fail.

608
00:31:35,480 --> 00:31:37,319
Speaker 2: It would still break anyway, exactly.

609
00:31:37,559 --> 00:31:40,039
Speaker 4: But sometimes there are times when visual aggression testing is

610
00:31:40,079 --> 00:31:44,799
really important, especially when using I don't know when they say,

611
00:31:44,839 --> 00:31:46,839
like a lot of advertisements on your website and you

612
00:31:46,880 --> 00:31:49,799
want to remove those and just see what the website

613
00:31:49,839 --> 00:31:52,319
looks like out those You can mask those kind of things.

614
00:31:52,559 --> 00:31:55,559
Speaker 2: Well, no websites are so twitchy these days, right, Like

615
00:31:56,119 --> 00:31:59,000
thank goodness for pie hole. Otherwise there's stuff flying at

616
00:31:59,039 --> 00:31:59,960
you in all directions.

617
00:32:00,480 --> 00:32:03,279
Speaker 1: And you can also exclude things like you say, I

618
00:32:03,319 --> 00:32:06,119
want this page to look like such and such with

619
00:32:06,240 --> 00:32:08,720
the following data that it because we put in a

620
00:32:08,759 --> 00:32:12,480
certain input. But you know, little things like the date

621
00:32:13,079 --> 00:32:14,920
in the time, we don't want to We don't care

622
00:32:14,920 --> 00:32:16,200
about that that can change.

623
00:32:17,039 --> 00:32:19,519
Speaker 2: Yeah, I'm kind of staggered at how it would do

624
00:32:19,559 --> 00:32:22,640
those visual representations you just talked about sort of headless

625
00:32:22,680 --> 00:32:25,720
browsing where there is no visual component, but is do

626
00:32:25,799 --> 00:32:27,839
something different when it wants to create a visualization.

627
00:32:28,640 --> 00:32:31,480
Speaker 4: Well, it's just like taking a photo and then like

628
00:32:31,880 --> 00:32:35,200
it takes a photo kind I'm just doing like an

629
00:32:35,200 --> 00:32:37,799
example here, right, you take your phone out and you

630
00:32:37,839 --> 00:32:40,920
take a photograph of your screen of the website, and

631
00:32:40,960 --> 00:32:44,200
then you change your code, and then it takes another

632
00:32:44,200 --> 00:32:47,119
photograph and then it compares those two overlays one in

633
00:32:47,160 --> 00:32:49,680
front of the other, and it kind of sees like

634
00:32:50,279 --> 00:32:53,039
is there a pixel difference? Has the button moved over there?

635
00:32:53,079 --> 00:32:55,839
What's it expecting and where is the button now? And

636
00:32:55,880 --> 00:32:58,920
I'm using button as an example, but it could be anything, right.

637
00:32:58,720 --> 00:33:00,559
Speaker 2: But it is pixel perfect it.

638
00:33:00,839 --> 00:33:04,200
Speaker 4: Yeah, but you can adjust that, right, You can say

639
00:33:04,240 --> 00:33:07,079
I want it to be like so many pixels away

640
00:33:07,160 --> 00:33:10,759
because I don't know it's an animation that's gonna like,

641
00:33:10,880 --> 00:33:12,680
you know, I don't do stuff, and you know you

642
00:33:12,720 --> 00:33:13,960
want it to be able to move a little bit

643
00:33:14,079 --> 00:33:15,119
or whatever.

644
00:33:15,559 --> 00:33:18,880
Speaker 1: So I wasn't really thinking of taking screenshots, screenshot testing,

645
00:33:18,920 --> 00:33:21,920
snapshot testing something I learned from Simon because he has

646
00:33:21,920 --> 00:33:24,759
a tool called Verify, and it's really just testing the

647
00:33:25,039 --> 00:33:30,039
HTML output of a page. So like a form, Right,

648
00:33:30,079 --> 00:33:32,400
you fill in a form, you press a button, it's

649
00:33:32,440 --> 00:33:35,599
going to give you a summary of that data. And

650
00:33:36,319 --> 00:33:39,799
that is what it tests that the output of this

651
00:33:40,119 --> 00:33:44,680
matches what we expected to match. So I think I

652
00:33:44,759 --> 00:33:46,440
think we might be talking about two different things.

653
00:33:46,480 --> 00:33:48,200
Speaker 4: We're probably talking about different Yeah.

654
00:33:48,079 --> 00:33:49,880
Speaker 2: But it is that in that case, it is literally

655
00:33:49,920 --> 00:33:52,799
a text comparison to the HTML. Yeah, Like if I

656
00:33:52,839 --> 00:33:56,039
was doing visual representation comparison, I could write the page

657
00:33:56,079 --> 00:33:58,519
different ways but have to present the same way.

658
00:33:58,839 --> 00:33:59,079
Speaker 1: Yep.

659
00:33:59,240 --> 00:34:01,640
Speaker 2: Not that I'm good enough to do that, but you

660
00:34:01,680 --> 00:34:04,480
know that would be interesting.

661
00:34:04,640 --> 00:34:06,319
Speaker 1: Yeah, you want to make sure that this did with

662
00:34:06,359 --> 00:34:11,079
this ID has this content right, which is different than

663
00:34:11,800 --> 00:34:16,000
you know, comparing uh screenshat, which is also valuable. I

664
00:34:16,000 --> 00:34:20,280
mean absolutely, There's just so many ways to go about testing.

665
00:34:20,639 --> 00:34:23,480
Speaker 2: Yeah, I'm just wondering about the brittleness of tests, right,

666
00:34:23,559 --> 00:34:26,239
Like most people dive into testing the first round of

667
00:34:26,280 --> 00:34:28,519
tests they build. The next time they do enough to

668
00:34:28,599 --> 00:34:30,760
do the app, every single test is broken and they right,

669
00:34:30,840 --> 00:34:31,679
why did I do this?

670
00:34:32,599 --> 00:34:32,880
Speaker 1: Yep?

671
00:34:33,079 --> 00:34:36,920
Speaker 2: And you Debbie jump in on this, like, how do

672
00:34:36,960 --> 00:34:39,119
you write non brittle tests?

673
00:34:41,320 --> 00:34:45,039
Speaker 4: I think you just have to constantly test. You've got

674
00:34:45,039 --> 00:34:50,079
to like make sure that I don't know, I think,

675
00:34:51,159 --> 00:34:53,199
I think use the tools that are there. I would say,

676
00:34:53,239 --> 00:34:55,519
use the tools that are the code generator, right, the

677
00:34:55,519 --> 00:34:57,559
code gen will generate the test view. I think a

678
00:34:57,559 --> 00:35:00,920
lot of people going back the previous days would have

679
00:35:00,960 --> 00:35:03,559
wrote their test using things like XPath, using things like

680
00:35:03,639 --> 00:35:07,000
CSS selectors, right, And that was the right thing to

681
00:35:07,000 --> 00:35:10,039
do back then. But our front end, and I don't

682
00:35:10,039 --> 00:35:12,360
know about you guys in the Blazer world, but we

683
00:35:12,519 --> 00:35:16,320
CHANGEAVASCRIPT are known for We're changing things all the time, right,

684
00:35:16,400 --> 00:35:21,079
We're constantly like changing, so our htmil is changing. And

685
00:35:21,199 --> 00:35:22,880
if you're going to change that, the x path is

686
00:35:22,880 --> 00:35:24,639
going to change, which means your test is now going

687
00:35:24,679 --> 00:35:27,760
to be brittle. It's going to break just changing your

688
00:35:27,760 --> 00:35:31,199
CSS class. New developer comes along and he changes a

689
00:35:31,199 --> 00:35:34,000
CS class. If your website and your tests break, well,

690
00:35:34,440 --> 00:35:37,199
that's not good, right, So you need to avoid things

691
00:35:37,320 --> 00:35:40,079
like that. And the way to do that is, you know,

692
00:35:40,199 --> 00:35:44,039
use the test generator tools to generate those locators. Locators

693
00:35:44,079 --> 00:35:46,320
is how you locate an element on the page. So

694
00:35:46,360 --> 00:35:48,480
how do I all locate that button on the page.

695
00:35:48,840 --> 00:35:51,280
You use a get by roll button, and that button

696
00:35:51,920 --> 00:35:55,519
has a name called submit, and that is tested. It's

697
00:35:55,559 --> 00:35:59,559
also tested for accessibility, and it's easier than for you

698
00:35:59,639 --> 00:36:01,480
to go out and just do whatever you want with

699
00:36:01,519 --> 00:36:03,360
that button, change the CSS of it, put it in

700
00:36:03,440 --> 00:36:05,880
a different place. Play right's going to look for that

701
00:36:06,280 --> 00:36:09,480
button with a roll of button call submit, and it

702
00:36:09,480 --> 00:36:11,159
doesn't care where it does in your page because that's

703
00:36:11,159 --> 00:36:13,480
not important. What's important is that the user can click it,

704
00:36:14,039 --> 00:36:16,039
and the user can get to that next section of

705
00:36:16,039 --> 00:36:17,679
the page or whatever it needs to do with it.

706
00:36:17,960 --> 00:36:20,400
So I think making sure you test as close to

707
00:36:20,440 --> 00:36:24,719
the user as possible will save a lot of problems

708
00:36:24,840 --> 00:36:26,840
in the long run when it comes to brittle tests.

709
00:36:27,360 --> 00:36:30,639
Speaker 1: M So instead of on Fridays you guys all get

710
00:36:30,679 --> 00:36:33,679
together and push buttons, now you're getting together and updating

711
00:36:33,679 --> 00:36:36,119
your tests or maybe you're doing that every time you

712
00:36:36,199 --> 00:36:39,000
check in something, right, yeah, and make sure your tests

713
00:36:39,000 --> 00:36:40,000
are working.

714
00:36:40,119 --> 00:36:42,920
Speaker 4: And what's really cool is is like the code Generator

715
00:36:42,960 --> 00:36:45,519
tool is very cool because you literally like it launches

716
00:36:45,639 --> 00:36:47,519
up a browser window, right, and you put in your

717
00:36:47,559 --> 00:36:50,360
website address and you start using a use as a

718
00:36:50,440 --> 00:36:53,119
user would, and you generate that code, and then you've

719
00:36:53,119 --> 00:36:56,119
got tools like get up copilot, right, and you can

720
00:36:56,159 --> 00:36:58,639
do really funky things at copilot because you can turn

721
00:36:58,679 --> 00:37:01,400
around and then say a test step for my tests,

722
00:37:01,440 --> 00:37:03,119
and it's going to like literally take the code that

723
00:37:03,159 --> 00:37:05,159
you've just written, that you've just generated, actually you haven't

724
00:37:05,159 --> 00:37:06,960
written it, you've just generated, and it's going to put

725
00:37:06,960 --> 00:37:08,280
it into test steps for you, and it's going to

726
00:37:08,320 --> 00:37:10,199
do all these kind of other stuff that you want

727
00:37:10,239 --> 00:37:14,559
to do it or put it into a described block

728
00:37:14,760 --> 00:37:17,320
or you know, you can help get a copilot can

729
00:37:17,360 --> 00:37:20,719
also help you to improve the code. So as a developer,

730
00:37:20,719 --> 00:37:23,719
you're not sitting there just like writing the boring parts

731
00:37:23,719 --> 00:37:26,119
of testing. You're using the tools to your advantage.

732
00:37:26,400 --> 00:37:26,800
Speaker 2: Mm hmm.

733
00:37:27,199 --> 00:37:27,440
Speaker 1: Good.

734
00:37:27,719 --> 00:37:31,360
Speaker 2: Yeah, And I think definitely I remember in Strange Loop.

735
00:37:32,000 --> 00:37:34,760
I think the third go around of writing tests for

736
00:37:34,920 --> 00:37:38,079
Strange Loo, we've gotten better at writing tests that just

737
00:37:38,119 --> 00:37:40,880
we're going to be more tolerant, like you're still checking

738
00:37:40,880 --> 00:37:43,199
the value the way you want to, but you're not

739
00:37:43,320 --> 00:37:48,000
fussing over you know, unnecessary elements of that. That means

740
00:37:48,000 --> 00:37:50,800
that the slightest change in the test fails. Yeah. I

741
00:37:51,280 --> 00:37:54,599
think it's really an art to write good tests and

742
00:37:54,639 --> 00:37:57,239
stuff that will give you check the stuff you need

743
00:37:57,239 --> 00:38:02,599
to check without being infrastructure where minor changes the things

744
00:38:02,719 --> 00:38:04,000
just derail all the tests.

745
00:38:04,159 --> 00:38:06,199
Speaker 4: I think that's the difference between unit testing, right, whereas

746
00:38:06,239 --> 00:38:09,920
unit testing really is so close to the code that

747
00:38:09,960 --> 00:38:12,079
it's like you change something in the code or your

748
00:38:12,119 --> 00:38:15,599
test is going to break. With play right, really, you

749
00:38:15,880 --> 00:38:17,880
can change something in the code and your test shouldn't

750
00:38:17,880 --> 00:38:21,199
break unless you change, say, like what the user sees

751
00:38:21,239 --> 00:38:24,480
and instead of a submit button, you put upload, and

752
00:38:25,039 --> 00:38:27,199
now it's going to like look for submit and it

753
00:38:27,239 --> 00:38:31,800
finds upload because that they messed up the translation or whatever, or.

754
00:38:31,760 --> 00:38:34,920
Speaker 2: You've removed I or you've removed a field or like you.

755
00:38:35,039 --> 00:38:37,920
I mean, there's also good test fails where it's like

756
00:38:38,000 --> 00:38:39,800
I made this change and the test shows that I

757
00:38:39,920 --> 00:38:42,400
made this change. Now I can remove the test or

758
00:38:42,519 --> 00:38:46,360
change the test. Yes, I don't mind it when it

759
00:38:46,400 --> 00:38:49,440
is clear on stuff. What I mind is, hey, you know,

760
00:38:49,480 --> 00:38:51,760
we wrote three hundred tests around this set of pages,

761
00:38:51,800 --> 00:38:56,079
and I changed this CSS structure and every test is

762
00:38:56,159 --> 00:38:56,880
vailing now.

763
00:38:57,280 --> 00:38:59,320
Speaker 4: And that's the difference between unit tests, right, because you

764
00:38:59,440 --> 00:39:01,800
write that test and then you can't really see what's

765
00:39:01,840 --> 00:39:05,000
going on, right, you're stuck in code land. But in Playwright,

766
00:39:05,039 --> 00:39:07,360
when you have that failing test, you spin up a

767
00:39:07,480 --> 00:39:10,880
trace of your test, and that's like basically be able

768
00:39:10,880 --> 00:39:15,440
to go think of a video, but better so a

769
00:39:15,599 --> 00:39:19,119
video with dev tools, a video that you can manually

770
00:39:19,199 --> 00:39:22,000
step between every single step and go back and forward

771
00:39:22,039 --> 00:39:24,679
in time at your own pace, and have a DMB

772
00:39:24,719 --> 00:39:27,400
snapshot that you can just pop out and inspect the

773
00:39:27,400 --> 00:39:30,519
dev tools and say, right, I know what happened here.

774
00:39:31,280 --> 00:39:34,159
Somebody puts CSS hidden. I'm just gonna use that example

775
00:39:34,199 --> 00:39:37,639
because that actually happened to me on one of them

776
00:39:37,639 --> 00:39:40,199
that I was testing on the podcast website, and it

777
00:39:40,280 --> 00:39:42,920
put CSS hitting them playright couldn't find it because it

778
00:39:43,000 --> 00:39:45,559
isn't visible to the user. So if the user can

779
00:39:45,679 --> 00:39:48,960
click it, but the code is there, the code didn't change.

780
00:39:49,000 --> 00:39:51,000
The CSS change and the CSOs could have been in

781
00:39:51,000 --> 00:39:53,360
a different file to the code, right well.

782
00:39:53,360 --> 00:39:54,840
Speaker 2: And so that could have gone the other way. Right,

783
00:39:54,880 --> 00:39:57,280
you've hid it the test pass and you deploy it,

784
00:39:57,320 --> 00:40:01,000
but the users can't work that. Yeah, you want to

785
00:40:01,000 --> 00:40:03,239
be able to catch that too. It's it's it's always

786
00:40:03,239 --> 00:40:03,960
going to be a battle.

787
00:40:04,199 --> 00:40:07,920
Speaker 1: Can can Playwright penetrate to the level where it can

788
00:40:07,960 --> 00:40:11,719
see components of the shadow? Don Yeah, it just works.

789
00:40:12,320 --> 00:40:14,079
Speaker 4: It just works, iphrames, it just works.

790
00:40:14,239 --> 00:40:18,679
Speaker 1: Just wow. Not well that was a simple answer.

791
00:40:19,639 --> 00:40:21,400
Speaker 4: Sorry, I try to make it more complicated.

792
00:40:22,000 --> 00:40:27,079
Speaker 1: Yes, no, yes, no question, I can't tell. That's great. Yeah,

793
00:40:27,079 --> 00:40:29,039
that's great because that that has been a problem.

794
00:40:28,760 --> 00:40:30,880
Speaker 4: In the past, you know it has. That's why we

795
00:40:30,920 --> 00:40:33,599
had to solve it. Because you know, problems need to

796
00:40:33,599 --> 00:40:34,119
be solved.

797
00:40:34,480 --> 00:40:34,880
Speaker 1: Yeah.

798
00:40:35,039 --> 00:40:37,559
Speaker 2: Do you find that developers are using playwright in their

799
00:40:37,639 --> 00:40:40,000
local cycle or is this purely part of the c

800
00:40:40,119 --> 00:40:42,159
i CD pipeline.

801
00:40:42,519 --> 00:40:45,760
Speaker 4: I think it has to be both, because you need to.

802
00:40:46,559 --> 00:40:49,840
I always think that unless a website is finished, which

803
00:40:49,920 --> 00:40:54,360
I've very rarely seen, what is product finished exactly exactly,

804
00:40:55,119 --> 00:40:57,519
So unless it's something that you are never going to

805
00:40:57,519 --> 00:40:59,159
touch ever again in your life and you're going to

806
00:40:59,199 --> 00:41:02,360
write those tests and it's just on CICD for whatever reason.

807
00:41:02,400 --> 00:41:04,719
But no, nothing has ever finished. Things are always changing.

808
00:41:05,880 --> 00:41:09,119
So running your tests locally as you're building some code,

809
00:41:09,119 --> 00:41:12,400
as you're adding additions, as you're changing things always makes sense.

810
00:41:12,440 --> 00:41:14,599
Some people don't. Some people push it to CEICD so

811
00:41:14,599 --> 00:41:16,840
they can just get their code up there and they're

812
00:41:16,840 --> 00:41:20,760
not testing it locally, and then like you know, Friday,

813
00:41:20,760 --> 00:41:22,360
they make all the changes, they push and then they

814
00:41:22,360 --> 00:41:26,639
can't go home because, like you know, something broke. So

815
00:41:26,760 --> 00:41:30,039
running it locally always always helps, and having the tools

816
00:41:30,559 --> 00:41:32,880
like it's it's when when tests are quick and easy

817
00:41:32,920 --> 00:41:37,039
to run, it means people don't mind running them locally.

818
00:41:37,079 --> 00:41:39,760
When tests, if your test takes forty five minutes to run,

819
00:41:39,920 --> 00:41:41,960
as a developer, I'm not going to run it. I'm

820
00:41:41,960 --> 00:41:43,840
not going to run it locally. I might run the

821
00:41:43,880 --> 00:41:47,480
one test that I'm working on, but it might affect

822
00:41:47,480 --> 00:41:49,400
other things the code I'm working on.

823
00:41:49,480 --> 00:41:52,119
Speaker 2: So and that's sort of that integration test that after

824
00:41:52,159 --> 00:41:55,639
the fact. Yeah, now you go check the integration effects.

825
00:41:55,800 --> 00:41:57,639
Speaker 4: So I always say, like new code you're building, I'm

826
00:41:57,639 --> 00:42:02,159
building this new feature, then I really want to work

827
00:42:02,199 --> 00:42:05,320
on those tests. I'm writing those tests. As I'm building

828
00:42:05,320 --> 00:42:07,719
the feature. I write the tests, and then I'm testing

829
00:42:07,760 --> 00:42:10,239
that and then I you know, it's now deployed and

830
00:42:10,280 --> 00:42:12,960
then it's running on CICD and it keeps running. Yeah,

831
00:42:13,400 --> 00:42:14,639
So it's a mixture of things.

832
00:42:14,760 --> 00:42:19,320
Speaker 2: I mean, a CICD part is not not optional. Before

833
00:42:19,360 --> 00:42:23,800
this heads towards deployment or load testing or the next stage.

834
00:42:24,320 --> 00:42:27,400
It must be thoroughly tested. It's just a question of

835
00:42:27,440 --> 00:42:28,920
how much of that can you pull down to the

836
00:42:28,920 --> 00:42:32,639
local workstation for that DEV cycle, the impacts that would

837
00:42:32,719 --> 00:42:35,440
have on them. I guess it would be great to

838
00:42:35,639 --> 00:42:37,119
organize it in such a way that you could only

839
00:42:37,159 --> 00:42:38,639
need to test the piece you're working it.

840
00:42:38,920 --> 00:42:44,159
Speaker 1: Are there any common misassumptions or barriers to entry or

841
00:42:44,239 --> 00:42:50,440
gotcha's that people will find misassumptions, Maybe that people will

842
00:42:50,519 --> 00:42:53,320
run into things that they assume that it does that

843
00:42:53,360 --> 00:42:57,960
it doesn't do, or what's the typical getting started barrier

844
00:42:58,039 --> 00:42:59,559
that you see people having.

845
00:42:59,639 --> 00:43:04,559
Speaker 2: I think that miss assumption is a word. Look, sorry,

846
00:43:04,599 --> 00:43:05,880
you looked up? I did?

847
00:43:06,559 --> 00:43:06,960
Speaker 1: I can't.

848
00:43:07,000 --> 00:43:11,360
Speaker 2: I just like, what have you met me? You've appreciate

849
00:43:11,440 --> 00:43:14,719
met me? Debbie, I'm sorry, We're okay.

850
00:43:14,800 --> 00:43:18,760
Speaker 4: So I think what's really important to note is that

851
00:43:18,920 --> 00:43:23,440
tools change and evolve over time, and things get better

852
00:43:24,039 --> 00:43:28,760
and we improve things a lot. So sometimes people will

853
00:43:28,800 --> 00:43:31,599
say I'm going to go write a test and they

854
00:43:31,639 --> 00:43:34,880
are too. I'm gonna use the word lazy, but it's just,

855
00:43:35,000 --> 00:43:37,280
you know, that's my word, but there could be another

856
00:43:37,280 --> 00:43:40,079
way of describing it. They're too lazy to read the documentation.

857
00:43:40,719 --> 00:43:44,400
So what they do is they just go and they say,

858
00:43:44,519 --> 00:43:46,400
I'm going to write a test. I don't want to

859
00:43:46,440 --> 00:43:50,119
read docs. So what do I do? And what do

860
00:43:50,159 --> 00:43:52,119
we all do? We just Google right and you just

861
00:43:52,239 --> 00:43:54,199
throw it into Google or now we got the new Google.

862
00:43:54,199 --> 00:43:57,159
We got chat gtpt right, and we say, how do

863
00:43:57,199 --> 00:44:00,519
I write a test in Playwright? And some times the

864
00:44:00,599 --> 00:44:03,920
results we get are wrong and we don't care because

865
00:44:03,960 --> 00:44:05,760
we don't know because we didn't read the docs. We

866
00:44:05,880 --> 00:44:08,559
copy and we paste that code and we put it

867
00:44:08,599 --> 00:44:11,159
into our tests and then we go, my test is breaking,

868
00:44:11,199 --> 00:44:13,320
and I don't know why my test doesn't work, and

869
00:44:13,360 --> 00:44:13,760
I don't know.

870
00:44:13,760 --> 00:44:16,360
Speaker 1: What it works when it shouldn't work exactly.

871
00:44:16,880 --> 00:44:19,079
Speaker 4: So this is really important to kind of make sure

872
00:44:19,119 --> 00:44:23,320
you're using the latest version that you know, I mean,

873
00:44:23,599 --> 00:44:25,840
Playwright is you know, the first time Playwright came out

874
00:44:25,880 --> 00:44:29,079
three years ago, the locators were different to what they

875
00:44:29,119 --> 00:44:33,519
are now. And you know, sometimes chat GTPT isn't up

876
00:44:33,519 --> 00:44:35,360
to date, it hasn't been trained in the latest model,

877
00:44:35,400 --> 00:44:36,840
so it's going to give you an old version.

878
00:44:36,920 --> 00:44:37,119
Speaker 3: Right.

879
00:44:38,119 --> 00:44:40,480
Speaker 4: Someone on stack overflow maybe wrote that a couple of

880
00:44:40,519 --> 00:44:42,679
years ago. Maybe doesn't know much about testing. You have

881
00:44:42,760 --> 00:44:45,239
no idea of their knowledge level. You're just copying their

882
00:44:45,280 --> 00:44:48,199
code and their answer, assuming that they're all experts and

883
00:44:48,239 --> 00:44:50,599
that you're not an expert. But really, if you just

884
00:44:50,639 --> 00:44:52,960
go into the documentation and did the same search and

885
00:44:53,000 --> 00:44:55,480
the documentation, you would get that answer. We get a

886
00:44:55,519 --> 00:44:56,199
better answer.

887
00:44:57,719 --> 00:45:00,599
Speaker 1: Are there are there really good examples in the documentation

888
00:45:00,960 --> 00:45:03,960
of you know, for people getting started their walkthroughs or

889
00:45:04,119 --> 00:45:04,800
that kind of thing.

890
00:45:05,199 --> 00:45:08,119
Speaker 4: So I'm going to be very very honest and tell

891
00:45:08,199 --> 00:45:14,360
you that I did never basically ever install sea sharp

892
00:45:14,519 --> 00:45:22,480
on my computer until literally a couple of months ago.

893
00:45:22,840 --> 00:45:27,159
Of all guils, I built the getting started docs for

894
00:45:27,320 --> 00:45:30,840
c sharp, and I took it from start to finish,

895
00:45:30,880 --> 00:45:33,840
and I mean from start to installing on my computer.

896
00:45:34,199 --> 00:45:34,480
Speaker 1: Wow.

897
00:45:34,519 --> 00:45:38,880
Speaker 4: So if I, as a non developer, can write a

898
00:45:38,880 --> 00:45:41,880
playwright test in dot net by following the getting started guide,

899
00:45:41,920 --> 00:45:43,840
then a dot net developer should be able to do

900
00:45:43,880 --> 00:45:46,199
it ten times faster than me and should be very

901
00:45:46,239 --> 00:45:48,320
successful in a very short space of time.

902
00:45:48,480 --> 00:45:50,039
Speaker 1: Well done you nice.

903
00:45:50,719 --> 00:45:52,400
Speaker 2: Thanks, Yeah, that's.

904
00:45:52,280 --> 00:45:53,599
Speaker 4: Actually really easy to install.

905
00:45:53,679 --> 00:45:53,960
Speaker 3: Do it?

906
00:45:54,039 --> 00:45:56,840
Speaker 4: I realized it's actually a purple button. You just press

907
00:45:56,920 --> 00:45:59,559
it and then it just installs. I did not know that.

908
00:45:59,679 --> 00:46:02,280
Speaker 2: Yeah, I mean we always had this problem. But there's

909
00:46:02,280 --> 00:46:05,039
too many ways and so did some of them are

910
00:46:05,119 --> 00:46:06,599
hard and yeah, if you picked it.

911
00:46:07,000 --> 00:46:09,239
Speaker 4: You know what I did, I asked chat and you

912
00:46:09,280 --> 00:46:11,199
know what it did. It sent me down the rum path.

913
00:46:11,480 --> 00:46:14,840
Speaker 1: Oh man, you go to the docks.

914
00:46:17,320 --> 00:46:19,599
Speaker 2: Who's lazy? Yeah?

915
00:46:19,760 --> 00:46:24,880
Speaker 1: Right, it's like have an intelligent mentor that sometimes loses

916
00:46:24,920 --> 00:46:25,480
its mind.

917
00:46:25,960 --> 00:46:28,559
Speaker 2: Well, it gave you an answer, it just wasn't the

918
00:46:28,679 --> 00:46:33,119
easiest answer, right, Like, that's that's a tough concept for

919
00:46:33,159 --> 00:46:34,760
a piece of software to figure out.

920
00:46:34,960 --> 00:46:37,800
Speaker 1: Gott to change your system? Prompted to can you not

921
00:46:37,920 --> 00:46:42,719
give me any dumb answers? That'd be great. If you

922
00:46:42,760 --> 00:46:45,159
don't do that, you're only going to get dumb answers.

923
00:46:45,559 --> 00:46:47,519
Speaker 4: I mean the answer sounded good to me if it

924
00:46:47,559 --> 00:46:50,480
felt familiar in my world. It was like, you know, yeah, homebrew,

925
00:46:50,559 --> 00:46:52,599
just homebrew it all up. Yeah, that's that's me, Mark

926
00:46:52,679 --> 00:46:55,199
that that does it. But no, you don't need that

927
00:46:55,679 --> 00:46:56,000
was it was?

928
00:46:56,039 --> 00:46:58,199
Speaker 2: It was it Hunter that told you. It's like we

929
00:46:58,280 --> 00:46:58,920
made a button.

930
00:47:00,199 --> 00:47:00,960
Speaker 1: There's a button.

931
00:47:01,320 --> 00:47:07,760
Speaker 4: Yeah, why don't you know about the button?

932
00:47:11,440 --> 00:47:13,840
Speaker 1: One thing that I've noticed as an aside here that

933
00:47:13,920 --> 00:47:16,320
Chat GPT is terrible at is CSS?

934
00:47:16,880 --> 00:47:17,360
Speaker 2: Oh boy?

935
00:47:18,239 --> 00:47:21,280
Speaker 1: Yeah, don't try to solve a CSS problem with chat GP.

936
00:47:22,880 --> 00:47:25,800
Speaker 2: Problem. Now I have two problems.

937
00:47:25,880 --> 00:47:27,559
Speaker 1: I have a problem factory.

938
00:47:28,239 --> 00:47:32,119
Speaker 2: Yeah, I tried it with Kubernetes and a head of

939
00:47:32,159 --> 00:47:37,159
container problems. Yeah, CSS is terrible. I'm sorry. Or did

940
00:47:37,199 --> 00:47:40,559
I have a problem orchestrator. It's one of those, you.

941
00:47:40,519 --> 00:47:43,519
Speaker 1: Know, I might as well ask the JavaScript JavaScript web

942
00:47:43,599 --> 00:47:48,360
queen here. CSS visualization tools exist so that you can

943
00:47:48,400 --> 00:47:52,960
see a tree view of your application so you can

944
00:47:53,320 --> 00:47:56,599
more easily diagnose CSS problems.

945
00:47:56,920 --> 00:47:58,800
Speaker 4: I mean, we just live in death tools, and like

946
00:47:58,800 --> 00:48:01,920
the death tools is in me, and even like you know.

947
00:48:02,119 --> 00:48:04,559
Speaker 1: You really think so, yeah, you think the dev tools

948
00:48:04,559 --> 00:48:06,800
are amazing for CSS. I mean, I guess you do

949
00:48:06,880 --> 00:48:08,519
see the tree, see.

950
00:48:08,280 --> 00:48:12,320
Speaker 4: Everything you see like accessibility for your components. You can

951
00:48:12,320 --> 00:48:14,639
see the color. You can even like modify it and

952
00:48:14,639 --> 00:48:16,719
say like that's that a color is not accessible. But

953
00:48:16,760 --> 00:48:18,360
if I can just like scroll it across a bit,

954
00:48:18,400 --> 00:48:20,320
this is an accessible color, which means you can go

955
00:48:20,440 --> 00:48:23,519
back to your designer and say, hey, that gray it's

956
00:48:23,559 --> 00:48:25,239
just not going to work for me, but if you want,

957
00:48:25,440 --> 00:48:27,280
can we make it this grey? Because that would work

958
00:48:27,320 --> 00:48:29,440
accessibility wise, and then they just kind of get you know,

959
00:48:29,480 --> 00:48:32,039
they love their colors and their stuff, so they go, oh,

960
00:48:32,199 --> 00:48:33,360
that gray is a little bit different.

961
00:48:33,920 --> 00:48:37,199
Speaker 1: Yeah, I guess what I'm really looking for, And maybe

962
00:48:37,199 --> 00:48:39,719
the dev tools haven't have just missed this. But you know,

963
00:48:39,800 --> 00:48:42,360
when you're several layers down, like maybe ten or eleven

964
00:48:42,440 --> 00:48:45,039
or twelve layers down, and you have some CSS that's

965
00:48:45,159 --> 00:48:48,400
all messed up and it's not what you expected, can

966
00:48:48,440 --> 00:48:52,119
you like querry that and say, yeah, where did this

967
00:48:52,280 --> 00:48:56,480
particular attribute come from in the CSS tree?

968
00:48:56,519 --> 00:48:58,079
Speaker 2: Why is this hidden?

969
00:48:58,440 --> 00:49:01,119
Speaker 1: Yeah? Why is it hidden? Why is it purple? Why

970
00:49:01,199 --> 00:49:02,119
is it not purple?

971
00:49:03,880 --> 00:49:07,000
Speaker 4: I think a lot of people write very very bad CSS,

972
00:49:07,039 --> 00:49:09,400
and that is a weird problem that you need to solve,

973
00:49:09,440 --> 00:49:11,679
and deaf tools can't solve that, and there's no tool

974
00:49:11,719 --> 00:49:14,039
I can solve that. I tried to solve that in

975
00:49:14,079 --> 00:49:16,599
a company and I literally re architected the whole thing

976
00:49:16,639 --> 00:49:19,480
in the amount of times, like CSS, this is being

977
00:49:19,559 --> 00:49:21,880
used across twenty components and you change it once and

978
00:49:21,920 --> 00:49:23,960
it's going to affect so many others, but but you

979
00:49:24,000 --> 00:49:26,079
don't know about it because this file live somewhere else,

980
00:49:26,360 --> 00:49:29,480
and it's just being cold and bundled together. I mean,

981
00:49:29,519 --> 00:49:31,679
tailwind kind of solves that a little bit. If you

982
00:49:31,719 --> 00:49:33,599
wanted to get out on that road, That's what I

983
00:49:33,639 --> 00:49:35,679
would have used and used.

984
00:49:36,599 --> 00:49:39,760
Speaker 1: Maybe there's a good AI solution out there waiting on

985
00:49:39,840 --> 00:49:42,280
the horizons that you can just ask, why is the

986
00:49:42,280 --> 00:49:45,519
button not purple? There you go or whatever, and it'll

987
00:49:45,519 --> 00:49:46,679
find it in the tree and.

988
00:49:46,679 --> 00:49:49,679
Speaker 4: Bob shrunkle AI is going to solve all our problems.

989
00:49:49,719 --> 00:49:53,880
Speaker 1: All the problems, all the problems I know. Yeah, co

990
00:49:54,079 --> 00:49:58,159
pilot for CSS. Here it comes you laugh, I bet

991
00:49:58,239 --> 00:50:02,280
it's coming. Well.

992
00:50:02,320 --> 00:50:06,119
Speaker 2: That brings up a great question, Daddy, what's next for Playwright? Like,

993
00:50:06,239 --> 00:50:07,880
is how long's your to do list?

994
00:50:08,519 --> 00:50:10,760
Speaker 4: I think the too list is never ending and nobody

995
00:50:11,079 --> 00:50:15,320
can ever know because like when we last spoke, I

996
00:50:15,400 --> 00:50:17,960
never knew that, you know, cloud based browsers were going

997
00:50:18,039 --> 00:50:20,599
to be a thing. That was never because we didn't

998
00:50:20,840 --> 00:50:22,880
we didn't have that scaling problem. We didn't have that

999
00:50:22,920 --> 00:50:25,280
many people using Playwright, so we didn't have all this

1000
00:50:25,360 --> 00:50:28,480
feedback from all these people and companies and community. I mean,

1001
00:50:28,519 --> 00:50:32,000
we went from zero members in discord to over thirty

1002
00:50:32,199 --> 00:50:36,639
thousand members since since we spoke, basically right, so all

1003
00:50:36,679 --> 00:50:39,760
of those companies are now using playwrights. You need different solutions,

1004
00:50:40,239 --> 00:50:44,719
so we basically use GitHub. Playwright is open source and

1005
00:50:44,920 --> 00:50:47,480
people file issues and say we have this problem, we

1006
00:50:47,519 --> 00:50:51,360
want this tool, we want this and everything that we

1007
00:50:51,440 --> 00:50:55,000
built is based on up votes from our users and

1008
00:50:55,599 --> 00:50:57,639
you just go to that file an issue and up voted.

1009
00:50:58,079 --> 00:51:03,920
Speaker 2: How organized these issues are technically collecting feedback like I

1010
00:51:03,960 --> 00:51:06,679
could see you guys are taking care of this part

1011
00:51:06,679 --> 00:51:10,280
of the inner loop, like because people are asking for features,

1012
00:51:10,320 --> 00:51:12,880
they things they think are bugs but may or may

1013
00:51:12,920 --> 00:51:16,599
not be like mm hmm exactly. So really are developing

1014
00:51:16,599 --> 00:51:19,920
out in the in public. Basically anybody can contribute. Anybody

1015
00:51:20,039 --> 00:51:24,400
can read lots of comments too, like you're clearly prosecuting

1016
00:51:24,440 --> 00:51:26,639
these like what do you think of this? What about that? Way?

1017
00:51:27,079 --> 00:51:28,360
You know, how would we solve it this way?

1018
00:51:28,440 --> 00:51:31,239
Speaker 4: Because we have to understand, right, sometimes people say I

1019
00:51:31,280 --> 00:51:33,280
need this feature, like we'll explain to us because I'm

1020
00:51:33,280 --> 00:51:35,840
not seeing what you're seeing, so we need to understand, like,

1021
00:51:36,239 --> 00:51:37,920
you know, what is it that we why do you

1022
00:51:37,960 --> 00:51:39,119
want this? Why is it important?

1023
00:51:39,199 --> 00:51:42,599
Speaker 1: Or the question that I'll microsoft people ask, why would

1024
00:51:42,679 --> 00:51:48,039
you ever want to do that? It's it's not a

1025
00:51:48,159 --> 00:51:51,559
threatening question. It's a real question, like why, what's your why?

1026
00:51:52,159 --> 00:51:55,239
Speaker 4: Yeah, because then we can say, well, oh that sounds great,

1027
00:51:56,079 --> 00:51:59,159
let's you know, put some time towards that and work

1028
00:51:59,159 --> 00:52:02,079
on that one instead of this feature, right, or fix

1029
00:52:02,119 --> 00:52:03,760
this boog instead of that bog or whatever.

1030
00:52:04,039 --> 00:52:08,079
Speaker 2: Yeah, yeah, totally. And I said just and you know,

1031
00:52:08,280 --> 00:52:11,039
you could write the code too, like if you're if

1032
00:52:11,039 --> 00:52:13,159
you're that interested like that, you can contribute.

1033
00:52:13,239 --> 00:52:15,840
Speaker 4: We have had we've had some external contributors, especially in

1034
00:52:15,880 --> 00:52:19,079
the last releases, and I think now get up has

1035
00:52:19,079 --> 00:52:20,440
done some really nice thing where you can kind of

1036
00:52:20,440 --> 00:52:22,360
see their names and their picture and it's really cool.

1037
00:52:22,400 --> 00:52:27,320
So that even like is nice, So yeah, do yeah.

1038
00:52:27,599 --> 00:52:30,239
Speaker 2: To contribute to a project like this, that would be

1039
00:52:30,280 --> 00:52:31,360
really fun because.

1040
00:52:31,159 --> 00:52:33,039
Speaker 4: We are a very small team, so we can't do

1041
00:52:33,079 --> 00:52:36,079
everything that people want us to do because it's just

1042
00:52:36,119 --> 00:52:38,599
not possible, so we can only like say.

1043
00:52:38,679 --> 00:52:42,199
Speaker 2: It's a triayeah, yes, I get that. That makes a

1044
00:52:42,239 --> 00:52:43,159
lot of sense.

1045
00:52:43,320 --> 00:52:46,239
Speaker 1: Very cool, awesome sense, like a fun project to contribute to.

1046
00:52:46,760 --> 00:52:48,559
If you're looking first, you've.

1047
00:52:48,440 --> 00:52:51,000
Speaker 2: Had a lot of contributors. Holy man, look at this list.

1048
00:52:51,559 --> 00:52:55,719
Speaker 4: Yeah, hundreds. We have a great community. I told you.

1049
00:52:57,000 --> 00:52:59,079
And Discord Yeah, oh, there you are.

1050
00:52:59,320 --> 00:53:00,159
Speaker 2: I see your commit.

1051
00:53:04,440 --> 00:53:07,239
Speaker 1: Well, Debbie, it's been an absolute delight having you on

1052
00:53:07,280 --> 00:53:11,159
the show again, and congratulations on playwright success. And we

1053
00:53:11,199 --> 00:53:13,239
hope our listeners will check it out.

1054
00:53:13,480 --> 00:53:17,360
Speaker 4: I mean they have to, it's not we hope. You

1055
00:53:17,440 --> 00:53:19,159
got to be strict to Carl, you gotta tell them.

1056
00:53:19,239 --> 00:53:21,800
Speaker 1: All right, guys, my next episode.

1057
00:53:21,440 --> 00:53:23,800
Speaker 4: You have all should have written at least one test,

1058
00:53:24,239 --> 00:53:24,800
and I want.

1059
00:53:24,639 --> 00:53:26,920
Speaker 1: To see some comments on hiver right.

1060
00:53:27,480 --> 00:53:30,599
Speaker 4: I would say I would challenge I would challenge anyone

1061
00:53:30,760 --> 00:53:33,320
who thinks or has never written a playwright test. I

1062
00:53:33,360 --> 00:53:37,719
would say take seven minutes. I won't say seven, not

1063
00:53:37,840 --> 00:53:40,320
ten's a little bit more than five. Seven minutes. Go

1064
00:53:40,400 --> 00:53:42,360
to the getting started guide and the documentation of the

1065
00:53:42,400 --> 00:53:45,519
dot net and basically write that test. And you don't

1066
00:53:45,519 --> 00:53:48,159
even have to have a website. Just put in any

1067
00:53:48,199 --> 00:53:51,360
website and just just go through it and write that test.

1068
00:53:52,079 --> 00:53:55,400
Seven minutes and you'll have a test written to your developer.

1069
00:53:55,440 --> 00:53:56,800
You'll get a pay rise in a second.

1070
00:53:57,280 --> 00:54:01,000
Speaker 1: All right, there you go. Let's take make this about money,

1071
00:54:03,760 --> 00:54:04,840
all right, Debbie, thanks a.

1072
00:54:04,760 --> 00:54:06,400
Speaker 4: Lot again, Thank you.

1073
00:54:06,440 --> 00:54:09,159
Speaker 1: All right, we'll talk to you next time on dot

1074
00:54:09,320 --> 00:54:35,039
net rocks. Dot net rocks is brought to you by

1075
00:54:35,119 --> 00:54:39,800
Franklin's Net and produced by Pop Studios, a full service audio,

1076
00:54:39,920 --> 00:54:44,440
video and post production facilities located physically in New London, Connecticut,

1077
00:54:44,599 --> 00:54:49,440
and of course in the cloud online at pwop dot com.

1078
00:54:49,599 --> 00:54:51,719
Visit our website at d O T N E t

1079
00:54:51,960 --> 00:54:56,000
R O c k S dot com for RSS feeds, downloads,

1080
00:54:56,159 --> 00:54:59,760
mobile apps, comments, and access to the full archives going

1081
00:54:59,800 --> 00:55:03,280
back the show number one recorded in September two thousand

1082
00:55:03,280 --> 00:55:05,920
and two. And make sure you check out our sponsors.

1083
00:55:06,079 --> 00:55:08,920
They keep us in business. Now go write some code.

1084
00:55:09,480 --> 00:55:12,920
See you next time you got jas middle Vans

1085
00:55:18,920 --> 00:55:19,719
Speaker 3: Home the

