WEBVTT

1
00:00:01.080 --> 00:00:05.679
How'd you like to listen to dot
NetRocks with no ads? Easy? Become

2
00:00:05.679 --> 00:00:09.839
a patron for just five dollars a
month. You get access to a private

3
00:00:10.000 --> 00:00:14.240
RSS feed where all the shows have
no ads. Twenty dollars a month,

4
00:00:14.279 --> 00:00:18.839
we'll get you that and a special
dot NetRocks patron mug. Sign up now

5
00:00:18.839 --> 00:00:37.320
at Patreon dot dot NetRocks dot com. Hey, welcome back to dot NetRocks.

6
00:00:37.359 --> 00:00:40.880
I'm Carl Franklin and I'machard Campbell.
And man, it's been a while

7
00:00:40.960 --> 00:00:43.880
since we've done a show. We've
done a studio show. We did recorded

8
00:00:43.880 --> 00:00:47.119
a bunch in Copenhagen, which was
fun, right, and we're going to

9
00:00:47.200 --> 00:00:50.439
be in Porto not long from now
recording a bunch more. But this is

10
00:00:50.520 --> 00:00:54.039
like the in between the two.
We get one studio show and you're in

11
00:00:54.079 --> 00:00:57.759
your studio. I'm in my new
studio. Yes, that's cool. How

12
00:00:57.840 --> 00:01:00.560
is it are you? Take a
look? I mean it's it seems familiar.

13
00:01:00.600 --> 00:01:04.480
It's exactly what you think because you've
been in the old ones. So

14
00:01:04.519 --> 00:01:10.200
the walls are kept the red wall. Look, it's the same fabric.

15
00:01:10.239 --> 00:01:14.480
It's not the same bolts of fabric
because obviously I bought new ones time has,

16
00:01:14.640 --> 00:01:21.120
but it's the same stuff. The
insulation behind the fabric is rock wall

17
00:01:21.359 --> 00:01:23.560
yep. And on the outside walls
before we did rockwell, we did spray

18
00:01:23.599 --> 00:01:29.760
foam insulation. Nice. So it's
actually insulated to our fifty if anybody else

19
00:01:30.000 --> 00:01:33.159
in construction, that's really really tight. Yeah, as soon as you can

20
00:01:33.239 --> 00:01:37.040
heat the place with a sixty watt
light bulb you know, still existed.

21
00:01:37.959 --> 00:01:42.280
And I'll move my head so you
can see that split h VAC unit.

22
00:01:42.359 --> 00:01:45.439
Yeah, yeah, it doesn't have
to work very hard. No, No,

23
00:01:45.840 --> 00:01:48.920
that's great. I mean, i
mean my space up on the coast,

24
00:01:49.120 --> 00:01:52.560
so this is my office is still
not assembled. I've been away a

25
00:01:52.640 --> 00:01:55.159
fair bit, but you know,
I've got enough running here to at least

26
00:01:55.159 --> 00:01:57.920
from the portable rig. But this
will eventually be the setting, yep.

27
00:01:57.319 --> 00:02:00.599
You know, as we get stuff
set up, it's good, you know,

28
00:02:00.840 --> 00:02:04.760
change as I put. Yeah,
and I'm sure that my microphone sounds

29
00:02:04.799 --> 00:02:07.400
tighter, in other words, less
echoey than it was even in my old

30
00:02:07.439 --> 00:02:10.199
place, without a doubt, which
I just had U haul blankets up on

31
00:02:10.240 --> 00:02:14.719
the walls. You know. Yeah, this is like serious, yeah,

32
00:02:14.919 --> 00:02:19.479
really properly proved. I'm probably I
was thinking I've probably get a few real

33
00:02:19.520 --> 00:02:22.520
traps in here, because it is
a it is a jip rock box.

34
00:02:22.680 --> 00:02:25.159
Yeah, but you know, I
actually, you know what, I have

35
00:02:25.240 --> 00:02:30.960
the stuff. Yeah, I have
the the insulation and the material and the

36
00:02:30.000 --> 00:02:34.159
glue. I could send it to
you. Ethan Weiner is a genius.

37
00:02:34.159 --> 00:02:36.039
Though. You know, a couple
of real traps in the corner of this

38
00:02:36.120 --> 00:02:38.599
room would probably go pretty flat.
It probably would. Yep. Yeah,

39
00:02:38.759 --> 00:02:52.840
okay, let's start off with something
cool for better no framework awesome. You've

40
00:02:52.879 --> 00:03:00.280
heard of Jeff Frits, right,
Yeah, I'm lascinating because he's an old

41
00:03:00.319 --> 00:03:02.240
friend of ours. Yeah, well, all I think is purple sequence.

42
00:03:02.280 --> 00:03:07.919
I'm thinking purple sequence, purple sequence, purple goatee. He is working at

43
00:03:07.960 --> 00:03:15.560
Microsoft and he's evangelizing for the Blazer
team. He's doing live coding and that's

44
00:03:15.599 --> 00:03:20.520
his job is to just you know, be in touch with the community over

45
00:03:20.560 --> 00:03:28.479
Blazer. So he and I started
this new weekly thing called the Blazer Puzzle.

46
00:03:28.560 --> 00:03:30.800
Oh nice, And if you go
to Blazer Puzzle dot com you'll see

47
00:03:31.400 --> 00:03:36.000
all the ones that we've done so
far. So here's the premise. They're

48
00:03:36.039 --> 00:03:39.159
only like fifteen minutes long, so
they're nuggets. Nuggets, yes, but

49
00:03:39.439 --> 00:03:44.879
they're definitely nuggets that you can participate
in and win coffee mugs and stuff.

50
00:03:45.879 --> 00:03:51.120
So we show you some code that
doesn't work, some Blazer thing. Why

51
00:03:51.159 --> 00:03:55.439
doesn't it work? And then people
send in their answers to Blazer Puzzle at

52
00:03:55.439 --> 00:04:00.680
appv next and we pick from all
of the correct answers, we pick one

53
00:04:00.719 --> 00:04:06.039
at random. That person gets a
you know, a puzzle mug and a

54
00:04:06.080 --> 00:04:12.159
T shirt or a T shirt,
we're not sure yet. And then we

55
00:04:12.599 --> 00:04:17.480
basically you know, show the solution
and then we do a new puzzle for

56
00:04:17.759 --> 00:04:23.720
next week. Nice. Yeah,
simple, and it's fun Blazer puzzle.

57
00:04:24.000 --> 00:04:27.000
Yeah, and just getting people,
you know, aware of what's out there,

58
00:04:27.199 --> 00:04:29.279
that's right. I mean, you
know, if you don't want to

59
00:04:29.319 --> 00:04:32.639
sit through a lot of training,
you know, hours of Blazer train or

60
00:04:32.680 --> 00:04:38.399
even anything that's on YouTube or whatever, you can just have some fun and

61
00:04:38.480 --> 00:04:42.560
learn little bits, a little bits
and pieces. I love it. And

62
00:04:43.040 --> 00:04:45.879
yeah, make it digestible just a
little bit of the time. Yeah,

63
00:04:45.920 --> 00:04:48.879
make it fun cool. If you've
got Google you could probably do pretty well.

64
00:04:50.560 --> 00:04:56.399
And we also have a talk a
Blazer Puzzle talk in the upcoming dot

65
00:04:56.439 --> 00:04:59.600
net comf that's awesome. Isn't that
cool? Yeah? Dot net comf coming

66
00:04:59.680 --> 00:05:01.399
up in No so, Yeah,
it'd be great that you're in that.

67
00:05:01.600 --> 00:05:04.600
Yeah, cool one, dude.
Congratulations. You know it's sort of a

68
00:05:04.680 --> 00:05:11.160
related topic area. I shot a
video series with the Visual Studio team called

69
00:05:11.360 --> 00:05:15.160
Tea and Technology because it couldn't be
coffee and code. I don't drink coffee,

70
00:05:15.839 --> 00:05:19.120
Uh tea, But yeah, I
got to go run around and talk

71
00:05:19.160 --> 00:05:24.279
to a bunch of the visual studio
leadership folks, or not just leadership,

72
00:05:24.279 --> 00:05:27.240
but like the engineers doing the thing. Of course. I talked to Mad's

73
00:05:27.319 --> 00:05:34.600
Christiansen and Leslie Richardson, James Montamagno
and yeapped up with with Amanda Silver.

74
00:05:34.720 --> 00:05:38.480
Wow, that's so cool. And
just to sort of reminder, you know,

75
00:05:38.560 --> 00:05:42.560
digging into all the great things they're
happening in studio. You know,

76
00:05:42.639 --> 00:05:47.040
it seems like people have forgotten how
good our IDEs are. You know,

77
00:05:47.079 --> 00:05:50.639
it's easy to play with the new
tools and different approaches to things. It's

78
00:05:50.680 --> 00:05:55.160
like, you know why we like
id's because they rock, They rock,

79
00:05:55.519 --> 00:05:58.079
they work, they make you more
productive, and so it was really great

80
00:05:58.079 --> 00:06:00.839
to dig into the various products in
the stack, Like you forget how good

81
00:06:00.879 --> 00:06:04.879
the debugger is and you know,
and those kinds of things. It was

82
00:06:04.879 --> 00:06:08.920
really fun to DEBT series, so
I'll include a link in the show notes.

83
00:06:08.959 --> 00:06:12.600
But yeah, T and technology of
the visual studios in mini series excellent.

84
00:06:12.720 --> 00:06:15.800
All right, Well that's that's what
I got. Who's talking to us?

85
00:06:15.879 --> 00:06:17.920
Richard grabbed a comment of a show
seventeen fifty nine, and that was

86
00:06:17.959 --> 00:06:21.519
the show we did with our friend
Mark Seeman back in twenty twenty one about

87
00:06:21.600 --> 00:06:27.279
code that fits in your head.
And the name on it is ye dev

88
00:06:27.360 --> 00:06:30.720
Text. But I'm pretty sure it's
not Kanye. I'm just saying, Kanye,

89
00:06:30.800 --> 00:06:36.480
if you do you listen to the
show. Interesting, No, I'm

90
00:06:36.480 --> 00:06:41.160
pretty sure it's not. Anyway,
Ye dev Text has a bit of a

91
00:06:41.240 --> 00:06:43.680
rant, and I read it because
I could so relate to it too.

92
00:06:43.759 --> 00:06:46.199
He said, because we said something
casual like get someone to look at your

93
00:06:46.199 --> 00:06:49.240
code, I think I found the
line where the buggies iss. I just

94
00:06:49.279 --> 00:06:53.560
couldn't get a single personal look at
the code I'm working on to save my

95
00:06:53.720 --> 00:06:57.600
life. The reality is that zero
higher ups could care less about the quality

96
00:06:57.600 --> 00:07:00.519
of code. They only care if
it works, then they tell to move

97
00:07:00.560 --> 00:07:02.759
on and put out the next fire. This is from the point of view

98
00:07:02.759 --> 00:07:05.680
of someone who makes internal code.
I have an old web app that I'm

99
00:07:05.720 --> 00:07:11.399
being asked to save, and none
of it fits in my head. Man

100
00:07:11.480 --> 00:07:14.560
sits in your head. Over time, I have learned the value of making

101
00:07:14.639 --> 00:07:16.399
code that fits in your head,
because I myself, in earlier years,

102
00:07:16.439 --> 00:07:21.279
followed mentorship that didn't care about quality
or readability of code. The only care

103
00:07:21.319 --> 00:07:26.279
about performance, and more that it
was if it worked or not. Zero

104
00:07:26.319 --> 00:07:30.759
care about craftsmanship. As I tried
to push for basic automated testing, and

105
00:07:30.800 --> 00:07:32.959
as I tried to even learn how
to make code more readable or maintainable,

106
00:07:33.040 --> 00:07:36.600
I got labeled as the guy who
just likes to write a lot of code

107
00:07:36.720 --> 00:07:41.879
and that I made things too complex. No one noticed I was trying to

108
00:07:41.879 --> 00:07:45.800
figure out how to go this route
of making code that would fit in someone's

109
00:07:45.839 --> 00:07:48.439
head. They even told me no
one cared how my code looked as long

110
00:07:48.480 --> 00:07:53.959
as it worked. The internal web
app has as many god methods that don't

111
00:07:53.959 --> 00:07:57.360
fit in your head, but the
web app kind of works, so it's

112
00:07:57.399 --> 00:08:01.199
considered good. Also, don't tell
me to change where I work. I

113
00:08:01.199 --> 00:08:03.120
have medical stuff that runs in my
family, and this employer is willing to

114
00:08:03.120 --> 00:08:09.319
be lenient on my leaves. So
I'm stuck, or rather, you choose

115
00:08:09.360 --> 00:08:11.160
to be stuck because you get some
benefits to make it worthwhile. Yeah.

116
00:08:11.920 --> 00:08:15.639
I used to want to learn so
much, but that fire has just about

117
00:08:15.680 --> 00:08:20.160
been put out. Now I do
what it can, but slowly I will

118
00:08:20.199 --> 00:08:24.519
bend my own opinions and feelings about
should be done versus just get it done.

119
00:08:24.920 --> 00:08:26.879
Experiences made it so that I can
write bad code. It looks bad

120
00:08:26.879 --> 00:08:31.839
on my part and underminds me personality. But hey, thanks for the therapy

121
00:08:31.879 --> 00:08:35.679
session. That was a great episode. It's kind of a downer, but

122
00:08:35.720 --> 00:08:39.600
at the same time, it's like, you know, it's hard to do

123
00:08:39.759 --> 00:08:43.480
good when there's just no reinforcement for
it at all. Yeah, you know,

124
00:08:43.840 --> 00:08:48.440
although it really I think Ye,
and I'm pretty sure his name's not

125
00:08:48.519 --> 00:08:52.279
Ye. It's really about code you
can live with too, because you're probably

126
00:08:52.320 --> 00:08:54.279
gonna have to read it again as
well, Like, don't make your own

127
00:08:54.279 --> 00:08:58.399
life miserable. But I'm with you. You're not going to get any support

128
00:08:58.399 --> 00:09:01.720
from your team about that, and
I understand why you want to stay.

129
00:09:01.759 --> 00:09:03.840
You know, you're taking care of
the things that are important to you,

130
00:09:05.600 --> 00:09:09.440
and that doesn't mean you get to
spend a lot of time acraftsmanship. Yeah,

131
00:09:09.440 --> 00:09:11.879
but hey, let me send you
a copy of music Koba. And

132
00:09:11.879 --> 00:09:13.159
if you'd like a copy of music
Koba, I write a comment on the

133
00:09:13.159 --> 00:09:16.559
website at dot net rocks dot com
or on the facebooks. We publish every

134
00:09:16.559 --> 00:09:20.120
show there, and if you comment
there and I'm reading the show, we'll

135
00:09:20.120 --> 00:09:22.320
send you copy of music Koba.
And you can definitely follow us on Twitter

136
00:09:22.480 --> 00:09:26.440
or ex or whatever the hell it's
called today. But the real fun that

137
00:09:26.519 --> 00:09:31.679
is happening over on mastadon. I'm
at Carl Franklin at tech Hub dot social,

138
00:09:31.840 --> 00:09:35.799
and I'm at Rich Campbell at mastadon
dot social. Send us a toot.

139
00:09:35.440 --> 00:09:39.200
We like toots. Yeah, some
good conversations going on over there.

140
00:09:39.200 --> 00:09:43.519
I got it, definitely, definitely, definitely more focused. I think people

141
00:09:43.519 --> 00:09:48.600
are there for intentionally. It's just
Debrie r. Yeah. So uh,

142
00:09:48.960 --> 00:09:54.279
let me introduce again, bring him
back to the show. Egil Hanson.

143
00:09:54.799 --> 00:10:00.799
He's a Dane chilling in Iceland and
a developer at Delegate and a Microsoft MVP.

144
00:10:01.720 --> 00:10:05.519
He chats globally at conferences about nifty
developer stuff and it's all about that

145
00:10:05.639 --> 00:10:11.639
clean, maintainable code is. He's
the creator behind b unit for Blazer tests

146
00:10:11.679 --> 00:10:16.960
and angle sharp dot diffing think spot
the HTML difference in c sharp. Though

147
00:10:18.080 --> 00:10:22.840
he's danced to many techtoons. Egil's
current jam is everything dot net and cloud

148
00:10:24.360 --> 00:10:31.960
and yes, this bio was written
by chat GPT. Oh no, it's

149
00:10:31.000 --> 00:10:35.120
everywhere. Yeah. Yeah, I
had to do something right. I had

150
00:10:35.120 --> 00:10:39.639
a very long bias bio and very
serious one on that right, so put

151
00:10:39.679 --> 00:10:41.840
it in there and say make it
funny. And this was what came out

152
00:10:43.000 --> 00:10:48.080
with us few adjustments stop that at
all. Well, welcome back. Yeah,

153
00:10:48.159 --> 00:10:52.240
Hey, how's b unit? B
unit is doing okay? And by

154
00:10:52.279 --> 00:10:56.000
the way, just to comment on
that, uh comment from ye comments,

155
00:10:56.159 --> 00:11:01.200
yeah comment and coming from from Yeah, I'm a big fan of that book.

156
00:11:01.480 --> 00:11:07.639
Martin Mark Shiemann wrote, we read
that at the company actually as sort

157
00:11:07.639 --> 00:11:11.679
of a book coupling and it's a
it's it's a completely agree with that.

158
00:11:11.720 --> 00:11:16.240
I think the biggest problem in that
regard is you need us, we as

159
00:11:16.240 --> 00:11:22.000
developers need to learn to speak a
language that management will understand so that we

160
00:11:22.159 --> 00:11:26.879
are allowed to actually write good,
maintainable code because it doesn't actually pay in

161
00:11:26.919 --> 00:11:31.559
the long long run. There's lots
of leadershire supporting that yeah, and I

162
00:11:31.559 --> 00:11:35.159
guess that's that's one of the challenges
there is the you know, finding a

163
00:11:35.159 --> 00:11:41.960
way to convince to see the value
in quality code. But I'm empathizing with

164
00:11:41.000 --> 00:11:45.399
you. I mean, it's it's
a hard fight. And he's also got

165
00:11:45.440 --> 00:11:48.279
things to deal with. I mean, obviously some challenges at home that his

166
00:11:48.720 --> 00:11:54.159
employer is supporting. Like the these
don't sound like bad people, right,

167
00:11:54.240 --> 00:11:56.399
They're taking care of each other.
They just have a different set of priorities

168
00:11:56.399 --> 00:12:00.559
because they don't see the value.
Yeah. Yeah, I gotta tell you

169
00:12:00.600 --> 00:12:05.600
that I use B unit in my
Blazer classes that I teach that's online.

170
00:12:05.000 --> 00:12:09.720
I did a Blazer train on unit
testing and we use b unit, So

171
00:12:09.919 --> 00:12:16.519
I'm really really curious as to what's
new in B unit. So curiously,

172
00:12:16.639 --> 00:12:20.399
we haven't had to do a lot
of changes, so I guess we started

173
00:12:20.440 --> 00:12:28.559
around twoy nineteen when I sort of
started prototyping and building it. And I

174
00:12:28.600 --> 00:12:39.600
think mostly due to Stephen Sanderson's brilliant
architecture around not being with a Blazer that

175
00:12:39.320 --> 00:12:45.720
because we are sort of leveraging the
low level bits in Blazer, those haven't

176
00:12:45.759 --> 00:12:50.440
really changed a lot, right,
So so the call render engine, call

177
00:12:50.519 --> 00:12:54.759
rentering parts of Blazer have stayed the
same all lists since then. Yeah,

178
00:12:54.759 --> 00:12:58.559
because if the underlying platforms shifted on
you, you be in the middle of

179
00:12:58.559 --> 00:13:03.279
a big rewrite exactly. Yeah,
but we do have a yearly cadence where

180
00:13:03.279 --> 00:13:07.120
we have to do at least a
small point release of b unit because as

181
00:13:07.120 --> 00:13:11.480
a net release and we want to
support that. This is a big one,

182
00:13:11.519 --> 00:13:16.399
isn't it. I mean, this
one changes things well, and surprisingly

183
00:13:16.480 --> 00:13:20.279
it doesn't really right because the Blazer
renderer is still the same. What it's

184
00:13:20.320 --> 00:13:24.440
doing now is it's allowing you to
render things on the server and instead of

185
00:13:24.480 --> 00:13:30.120
sending we had bits and bobs down
to the client using signal, of just

186
00:13:30.200 --> 00:13:35.279
generating everything in using BASM on the
client, it's generating HTVL and sending that

187
00:13:35.519 --> 00:13:39.519
if you're using the streaming rendering and
the service right side rendering things. But

188
00:13:39.639 --> 00:13:43.159
that is all there on top of
the core fundamentals of Blazer, so we

189
00:13:43.240 --> 00:13:48.000
haven't actually had to do anything extra
to support that, which is super nice.

190
00:13:48.360 --> 00:13:54.480
So some of the things we are
working on me and my cointaner Steven

191
00:13:54.519 --> 00:14:00.440
Giselle, is more related to things
we want to do for you too,

192
00:14:01.120 --> 00:14:05.120
So you know, looking back,
it's always fun to sit and and just

193
00:14:05.679 --> 00:14:09.200
seeing that it's been four years now
and and some of the things I would

194
00:14:09.200 --> 00:14:15.120
have done different since then would probably
be to remember the good old Yagni principle

195
00:14:15.120 --> 00:14:20.879
you ain't gonna need it. And
so I kind of made some design decisions

196
00:14:20.720 --> 00:14:24.679
and we are stuck with them at
least as long as we stay with the

197
00:14:24.799 --> 00:14:28.600
V one, because we don't want
to break people, right, even though

198
00:14:28.639 --> 00:14:31.240
I think most if not all of
the units users are not really using any

199
00:14:31.279 --> 00:14:35.480
of the parts that we could potentially
could want to break. But but things

200
00:14:35.559 --> 00:14:41.279
like because of this design we talked
about with Blazer at a support, basically

201
00:14:41.360 --> 00:14:45.879
it can spit out everything that was
that Blazer mobile bindings at one point,

202
00:14:46.039 --> 00:14:50.480
which was might might become a thing. And I think Steven had a demo

203
00:14:50.519 --> 00:14:56.440
where he generated FLOORA components of Flota
code from Blazer. So I decided to

204
00:14:56.559 --> 00:15:00.720
architect B units such that that's a
core part that doesn't care what is the

205
00:15:00.799 --> 00:15:03.120
output of your components, if it's
HTML or something else. And then there's

206
00:15:03.120 --> 00:15:09.480
a web part and that additional abstraction
is there and it's working, but it's

207
00:15:09.519 --> 00:15:13.399
not being used. So that's sort
of a layer with added Yeah, and

208
00:15:13.840 --> 00:15:18.399
it really is a classic example of
what you ain't gonna need it because I

209
00:15:18.480 --> 00:15:22.919
thought it might be useful at some
point, and four years later, we

210
00:15:22.120 --> 00:15:26.320
just have additional abstractions to maintain that
we had to uh to have that we

211
00:15:26.399 --> 00:15:33.639
have to work around. But one
thing that we have been ironing out during

212
00:15:33.679 --> 00:15:39.759
the last year and a half has
been stability. So there are there have

213
00:15:39.919 --> 00:15:43.080
been some it's cases you could get
into where you rent a component that does

214
00:15:43.120 --> 00:15:48.840
something maybe a syncness, and you
sort of have to get the timing right

215
00:15:48.639 --> 00:15:54.279
in your chest to to wait for
that thing. And we've seen some interesting

216
00:15:54.320 --> 00:16:00.879
behaviors Foxample. We had one user
that was able to ended with a very

217
00:16:00.000 --> 00:16:03.879
large component try he was rendering doing
a test like with thousands of component that

218
00:16:04.000 --> 00:16:08.720
was being rendered in a single test
could cause a stag overflow, and we

219
00:16:08.759 --> 00:16:12.440
spent a lot of time and I
even actually got on a call with the

220
00:16:12.639 --> 00:16:18.240
entire Blazer team asking for some input
on that problem to really chase down and

221
00:16:18.279 --> 00:16:22.320
see if that's anywhere in the code
base on the Baser side of things that

222
00:16:22.480 --> 00:16:27.919
isn't sort of thread safe or isn't
has any surprising things. And the annoying

223
00:16:27.919 --> 00:16:32.519
thing was actually it turned out after
a lot of an investigation, what happened

224
00:16:32.879 --> 00:16:37.000
was that when a test run is
over, a test is finished, it

225
00:16:37.080 --> 00:16:41.519
will dispose of the bi unit test
contact with the sort of the whole host

226
00:16:41.600 --> 00:16:45.080
for setting up at test right and
running and rendering a based component and passing

227
00:16:45.120 --> 00:16:49.759
in parameters and services to it.
So typically what you do, if you

228
00:16:49.799 --> 00:16:53.720
are a good you know dot net
development, is that when you have something

229
00:16:53.720 --> 00:16:56.639
that implements I disposable, you dispose
of that when you're done with it.

230
00:16:56.840 --> 00:17:02.879
So beally white thing to do exactly
right, So what happened. What happened

231
00:17:02.919 --> 00:17:07.279
is that we would when the test
was over and the test had actually passed

232
00:17:07.319 --> 00:17:11.000
its assertions. So when the test
method is exiting, it will typically go

233
00:17:11.039 --> 00:17:17.200
ahead and dispose of the beanal test
context, which would then dispose of the

234
00:17:17.359 --> 00:17:22.119
unit renderer. But in cases like
this where you have a huge component tree

235
00:17:22.599 --> 00:17:26.519
and some components might still be doing
work, they might still be rendering,

236
00:17:26.559 --> 00:17:29.640
they might have timers and other things
going on inside them that would cause them

237
00:17:29.680 --> 00:17:33.079
to be in the process of rendering
at the time where the test was finished

238
00:17:33.119 --> 00:17:37.720
running and would dispose of itself,
and that would be disposed of the Blazer

239
00:17:37.759 --> 00:17:42.960
renderer, which is like the core
component that is driving and each test.

240
00:17:44.839 --> 00:17:47.359
Yeah, yeah, well and that
is completely fine, that's actually what we

241
00:17:47.400 --> 00:17:52.759
want. The problem was we hadn't
really thought about that as a problem because

242
00:17:52.759 --> 00:17:56.440
we said, well, when we're
disposing, we don't care about the state

243
00:17:56.480 --> 00:18:00.319
of the componentry. But because things
were still going on when we just most

244
00:18:00.359 --> 00:18:06.039
of the renderer, the components that
the components generating sort of got into an

245
00:18:06.079 --> 00:18:08.240
invalid state, and all of a
sudden it was possible to have cycles in

246
00:18:08.279 --> 00:18:12.559
the components we which would cause the
stack overflow. And it was a thing

247
00:18:12.599 --> 00:18:18.359
that only happened obviously when you were
running on a CI slow CI could the

248
00:18:18.359 --> 00:18:22.359
server up in the clouds and and
uh super high to reproduce, And it

249
00:18:22.440 --> 00:18:26.440
only happened when we were running together
with other tests and things like that.

250
00:18:26.680 --> 00:18:33.559
So yeah, I've grown rary of
disposables and really also protecting the state of

251
00:18:33.680 --> 00:18:37.759
things after a disposed methods being called
husband called. So that was a fun

252
00:18:37.799 --> 00:18:41.759
one to track down. Yes,
I mean what I like about this story

253
00:18:41.880 --> 00:18:47.839
is like clearly people are pushing b
unit to places you'd never imagine. Like

254
00:18:47.920 --> 00:18:49.640
that's the best compliment you could make
a piece of software. So I took

255
00:18:49.640 --> 00:18:55.160
it to somewhere I'd never been before
and we found some things. Oh absolutely,

256
00:18:56.200 --> 00:19:00.400
yeah, I remember back you mentioned
fridge. I use to jump on

257
00:19:00.400 --> 00:19:04.039
on Twitch and hunt around for people
that was using b unit back in two

258
00:19:04.079 --> 00:19:10.079
thousand and twenty nineteen twenty twenty because
I wanted to see how they were using

259
00:19:10.079 --> 00:19:14.480
it, and and it's it's it's
a fun experience watching people using your your

260
00:19:14.480 --> 00:19:19.440
framework and and and and seeing them
start heading down that rosy golden path that

261
00:19:19.480 --> 00:19:22.200
you laid out for them where they
will land in the pit up success and

262
00:19:22.240 --> 00:19:26.039
all of a sudden they take a
right turn right over the cliff and you're

263
00:19:26.079 --> 00:19:29.720
like, uh, what what And
and oh I should have put yeah,

264
00:19:29.759 --> 00:19:33.519
I should have problem and put some
guardrails up on there and and so so

265
00:19:33.839 --> 00:19:38.839
I think building b unit has been
a massively fun and interesting thing. Also

266
00:19:40.079 --> 00:19:45.000
just learning about API design and being
able to learning to design something where people

267
00:19:45.039 --> 00:19:52.559
will land in that pitup success right
and intuitively they will get to when they

268
00:19:52.599 --> 00:19:57.599
try something that is probably what happens
is probably what they wanted. So when

269
00:19:57.759 --> 00:20:03.759
did you add snow shot testing to
be unit? Because when I did my

270
00:20:03.440 --> 00:20:10.880
Blazer train with Simon Cowell. We
used b unit and then he introduced his

271
00:20:11.440 --> 00:20:15.079
Snapshot testing framework, and so I
was it in there then or did you

272
00:20:15.079 --> 00:20:22.359
add that afterwards? So I initially
prototyped something back before V one, and

273
00:20:22.400 --> 00:20:26.920
I actually talked a lot with Simon. He's a fantastic omesource developer as well,

274
00:20:27.160 --> 00:20:32.799
and his library you're talking about verify, which is sort of a foundational

275
00:20:32.839 --> 00:20:34.559
library, and then he has a
whole bunch of plugins on top of that

276
00:20:34.880 --> 00:20:41.880
that understands HTML or Blazer or I
don't know. In seat framework. He

277
00:20:41.880 --> 00:20:45.000
has a whole bunch of extensions that
basically allows us to allows you to do

278
00:20:45.039 --> 00:20:49.759
snapshot testing. And so we prototyped
a bit on something that would be embedded

279
00:20:49.799 --> 00:20:56.880
directly in your Blazer test components.
But at some point I decided to that

280
00:20:56.000 --> 00:21:02.160
it wasn't really worth to have it
built directly into b units and instead,

281
00:21:02.720 --> 00:21:07.640
you know, point O point over
to Simon's very I dot Blazer test library,

282
00:21:07.640 --> 00:21:14.279
which uses be uted under the hood. Uh So, uh, I

283
00:21:14.279 --> 00:21:15.960
guess the answer is I I never
really did. We tried a little bit,

284
00:21:17.000 --> 00:21:19.200
but then decided to just use whatever
he has because it there's a whole

285
00:21:19.240 --> 00:21:23.240
bunch of educases that it will handle
for you. Okay, But but there

286
00:21:23.319 --> 00:21:29.400
is snapshot tests in the unit used
them, there was. That was sort

287
00:21:29.400 --> 00:21:32.920
of part of the initial before V
won. It's kind of been in an

288
00:21:33.480 --> 00:21:37.000
I don't really support it phase since
then. I just used it last month.

289
00:21:37.359 --> 00:21:44.119
Has it been taken out since No, we just kept stopped using it.

290
00:21:44.279 --> 00:21:47.000
Yeah, exactly. Like so if
you go to b unit ad ev

291
00:21:47.440 --> 00:21:51.519
to read the documentation there, we
basically say use use verify, and I

292
00:21:51.559 --> 00:21:55.319
do remember you. Also, I
saw that Blazer train with you where you

293
00:21:55.359 --> 00:21:59.039
had Simon on and I do believe
you. I got that feeling that you

294
00:21:59.079 --> 00:22:02.440
had some good arguments. Why actually
his model was better than the one we

295
00:22:02.440 --> 00:22:06.759
were trying to do. So well, it's different, right, I mean

296
00:22:06.759 --> 00:22:11.039
it's different. Yeah. Yeah.
Snapshot testing basically says, you know,

297
00:22:11.119 --> 00:22:17.279
take a snapshot of it and when
anything changes the output. Yeah, the

298
00:22:17.319 --> 00:22:19.519
output exactly. Here's the input,
you know, here are the parameters,

299
00:22:19.839 --> 00:22:25.119
here's the output, and if anything
changes, fail the task and you can

300
00:22:25.160 --> 00:22:27.839
say, now I meant to do
that or not. We do have something

301
00:22:27.920 --> 00:22:33.200
now in b unit that is definitely
supported and implemented through the angle Shop diffing

302
00:22:33.240 --> 00:22:37.559
library, which was my building anglesh
up diffing was a detO I took from

303
00:22:37.640 --> 00:22:41.359
B unit of a couple of months
because I wanted a way to semantically compare

304
00:22:41.359 --> 00:22:47.319
two sets of markup like the one
you expect, kind of like snapshot testing.

305
00:22:47.400 --> 00:22:49.319
So you define this is what I
expect, and then you have whatever

306
00:22:49.519 --> 00:22:55.880
was produced by the component. But
I wanted a semantic comparer that understood HTML

307
00:22:55.960 --> 00:23:00.519
and understand that the order of attributes
on an element doesn't matter, so that

308
00:23:00.559 --> 00:23:04.400
shouldn't fail the test if you refactor
your component to order the attributes differently,

309
00:23:04.519 --> 00:23:07.960
or the order of classes in the
class attribute, or even white space,

310
00:23:08.319 --> 00:23:11.799
and white space is for the most
part insignificant, at least if you have

311
00:23:11.839 --> 00:23:17.000
two more spaces next to each other, right, So that is what is

312
00:23:17.079 --> 00:23:21.079
that is definitely still there. And
that is if you don't want to go

313
00:23:21.240 --> 00:23:26.920
the Verify route with snapshots testing and
snapshots being separate from the component test you're

314
00:23:26.920 --> 00:23:33.200
writing, we have the markup matches
method and it works. It works really

315
00:23:33.240 --> 00:23:37.680
well if you have, for example, smaller snapshots that you can just in

316
00:23:37.759 --> 00:23:40.759
line and I scally that is my
preferred method. So you write a test

317
00:23:40.759 --> 00:23:44.240
for a component and then you get
to your assertion step. You say my

318
00:23:44.319 --> 00:23:48.960
component and then you do markup matches
and then you pass in the markup that

319
00:23:49.039 --> 00:23:56.599
should be there. And if you
write your B unit tests in race of

320
00:23:56.680 --> 00:24:00.599
files, so you're actually writing them
in race of files, you can use

321
00:24:00.799 --> 00:24:03.680
mark up in line in your see
sharp code, which means you don't have

322
00:24:03.759 --> 00:24:08.839
to escape quotes and things like that, and you get intelliscence and you get

323
00:24:08.839 --> 00:24:12.839
syntax highlighting FORTML directly in your CEE
sharp code. So that is that is

324
00:24:12.880 --> 00:24:18.680
actually also if you go and look
at at being the the depth the dogmentation

325
00:24:18.119 --> 00:24:22.799
side right now, that is the
way we recommend doing it now because the

326
00:24:22.920 --> 00:24:30.359
Razor editor experience in visual studio and
in writer have become much much better than

327
00:24:30.400 --> 00:24:33.640
it was originally, so it actually
works quite well now. Now if you're

328
00:24:33.680 --> 00:24:36.359
what about if you're using code behind, will it still work there? In

329
00:24:36.400 --> 00:24:40.480
a C sharp class it will,
And it's become a lot easier to work

330
00:24:40.519 --> 00:24:44.400
with with C sharp eleven where you've
got the wrong string literals, so you

331
00:24:44.400 --> 00:24:48.920
can do triple quotes and then you
can have some mark up and then in

332
00:24:48.960 --> 00:24:51.960
the mark up parts it would still
be a string, but at least you

333
00:24:52.000 --> 00:24:56.160
don't have to escape all the quotes
and and inlining and all of that.

334
00:24:56.279 --> 00:25:00.880
So so it's a it's very good
there as well. You know what's funny

335
00:25:00.000 --> 00:25:03.920
is back when when I was doing
VB net and I was excited about VB

336
00:25:04.559 --> 00:25:07.839
VB nett a while ago. It
was a while ago, but they came

337
00:25:07.839 --> 00:25:11.720
out with these XML literals where you
could find XML right in there, and

338
00:25:11.759 --> 00:25:15.359
we were all like, mean,
yeah, sea Sharp, you don't have

339
00:25:15.480 --> 00:25:18.480
that, and C sharp programs like
why would I need that that? Oh?

340
00:25:18.519 --> 00:25:22.839
I remember being jealous of VB developers
back in the two thousands when when

341
00:25:22.880 --> 00:25:26.160
you still had to work with x
molina regular basis that was that was a

342
00:25:26.200 --> 00:25:33.039
super nice feature. I think we've
opened up a bit more to having margob

343
00:25:33.119 --> 00:25:37.440
and quote mixed together in the recent
years. I think maybe react sort of

344
00:25:37.559 --> 00:25:41.839
that that the chart with that with
DSX right and saying, hey, it's

345
00:25:41.880 --> 00:25:45.000
probably it might not be a bad
idea to just mix concerns a bit more,

346
00:25:45.079 --> 00:25:49.240
right, Right, It's okay,
it's a little bit sharp developers got

347
00:25:49.240 --> 00:25:53.319
a little less dogmatic. I think, yeah, yeah, for the better.

348
00:25:53.359 --> 00:25:56.759
I think I think so too.
Now you're talking about MADS, is

349
00:25:56.799 --> 00:26:03.559
that what you're saying? No,
no, no, no, I I

350
00:26:03.559 --> 00:26:07.799
wouldn't blame him for that. I
think it's a general in the community,

351
00:26:07.839 --> 00:26:12.559
but mass has definitely also the interesting
parts of the changes that been to c

352
00:26:12.720 --> 00:26:18.599
SHAP for the last ten years or
so, where they've gone from. I

353
00:26:18.599 --> 00:26:22.599
remember talking to Annas Heilsberg back when
he start just introduced a typescript and I

354
00:26:22.640 --> 00:26:27.039
asked that noble annotations where you can
say that this might be Noll might not

355
00:26:27.119 --> 00:26:30.680
be there, are we getting that
in C sharp And he was like,

356
00:26:30.440 --> 00:26:36.440
you know, being a bit secret, sepen say maybe. And the history

357
00:26:36.440 --> 00:26:41.759
around that was that originally they didn't
want to put something into the language that

358
00:26:41.880 --> 00:26:47.359
could where the compiler could come into
a situations where it couldn't give a like

359
00:26:47.480 --> 00:26:51.720
a yes or no answer. It
should always be right with nobles. You

360
00:26:51.759 --> 00:26:56.160
can you might have annull here,
but we don't know necessarily in all cases.

361
00:26:56.160 --> 00:27:00.319
That's why we have the bang operator
and we have the yeah exactly so

362
00:27:00.519 --> 00:27:03.799
like the way that John Skeek calls
it the damn it operator. Yeah,

363
00:27:03.839 --> 00:27:10.359
that's damn it. I mean it, trust me, stupid compiler, do

364
00:27:10.400 --> 00:27:14.039
it? Do it? Just do
what I say. So the Language group

365
00:27:14.079 --> 00:27:19.319
definitely have loosened a bit up and
allowed more we are not entire issue and

366
00:27:19.319 --> 00:27:23.319
allowed the compilots to actually be wrong
in a few instances, and I think

367
00:27:23.319 --> 00:27:26.559
that's the better. Yeah, this
is booleyant thinking, right, there's yes

368
00:27:26.599 --> 00:27:30.880
and there's no, but there's no. Maybe, come on, is that?

369
00:27:32.000 --> 00:27:36.880
What's that? What? Maybe?
Gentlemen, I need to interrupt remote

370
00:27:36.920 --> 00:27:44.640
moment for this very important message and
we're back. It's dot net Rocks.

371
00:27:44.640 --> 00:27:47.960
I'm Richard Campbell, that's Carl Franklin. Hey, hey, hey, each

372
00:27:48.000 --> 00:27:52.279
in our respective studios for one studio
show before we go back to the in

373
00:27:52.359 --> 00:27:56.359
person live shows at conferences, and
we're here with Eagle Hanson talking a bit

374
00:27:56.400 --> 00:27:59.720
about the latest in B unit and
all the goodness. I also wanted to

375
00:27:59.720 --> 00:28:03.759
bring up the whole open source conversation
because obviously it's been an ongoing thread for

376
00:28:03.880 --> 00:28:07.519
us the past couple of years.
And you, you know, you strike

377
00:28:07.599 --> 00:28:12.319
me as a person building leading an
open source project that helps you with your

378
00:28:12.400 --> 00:28:17.480
work that other people are now depending
on as well. I don't imagine there's

379
00:28:17.480 --> 00:28:22.480
any commercialization in your future around this
at all? Am I wrong? No?

380
00:28:22.559 --> 00:28:30.799
Not really no, So I think
the whole em Q drama I guess.

381
00:28:30.880 --> 00:28:33.880
Yeah. I really didn't want to
jump on that because I felt like

382
00:28:33.880 --> 00:28:40.640
everybody, you're only amplifying rage,
like it wasn't necessarily a good thing.

383
00:28:40.839 --> 00:28:45.599
Nobody got off pretty quickly, I
agree, So I I tried to say

384
00:28:45.680 --> 00:28:49.519
a you know, a laid back
approach and not be too aggressive. But

385
00:28:49.559 --> 00:28:52.960
it's hard to you know, be
quiet. But I think it was.

386
00:28:53.079 --> 00:28:56.160
It certainly wasn't fun for Daniel,
the maintain of IMQ, but I thought

387
00:28:56.160 --> 00:29:00.759
it got a lot of interesting conversations
to the front in the dot eco system

388
00:29:00.799 --> 00:29:06.039
and the open source ecosystem at least. And I also adjusted my thoughts a

389
00:29:06.039 --> 00:29:08.640
bit on what it means to have
maintainable open source. So one of the

390
00:29:08.680 --> 00:29:14.880
things I did realize was that is
a surprising imbalance in the relationship between the

391
00:29:14.880 --> 00:29:18.599
consumers of open source and the maintenance
open source. True, and I don't

392
00:29:18.599 --> 00:29:22.039
think it applies to all open source
models. So we have the corporate open

393
00:29:22.079 --> 00:29:25.279
I don't know if that's the right
term, but bear with me. Like

394
00:29:25.319 --> 00:29:29.640
the corporate open source models from like
where people companies like mysour of the Google,

395
00:29:29.680 --> 00:29:32.960
Amazon, the Linux Foundation, they
hire people that work full time on

396
00:29:33.000 --> 00:29:36.640
open source, like the big projects
really we know and like that drive a

397
00:29:36.680 --> 00:29:40.440
lot of things that we have thank
for granted, like the Linux kernel or

398
00:29:40.480 --> 00:29:45.160
the dot net or Java. Y
sure exactly. So I assume that is

399
00:29:45.200 --> 00:29:48.000
a business model in it for those
big corporations because they are you know,

400
00:29:48.400 --> 00:29:52.519
stock Rhythm. They wouldn't be doing
that unless there was something in it for

401
00:29:52.559 --> 00:29:56.000
them. So in that regard,
I sort of consider that as somewhat balance

402
00:29:56.039 --> 00:30:00.759
model. The consumers get the safety
of knowing that's big company behind the open

403
00:30:00.799 --> 00:30:03.440
source so they can safely take it
a penancy on that, and Microsoft and

404
00:30:03.519 --> 00:30:08.759
the likes probably get something out of
that as well, I think. And

405
00:30:08.799 --> 00:30:14.400
then that's the second model, which
is sort of maybe where you have open

406
00:30:14.440 --> 00:30:18.119
source that is some sort of dual
that's a dual license for example, that

407
00:30:18.200 --> 00:30:21.680
says to it all that is a
company behind it that is setting services.

408
00:30:21.680 --> 00:30:26.720
And I think we have examples of
in service Bush with hands company and and

409
00:30:26.079 --> 00:30:30.839
doing the software a dentity service.
That's I have required a lot of success

410
00:30:30.880 --> 00:30:36.680
stories around that where people have had
some open source product that made sense to

411
00:30:37.000 --> 00:30:42.359
lift up to like create a company
around in some way and was obviously we

412
00:30:42.440 --> 00:30:47.240
had those conversations on the show for
that matter, and they said our customers

413
00:30:47.240 --> 00:30:49.319
came at us and said, hey, you know, we want to pay

414
00:30:49.359 --> 00:30:52.599
you so that we have certain rights, right exactly, yeah, yeah,

415
00:30:52.599 --> 00:30:56.559
So so that again there there is
a balance, right, they give money

416
00:30:56.759 --> 00:31:00.599
and in return they get certain guarantees. Port is a lay and software,

417
00:31:00.680 --> 00:31:06.480
right. But the third model is
where I see the imbalance. And there

418
00:31:06.559 --> 00:31:10.279
might be four, fourth and fifth
models as well, but that is sort

419
00:31:10.319 --> 00:31:15.640
of maybe the open source model where
a b unit fits into an EMQ also

420
00:31:15.640 --> 00:31:18.400
fits into even though MQ probably has
a hundred times the downloads that we do

421
00:31:18.640 --> 00:31:22.839
or throw automapper to that equation if
I'm following you, right, yeah,

422
00:31:22.279 --> 00:31:26.720
exactly. And the idea here is
that it might be a loan developer that's

423
00:31:26.720 --> 00:31:30.519
creating something that is becoming quite popular
and being used in many places. MOQ

424
00:31:30.720 --> 00:31:34.160
is an excellent example of that.
Like, imagine how many projects, commercial

425
00:31:34.200 --> 00:31:40.839
product project projects that are depending on
a MOQ to be able to iterate deploy

426
00:31:40.880 --> 00:31:44.960
a new version because it's part of
the testing pipeline. So if for some

427
00:31:45.000 --> 00:31:49.640
reason or another EMOQ ceased to exist
or wasn't pushed out anymore or as it

428
00:31:49.720 --> 00:31:52.759
were, people started to think,
can I trust this? Can I have

429
00:31:52.839 --> 00:31:56.319
this in my pipeline? Inmo Well, there's lots of millions and millions of

430
00:31:56.400 --> 00:32:04.240
dollars and lines of code invested in
EMQ and the I think the when you

431
00:32:04.240 --> 00:32:07.680
think about it, the surprising thing
to me is that the imbalance between the

432
00:32:07.680 --> 00:32:13.559
consumer and the maintainer here is that
it's actually to the It's even though the

433
00:32:13.799 --> 00:32:17.640
consumers are getting em OQ and the
likes for free, right, they also

434
00:32:20.200 --> 00:32:23.880
have a huge disadvantage because they have
no leverage, that's nothing that is basically

435
00:32:23.920 --> 00:32:30.839
forcing them into the maintainer that is, to keep keep maintaining that product.

436
00:32:31.279 --> 00:32:34.519
Yeah, yeah, no, is
that great line when they're yelling at the

437
00:32:34.559 --> 00:32:37.200
maintainer, it's like, would you
like me to refund everything? Exactly?

438
00:32:37.240 --> 00:32:43.200
Yeah, but I really appreciate what
you're saying here, right eagle is and

439
00:32:43.200 --> 00:32:45.039
I'm sorry interrupt, but it's like, oh, go ahead, Yeah,

440
00:32:45.079 --> 00:32:47.640
we are treating all of these projects
the same, and they're clearly not.

441
00:32:49.720 --> 00:32:52.720
If micros, you know, you
can rage as an issue in the c

442
00:32:52.960 --> 00:32:57.720
sharp you know, GitHub repository and
a set of full time employees are going

443
00:32:57.799 --> 00:33:01.720
to read that that that make real
salaries and share allocations on all that sort

444
00:33:01.759 --> 00:33:06.519
of thing, right, or even
if you do the same thing in duende

445
00:33:06.599 --> 00:33:13.000
and you're paying customer Like that's another
thing. But for Eagle or Jimmy or

446
00:33:13.200 --> 00:33:17.279
Daniel, like come on right,
yeah, And I like I saw some

447
00:33:17.319 --> 00:33:23.559
people suggest to Daniel instead of you
know, trying to bring awareness by you

448
00:33:23.599 --> 00:33:27.160
know, you can agree a disagree
with this tactic, but basically he was

449
00:33:27.200 --> 00:33:29.839
trying to raise a flag and say, hey, I would like to work

450
00:33:29.880 --> 00:33:31.799
more on this, but I don't
have I don't have the you know,

451
00:33:31.960 --> 00:33:36.920
time which is money to actually do
that, and I want to you know,

452
00:33:37.160 --> 00:33:40.519
keep moving forward with EMOQ, and
not of people were suggesting, well,

453
00:33:40.559 --> 00:33:44.000
instead of doing what you're doing,
you should in step maybe create a

454
00:33:44.000 --> 00:33:47.079
company, create a dual license and
have a proversion. I think that's a

455
00:33:47.160 --> 00:33:52.160
problem with that because certain projects like
AMOQ and be unif of that matter are

456
00:33:52.799 --> 00:33:58.960
they have periods where you really can
do you can you can work full time

457
00:33:59.000 --> 00:34:00.799
for a couple of months, maybe
even a year on that, but then

458
00:34:01.440 --> 00:34:05.880
there is a lot of downtime where
it doesn't really make sense to build a

459
00:34:05.880 --> 00:34:09.159
company around something like that. And
then that's the thing, like I said,

460
00:34:09.480 --> 00:34:13.000
you guys probably know that you created
companies, right, so you know

461
00:34:13.360 --> 00:34:16.679
it's not a real thing to actually
have a proper company incorporated with taxes and

462
00:34:16.760 --> 00:34:22.320
selling and vate and you know,
sitting across country be making money. Otherwise

463
00:34:22.360 --> 00:34:24.079
it's not worth it. Yeah,
there's a there's an overhead to operating all

464
00:34:24.119 --> 00:34:28.559
of that. It's also a different
skill set. Like just because you're good

465
00:34:28.599 --> 00:34:32.239
at building testing tools doesn't mean you're
good at building testing tool companies. It's

466
00:34:32.239 --> 00:34:37.880
not the same thing. And I
can see why somebody like Daniel at least

467
00:34:37.920 --> 00:34:43.199
certainly I wouldn't want to try to
attend that because it would it's out of

468
00:34:43.440 --> 00:34:49.639
my comfort zone. So right now, I think the open source system in

469
00:34:49.679 --> 00:34:54.559
open source in general is lacking a
way for developers to do what they do

470
00:34:54.639 --> 00:35:01.119
best and then have other people's people, you know, maybe make a platform

471
00:35:01.159 --> 00:35:06.119
that can make it sustainable. If
that is a neat I think the best

472
00:35:06.159 --> 00:35:09.840
example we have of that is actually
might be the app stole concept that we

473
00:35:09.880 --> 00:35:15.480
have for mobile apps, right because
then there, you know, basement developer

474
00:35:15.559 --> 00:35:19.360
can just put out an app and
register his credit card with Apple or Google

475
00:35:19.760 --> 00:35:23.000
and if people actually want to buy, and you know, they they may

476
00:35:23.000 --> 00:35:27.679
sort of become the reseller of the
software if they want to touch any To

477
00:35:27.800 --> 00:35:30.280
minimize the company part of that overhead. You could be a quote unquote soul

478
00:35:30.360 --> 00:35:36.719
proprietor and I'm using business terms here
and just have it money up here and

479
00:35:37.079 --> 00:35:39.840
pay your taxes, but a little
ahock a lot simpler. Yeah, So

480
00:35:40.079 --> 00:35:44.360
that that would be one way that
it could, in theory go, but

481
00:35:44.960 --> 00:35:49.000
I'm not sure that it's a viable
option. No, And it's and again,

482
00:35:49.119 --> 00:35:51.239
this is why it keeps coming up
on the show, is that And

483
00:35:51.280 --> 00:35:57.840
I think you've articulated super well that
the tech giant's getting involved increase the sense

484
00:35:57.920 --> 00:36:02.639
of the schism, right and then
and now we're surfacing more and more and

485
00:36:02.639 --> 00:36:07.400
saying shouldn't we have categories and shouldn't
there be a mechanism to support these different

486
00:36:07.440 --> 00:36:13.639
models? So I think this is
not not done yet, definitely not a

487
00:36:13.679 --> 00:36:17.280
finished finished so there are perfect solutions
yet. I do want to give a

488
00:36:17.320 --> 00:36:21.840
lot of credit to GitHub, because
we've been pushing things with that gid ub

489
00:36:21.880 --> 00:36:25.199
sponsors program, and they've been doing
things recently where you as a company,

490
00:36:25.199 --> 00:36:28.960
if you have a giit ub organization, you can go in and say,

491
00:36:29.159 --> 00:36:31.400
give me a list of all the
source software I depend on, and you

492
00:36:31.480 --> 00:36:35.559
can prioritize those and you can upload
a CSV file and say I want to

493
00:36:35.559 --> 00:36:40.519
sponsor all of these, so that
lowers the barrier for corporations to come for

494
00:36:40.559 --> 00:36:45.119
companies to come in and say give
like they can have I don't know,

495
00:36:45.119 --> 00:36:47.079
one hundred dollars or five hundred dollars
every month they want to give out,

496
00:36:47.079 --> 00:36:52.000
and they just base that on what
they're actually using. There is. Yeah,

497
00:36:52.360 --> 00:36:55.000
so I definitely think that is also
another approach that could be that it

498
00:36:55.119 --> 00:36:59.400
may make it that easy, so
there's no excuse, like it shouldn't be

499
00:36:59.440 --> 00:37:02.320
should be a one click like the
one click shop button from Amazon, just

500
00:37:02.320 --> 00:37:06.599
re sponsoring all those souls you use, right, And we talked about this

501
00:37:06.639 --> 00:37:08.480
on the show a while back,
and I may have called my friend Martin

502
00:37:08.519 --> 00:37:13.000
Woodward in the meantime and we're talking
about exactly that that you know, the

503
00:37:13.079 --> 00:37:19.519
average CFO wants to pay attention to
this once a year or once a quarter

504
00:37:19.840 --> 00:37:24.000
and no more, and so can
getthub roll all that up. Plus I

505
00:37:24.039 --> 00:37:28.239
would throw on top of that that
basic hey, what open sources we depend

506
00:37:28.280 --> 00:37:30.760
on. That's bill of material stuff
too, right, Like that represents your

507
00:37:30.760 --> 00:37:36.760
security exposure, Like these are things
that a corporate customer that uses GitHub in

508
00:37:36.800 --> 00:37:42.159
a meaningful way should be paying for
because they're very valuable, and while they're

509
00:37:42.159 --> 00:37:45.760
at it, putting some money into
the projects that are important to the company

510
00:37:45.079 --> 00:37:51.159
by utilization alone, if nothing by
preference, just makes sense, Like it's

511
00:37:51.199 --> 00:37:52.800
not like we can't afford it,
and it's not like we don't get value.

512
00:37:53.039 --> 00:37:55.960
What you got to do is reduce
the friction. Yeah, at the

513
00:37:57.039 --> 00:38:00.559
end of the day, I think
the best way to ensure that the open

514
00:38:00.599 --> 00:38:07.760
source software that people are depending on
in their software sticks around is I don't

515
00:38:07.760 --> 00:38:10.480
know any any better way than actually, you know, giving the maintainers a

516
00:38:10.519 --> 00:38:14.639
little bit of money. That is, I can say I've been very lucky

517
00:38:14.639 --> 00:38:17.039
to have some sponsors for the years. That it does. Actually, even

518
00:38:17.039 --> 00:38:21.960
though it's not quit your job money, it's it's uh, it's it's a

519
00:38:22.000 --> 00:38:28.840
boost some motivation for the things.
Yeah, I like that, right,

520
00:38:28.840 --> 00:38:30.920
it's quit your job money is a
different ball of wax. But then we

521
00:38:31.039 --> 00:38:36.519
acknowledge you with take your family out
to dinner like that, that kind of

522
00:38:36.559 --> 00:38:38.280
thing. I like everything about that, or get it yourself a new monitor,

523
00:38:38.360 --> 00:38:44.239
right like that? That's respectful and
beneficial. Mm hmm, yeah,

524
00:38:44.360 --> 00:38:51.159
absolutely all right, So we touched
on beat unit uh in dot net eight

525
00:38:51.880 --> 00:38:57.039
and that yes, there's a major
Blazer update you know, to the architecture,

526
00:38:57.079 --> 00:39:01.000
and now we don't have to have
a signal ar connection for anything that

527
00:39:01.119 --> 00:39:06.840
just runs on the server, which
is great. But what do you personally

528
00:39:06.880 --> 00:39:13.719
think about dot net A in terms
of its significance in the whole asp ne

529
00:39:13.719 --> 00:39:17.800
net core ecosystem. Good question.
I think I think it's going to have

530
00:39:17.880 --> 00:39:29.360
a significant impact on the adoption of
Blazer or rather Blazer components, because I

531
00:39:29.400 --> 00:39:36.760
do think it is a superior model
of using Blazer component instead of rail pages

532
00:39:36.960 --> 00:39:40.280
or MVC controllers if you if you
want to go really old school to model

533
00:39:40.320 --> 00:39:45.840
your application in such a way.
So I do think that it will become

534
00:39:45.920 --> 00:39:52.400
a gateway drug to many that can
actually just use it to create a classic

535
00:39:52.440 --> 00:39:55.320
old static website. Well not static
websites, but but but just websites,

536
00:39:55.360 --> 00:39:59.119
right, not web applications. But
you can use it to actually build websites

537
00:39:59.159 --> 00:40:04.800
now, and it's much more intuitive
and forgiving development model. And it's not

538
00:40:04.960 --> 00:40:07.760
that you you, oh, let's
not create a Blazer app. You know,

539
00:40:07.800 --> 00:40:10.480
we're creating an asp net core app. Oh, and we can we

540
00:40:10.559 --> 00:40:15.760
have this component model that we can
use to generate data. Now that just

541
00:40:15.840 --> 00:40:19.920
happens to be called Blazer. Some
might even say it looks a bit like

542
00:40:19.960 --> 00:40:25.880
wet forms just in a model or
to you, yeah, well the US

543
00:40:27.760 --> 00:40:31.079
easy as Yeah, well, I
think wet force and well is a brilliant

544
00:40:31.079 --> 00:40:36.199
technology for its time, right well, and I certainly there's a certain customer

545
00:40:36.360 --> 00:40:42.320
that that familiarity will encourage them sure
to tot least look at this. I

546
00:40:42.480 --> 00:40:45.000
that was one of the other aspects
I thought about this is this is another

547
00:40:45.039 --> 00:40:49.199
checklist item where you don't know if
you want to commit to client or service

548
00:40:49.199 --> 00:40:52.960
side rendering, and you don't have
to decide that's right, and you can

549
00:40:52.039 --> 00:40:57.519
use a combination of both. I
am so looking forward to r C two

550
00:40:58.000 --> 00:41:04.519
or just the release in November.
RC one kind of has a little speed

551
00:41:04.559 --> 00:41:12.559
bomb in it for using you know, client side rendering and auto rendering.

552
00:41:13.519 --> 00:41:17.360
You have to sort of put those
things in a separate Razor class library right

553
00:41:17.360 --> 00:41:21.400
now, but that it's only temporary. But I cannot wait. I have

554
00:41:21.519 --> 00:41:24.800
so many websites that I just want
to that I just I don't have interactivity,

555
00:41:25.000 --> 00:41:30.199
you know, I just want to
generate stuff and not give my users

556
00:41:30.239 --> 00:41:36.239
the white screen of death when the
signal service box. No. But yeah,

557
00:41:36.280 --> 00:41:40.360
actually that that was the biggest sort
of gotcha with with Blazer Server,

558
00:41:40.440 --> 00:41:45.920
which is also in it off self
a fairly good product, especially internal intranet,

559
00:41:46.079 --> 00:41:52.639
not high scale websites. That that
kind of grade out. We lost

560
00:41:52.679 --> 00:41:57.800
connection counting up to eight right before
it gives up. So the only thing

561
00:41:57.840 --> 00:42:04.000
I can really fault when new the
model for UH is gonna be a performance.

562
00:42:04.079 --> 00:42:08.760
It is a bit more expensive to
basically spin off the whole Blazer renderer

563
00:42:08.840 --> 00:42:16.199
and spin out HTML compared to the
moll UH that's list things going on if

564
00:42:16.199 --> 00:42:21.280
you just do a raise of pages
or even NBC just spinning out some HTML

565
00:42:21.360 --> 00:42:24.559
right for dot that eighty speed speed
speed speed. But this is a particular

566
00:42:24.559 --> 00:42:30.320
set of libraries where they're adding functionality, so maybe we don't automatically get faster

567
00:42:30.360 --> 00:42:32.840
all the time. It's really funny
that I spun up r C one and

568
00:42:32.880 --> 00:42:37.039
I'm messing with it, right,
and I'm like, all right, I'm

569
00:42:37.079 --> 00:42:39.159
just gonna do static stuff. And
then I just have this little button on

570
00:42:39.199 --> 00:42:44.280
blazertrain dot com that sports ascending,
right, It's like one button with a

571
00:42:44.280 --> 00:42:46.679
little bit of code and I'm like, oh, geez, now, I

572
00:42:46.760 --> 00:42:51.079
kind of like do a Plazer server
or Plaser reb as suddenly or auto.

573
00:42:51.239 --> 00:42:53.440
I can't do that because the current
state of it, it's like, nah,

574
00:42:53.480 --> 00:42:57.840
I'm not just want to write some
JavaScript? What what am I thinking?

575
00:42:58.119 --> 00:43:00.760
Oh my god, did I just
say that? Did I just think

576
00:43:00.840 --> 00:43:07.400
that? Well? How you know
you can just do you know that that

577
00:43:07.440 --> 00:43:09.159
button could just be a link that
if you click that it posts back to

578
00:43:09.199 --> 00:43:13.599
the server with you know, corey
fs. I know, but you you

579
00:43:13.760 --> 00:43:15.480
all get into that thinging, Oh, it has to be a stateful thing,

580
00:43:15.559 --> 00:43:19.840
right. It actually does, which
is a nice thing. But but

581
00:43:20.000 --> 00:43:23.159
again to the performance point of view, it's not a problem for ninety nine

582
00:43:23.199 --> 00:43:27.159
percent of the apps out there.
If you're building a new being, you

583
00:43:27.320 --> 00:43:30.360
might not want to do it with
Razor rather Blazer component, right, But

584
00:43:30.840 --> 00:43:35.800
if you don't have a million you
visit us every day, that's probably not

585
00:43:35.960 --> 00:43:40.280
You probably want to prefer maintainability over
a slight bombing performance, right. Well,

586
00:43:40.320 --> 00:43:44.000
you know, and this really was
just a hiccup in the current version.

587
00:43:44.119 --> 00:43:45.840
Right, once it's done, I
would have just set you know,

588
00:43:46.719 --> 00:43:51.960
render mode to auto, and by
the time anybody gets down to flipping that,

589
00:43:52.280 --> 00:43:54.960
you know, sort of sending button. Everything would have been in web

590
00:43:54.960 --> 00:44:01.039
assembly anyway, So it's I just
can't wait for it. Yeah, I

591
00:44:01.280 --> 00:44:07.199
agree, I think it's going to
I suspect there will be a few more

592
00:44:07.480 --> 00:44:15.639
customers in my boutique as well now
with the unit because it's actually b unit's

593
00:44:15.679 --> 00:44:20.400
even more ideal in this scenario because
if you're just doing service side rendered stuff,

594
00:44:20.639 --> 00:44:22.960
you don't have a lot of JavaScript
in that. And that's the biggest

595
00:44:22.000 --> 00:44:27.000
limitation of being Unit compared to something
like play right is that it doesn't run

596
00:44:27.000 --> 00:44:29.960
in a browser. So all the
JavaScript that you might be calling from your

597
00:44:29.960 --> 00:44:32.960
Blason components, well it stops sort
of at the eye at yas run time

598
00:44:34.079 --> 00:44:37.320
interface, and then you have to
intercept that and deal with that in b

599
00:44:37.480 --> 00:44:43.119
unit. So but if you're just
generating HTML and making a service side application,

600
00:44:43.719 --> 00:44:45.559
you don't have you don't typically have
a lot of JavaScript, if any

601
00:44:45.599 --> 00:44:49.159
at all, and then the unit
is going to be a really excellent choice

602
00:44:49.159 --> 00:44:52.960
for testing your components. Yes,
so you Gil, is there anything else

603
00:44:52.960 --> 00:44:57.760
that you want to talk about before
we wrap it up? Yes, Well,

604
00:44:57.840 --> 00:45:01.719
how about we talk about maybe the
most controversial new API and dot net

605
00:45:01.760 --> 00:45:05.960
eight, and it has even been
backports to dot it two well dot net

606
00:45:05.960 --> 00:45:09.840
stand dot two point zero, and
that would be the time provider API.

607
00:45:10.639 --> 00:45:16.800
So if you don't know what that
is, it's basically an abstraction over the

608
00:45:16.920 --> 00:45:22.719
daytime offset get UTC now that we
all use in all our code. And

609
00:45:22.199 --> 00:45:29.320
it also includes an abstraction over a
timers so you know time that think things

610
00:45:29.320 --> 00:45:34.960
that happens con in reoccurrence. And
it also allows you to do things with

611
00:45:36.519 --> 00:45:40.360
timestamps, right, So it's all
about a single abstraction that encompass all of

612
00:45:40.400 --> 00:45:46.559
those things. And I thought it
was a really interesting API, and that

613
00:45:46.719 --> 00:45:51.199
was designed during dot need eight.
It actually started back all the way back

614
00:45:51.239 --> 00:45:55.519
in twenty twenty, and it's a
proposal that I've gone i think to three

615
00:45:55.599 --> 00:45:59.719
hundred and fifty plus comments on githob
and that issue related to it, and

616
00:46:00.000 --> 00:46:04.440
wow, it was super interesting because
there was a lot of objections. So

617
00:46:05.119 --> 00:46:09.599
people didn't like the name a time
provider. People thought maybe it should do

618
00:46:09.719 --> 00:46:15.960
less things. People were throwing you
know, single responsibility principle and solid principles

619
00:46:16.000 --> 00:46:23.000
into the discussion and and I kind
of understand why it like the objections,

620
00:46:24.840 --> 00:46:29.639
So for me, the interesting thing
started was actually last year I needed a

621
00:46:29.719 --> 00:46:37.159
way to deal with timers and and
day times in some product I was building

622
00:46:37.199 --> 00:46:40.320
for customer, and we wanted to
basically be able to test that code as

623
00:46:40.360 --> 00:46:44.519
a fairly complex state machine kind of
a thing that did things, you know,

624
00:46:45.079 --> 00:46:47.519
based on clocks and things like that. So I ended up building something

625
00:46:47.599 --> 00:46:52.199
quite similar to time Provider, And
you know, as a typical is when

626
00:46:52.239 --> 00:46:54.639
you like to build them solves,
you prout an ounswer to the world and

627
00:46:54.679 --> 00:47:00.400
push it to nugad and somebody points
at the issue on GitHub and says,

628
00:47:00.440 --> 00:47:06.079
have you seen this? And I
was like, oh, but it was

629
00:47:06.119 --> 00:47:09.599
fun. Actually I took a look
and I could sort of immediately recognize why

630
00:47:09.599 --> 00:47:15.559
it was designed like that, because
I, while my design was similar and

631
00:47:15.599 --> 00:47:20.280
it wasn't as you know, fought
through as the one that the Microsoft team

632
00:47:20.320 --> 00:47:24.440
has proposed, but I could immediately
recognize the design and why they came to

633
00:47:25.119 --> 00:47:30.239
it, why it came to be
what it is, right, and you

634
00:47:30.280 --> 00:47:32.519
know, to sort of in defense
of all the people that are that are

635
00:47:32.519 --> 00:47:36.480
sort of challenging the design in that
gate tob issue, I would probably have

636
00:47:36.559 --> 00:47:38.440
been on their side as well if
I hadn't actually spent a month trying to

637
00:47:38.480 --> 00:47:42.880
sort of go down that same path
of myself. That's so that's such a

638
00:47:42.880 --> 00:47:46.599
great statement, like the more I
knew, the more I appreciated what problem

639
00:47:46.639 --> 00:47:51.199
they were taking on. So I
think why I think this is interesting is

640
00:47:51.239 --> 00:47:55.639
that if you are using time like
a time stamp or a daytime officet or

641
00:47:55.679 --> 00:47:59.519
a timer in your application, which
I think most of us are, you

642
00:47:59.639 --> 00:48:04.239
probably want to switch to using the
time provide our API going forward, and

643
00:48:04.599 --> 00:48:07.239
it is available in seven and six
and well all the way to back to

644
00:48:07.320 --> 00:48:13.920
dot need framework actually via the dot
need standard compatibility. So the key thing

645
00:48:14.000 --> 00:48:17.719
about the time provider and why it
isn't a bad design in my mind,

646
00:48:17.960 --> 00:48:23.239
is that it's not an abstraction over
just time and date. So we've seen

647
00:48:23.559 --> 00:48:28.639
you probably have written some of those
in your code. Basis the iClock interface

648
00:48:28.760 --> 00:48:31.199
that helps get you to see now
or you to see now property on it

649
00:48:31.480 --> 00:48:37.400
that would allow you to replace the
y clock with a fake or mock during

650
00:48:37.480 --> 00:48:43.159
testing. Right, what it is
actually a time provider is not just that

651
00:48:43.280 --> 00:48:46.760
it's an abstraction over the flow of
time or the progress of time. So

652
00:48:47.519 --> 00:48:53.079
to be able to abstract flow of
time, you need to start with the

653
00:48:53.119 --> 00:49:00.519
concept of a timer, so can
I quish you guys? So a new

654
00:49:00.760 --> 00:49:05.760
time general time timer provider in dot
need eight and backport it back is called

655
00:49:05.800 --> 00:49:08.840
eye timer. And what is the
promise? Not of that, but in

656
00:49:08.840 --> 00:49:12.920
general, what is the promise of
a timer in dot net that it will

657
00:49:13.320 --> 00:49:19.719
fire and lapsed event or an event
that you can handle on an interval exactly

658
00:49:20.199 --> 00:49:22.880
until you say stuff. And to
be more precise, if you fox sayuple,

659
00:49:22.960 --> 00:49:28.360
create a new timer and say in
one second, call my callback,

660
00:49:29.480 --> 00:49:34.800
the promise is that the run time
will call that callback in one second or

661
00:49:34.880 --> 00:49:37.760
later. On This the process crisis, of course, and it never calls,

662
00:49:37.960 --> 00:49:42.880
but it's it's it's it's in one
second or later. So if the

663
00:49:42.960 --> 00:49:46.280
operating system is doing stuff as busy
and you can't get any process or time,

664
00:49:46.599 --> 00:49:49.800
well it might not be in one
second, it might be later.

665
00:49:49.920 --> 00:49:55.760
You don't really know. There's no
guarantees. So if imagine now that you

666
00:49:55.840 --> 00:50:00.800
create a timer and you want to
control that timer, may be doing testing

667
00:50:01.119 --> 00:50:05.440
well to keep that promise. If
that timer call back, for example,

668
00:50:05.679 --> 00:50:07.920
checks when the timer came back happens, it goes and checks what is the

669
00:50:07.960 --> 00:50:10.760
clock now? Because it might be
relevant to it for it to know if

670
00:50:10.760 --> 00:50:14.280
it actually, you know, had
to wait one second or it took a

671
00:50:14.320 --> 00:50:16.000
bit longer. Right, So it's
quite typical. Actually you would if you

672
00:50:16.039 --> 00:50:19.920
start looking at your code, you
will see it's not It's quite often that

673
00:50:20.280 --> 00:50:23.079
after a timer call back happens,
you tend to check what the clock is,

674
00:50:23.159 --> 00:50:25.679
or you tend to check a stop
watch how much time has elapsed.

675
00:50:25.719 --> 00:50:31.519
Right, So the promise, the
reason why it's a sort of abstraction over

676
00:50:31.559 --> 00:50:36.239
the flow of time or the progress
of time, is that when the timer

677
00:50:36.320 --> 00:50:39.119
happens, the clock that you would
get when you call get you to see

678
00:50:39.159 --> 00:50:45.079
now should also match the time that
has progressed. So that means that the

679
00:50:45.119 --> 00:50:52.000
flow of time is tied heavily,
a coupled tightly coupled to what the time

680
00:50:52.079 --> 00:50:54.159
is as well. And that is
why it makes sense to couple these things

681
00:50:54.199 --> 00:50:59.000
together, the concept of a timer
and what the time is right now,

682
00:50:59.320 --> 00:51:04.280
or what the timestamp would give you
in terms of if you call get time.

683
00:51:04.679 --> 00:51:07.079
So so for people not familiar with
the time provider, there's a get

684
00:51:07.159 --> 00:51:10.400
uty see now method, there's a
great timer method, and there's a good

685
00:51:10.440 --> 00:51:15.199
time stamp method, which is basically
the fun foundational building blocks. And what

686
00:51:15.280 --> 00:51:22.119
the dot NED team then did,
which was brilliantly uh from from insight.

687
00:51:22.199 --> 00:51:27.000
From that point of a brilliant insight
they had was well, if I as

688
00:51:27.039 --> 00:51:30.599
long as I have a timer,
I can now use time providers to control

689
00:51:30.639 --> 00:51:32.559
things like task dot delay because task
do delays. Yes, the timer with

690
00:51:32.639 --> 00:51:37.159
a single recurrent I can use things. It can be compatible with things like

691
00:51:37.199 --> 00:51:42.280
the periodic timer type. It can
be compatible with cancelation tokens that need to

692
00:51:42.320 --> 00:51:45.039
cancel after a certain amount of time. It can be compatible with the weight

693
00:51:45.159 --> 00:51:51.239
asan method. So all of those
methods from dot NEIT eight and some of

694
00:51:51.239 --> 00:51:54.400
them are being backparders to the dot
NED six and lower. Now take the

695
00:51:54.440 --> 00:51:59.719
time providers input as well, so
that in your code, if you rely

696
00:51:59.880 --> 00:52:06.199
on on time US in some way, you can inject the time provider in

697
00:52:06.199 --> 00:52:09.320
your production code and use that and
when you want to test that thing,

698
00:52:09.519 --> 00:52:15.679
you can now instead inject a fake
time provider that will allow you to forward

699
00:52:15.719 --> 00:52:19.119
time immediately. Eagle, I think
you just did it. Better know a

700
00:52:19.159 --> 00:52:30.360
framework. Absolutely no, I can't
feel your shoes, you can, but

701
00:52:31.400 --> 00:52:37.719
totally get it. Your explanation was
phenomenal. It's it's it's really interesting,

702
00:52:37.960 --> 00:52:44.920
and and so at advice for people
listening though, is you can because time

703
00:52:44.960 --> 00:52:47.360
provider is an abstracts type. It's
not an eye, it's not an interface.

704
00:52:47.360 --> 00:52:50.920
And many people who also advocating let's
get get an interface, it's going

705
00:52:50.960 --> 00:52:53.480
to make it easier for us to
you know, mark during testing, but

706
00:52:53.559 --> 00:52:57.719
it is. It is just an
abstract class and you can actually easily mark

707
00:52:57.760 --> 00:53:00.000
that using EMO CU or in substitute
or whatever you want your favorite thing to

708
00:53:00.039 --> 00:53:06.079
be. But I would highly advise
not to do that because unless you're sort

709
00:53:06.119 --> 00:53:12.880
of in the most simple scenarios being
able to uphold that I timer promise of

710
00:53:12.920 --> 00:53:15.679
when time moves forward for the time
when the callback happens, time for all

711
00:53:15.719 --> 00:53:22.519
the other properties should also be up
matching whatever has happened there, that is

712
00:53:22.800 --> 00:53:28.480
a fairly complex thing to configure in
a general purpose market framework. And so

713
00:53:28.599 --> 00:53:34.320
Misoft has also built I guess,
the official time fake time provider that you

714
00:53:34.320 --> 00:53:37.480
can use during testing, which has
a method like advance or get you gc

715
00:53:37.679 --> 00:53:44.280
now that allows you to move time
forward. And I was I had the

716
00:53:44.599 --> 00:53:50.079
sort of good experience of being able
to contribute to that fake time provider with

717
00:53:50.280 --> 00:53:52.639
my you know what, I what
I learned by building my own and and

718
00:53:52.840 --> 00:53:57.480
sort of various educases that needed to
be handled there. So that was a

719
00:53:57.519 --> 00:54:02.440
fun, was a fun thing to
to really do. So as a side

720
00:54:02.440 --> 00:54:07.280
gig from b unit as as well. Awesome. Yeah, so what's next?

721
00:54:07.400 --> 00:54:13.039
What's in your inbox? Well,
I'll be heading to ndcposal and hopefully

722
00:54:13.280 --> 00:54:19.000
have a beer with you guys or
if that's still a thing and doing at

723
00:54:19.079 --> 00:54:23.639
least at yes, oh well yeah, yeah, definitely, And well we

724
00:54:23.719 --> 00:54:27.960
will continue working on V two of
b unit me and not my my comments,

725
00:54:28.719 --> 00:54:31.159
and I'll also I also have actually
have also had the privilege of doing

726
00:54:31.159 --> 00:54:36.960
a talk at dot dot com and
then I'll be at erdav in Sweden Melmbury

727
00:54:37.039 --> 00:54:42.280
as well in this year, so
conference wise, a fairly full calendar.

728
00:54:42.920 --> 00:54:45.480
And okay, yeah you're you're here, there and everywhere, so all right,

729
00:54:45.599 --> 00:54:50.159
that's me so great. Well we'll
see there, We'll see you in

730
00:54:50.199 --> 00:54:54.840
Porto absolutely, and we'll see you, dear listener next time on dot net

731
00:54:55.039 --> 00:55:21.599
rocks. Dot net Rocks is brought
to you by Franklin's Net and produced by

732
00:55:21.679 --> 00:55:27.599
Pop Studios, a full service audio, video and post production facility located physically

733
00:55:27.639 --> 00:55:31.599
in New London, Connecticut, and
of course in the cloud online at pwop

734
00:55:31.840 --> 00:55:36.719
dot com. Visit our website at
d O T N E t R O

735
00:55:36.800 --> 00:55:42.079
c k S dot com for RSS
feeds, downloads, mobile apps, comments,

736
00:55:42.400 --> 00:55:45.519
and access to the full archives going
back to show number one, recorded

737
00:55:45.559 --> 00:55:50.480
in September two thousand and two.
And make sure you check out our sponsors.

738
00:55:50.639 --> 00:55:53.159
They keep us in business. Now, go write some code, see

739
00:55:53.199 --> 00:56:04.440
you next time. You got middle
and time, like mess home there,

740
00:56:04.480 --> 00:56:06.920
like Texas line resin Hall

