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
