WEBVTT

1
00:00:01.000 --> 00:00:04.759
How'd you like to listen to dot
net Rocks with no ads? Easy?

2
00:00:05.320 --> 00:00:09.400
Become a patron for just five dollars
a month. You get access to a

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

4
00:00:14.240 --> 00:00:18.399
we'll get you that and a special
dot net Rocks patron mug. Sign

5
00:00:18.440 --> 00:00:23.440
up now at Patreon dot dot net
rocks dot com. Hey Carlin Richard.

6
00:00:23.480 --> 00:00:28.000
Here. As you may have heard, NDC is back offering their incredible in

7
00:00:28.120 --> 00:00:33.960
person conferences around the world. DC
Porto is happening October sixteenth through the twentieth.

8
00:00:34.240 --> 00:00:38.280
Go to Eddcporto dot com to register
and check out the full lineup of

9
00:00:38.320 --> 00:00:43.600
conferences at NDC Conferences dot com.
Hey there, this is Jeff Fritz,

10
00:00:43.840 --> 00:00:48.159
the Purple Blazer guy from Microsoft,
letting you in on a little secret about

11
00:00:48.240 --> 00:00:52.920
my friend Carl Franklin. You know
the guy who started dot net Rocks,

12
00:00:52.960 --> 00:00:57.719
the first podcast about dot net in
two thousand and two, The guy who's

13
00:00:57.719 --> 00:01:03.040
been teaching Blazer on YouTube since twenty
Yeah, that Carl Franklin. Well,

14
00:01:03.400 --> 00:01:07.079
Carl's joined up with the folks from
Code in a Castle to teach a week

15
00:01:07.159 --> 00:01:12.159
long hands on Blazer class at Are
you ready to get this at a castle

16
00:01:12.439 --> 00:01:19.040
slash villa in Tuscany. It's sort
of a luxury vacation with Blazer learning built

17
00:01:19.040 --> 00:01:26.879
in. Carl's calling it the Blazer
master Class. You'll learn Blazer from the

18
00:01:26.920 --> 00:01:30.920
ground up, finishing the week with
the ability to build and deploy Blazer applications.

19
00:01:33.120 --> 00:01:36.920
Since the training happens for only four
hours in the morning over six days,

20
00:01:37.280 --> 00:01:41.920
you can bring your significant other your
partner with you and you should right

21
00:01:42.400 --> 00:01:46.959
that this part of Italy is absolutely
beautiful. There's so much to see and

22
00:01:47.159 --> 00:01:52.560
do and and Larry and Marco from
Code in a Castle are organizing daily activities

23
00:01:52.640 --> 00:01:56.840
both at the castle and in the
area. The castle is in the Marema,

24
00:01:57.280 --> 00:02:01.760
a less touristed region of Tuscany,
offering both classic Tuscan hill country as

25
00:02:01.760 --> 00:02:07.479
well as easy access to the Etruscan
Riviera, with sublime local food, wine

26
00:02:07.479 --> 00:02:13.560
and olive oil around every corner.
Breakfast is included every day. There will

27
00:02:13.560 --> 00:02:16.919
be two communal dinners at the castle
book ending the experience, and most other

28
00:02:17.000 --> 00:02:23.360
meals and all activities are included.
And did I mention you'll learn Blazer in

29
00:02:23.479 --> 00:02:28.599
person from Carl Franklin Listen. Space
is limited and for very good reason.

30
00:02:28.879 --> 00:02:34.439
This is quality training in a beautiful
setting. Go to code in Acastle dot

31
00:02:34.479 --> 00:02:40.680
com slash Blazer twenty twenty three.
That's bla z o R two zero two

32
00:02:40.840 --> 00:02:46.199
three to take advantage of this amazing
opportunity to join Carl in Tuscany for an

33
00:02:46.280 --> 00:02:53.520
unforgettable week of La dolce vita while
advancing your programming skills in this important new

34
00:02:53.599 --> 00:03:09.680
technology. Welcome back to dot net
and rocks. I'm Carl Franklin, and

35
00:03:09.759 --> 00:03:14.479
I'm Richard Campbell, and Jimmy Bogart
is here. We haven't talked to him

36
00:03:14.479 --> 00:03:16.319
in a while. It's gonna be
fun, fun, fun, I say.

37
00:03:16.400 --> 00:03:20.560
But first, Richard, how are
you you all moved out yet?

38
00:03:20.759 --> 00:03:23.439
Just about moved? Yeah? Final, you know, of course we're recording

39
00:03:23.439 --> 00:03:24.800
a couple of weeks in advance,
sort of the last things we're moving.

40
00:03:24.840 --> 00:03:29.840
By the time this show publishes,
I think we'll be a week away from

41
00:03:29.879 --> 00:03:34.360
handing over the keys and living on
the coast full time. So we've done

42
00:03:34.360 --> 00:03:38.800
the slow move like we've spent weeks
at it, just taking truckloads up each

43
00:03:38.800 --> 00:03:43.520
week with our pickup, and in
some ways it's been very therapeutic because bit

44
00:03:43.599 --> 00:03:46.280
by bitness. House feels less and
less ours. Yeah, you know,

45
00:03:46.319 --> 00:03:50.639
when you take all the stuff off
the walls and you're emptying out rooms and

46
00:03:50.639 --> 00:03:53.960
stuff, it just sort of becomes
a house adminally, it's a house we

47
00:03:53.120 --> 00:03:58.080
built back in the day. But
and it looks like it needs a rena

48
00:03:58.240 --> 00:04:01.360
now, like it's been fourteen years
since we built it. So the cabinet

49
00:04:01.439 --> 00:04:05.080
needs to refinished and the floor should
be redone, and I'd replace that carpet

50
00:04:05.159 --> 00:04:10.280
and I paint those walls and it's
not my problem. Somebody else is gonna

51
00:04:10.280 --> 00:04:16.040
own it three four weeks, So
that's that. I had my uh Pop

52
00:04:16.279 --> 00:04:23.399
three zero Studios opening grand opening party
last Saturday. Yeah, it's not really

53
00:04:23.439 --> 00:04:27.720
done, but it's pretty close.
Let's be clear. Nothing's ever done.

54
00:04:27.800 --> 00:04:30.560
Nothing's ever done. It's like building
a software apple, you know, building

55
00:04:30.560 --> 00:04:32.360
an app. Is it done?
What is done? Well? There there

56
00:04:32.439 --> 00:04:36.600
is a definition of done, and
it's not there yet. Basically, we

57
00:04:36.759 --> 00:04:40.879
have the you know, the walls
are great, the floor is awesome,

58
00:04:40.959 --> 00:04:45.680
the tram is done. They are
conditioning unit is in and half of the

59
00:04:45.800 --> 00:04:51.279
room has sound absorptive ceiling tiles on
them and they're hung like they're custom made.

60
00:04:51.319 --> 00:04:57.160
They're hung so they're two inches from
the top and that means that sound

61
00:04:57.160 --> 00:05:00.560
gets trapped above them as well as
below them. But only half the room

62
00:05:00.600 --> 00:05:03.839
was done in it's just because we
just didn't finish that and we had to

63
00:05:04.079 --> 00:05:06.399
had to pick a day. So
I mean, can you record in it

64
00:05:06.480 --> 00:05:10.120
yet because you kind of need that
stuff? Well I could, but I

65
00:05:10.160 --> 00:05:14.240
don't want to move everything in there
until all of those panels are up because

66
00:05:14.319 --> 00:05:15.639
everything will be in the way,
you know. Yeah, yeah, but

67
00:05:15.759 --> 00:05:20.600
it's very exciting. You know,
we've got that nice wooden floors and they

68
00:05:20.639 --> 00:05:24.680
need to be refinished, but you
would never do that in living it like

69
00:05:24.680 --> 00:05:28.079
it's such a it's such a mass. Yeah yeah. And so the one

70
00:05:28.199 --> 00:05:31.240
chance the new owner is going to
get to redo the floor is you know,

71
00:05:31.399 --> 00:05:34.279
in this window when we're out before
they go in. It's like,

72
00:05:34.399 --> 00:05:42.839
you should do this floor now.
Oh the joys of building and tearing down.

73
00:05:42.600 --> 00:05:45.560
But it's funny, my reflexing,
this place is no longer so much

74
00:05:45.560 --> 00:05:47.439
my place, and it's a place
I would renovate and how we'd fix it

75
00:05:47.519 --> 00:05:50.480
up, like the things that it
needs, because after fourteen years since we've

76
00:05:50.480 --> 00:05:55.079
built it, it just like it
needs things. Yeah, sure, well,

77
00:05:55.160 --> 00:05:58.560
let's get things started with better no
a framework or all the crazy music,

78
00:06:06.240 --> 00:06:11.360
you know, as if I didn't
need another project, what are you

79
00:06:11.399 --> 00:06:16.199
doing? I decided to start a
new little YouTube and maybe even TikTok show

80
00:06:16.360 --> 00:06:24.639
called the Blazer Puzzle. Okay,
okay, So every week and Jeff Fritz

81
00:06:24.680 --> 00:06:27.959
is going to be doing it with
me. Every week, we're going to

82
00:06:29.079 --> 00:06:31.800
create a little demo, you know, a little Blazer application that you can

83
00:06:31.839 --> 00:06:36.600
download and either it's either going to
be a puzzle, a coding challenge or

84
00:06:36.759 --> 00:06:41.800
find the bug kind of thing.
Why doesn't this work? Can you make

85
00:06:41.800 --> 00:06:46.240
the architecture better? Just something very
simple, right? And then people email

86
00:06:46.480 --> 00:06:50.959
me their answers and I'll pick one
at random from all the correct answers and

87
00:06:51.160 --> 00:06:57.279
send them a mug, A what
mug you say, a Blazer puzzle mug,

88
00:06:57.480 --> 00:07:00.360
so that they don't even really exist
yet, but they were. I'm

89
00:07:00.399 --> 00:07:02.480
sure they'll be great. Yeah,
sure it would be great. And the

90
00:07:02.519 --> 00:07:08.279
only way you can get them is
by answering them correctly. So that's what

91
00:07:08.439 --> 00:07:12.439
I've that's what I'm doing right now. So it will be at blazer Puzzle

92
00:07:12.519 --> 00:07:15.120
dot com probably by the time you
read this. And I hope you have

93
00:07:15.199 --> 00:07:19.480
fun with it. I keep thinking
about actually making a Blazer puzzle, Like

94
00:07:19.639 --> 00:07:23.120
what would that app look like where
you had a bunch of pieces and you

95
00:07:23.160 --> 00:07:26.839
could move them around. Oh yeah, yeah, it's more like a puzzler.

96
00:07:27.519 --> 00:07:30.120
It's more like a gotcha solver kind
of thing. Yeah, figure stuff

97
00:07:30.120 --> 00:07:32.160
out. Yeah, I kind of
like the idea of a you know,

98
00:07:32.199 --> 00:07:35.000
a picture of you in a different
picture of Fritz and the logo and then

99
00:07:35.040 --> 00:07:38.279
it breaks into puzzle pieces and falls
to the bottom of the screen. You're

100
00:07:38.319 --> 00:07:44.120
not far from the actual test video
that we've created already to introduce it.

101
00:07:44.120 --> 00:07:47.120
It kind of does look like that, good guess. Yeah. Well,

102
00:07:47.120 --> 00:07:51.399
it's also also you know, it
speaks to the fact that I didn't don't

103
00:07:51.439 --> 00:07:56.079
have an original idea to save my
life, so I'm not gonna get there.

104
00:07:56.240 --> 00:07:59.759
You know, we had to.
We had to fall in fall in

105
00:07:59.759 --> 00:08:03.439
love calling you got it. You've
got the domain name. You pretty much

106
00:08:03.439 --> 00:08:05.920
dictates what you're gonna do pretty much. So anyway, that's it. Who's

107
00:08:05.920 --> 00:08:09.839
talking to us today? Richard?
I grabbed a comment off a show eighteen

108
00:08:09.959 --> 00:08:11.879
fifty two which we did just back
in June with Sean Walker, and we

109
00:08:11.879 --> 00:08:15.680
were talking about going full time and
open source. Yeah, you know,

110
00:08:15.759 --> 00:08:18.959
just the sort of thing Jimmy Bogar, we'ld never do. Never. But

111
00:08:20.000 --> 00:08:22.079
we had some great comments on that
show. And I mean, it's really

112
00:08:22.079 --> 00:08:24.240
fun to talk to Sean too,
because he really came in it from a

113
00:08:24.279 --> 00:08:28.319
yet another angle. As we keep
exploring this, what does the open source

114
00:08:28.360 --> 00:08:35.759
ecosystem look like today? And I'm
gonna I'm gonna presume this is a pseudonym

115
00:08:35.799 --> 00:08:41.120
because it's q r y s,
which to me reads like queries, you

116
00:08:41.159 --> 00:08:45.399
know, except for a distinct lack
of vowels. Well that why doesn't seem

117
00:08:45.480 --> 00:08:46.840
like a vowel in necessary? So
Queery says, hey, thanks for the

118
00:08:46.840 --> 00:08:50.600
great show. I can confirm that
for companies it's really a hurdle to donate

119
00:08:50.639 --> 00:08:54.039
to open source projects, even if
they use and appreciate open source tools and

120
00:08:54.039 --> 00:08:58.120
libraries. Like my small employer,
which is only about twenty people. However,

121
00:08:58.559 --> 00:09:01.159
we have now I decided to handle
it this way. Each year,

122
00:09:01.600 --> 00:09:07.679
employees can nominate their most valuated or
appreciated open source project. The one that

123
00:09:07.879 --> 00:09:11.440
eventually gets chosen gets a one time
donation of about a thousand Swiss francs.

124
00:09:13.480 --> 00:09:16.159
I just checked that's like eleven us. Okay, I think it's good service

125
00:09:16.159 --> 00:09:20.039
one example of how to overcome the
mental hurdle for such payments. Because it's

126
00:09:20.039 --> 00:09:24.559
only just once a year, they
are somewhat justified by the company as an

127
00:09:24.639 --> 00:09:28.399
organization, and the company might even
advertise this, although we currently don't.

128
00:09:28.559 --> 00:09:31.759
Yeah, I don't know how you'd
advertise that well, other than that hole

129
00:09:31.759 --> 00:09:35.679
wearing your culture on the sleeve.
And we support open source thing. But

130
00:09:35.840 --> 00:09:39.320
you know, a twenty person company
committing a grand a year to an open

131
00:09:39.320 --> 00:09:41.840
source project, that's pretty legit.
Yeah, it's legit. So Queries,

132
00:09:41.840 --> 00:09:45.279
thank you so much for your comment. I don't know that's your name.

133
00:09:45.320 --> 00:09:48.759
I'm pretty sure it's not, but
thanks anyway, And a copy of music

134
00:09:48.759 --> 00:09:50.559
co Buy is on its way to
you. And if you'd like a copy

135
00:09:50.600 --> 00:09:52.480
of music Cobey, I read a
comment on the website at donet Rocks dot

136
00:09:52.519 --> 00:09:54.799
com or on the facebooks. We
publish every show there, and if you

137
00:09:54.840 --> 00:09:58.320
comment there and everything in the show, we'll send you a copy of music

138
00:09:58.480 --> 00:10:00.840
Buy. And you can follow us
on Twitter if you like. But the

139
00:10:00.879 --> 00:10:05.360
real fund is happening over on Mastodon. I'm Carl Franklin at tech hub dot

140
00:10:05.399 --> 00:10:09.279
social and I'm Rich Campbell at mastadon
dot social. Send us a two and

141
00:10:09.440 --> 00:10:13.919
we might even read it. Hey, let's bring back Jimmy Bogard, shall

142
00:10:13.960 --> 00:10:18.600
we? Jimmy is the creator and
maintainer of the popular open source libraries Auto

143
00:10:18.720 --> 00:10:24.679
Mapper and Mediator That's Media t R. Jimmy's an independent software consultant based in

144
00:10:24.720 --> 00:10:31.080
Austin, Texas. He's received the
MVP Award every year since two thousand and

145
00:10:31.159 --> 00:10:33.600
nine, and he joins us again
today. Hey, Jimmy, how are

146
00:10:33.639 --> 00:10:37.559
you doing? Okay? Like Tony'll
earlier, just trying to survive in this

147
00:10:37.840 --> 00:10:41.840
horrible heat you've having here in Austin, Texas. It's it's miserable, like

148
00:10:43.200 --> 00:10:48.200
can't walk the dog, can't do
anything yet, it's just dangerously hot,

149
00:10:48.320 --> 00:10:50.039
right, like not, it's not
even funny. It's just yeah, there's

150
00:10:50.080 --> 00:10:52.799
like don't go outside between like three
and sexs. Just don't. Yeah.

151
00:10:52.919 --> 00:10:58.799
Right, you start to understand why
desert cultures have a siesta, right,

152
00:11:00.039 --> 00:11:03.440
because what else are you going to
do? You mentioned trying to live without

153
00:11:03.440 --> 00:11:07.240
AC in those conditions? Oh man, Yeah, get a get a fan

154
00:11:07.320 --> 00:11:11.960
of a block of ice and good
luck. Yeah, Well, the last

155
00:11:11.960 --> 00:11:16.799
time we talked to you on the
show was twenty nineteen. It was too

156
00:11:16.840 --> 00:11:20.120
long ago, June twenty nineteen.
Are we saying to garls I got on

157
00:11:20.279 --> 00:11:22.360
today? It's like, you know, we don't talk to Jimmy often enough,

158
00:11:22.399 --> 00:11:26.879
and the those the before times it
was yeah, when we went to

159
00:11:26.919 --> 00:11:30.399
offices and all that stuff. Yeah. Well, anyway, we were talking

160
00:11:30.480 --> 00:11:35.320
about messaging architecture and I can't remember
if we talked about media. You're probably

161
00:11:35.320 --> 00:11:39.440
working on it at that time,
but it wasn't the complete focus of it.

162
00:11:39.480 --> 00:11:43.080
But why don't you start us off
with the mediator pattern? What is

163
00:11:43.120 --> 00:11:48.720
it? Why do we need it? Sure? So, I think just

164
00:11:48.759 --> 00:11:52.399
as a context of where this kind
of came from, it was a kind

165
00:11:52.399 --> 00:11:56.799
of an evolution of us building larger
systems and having a dealing with the complexities

166
00:11:56.960 --> 00:12:01.639
of just the kind of busines,
this logic and code we're having to manage,

167
00:12:03.080 --> 00:12:05.559
and so the j the gist of
the mediator pattern is that if you've

168
00:12:05.600 --> 00:12:11.159
got some like like UI code or
something that is needing to interact with some

169
00:12:11.279 --> 00:12:16.440
services, instead of you trying to
talk to those services directly, you go

170
00:12:16.519 --> 00:12:20.200
through sort of a middleman. And
the middleman is that mediator and so instead

171
00:12:20.240 --> 00:12:24.600
of you like depending directly on those
services that are doing the work for you,

172
00:12:24.600 --> 00:12:28.559
you kind of package up what you
want into a request object, you

173
00:12:28.600 --> 00:12:33.879
send it to the mediator, it
dispatches to the handling logic, and then

174
00:12:33.919 --> 00:12:37.480
finally returns yet response. So it's
a little bit different, but kind of

175
00:12:37.519 --> 00:12:39.919
solves the same problem as MVVM.
Right, A view model kind of does

176
00:12:39.960 --> 00:12:45.519
that, but it doesn't have as
explicit in architecture, Right, is that

177
00:12:45.559 --> 00:12:48.320
what you think? Yeah? Exactly, these something these kind of they do

178
00:12:48.440 --> 00:12:52.559
kind of compliment and go with each
other. I mean, especially MVBM,

179
00:12:52.600 --> 00:12:56.759
those those those things you're talking to
are also stateful and then you know you're

180
00:12:56.879 --> 00:13:01.000
receiving events and communicating from the UI. When we're using this mediator pattern,

181
00:13:01.440 --> 00:13:05.240
where we're usually in the kind of
a more of a stateless land, it's

182
00:13:05.279 --> 00:13:11.240
like a web NBC sort of place
where the UI or the browser is already

183
00:13:11.240 --> 00:13:15.440
sending this request and receiving a response
back. And so this pattern was trying

184
00:13:15.480 --> 00:13:18.440
to take it sort of one level
below that and kind of get rid of

185
00:13:18.519 --> 00:13:22.000
all the UI cruft and response codes
and just say, well, what is

186
00:13:22.039 --> 00:13:26.639
like just the sort of pure data
end data out that we're dealing with on

187
00:13:26.840 --> 00:13:28.919
all the different requests in our system, but it solves the same kind of

188
00:13:28.960 --> 00:13:35.679
problem, which is tight compling.
Yeah. I mean we we're always trying

189
00:13:35.679 --> 00:13:37.039
to find kind of the holy grill
of the pattern that will solve all the

190
00:13:37.080 --> 00:13:41.759
complexity issues in our codebase, and
I mean, nothing ever solves it completely,

191
00:13:41.799 --> 00:13:43.559
but that's what we're looking at.
Like we were using NBC and this

192
00:13:43.639 --> 00:13:48.879
is like early early days of asp
net NBC classic, I don't what you

193
00:13:48.919 --> 00:13:52.559
call, like the last one,
and we just saw like our controllers were

194
00:13:52.600 --> 00:13:54.279
getting big, like well, what
do we do now? Or do we

195
00:13:54.320 --> 00:13:58.000
put this junk that's piling up here? And so that, you know,

196
00:13:58.159 --> 00:14:01.440
a lot of those kinds of concepts
and ideas emerge from just dealing with these

197
00:14:01.799 --> 00:14:05.000
big controller classes, like how do
we what do we do? How do

198
00:14:05.000 --> 00:14:09.000
we deal with this sort of stuff? Yeah? What I usually do is

199
00:14:09.080 --> 00:14:13.120
make a some sort of manager that
I can inject into the controller so the

200
00:14:13.159 --> 00:14:18.720
controller merely passes on and returns data, you know, and those managers,

201
00:14:18.759 --> 00:14:24.080
I guess in the mediator pattern,
those would just be objects that you send

202
00:14:24.159 --> 00:14:26.840
messages to and get messages back from. How does that work with a controller?

203
00:14:28.000 --> 00:14:31.399
Yeah, so we we started that. We started that exact path as

204
00:14:31.399 --> 00:14:33.240
well, where we had these you
know, every controller like you know,

205
00:14:33.519 --> 00:14:37.240
I don't know, invoice control or
had the invoice manager that had the business

206
00:14:37.240 --> 00:14:43.840
object and all the all the NBC
controllery stuff, action results and HP contexts

207
00:14:43.840 --> 00:14:46.679
and those webby sort of things.
Those are on the controller. But once

208
00:14:46.679 --> 00:14:48.279
you got into like the pure business
logict, I'm you know, I'm passing

209
00:14:48.360 --> 00:14:52.720
data to something and then it does
the work and it gives me some data

210
00:14:52.720 --> 00:14:58.639
outs. We started that as a
as these manager classes. Now suddenly those

211
00:14:58.679 --> 00:15:01.200
manager classes started to get big as
well, right, and then each of

212
00:15:01.200 --> 00:15:05.679
the methods on the manager classes was
tied to like directly tied to a single

213
00:15:07.919 --> 00:15:11.440
action or kind of HTTP endpoint on
the front end, right, So you're

214
00:15:11.440 --> 00:15:16.279
not really gaining any decoupling, you're
just moving it into another class. We

215
00:15:16.440 --> 00:15:20.679
moved it into a different class.
And we also noticed that this was in

216
00:15:20.720 --> 00:15:24.440
the days of subversion, so like
merge conflicts were a thing that we had

217
00:15:24.480 --> 00:15:28.000
to worry about. So we are
also having this issue that if you know,

218
00:15:28.039 --> 00:15:31.159
we had new features coming on to
a set of screens, then multiple

219
00:15:31.159 --> 00:15:35.759
developers were working in these manager classes
and having just merge conflict, and we

220
00:15:35.759 --> 00:15:39.799
went back to the sort of the
original sort of solid design, and there's

221
00:15:39.840 --> 00:15:43.279
that the eye and solid was the
interface segregation principle, and then general ideas

222
00:15:43.320 --> 00:15:50.200
there is that you if you have
an interface with multiple methods and they don't

223
00:15:50.200 --> 00:15:54.000
really have much to do with each
other and never called together on the same

224
00:15:54.039 --> 00:15:58.440
sort of requests. We found that
each of those manager methods would only ever

225
00:15:58.480 --> 00:16:02.080
called with one of the controller actions, right, So I thought, well,

226
00:16:02.159 --> 00:16:06.480
even though these all have to deal
with like voices the logic inside of

227
00:16:06.480 --> 00:16:07.600
there, it really don't have anything
to do with each other. They're just

228
00:16:07.639 --> 00:16:11.120
all globed together in a single file. So our first step was just to

229
00:16:11.159 --> 00:16:15.759
remove each of those manager methods and
sticking in its own class so that it

230
00:16:15.840 --> 00:16:19.039
just was living by itself. And
then if I needed to change the one

231
00:16:19.120 --> 00:16:22.440
action, I had one place to
go to for the business logic of that

232
00:16:22.480 --> 00:16:26.200
one action that was separated from the
UI, but also separated from the logic

233
00:16:26.279 --> 00:16:30.080
of other requests. But you were
also talking about the merge conflict part of

234
00:16:30.120 --> 00:16:33.799
this, but that separation and then
because it was separate file, if you

235
00:16:34.720 --> 00:16:37.279
I'm trying to think about it,
did subversion make a difference there, Like

236
00:16:37.399 --> 00:16:42.519
is get hub somehow better it merge
conflicts. Get is better because you are

237
00:16:42.559 --> 00:16:47.240
able to do a three way merge. You have what you both started with

238
00:16:47.279 --> 00:16:49.639
and then like where you both ended, right, and Subversion you don't don't

239
00:16:49.639 --> 00:16:55.480
really have. You only have like
just constant, constant headaches. So part

240
00:16:55.480 --> 00:16:57.200
of that was just the reaction of
that, because I mean it kind of

241
00:16:57.279 --> 00:17:00.240
hurts you in your heart when it's
like changed the way I do my code

242
00:17:00.279 --> 00:17:06.160
because of my tooling. Right,
Oh there's I mean there are other issues

243
00:17:06.200 --> 00:17:11.000
as well, like those are the
old days, the horrible CS project merge

244
00:17:11.000 --> 00:17:15.039
conflicts as well. So just like
merge conflicts, Like, part of our

245
00:17:15.119 --> 00:17:19.079
thing was like how do we separate
the workouts of people working on features so

246
00:17:19.079 --> 00:17:22.160
they're not stuffing in each other's toes? And so we started that thing of

247
00:17:22.240 --> 00:17:26.400
just like, well, just split
the manager into multiple methods and then each

248
00:17:26.400 --> 00:17:30.079
methods in its own file and class. And if I have to change the

249
00:17:30.119 --> 00:17:33.839
business logic for that one page,
I'm not affecting anybody else. Nobody else

250
00:17:33.839 --> 00:17:37.599
needs to know, you know all
as well. I'm also reminded and I'm

251
00:17:37.640 --> 00:17:42.039
sure if this many times is that
every app has ugliness in it. It's

252
00:17:42.039 --> 00:17:45.480
just a question of do you know
where yours is? You know, like

253
00:17:45.880 --> 00:17:49.079
you're gonna have to put some ugly
somewhere, So how do you wrap it

254
00:17:49.119 --> 00:17:55.599
in a relatively tidy package that people
can deal with as spraying it all over

255
00:17:55.640 --> 00:17:59.920
the whole app? In this case, you trade it off these giant manager

256
00:18:00.160 --> 00:18:04.160
classes for lots of lots of little
objects exactly that now you have to manage

257
00:18:04.160 --> 00:18:07.440
you having to manage something. Yeah, we because the logic has to be

258
00:18:07.519 --> 00:18:14.119
there, and that we we thought
the idea of like having these managers as

259
00:18:14.119 --> 00:18:15.200
well. It was like, well, we can now share logic between these

260
00:18:15.240 --> 00:18:19.240
different things. But that was a
you know, double edged sword. One

261
00:18:19.359 --> 00:18:22.960
side of the store is actually much
sharper than the other. Yeah, cut

262
00:18:22.039 --> 00:18:26.079
us much worse because we found that
if we changed this logic that were shared

263
00:18:26.519 --> 00:18:32.240
amongst multiple things, like suddenly I
could have these unintended side effects. So

264
00:18:32.279 --> 00:18:33.519
we were adding new features to the
system, We're like, Okay, I

265
00:18:33.519 --> 00:18:37.640
got to spend much more time figuring
out how many I'm gonna make sure not

266
00:18:37.680 --> 00:18:41.480
breaking anything before I'm able to just
write code. So that's kind of another

267
00:18:41.480 --> 00:18:44.799
side effect. We're like well,
don't like, don't make the first thing

268
00:18:44.839 --> 00:18:48.000
you're doing sharing code. Make that
be the exceptional case where you know it's

269
00:18:48.039 --> 00:18:52.160
after the third time you've copied and
pasted that logic like, Okay, maybe

270
00:18:52.319 --> 00:18:55.359
this is something we should share but
not share, but I'll do it up

271
00:18:55.359 --> 00:18:59.279
front. So the mediator pattern came
into play. Like, after us making

272
00:18:59.319 --> 00:19:03.319
these like single files, we took
a step back, like these all look

273
00:19:03.440 --> 00:19:07.400
very similar, but they're also different
and their own like not like they're also

274
00:19:07.480 --> 00:19:11.279
different for no reason whatsoever. So
we were looking around at the time,

275
00:19:11.359 --> 00:19:14.880
this is also the time that Greg
Young was coming up with this whole like

276
00:19:14.920 --> 00:19:18.039
CQRS concept of like stepparing out read
and write objects, and so we looked

277
00:19:18.039 --> 00:19:21.680
at these these classes like, well, this is doing that. It's separating

278
00:19:21.680 --> 00:19:26.039
out like every request from each other. So the logic is the separated out

279
00:19:26.920 --> 00:19:30.480
and so we we settled on this. We flipped through the old Gang of

280
00:19:30.519 --> 00:19:34.119
Four book like there's got to be
a solution for this, right And one

281
00:19:34.119 --> 00:19:37.119
of the few times that I've looked
in that book and actually found something useful

282
00:19:37.279 --> 00:19:41.960
was like, oh, instead of
me having these like everything is a one

283
00:19:41.000 --> 00:19:47.599
off whatever, I can have something
mediate sending this request down, and so

284
00:19:47.599 --> 00:19:52.519
instead of me depending directly on all
these individual manager classes, instead I depend

285
00:19:52.559 --> 00:19:57.400
on this one mediator class and I
send a request for something, you know,

286
00:19:57.440 --> 00:20:00.119
I request for data, request to
do some work, and then I

287
00:20:00.160 --> 00:20:06.480
get a single response back, and
those individual manager classes got refactored into individual

288
00:20:06.519 --> 00:20:11.240
request handlers from that mediator itself.
So it's just a very natural kind of

289
00:20:11.240 --> 00:20:15.839
refactoring progression for us to arrive at
this pattern at the end, and you're

290
00:20:15.839 --> 00:20:18.400
saying that you send a message and
get a response, but it's not asynchronous,

291
00:20:18.480 --> 00:20:22.720
is it because you're in the web
context here. Yeah. I even

292
00:20:22.759 --> 00:20:26.599
hesitate to call it a message because
it doesn't have the traditional characters. There's

293
00:20:26.640 --> 00:20:30.599
no head or there's no package or
payload or whatever. So it's really we

294
00:20:30.680 --> 00:20:33.880
called it a request objects. So
it's a request dto if you will,

295
00:20:33.279 --> 00:20:37.920
and I get back a response another
dto or data transfer objects. We want

296
00:20:37.960 --> 00:20:41.279
to make this very clear, like
I'm sending kind of pure data in and

297
00:20:41.319 --> 00:20:45.319
I'm getting pure data outs synchronous,
and for exactly it's all a synchronous,

298
00:20:45.400 --> 00:20:48.680
it's all in process. We're all
just just trying to do like give us

299
00:20:48.720 --> 00:20:53.920
one level separation between the thing doing
the work and and like the pure kind

300
00:20:53.920 --> 00:20:59.440
of request and response objects in and
out. It's very pure data objects.

301
00:21:00.640 --> 00:21:03.279
Yeah, you're also abstracting the transport
off of that too. So if you

302
00:21:03.319 --> 00:21:08.000
did want to do a messaging infrastructure
or a saying systems and stuff, I

303
00:21:08.000 --> 00:21:11.160
don't think it would be that big
of a deal to support that. No,

304
00:21:11.519 --> 00:21:15.039
but okay, so there are I
wouldn't say competitors, but some folks

305
00:21:15.079 --> 00:21:22.359
have been done like alternate implementations in
this pattern and it becomes more formally realized.

306
00:21:22.599 --> 00:21:26.000
There's another version of this kind of
thing called a command dispatcher, and

307
00:21:26.000 --> 00:21:27.000
I will go too far into it, but it's like a whole thing of

308
00:21:27.000 --> 00:21:30.960
like, well, if you're in
the business of like doing this whole uh,

309
00:21:32.000 --> 00:21:33.559
you know, I don't care if
it's a sync or not. It

310
00:21:33.599 --> 00:21:36.599
could be durable or non durable messaging. You kind of go off on that

311
00:21:36.640 --> 00:21:41.480
land. But I, on the
heels of my other open source project,

312
00:21:41.480 --> 00:21:48.200
Automapper, never try was ice strive
to make this library have as few features

313
00:21:48.200 --> 00:21:52.759
as possible, because because I realized
like every new feature I added, I'd

314
00:21:52.759 --> 00:21:56.079
have to support for years. I
don't want to do that. I don't

315
00:21:56.079 --> 00:22:00.240
want to do that anymore. But
let's make this as dumb the future main

316
00:22:00.400 --> 00:22:04.799
factor ff of this, Yeah,
like I really swung the pendulum. I'll

317
00:22:04.920 --> 00:22:08.640
learn my lesson there. So this
was like I wouldn't do that. There's

318
00:22:08.640 --> 00:22:11.240
a couple of reasons. One is, if you look at it from a

319
00:22:12.039 --> 00:22:18.720
user experience perspective, there's a stark
contrast in the expected responses of an asynchronous

320
00:22:18.759 --> 00:22:22.200
message versus a synchronous one. If
I'm on a screen and I clicked the

321
00:22:22.200 --> 00:22:27.279
button and it comes back to response
saying yes, I you have submitted the

322
00:22:27.319 --> 00:22:30.240
form and I've received it. Now
you can see the results of that on

323
00:22:30.279 --> 00:22:34.119
your screen. If it's asynchronous and
it sends message to a Q, there's

324
00:22:34.119 --> 00:22:38.160
no guarantee of when that work can
be done, So the logical response you

325
00:22:38.160 --> 00:22:41.680
get back is like we got your
message. It'll be done sometime in the

326
00:22:41.680 --> 00:22:45.920
future. We don't know when,
but like thank you for your request versus

327
00:22:45.160 --> 00:22:48.839
don't call us, we'll call you
exactly. So like that the invoice example,

328
00:22:48.920 --> 00:22:52.680
I click approve invoice, I go
back to the list of invoices and

329
00:22:52.680 --> 00:22:56.880
it shows approved. If I send
them a submitted request to approve the invoice,

330
00:22:56.079 --> 00:23:00.759
it'll just say we have received your
request, but that invoice is not

331
00:23:00.839 --> 00:23:03.160
approved yet. It's approved some time
in the future, So don't I don't

332
00:23:03.160 --> 00:23:07.640
try to swap those two up because
it has a drastic impact to the user

333
00:23:07.680 --> 00:23:12.400
experience. Yeah you could, though, You're just like I want if you

334
00:23:12.680 --> 00:23:15.880
see folks using this pattern and they're
like, oh yeah, and I can

335
00:23:15.920 --> 00:23:18.480
swap in, you know, as
your service bus, I'm like, wait

336
00:23:18.519 --> 00:23:22.039
a second, that's going to have
a huge impact on the UX because now

337
00:23:22.039 --> 00:23:26.039
they can't they don't see the results
of their actions. So just be careful

338
00:23:26.079 --> 00:23:29.839
that you don't try to do that
sort of thing. Right, So what

339
00:23:29.880 --> 00:23:34.880
does the Mediator library have in it
that gives me more than I can,

340
00:23:36.279 --> 00:23:40.599
you know, do just creating my
own objects and interfaces to abstract these things

341
00:23:40.640 --> 00:23:45.319
away, saving that thirty minutes of
time, I guess. I mean even

342
00:23:45.359 --> 00:23:48.839
when I created the library myself,
I didn't want it again. I was

343
00:23:48.880 --> 00:23:52.759
coming off of like autumn apper annoyance, and I like, I don't people

344
00:23:52.799 --> 00:23:55.880
want all this stuff, and now
they're asking me off for these features and

345
00:23:55.920 --> 00:23:59.240
I don't want to, you know, say yes to everything, and so

346
00:23:59.279 --> 00:24:02.839
there's like I want to create this
library to begin with and I had copied

347
00:24:02.839 --> 00:24:07.000
and pasted that code to like the
fourth project and our consulting company and filing

348
00:24:07.039 --> 00:24:10.880
a boss is like Jimmy, just
like create a library for this, Like

349
00:24:10.920 --> 00:24:14.119
this is just create a new GET
package so we don't have to copy and

350
00:24:14.119 --> 00:24:17.680
paste this code and if we do, like have any changes or features whatever,

351
00:24:17.720 --> 00:24:21.319
then like everyone benefits at our our
company, not just like the next

352
00:24:21.359 --> 00:24:23.160
one that gets copied and pasted.
So that was kind of like if you

353
00:24:23.240 --> 00:24:29.759
copy and paste code from the third
clients, then maybe you should make up

354
00:24:29.759 --> 00:24:34.079
a new GET package for that.
So that's effectively what happened qualified, Yeah,

355
00:24:34.839 --> 00:24:37.519
so that they kind of like it
started out as very simple and like

356
00:24:37.640 --> 00:24:41.200
hundred lines of code that could be
done anywhere, and really most of it

357
00:24:41.240 --> 00:24:47.160
was just like you were using dependency
injection containers. So how do you make

358
00:24:47.160 --> 00:24:49.759
sure if I send a request thing
down that it gets dispatched to the right

359
00:24:49.839 --> 00:24:55.200
object while we're using dependency injection to
find the right thing to dispatch? Two,

360
00:24:55.599 --> 00:24:57.359
that's annoying code to write to like
hook those things up. So that

361
00:24:57.400 --> 00:25:00.400
got wrapped up into the package as
well. So just started out like that

362
00:25:00.519 --> 00:25:04.039
was just pure here's the code I've
been copying and pasting over and over again.

363
00:25:04.559 --> 00:25:07.200
But since then it kind of graduated
to like, Okay, how are

364
00:25:07.200 --> 00:25:11.640
people using this? How can we
gather those lessons learned and then apply those

365
00:25:11.720 --> 00:25:18.240
lessons into this library money. You've
got tens of thousands of people using this?

366
00:25:18.319 --> 00:25:21.759
Is this one hundred and forty million
downloads? Like I didn't know.

367
00:25:21.799 --> 00:25:26.200
I didn't know that many. Yeah, I'm just looking at the geth hub

368
00:25:26.319 --> 00:25:30.000
dude, it's like, yeah,
fifty four thousand, Yeah, like that.

369
00:25:30.119 --> 00:25:34.119
These are big numbers. Yeah,
I mean a lot of them.

370
00:25:34.119 --> 00:25:37.200
Are you know my Azure function bots, you know, pumping those numbers in

371
00:25:37.240 --> 00:25:40.680
the background. But I'm sure a
few of those are. Are you running

372
00:25:40.720 --> 00:25:42.319
a hundred million Azure bots? I
just wanted to know, because that'd be

373
00:25:42.359 --> 00:25:45.880
cool, be very cool. Oh
No, I don't think the MVP perks

374
00:25:45.920 --> 00:25:48.799
will cover that many. Yeah,
that's exactly might blew your budget a little

375
00:25:48.799 --> 00:25:52.640
bit, just a little Just looking
through the code, I mean, yeah,

376
00:25:52.680 --> 00:25:56.240
there's some really really cool stuff here. And I love the fact that

377
00:25:56.240 --> 00:26:03.039
you're using generics and even out types
out of tea. Oh, I don't

378
00:26:03.039 --> 00:26:06.759
remember the difference, Like there's it
is using the variances. Yeah, of

379
00:26:06.839 --> 00:26:10.240
cod and contra. But it looks
pretty I mean, yeah, there's some

380
00:26:10.759 --> 00:26:14.519
stuff in here, but it does
look very simple, and that that's what

381
00:26:14.640 --> 00:26:17.319
makes it good. I guess,
huh. That was the idea is because

382
00:26:17.599 --> 00:26:21.759
again we're trying to distill down like
what it's kind of the essence of our

383
00:26:21.759 --> 00:26:25.119
systems, and it's like you send
a request in and you get a response

384
00:26:25.160 --> 00:26:29.079
out like that's I mean, I'm
I'm dealing with web apps most of the

385
00:26:29.079 --> 00:26:30.920
time, right It's it's all HDP
request response. We're like, well,

386
00:26:32.000 --> 00:26:34.279
how can we take that kind of
one level below that, which is get

387
00:26:34.400 --> 00:26:38.359
rid of the status codes and you
know, streams and junk like that,

388
00:26:38.440 --> 00:26:41.559
and then it becomes a pure like
I send a data request in and I

389
00:26:41.559 --> 00:26:45.720
expect to get a data response out. And that made it also really easy

390
00:26:45.759 --> 00:26:51.640
for us to test our systems.
So we we we shifted our testing.

391
00:26:51.640 --> 00:26:55.799
We used to have these unit tests. They were all unit testing our controllers

392
00:26:55.799 --> 00:27:00.160
then like mocking those managers out or
manager dependencies, and it was really hard

393
00:27:00.160 --> 00:27:03.880
to understand what's going out of the
system. So from there, with this

394
00:27:03.960 --> 00:27:07.519
mediator pattern, we had all of
our tests go through this like request in,

395
00:27:07.759 --> 00:27:12.599
response out, which made it made
our tests now very kind of simple

396
00:27:12.599 --> 00:27:15.400
to understand. I pushed data in, what is the data get out?

397
00:27:15.400 --> 00:27:21.960
And what happens behind the scenes I
don't not my problem called the sort of

398
00:27:22.000 --> 00:27:23.599
procedure or what I don't know,
and both sides are testable that way,

399
00:27:23.680 --> 00:27:26.680
right, you could have a simple
invocation to chest to back end part of

400
00:27:26.720 --> 00:27:33.319
that too, exactly. So we
we we had this big shift from oh,

401
00:27:33.440 --> 00:27:37.480
you know, the old testing pyramid
with like the bottom is all your

402
00:27:37.559 --> 00:27:41.039
unit tests and then you have like
like an order of magnitude fewer integration tests.

403
00:27:41.240 --> 00:27:45.319
We woud up kind of flipping that
where we started out with all of

404
00:27:45.319 --> 00:27:48.039
our stuff being integration tests because I
was like, the way I absolutely knew

405
00:27:48.079 --> 00:27:52.680
the system work would be to send
the data request in and validate the data

406
00:27:52.720 --> 00:27:56.319
request out and if that look good, I don't like that's and then okay,

407
00:27:56.519 --> 00:28:00.559
if there's like you know, more
granul a lot I want to you

408
00:28:00.640 --> 00:28:03.160
to test, we can do that. But then, like we our confidence

409
00:28:03.240 --> 00:28:08.480
or system just doubled because we knew
like from this very you know, pure

410
00:28:08.519 --> 00:28:12.039
request response a level, it was
all working the way we expected to.

411
00:28:12.519 --> 00:28:15.200
It's almost assertion like it's like I
send you this, you give me that,

412
00:28:15.319 --> 00:28:17.920
you said, I see you this, you give me that. If

413
00:28:17.920 --> 00:28:21.599
you can do all of these things
green light exactly right, So it could

414
00:28:21.640 --> 00:28:27.119
just help simplify. Yeah, just
the the window into the actual logic inner

415
00:28:27.119 --> 00:28:33.960
system became very uniform and very focused
on each individual request from each other.

416
00:28:33.079 --> 00:28:37.920
All right, So I see that
you have notifications in here, which raised

417
00:28:37.920 --> 00:28:41.359
my eyebrows a little bit. So
notifications typically are asynchronous to me. And

418
00:28:41.359 --> 00:28:45.119
then I look in the code and
you have a wrapper class for a synchronous

419
00:28:45.519 --> 00:28:52.119
notification handler. What on earth is
that? So one of our like one

420
00:28:52.160 --> 00:28:56.000
of our guiding principles when we're trying
to build these kind of systems is like

421
00:28:56.000 --> 00:29:00.759
okay. For the request and responsition
system, it was always one one with

422
00:29:00.799 --> 00:29:03.079
the kind of user interface though one
request in, one response out, and

423
00:29:03.160 --> 00:29:08.720
those were designed specifically for each individual
kind of web end point in my system.

424
00:29:08.920 --> 00:29:14.720
I didn't share those requests, didn't
share the responses typically, but they're

425
00:29:14.720 --> 00:29:15.880
always like one to one. I
send one request in, it goes to

426
00:29:15.960 --> 00:29:18.720
a handler through the mediator, and
to get a response out that is tied

427
00:29:18.759 --> 00:29:22.119
to that. But there were still
sometimes that I did want like sort of

428
00:29:22.119 --> 00:29:27.319
one to end so if I have
a kind of request going out, it

429
00:29:27.400 --> 00:29:33.319
may be going to multiple different handlers
to be able to to do something with.

430
00:29:34.400 --> 00:29:37.759
And then one example, one kind
of good example we had is if

431
00:29:37.799 --> 00:29:41.880
I have a set of business logic
in my application, and if I'm doing

432
00:29:41.920 --> 00:29:45.599
like DDD, then that's that's my
quote domain layer. But if I want

433
00:29:45.599 --> 00:29:48.640
to affects, if I want to
affect change in some other part of my

434
00:29:48.680 --> 00:29:52.559
system or some other system altogether,
I don't want to necessary put that logic

435
00:29:52.640 --> 00:29:56.119
right there, because that's kind of
imperative go poke this other thing over there

436
00:29:56.240 --> 00:29:59.839
to do the work. Instead,
I would like to say, well,

437
00:30:00.039 --> 00:30:03.440
this thing happened. I want to
notify other folks that this thing has happened.

438
00:30:03.559 --> 00:30:07.359
And then however they like to deal
with it, it's completely up to

439
00:30:07.400 --> 00:30:12.519
them. So it's still a synchronous
sort of handling. That is, we

440
00:30:14.039 --> 00:30:19.480
I'm invoking those notification handlers synchronously.
It is a sync in the C sharp

441
00:30:19.519 --> 00:30:22.960
sense, but it is synchronous from
the I am awaiting the response of that

442
00:30:23.039 --> 00:30:26.799
handler. Okay, but then when
we're doing in those notification handlers, is

443
00:30:26.839 --> 00:30:30.799
then like, well what am I
affecting change another system? Like calling another

444
00:30:30.799 --> 00:30:36.880
web afi am I then actually taking
that notification and dropping it on a bus

445
00:30:37.400 --> 00:30:41.400
as a service bus, and then
notify actual external systems. I could do

446
00:30:41.440 --> 00:30:45.079
whatever I want to like, instead
of me having to directly invoke those systems

447
00:30:45.119 --> 00:30:49.359
from my business logic, I can
raise a notification and have that then translated

448
00:30:49.480 --> 00:30:52.599
or done whatever I want to the
outside world. So it's it's almost just

449
00:30:52.680 --> 00:30:57.759
like another word for request and response, but it indicates that we're calling another

450
00:30:57.799 --> 00:31:03.079
object that might be in an entirely
different domain or a different stack exactly.

451
00:31:03.480 --> 00:31:08.400
So it's it could be. I
kind of think it's like like the regular

452
00:31:08.480 --> 00:31:11.640
sending the request is a you know, one to one. This is a

453
00:31:11.720 --> 00:31:15.799
one to many. But I really
wouldn't call like pub sub because you're not

454
00:31:15.920 --> 00:31:18.400
subscribing to things. I mean literally, all that's doing it is like going

455
00:31:18.440 --> 00:31:25.200
to the container and lasking for all
the different notification handlers of this notification and

456
00:31:25.200 --> 00:31:27.720
then calling all of them like the
very stupid thing under the covers. But

457
00:31:27.759 --> 00:31:33.319
it gives you that decoupling of the
handling of what like what to do with

458
00:31:33.359 --> 00:31:37.240
that versus imperative like they'll flip this
other bit. Yeah, I'm just saying,

459
00:31:37.279 --> 00:31:40.000
well, my bit was flipped.
Who Ever wants to do something else

460
00:31:40.039 --> 00:31:44.440
with that is completely up to them. Very cool. Thanks for clarifying,

461
00:31:44.839 --> 00:31:51.640
And gentlemen are going interrupt for one
moment for this very important message, and

462
00:31:51.720 --> 00:31:53.839
we're back. It's dot at Rocks. I'm Richard Campbell. That's Carl Franklin.

463
00:31:55.000 --> 00:31:59.920
Hey, talking to our friend Jimmy
Bogert about Mediator. I just know

464
00:32:00.000 --> 00:32:04.799
it's like mediators in your gid hub
repository, Jay Bogart, but automapper is

465
00:32:04.920 --> 00:32:09.680
not. Yeah, I don't know. Why don't you know, Jimmy.

466
00:32:09.920 --> 00:32:15.319
Oh, I mean, like automapper
wasn't my gid hub and then we had

467
00:32:15.359 --> 00:32:20.559
then we're like, okay, well, there's multiple other kind of libraries related

468
00:32:20.599 --> 00:32:22.839
to it. It was easier to
put those under an umbrella of the realization

469
00:32:23.200 --> 00:32:28.480
versus my personal one. Where's mediator, Like there's not there's just that and

470
00:32:28.480 --> 00:32:31.119
I don't want anything else. It's
like I even recently classed down there was

471
00:32:31.160 --> 00:32:37.440
an extension for the Microsoft Dependency Injection
container, right, and I noticed that

472
00:32:37.480 --> 00:32:43.319
the downloads of that were almost identical
to the downloads of the main library.

473
00:32:43.400 --> 00:32:45.079
So I'm like, they're always taking
it. Why I have a superpository?

474
00:32:45.319 --> 00:32:47.559
So even classes, there were two
and now there's one. It's like the

475
00:32:47.599 --> 00:32:52.759
Highlander sort of rule. Now there's
one. Yeah, where I see an

476
00:32:52.799 --> 00:32:58.519
automapper, you have stuffer any framework
stuff or oh data, and it becomes

477
00:32:58.559 --> 00:33:01.200
a nuisance. So rather than have
them all listed mixed in with everything else

478
00:33:01.240 --> 00:33:05.160
and getting issues because it can't find
stuff. Right, but you know,

479
00:33:05.240 --> 00:33:07.960
this is good. This is like
a lesson in how to evolve things that

480
00:33:08.039 --> 00:33:12.519
become too complex. That's just that's
my goal here. I'm like, I

481
00:33:12.559 --> 00:33:15.319
don't want any more headaches and open
source head eggs. Like then just kind

482
00:33:15.359 --> 00:33:19.839
of a forcing function that I can't
make it more complicated. It is a

483
00:33:19.960 --> 00:33:25.640
It is an interesting point that this
opinionated approach to software comes from experience that

484
00:33:25.759 --> 00:33:29.680
the more stuff you build, the
more you realize, you know, I

485
00:33:29.759 --> 00:33:32.319
kind of really want to make this
thing. Just do this thing, and

486
00:33:32.400 --> 00:33:36.759
if you need to do something else, you should use something else. I

487
00:33:36.920 --> 00:33:39.759
was another huge I mean that's from
the design of this liber mediator, the

488
00:33:39.799 --> 00:33:43.559
whole Like I copied and paste the
code several times, like automapper did come

489
00:33:43.559 --> 00:33:46.480
out of a project, but after
it was done. In that project,

490
00:33:46.599 --> 00:33:52.440
I added so many features that I
never used personally right, which is super

491
00:33:52.480 --> 00:33:54.079
fun. When someone comes with a
bug and I'm like, oh, actually,

492
00:33:54.079 --> 00:33:57.440
I have no idea how this is
supposed to be used. I just

493
00:33:57.559 --> 00:34:00.359
kind of like, you know,
chin scratch speculation, the one this might

494
00:34:00.400 --> 00:34:04.279
be cool for somebody, and then
the buck comes in and like, well,

495
00:34:04.359 --> 00:34:07.880
I don't know if this is correct
behavior not. So Mediator is like

496
00:34:07.960 --> 00:34:12.719
purely now born out of I don't
add features unless I have some immediate needs

497
00:34:12.840 --> 00:34:16.039
on clients or projects whatever, and
then you know, if there's something that

498
00:34:16.119 --> 00:34:19.760
I think it may need, then
like I really have to make sure that's

499
00:34:19.960 --> 00:34:22.719
I'm not well. I think the
main thing is is somebody going to use

500
00:34:22.800 --> 00:34:25.480
it well, depend on it in
a meaningful way and more, and actually

501
00:34:25.599 --> 00:34:30.480
think and exercise it enough that you
know that it works correctly. Right.

502
00:34:30.239 --> 00:34:35.400
I have to be super careful too, of changing the design of anything in

503
00:34:35.480 --> 00:34:39.559
there, like automapp or I really
didn't care too much about breaking the API

504
00:34:39.719 --> 00:34:45.280
from time to time because I just
devour devs. I'll figure it out.

505
00:34:45.360 --> 00:34:50.079
You're fine, yeah, exactly.
Mediator is like I live through the pain

506
00:34:50.119 --> 00:34:54.039
of me breaking my own API.
It's like you beat yourself up. It's

507
00:34:54.119 --> 00:34:58.199
like a really super super careful about
those sort of things, but I mean

508
00:34:58.199 --> 00:35:00.039
it just happen from time to time, Like, oh gosh. One of

509
00:35:00.039 --> 00:35:04.159
the bad ones recently was I had
a cancelation token support, which I should

510
00:35:04.159 --> 00:35:07.360
have had from the beginning, But
like adding an extra parameter to an interface

511
00:35:07.360 --> 00:35:13.039
where you have like a hundred implementations
and on a project, I need to

512
00:35:13.079 --> 00:35:16.480
get really good at reg x to
like make this simple myself. Yeah,

513
00:35:16.639 --> 00:35:21.599
no kidding, but well, this
is always that thing of realizing how I

514
00:35:21.639 --> 00:35:24.480
missed this feature should have been in
there in the beginning. When do we

515
00:35:24.559 --> 00:35:30.199
commit the pain now or later?
I mean, you were just talking about

516
00:35:30.239 --> 00:35:35.840
generics we had. I did a
change where I added generic constraints because I

517
00:35:35.880 --> 00:35:37.880
thought it was not because we needed
it, because I thought it would make

518
00:35:37.880 --> 00:35:43.679
the code more correct, but instead
just like pissed everybody off because it didn't

519
00:35:44.079 --> 00:35:49.320
add anything and it just broke stuff. Like it just silently broke stuff.

520
00:35:49.320 --> 00:35:52.519
If you if you add the constraints, it's like suddenly it just won't it'll

521
00:35:52.559 --> 00:35:55.400
compile. This is my mistake.
Like it's still compiled, but just didn't

522
00:35:55.440 --> 00:36:00.639
work, and nobody knew why.
It's like, well, whoops, don't

523
00:36:00.679 --> 00:36:04.119
do that again either. Yeah,
then, and that's just the the classic

524
00:36:04.199 --> 00:36:07.599
architectural problem, right if like do
I do I need this now? Well,

525
00:36:07.639 --> 00:36:09.719
I you know, I'm probably not
going to need it later exactly.

526
00:36:09.840 --> 00:36:13.400
Like it's really hard to anticipate.
At the same time, it's like and

527
00:36:13.400 --> 00:36:15.360
you always regret it. It was
like, oh, I do need this,

528
00:36:15.599 --> 00:36:16.840
and I didn't do it back then, and now it's going to be

529
00:36:16.840 --> 00:36:20.559
harder to implement. Yeah. One
of the fun things about this project though,

530
00:36:20.559 --> 00:36:24.320
has been it that just like seeing
how the like the crazy ways people

531
00:36:24.360 --> 00:36:28.599
try to use this thing, and
like half my issues are like just don't

532
00:36:28.960 --> 00:36:32.840
don't do that, Like you're you're
you're well passed the boundaries of what I

533
00:36:32.840 --> 00:36:37.280
would consider like appropriate useless library and
like if it's if it's painful, then

534
00:36:37.360 --> 00:36:44.360
like maybe don't do that, right, Like you're you're abusing it. I

535
00:36:44.639 --> 00:36:52.280
just don't hurts when I do this. Don't don't do it. I love

536
00:36:52.280 --> 00:36:54.960
it. It's it's so much fun. Do you actually work much on automat

537
00:36:55.079 --> 00:37:00.679
or these days? Uh, It's
like my open source work is almost like

538
00:37:00.760 --> 00:37:02.760
it's ninety five percent determine on what
my clients are needing at the time.

539
00:37:04.440 --> 00:37:07.199
I just don't I'm not a hobbyist
OSS developer. I mean I spend time

540
00:37:07.280 --> 00:37:13.599
like up doing updates and like issues. But I can only code for what's

541
00:37:13.599 --> 00:37:15.440
in front of me. And if
the people in front of me don't need

542
00:37:15.519 --> 00:37:19.440
something done, then like I won't. I just won't spend my time doing

543
00:37:19.519 --> 00:37:22.639
something speculatively because I had so much. Yeah, I mean, do you

544
00:37:22.639 --> 00:37:28.320
do need recreational coding these days?
Really? Are you just working? I

545
00:37:28.360 --> 00:37:35.440
mean, I this this coding examples
for like conference talk scout as recreational.

546
00:37:35.840 --> 00:37:37.239
Yeah, I guess that's as close
as you get in the end. You

547
00:37:37.239 --> 00:37:42.639
know, we don't make a living
from conference talks. They have some benefits,

548
00:37:43.639 --> 00:37:47.079
No, I mean I don't,
not not especially, It's just I've

549
00:37:47.079 --> 00:37:52.000
got you know, children now,
so like they Yeah, you're your hands

550
00:37:52.000 --> 00:37:53.840
are plenty full, friend, and
I get that. And it is interesting

551
00:37:53.880 --> 00:37:58.800
you see how we cycle in our
lives between these different things. Yeah,

552
00:37:59.119 --> 00:38:00.800
you know, part of selling this
house is I a whole lot of home

553
00:38:00.840 --> 00:38:04.920
assistant in this house and I am
been writing a manual for the new owner

554
00:38:05.519 --> 00:38:08.000
to live with home assistant and just
just got to take all that equipment with

555
00:38:08.039 --> 00:38:10.719
you, Like these are my switches
I would break the house, you know,

556
00:38:13.159 --> 00:38:16.079
and and they actually you know that
the realtors sold the house on the

557
00:38:16.079 --> 00:38:20.679
back of some of these automations,
you know, the whole just walking and

558
00:38:21.079 --> 00:38:23.440
walking in the room and say play
jazz and it play jazz like they like

559
00:38:23.679 --> 00:38:28.760
that stuff. How do you leave
it behind? By the way, And

560
00:38:28.760 --> 00:38:30.639
this has totally got nothing to do
with anything. But so I've now made

561
00:38:30.639 --> 00:38:36.599
the list of all of the different
accounts I have to migrate, and and

562
00:38:36.639 --> 00:38:44.480
it's a dozen. There's only one
one that has a formal transfer ownership concept.

563
00:38:45.360 --> 00:38:49.400
Well you can actually say, hey, I'm selling this equipment to someone

564
00:38:49.599 --> 00:38:53.880
configured as it is. It's so
NOS the audio guys. Yeah, so

565
00:38:53.960 --> 00:38:57.639
yeah, there's a bunch of so
nos integrated in the house, works really

566
00:38:57.639 --> 00:39:00.119
well, no reason to move it. Why would you break that? And

567
00:39:00.159 --> 00:39:04.360
they actually have an infrastructure a setup
where it's like give me the new account.

568
00:39:04.920 --> 00:39:08.440
There they agree. Stuff leaves your
account, but you keep the configure.

569
00:39:08.440 --> 00:39:10.079
You know, I got a lot
of stuff tuned up perfectly with the

570
00:39:10.079 --> 00:39:14.079
house. You don't want to lose
any of these configurations. None of the

571
00:39:14.159 --> 00:39:16.639
others have that. Some of them
are. Some of the others. You

572
00:39:16.679 --> 00:39:21.360
can create a new account to it
and then move stuff over to it,

573
00:39:21.960 --> 00:39:24.039
but not really on migration and I'll
just delete myself out of it. Some

574
00:39:24.119 --> 00:39:28.719
of them are like, nope,
start over. Yeah, that's just painful,

575
00:39:30.400 --> 00:39:34.679
not your problem. Sorry, total
digrections. Stuff that's on my mind

576
00:39:35.079 --> 00:39:37.840
right now. Yeah, that's okay. So we're not going to see in

577
00:39:37.920 --> 00:39:44.480
Copenhagen, I see, uh no, I got accepted to they sat Louis

578
00:39:44.519 --> 00:39:49.840
dead upcomp so show Yeah, I've
done that. Show might see the Cardinals.

579
00:39:49.840 --> 00:39:52.719
Who knows it's time? Yeah,
without a doubt. Do you do

580
00:39:52.760 --> 00:39:58.400
talk some media or I didn't even
check. They're always tied into the problems

581
00:39:58.400 --> 00:40:00.320
I was trying to solve because I've
done I I've been no talks on automapper

582
00:40:00.440 --> 00:40:05.360
or mediator. It's always in service
of like we came up with this tool

583
00:40:05.480 --> 00:40:07.800
to help solve this problem, and
the problem we were having was that when

584
00:40:07.840 --> 00:40:09.320
I talked about earlier like these controllers
are too big, we need to split

585
00:40:09.320 --> 00:40:15.079
things out. And so when I
talk about like architectural concepts that that helps

586
00:40:15.079 --> 00:40:16.280
solve, it's really like, oh, and if you want to make this

587
00:40:16.320 --> 00:40:21.159
easier in yourself, that you don't
have to like figure all your container junk

588
00:40:21.360 --> 00:40:23.239
Yeah, there's this thing here that
well just like kind of skip past that

589
00:40:23.280 --> 00:40:28.000
part makes that piece easier, which
I mean makes a lot of sense.

590
00:40:28.079 --> 00:40:31.639
Right, that's supposed to be the
way that open source projects emerge, right,

591
00:40:32.239 --> 00:40:36.239
and how they get maintained. And
I think it's wildly credible too to

592
00:40:36.280 --> 00:40:38.079
say, hey, I don't talk
about my project. To talk about my

593
00:40:38.119 --> 00:40:40.960
project, I talked about a problem
and how I solved it with something that

594
00:40:42.000 --> 00:40:44.800
became a project. Right. The
other thing we noticed as well others,

595
00:40:44.800 --> 00:40:50.119
another just kind of funny aside is
my projects seemed to unearth more bugs and

596
00:40:50.159 --> 00:40:54.800
Microsoft libraries than anyone else I know. So like Mediator has exposed a lot

597
00:40:54.840 --> 00:41:00.280
of bugs and the MICROSOFTDI containers because
if people just doing stuff that I wasn't

598
00:41:00.320 --> 00:41:05.280
quite expecting, or things that like
other containers support out of the box,

599
00:41:05.320 --> 00:41:07.800
but like Microsoft didn't need it,
so they didn't build it. The same

600
00:41:07.840 --> 00:41:14.800
thing happened with Automapper automapp prizes like
link supports, and we have uncovered more

601
00:41:14.880 --> 00:41:17.840
bugs and enerny frameworks link Provider than
anyone else I know, because like we're

602
00:41:17.840 --> 00:41:22.440
just building these crazy link queries behind
the scenes and shoving God over to the

603
00:41:22.519 --> 00:41:23.960
you know, to make sequel and
they're like, oh, what is this

604
00:41:24.000 --> 00:41:29.559
you just gave me? Like sorry, yeah, generated link query to become

605
00:41:29.599 --> 00:41:35.760
a generated sequel query doesn't always go. Well, is this whisper stuff?

606
00:41:35.840 --> 00:41:40.360
Right? I whispering? You're hear
you whispering easier? Is it the same?

607
00:41:40.440 --> 00:41:45.440
I don't think it's the same.
But when it works well and again,

608
00:41:45.480 --> 00:41:49.320
it's like, and you probably made
the product better in the process,

609
00:41:49.360 --> 00:41:53.239
because like, this expression should have
worked. Why didn't it work? I

610
00:41:53.280 --> 00:41:58.119
mean I had a I had a
poor request open on the Microsoft TI container

611
00:41:58.119 --> 00:42:00.599
that was finally merged after I think
four and a half years. Wow.

612
00:42:01.199 --> 00:42:06.280
And that's after going through like I
think the third repository because they went through

613
00:42:06.280 --> 00:42:09.360
their like several consolidation efforts, so
like this issue had to keep getting recreated,

614
00:42:09.519 --> 00:42:14.679
like and first over here and first
first one over there. But it

615
00:42:14.719 --> 00:42:17.119
was something to do with the variant
stuff. They had a bug in there

616
00:42:17.239 --> 00:42:22.880
how they were doing generic variants and
it broke scenarios for us, and it

617
00:42:22.920 --> 00:42:24.039
was a valid scenario to me.
So people are doing this thing with the

618
00:42:24.079 --> 00:42:31.599
notifications where they would have something like
a invoice approved notification, but then they

619
00:42:31.639 --> 00:42:37.719
would make that notification implement interfaces like
I auditable or I loggable, and so

620
00:42:37.760 --> 00:42:44.039
they would look for all the auditable
notifications to make sure those got audited.

621
00:42:44.719 --> 00:42:46.559
But something broke with that, like
it couldn't handle that like kind of level

622
00:42:46.599 --> 00:42:51.119
of indirection. So it stuff like
yeah, I don't know if it's a

623
00:42:51.199 --> 00:42:54.840
valid use of container, but it
should work and it doesn't. So and

624
00:42:54.280 --> 00:43:00.440
they try to ditch you more than
once by moving their repository off this way

625
00:43:00.679 --> 00:43:04.719
for a repository shell game area.
If we move the project, maybe he'll

626
00:43:04.760 --> 00:43:07.559
leave us alone. None of the
DII container authors like have many good feelings

627
00:43:07.559 --> 00:43:13.079
for me because they keep getting issues
open and their repositories to support something that

628
00:43:13.199 --> 00:43:15.519
people are doing with my stuff.
And like, right, I noticed that

629
00:43:15.679 --> 00:43:20.119
you have a face for I stream
request, so you're, oh, that's

630
00:43:20.119 --> 00:43:23.000
a new one. Yeah, you're
embracing streaming. So so I said it

631
00:43:23.039 --> 00:43:27.239
was simple, but you have these
like every time you think I need to

632
00:43:27.239 --> 00:43:30.360
write something to support oh what about
this, I look in there it is

633
00:43:30.639 --> 00:43:35.480
okay. That was still one though
I actually had a real world project scenario

634
00:43:35.559 --> 00:43:37.400
on that one. Then I wouldn't
put it in if I didn't actually need

635
00:43:37.400 --> 00:43:40.360
it, because it was like you
know, with a regular request response.

636
00:43:40.800 --> 00:43:45.079
When you get the response, the
server is done, right, it's done

637
00:43:45.119 --> 00:43:50.559
doing the work, and you get
this data object that's that's finished. Well

638
00:43:50.599 --> 00:43:53.360
you can, yeah, you have
to yield it at some point. But

639
00:43:53.400 --> 00:43:58.719
the stream stuff was like, well, you're not really You're getting an eye

640
00:43:58.760 --> 00:44:01.960
Oh god, I and stream innumerables
innumerable, I forget the name of the

641
00:44:01.960 --> 00:44:06.199
interface. I A sinking numerable.
That's the one, thank you so much.

642
00:44:07.039 --> 00:44:08.719
So yeah, it's like it's not
done yet, and even like innumerables

643
00:44:08.719 --> 00:44:14.199
aren't quite done yet, like I'd
still connected to the server potentially. But

644
00:44:14.239 --> 00:44:19.760
our use case was we were doing
on demand real time et l from a

645
00:44:19.880 --> 00:44:23.079
huge on prem database to like our
new micro service database in the cloud,

646
00:44:23.360 --> 00:44:27.559
and it was too big and complex
to try to etail the whole database is

647
00:44:27.639 --> 00:44:30.679
once. So we said, okay, the first time we user hits this,

648
00:44:30.119 --> 00:44:37.199
we're going to stream the data from
just their their data into our system

649
00:44:37.480 --> 00:44:39.599
so we don't have to do everyone
all at once, which should just be

650
00:44:39.639 --> 00:44:45.559
too complicated. So we hooked that
up to another library with mind. We

651
00:44:45.559 --> 00:44:47.000
don't have to talk about it,
but it's one called bulk Rider, which

652
00:44:47.039 --> 00:44:52.320
is basically linked to Sequel book copy. That's a nice little tool. It

653
00:44:52.400 --> 00:44:58.480
will innumerable a book copy operation.
So I'm only loading in like n number

654
00:44:58.559 --> 00:45:01.880
of records at a time using this
equal bolt copy library the Microsoft has cool

655
00:45:02.639 --> 00:45:07.199
so limit. I could stream you
know, thousands or tens of thousands of

656
00:45:07.199 --> 00:45:13.159
records through link in etl and like
you know mill seconds through this process as

657
00:45:13.199 --> 00:45:15.079
well as like transforming as I go. But at the end I needed to

658
00:45:15.119 --> 00:45:21.760
stream it out through an API to
our server. So we thought, well

659
00:45:21.800 --> 00:45:25.320
we Microsoft now has gRPC support,
which also has async or innumerable supports,

660
00:45:25.559 --> 00:45:30.639
so we're able to stream all of
that through this mediator pattern all the way

661
00:45:30.679 --> 00:45:35.880
out to the consuming clients to be
able to stuff it into the database instead

662
00:45:35.880 --> 00:45:37.679
of having to you know, load
tens of thousands of records at a time.

663
00:45:37.760 --> 00:45:44.440
It's only you know async in numerables
the whole like async numerable turtles all

664
00:45:44.440 --> 00:45:46.159
the way down. It's that's really
where that came from, was like you

665
00:45:46.199 --> 00:45:52.119
know, all these Microsoft stacks,
asp net core and their g RPC stuff

666
00:45:52.119 --> 00:45:55.760
now supports async and numerables. We're
not keeping not loading up all the results

667
00:45:55.800 --> 00:46:00.679
in memory. It's streaming back out
to the clients and so this was just

668
00:46:00.079 --> 00:46:04.840
to support those kinds of scenarios.
And also in that list of things that

669
00:46:04.880 --> 00:46:07.760
you could support that you have API
contracts, in gRPC contracts, but you

670
00:46:07.800 --> 00:46:13.920
also have Blazer with no sort of
any any you know, explanation as to

671
00:46:14.000 --> 00:46:22.360
how or why you would support Blazer
because that's all UI. Yeah, it

672
00:46:22.400 --> 00:46:25.679
is. So in the cases where
you do have this kind of like I

673
00:46:25.679 --> 00:46:30.840
don't want to stick everything in the
Blazer page. I want to like shovel

674
00:46:30.880 --> 00:46:34.239
it off to like something else,
then it kind of goes into there.

675
00:46:34.440 --> 00:46:37.119
But it is just cross this boundary
because I've had folks like another example is

676
00:46:38.559 --> 00:46:45.639
like Razor pages or Azure functions were
it's already kind of contained in a class,

677
00:46:45.880 --> 00:46:49.519
So like why what what advantage does
it give you? So for me,

678
00:46:49.599 --> 00:46:52.360
like I don't use this pattern and
Azure functions because I'm like I'm already

679
00:46:52.559 --> 00:46:55.559
I'm already at the scope of a
function. Like having another level of directionn't

680
00:46:55.599 --> 00:46:59.320
really do a whole lot for me. All right, So you meant to

681
00:46:59.360 --> 00:47:01.599
say Blazer server there please are server? Yes, thank you? Yes?

682
00:47:01.920 --> 00:47:05.239
All right? So yeah, you're
on the server side. Yes, you

683
00:47:05.320 --> 00:47:07.960
have access to the database and you
don't have an API layer, but you

684
00:47:08.000 --> 00:47:12.599
still have some kind of manager in
the back end that's going to do stuff.

685
00:47:13.039 --> 00:47:15.800
This is a really good solution for
that. Yeah, yeah, cool.

686
00:47:15.079 --> 00:47:17.599
But when I into these, when
they get to these sort of functional

687
00:47:17.599 --> 00:47:22.639
frameworks, I tend not to use
this because I'm like, I'm I'm already

688
00:47:22.679 --> 00:47:24.599
there, one class one method,
good to go. Yeah, you don't

689
00:47:24.599 --> 00:47:30.559
need to add complexity if none is
required. Yeah, well and excited.

690
00:47:30.920 --> 00:47:32.880
Part of this all comes back to
conflicts. You're not having conflicts? Yeah,

691
00:47:34.199 --> 00:47:37.760
no, yah bother And the only
time I've really run into situations like

692
00:47:37.800 --> 00:47:40.800
that is if the function they give
me is still way too tied to whatever

693
00:47:40.840 --> 00:47:45.159
framework they're in. Yeah, then
like, okay, then I'm just gonna

694
00:47:45.199 --> 00:47:47.480
dit that one extra step of pure
data in per data out versus it's all

695
00:47:47.679 --> 00:47:51.760
other cruft that's going around there.
But really you should be pushing that problem

696
00:47:51.760 --> 00:47:52.920
back to them, going, guys, you need to invite a little here.

697
00:47:53.039 --> 00:47:59.519
Yeah, and then they yell at
you that it doesn't work, and

698
00:47:59.559 --> 00:48:02.800
they're and their cat care business elsewhere, and you're like, it's free.

699
00:48:04.119 --> 00:48:07.400
Exactly, give you money, pack, I'll give you all the money you

700
00:48:07.480 --> 00:48:10.119
pay. So what's next in your
world? Man, what's in your inbox?

701
00:48:10.880 --> 00:48:14.719
Oh? Man, I'm like the
past year or so, I've been

702
00:48:14.760 --> 00:48:23.159
like Elbow deep and and modernization of
ESPNT NBC to core Orp Corp. Done

703
00:48:23.199 --> 00:48:29.039
at six, so a lot of
like cloud migration, and let's also get

704
00:48:29.039 --> 00:48:32.760
it off of asp net four eight
and get it onto a net seven eight

705
00:48:32.840 --> 00:48:37.440
whatever you know? And why six
not seven? Because I started the project

706
00:48:37.440 --> 00:48:42.400
a year ago before a relationship just
that was it. I gotta enough to

707
00:48:42.400 --> 00:48:45.079
do. I don't need to switch
frameworks now. So I get to I

708
00:48:45.079 --> 00:48:46.679
get to see like these projects are
using my libraries. So I'm like,

709
00:48:46.719 --> 00:48:50.360
oh, now I have to go
through these migration processes because I have to

710
00:48:50.440 --> 00:48:52.880
upgrade the code from you know,
whatever I thought was a good idea.

711
00:48:52.960 --> 00:48:55.320
You get to take advantage of the
new features of C sharp too. I

712
00:48:55.360 --> 00:48:58.760
mean one of the things I'm when
I'm talking to folks who are coming out

713
00:48:58.760 --> 00:49:01.119
of four eight now and looking at
seven project, like your four versions of

714
00:49:01.159 --> 00:49:06.400
C sharp behind, Like there's some
good stuff you get by getting away from

715
00:49:06.400 --> 00:49:08.679
four eight. Yeah. Step one, take everything out of startup, put

716
00:49:08.679 --> 00:49:15.480
it in program and make and make
what do they call those you know,

717
00:49:15.519 --> 00:49:21.639
the controllers that are right there yeah, yeah, exactly without move all your

718
00:49:21.679 --> 00:49:27.320
controllers into these anonymous yet school boys
sex just copy and paste everybody. Yeah,

719
00:49:27.679 --> 00:49:30.079
probably got an Owen start up change
six point zero, seven point zero,

720
00:49:30.079 --> 00:49:37.880
and you're done. It's fine,
We're fine. You know. It's

721
00:49:37.920 --> 00:49:40.239
one recurring theme on the run as
side. We were talking about, Hey,

722
00:49:40.320 --> 00:49:45.480
you know what's good, wait another
version, because the migration tools get

723
00:49:45.559 --> 00:49:50.239
better, the validators get better,
like everything will get easier. If you

724
00:49:50.280 --> 00:49:55.199
don't see an immediate need for this
feature right now, there's really there's strong

725
00:49:55.280 --> 00:49:59.039
incentive to wait a little longer too
you really need it, because it will

726
00:49:59.079 --> 00:50:05.280
only get easier over time. And
so this codebase was started with my previous

727
00:50:06.559 --> 00:50:12.000
company back in twenty ten or so. So it's like all the mistakes of

728
00:50:12.079 --> 00:50:16.679
Jimmy past that Oh yeah, you
you hate your past self, Like what

729
00:50:16.880 --> 00:50:21.079
was that idiot think? Yeah?
Yeah, So that's like it's all like

730
00:50:21.280 --> 00:50:23.000
you know, in tier sort of
stuff, which isn't bad, but like

731
00:50:23.039 --> 00:50:25.280
I can see like, oh gosh, they still got the managers and the

732
00:50:25.360 --> 00:50:29.480
repositories and all this stuff, and
so it's it's hard to test. It's

733
00:50:29.480 --> 00:50:34.920
all coupled and yeah, all the
things that I realized we had fixed like

734
00:50:35.239 --> 00:50:37.199
and subsequent to that project. But
it's kind of a snapshot in time,

735
00:50:37.719 --> 00:50:40.760
right what we thought was, Yeah, I mean it's good to be kind

736
00:50:40.800 --> 00:50:44.360
to yourself. It's like that's what
we thought at the time. We have

737
00:50:44.519 --> 00:50:46.760
learned since then and now I have
to clean that up. Hey, before

738
00:50:46.800 --> 00:50:53.039
you go call back to the to
the comment, do you get many contributors

739
00:50:53.199 --> 00:50:58.400
in the sense of like financial things
or anything for automapp or mediator, Like

740
00:50:58.440 --> 00:51:01.000
does that happen? Oh? So, I mean I do have my geth

741
00:51:01.079 --> 00:51:08.440
hub sponsor link on those projects,
but the levels are basically tied to different

742
00:51:09.320 --> 00:51:14.480
qualities of alcohol you could buy me, so like one hundred dollars a pretty

743
00:51:14.519 --> 00:51:19.320
decent bottle of whiskey and that you
know, you know down like craft beers

744
00:51:19.440 --> 00:51:23.599
levels or just like pb PBR at
the bottom PBR level. So, I

745
00:51:23.639 --> 00:51:30.400
mean I have received one significant contribution. That is, uh, my project

746
00:51:30.679 --> 00:51:36.440
or automapp or was recipient of the
ADBs dot nets open source thing last year.

747
00:51:37.440 --> 00:51:40.840
Thank you. I don't really know
what the state of they where they

748
00:51:40.880 --> 00:51:45.760
are now because they had a big
contraction and their team so like, oh,

749
00:51:45.239 --> 00:51:49.719
they did a few donations and then
I think I don't know if they

750
00:51:49.760 --> 00:51:51.880
just saw like dot and that's not
a big deal for them or whatever,

751
00:51:52.440 --> 00:51:54.599
but just the one. But I'm
I don't expect that or seek it out

752
00:51:54.639 --> 00:51:59.400
either, because no, no,
I mean I always get the sense with

753
00:51:59.440 --> 00:52:00.679
you, Gym ever talk to you, it's like you're just busy doing the

754
00:52:00.760 --> 00:52:05.400
work for your customers. Yeah,
and this other stuff comes out the side

755
00:52:05.440 --> 00:52:07.280
of that, and that's nice,
but it's not your focus. Yeah.

756
00:52:07.360 --> 00:52:12.239
I just coming from a product background
as well, I knew like I would

757
00:52:12.280 --> 00:52:15.000
have to. I have to design
for the people that are actually using it

758
00:52:15.079 --> 00:52:19.199
that I could talk to and get
feedback from. If I just design something

759
00:52:19.800 --> 00:52:22.559
socially open source libraries like you put
it out there, but how do you

760
00:52:22.639 --> 00:52:27.039
how do you get that feedback from
people using it? And so I can't,

761
00:52:27.320 --> 00:52:29.920
you know, I can't sign an
NDA with everyone that comes up and

762
00:52:29.960 --> 00:52:31.480
says I have this problem. Okay, let's really dig in to see what's

763
00:52:31.519 --> 00:52:36.079
going on there. It really I
don't know. I don't want to do

764
00:52:36.159 --> 00:52:38.480
the support thing either, So I
just design for what's in front of me,

765
00:52:38.639 --> 00:52:42.400
the people that are paying me to
do work for them, and then

766
00:52:42.440 --> 00:52:45.960
I will then I know that whatever
I'm building will work for them because that's

767
00:52:45.960 --> 00:52:47.800
what they're paying me to do.
And if I just put out there and

768
00:52:47.880 --> 00:52:51.880
other people can use it and they
get value from it, that's just kind

769
00:52:51.920 --> 00:52:53.840
of icing in the cake. But
the primary focus for me is the people

770
00:52:53.880 --> 00:52:58.199
that actually pay to have this work, that are paying you. I mean

771
00:52:58.239 --> 00:53:00.760
that being said, you have had
a few tributors to Mediator over the years.

772
00:53:00.840 --> 00:53:05.719
I don't know that they're substantial.
Oh yeah, code wise, of

773
00:53:05.800 --> 00:53:07.400
course, no. No, yeah, for the code. Code is a

774
00:53:07.400 --> 00:53:12.679
different thing because it's time and that's
more more, more difficult. And usually

775
00:53:12.679 --> 00:53:16.000
I mentioned they're solving their problem too
by giving you a pull request. Yeah,

776
00:53:16.239 --> 00:53:20.920
I just I mean it still it
takes time for me to understand.

777
00:53:21.039 --> 00:53:23.039
So what problem they're trying to solve, and is this the problem that should

778
00:53:23.039 --> 00:53:27.480
be solved my library or is an
actual issue whatever? Because there's half the

779
00:53:27.519 --> 00:53:29.800
time the issues are raised. I'm
like, it's not me, it's the

780
00:53:29.880 --> 00:53:32.519
container. Go figure it out over
there. There's nothing I did. I'm

781
00:53:32.559 --> 00:53:36.360
not going to fix your broken container
for you with peace software. That's not

782
00:53:36.440 --> 00:53:38.440
how that works. Yeah, it's
like it's just go and then make them

783
00:53:38.480 --> 00:53:45.960
mad over there. That's fine,
share the anger, Yeah, well,

784
00:53:45.079 --> 00:53:49.880
Jimmy, thanks for sharing this with
us. Mediator. Looks very cool and

785
00:53:50.679 --> 00:53:53.800
I can think of at least two
customers that are going to take a look

786
00:53:53.840 --> 00:53:58.159
at it right now, So thank
you, all right, thanks for having

787
00:53:58.199 --> 00:54:00.679
me. I always happen to be
on all right, We'll see you next

788
00:54:00.719 --> 00:54:25.119
time on dot net rocks. Dot
net Rocks is brought to you by Franklin's

789
00:54:25.159 --> 00:54:30.039
Net and produced by Pop Studios,
a full service audio, video and post

790
00:54:30.119 --> 00:54:35.840
production facility located physically in New London, Connecticut, and of course in the

791
00:54:35.920 --> 00:54:42.519
cloud online at pwop dot com.
Visit our website at dt nt R o

792
00:54:42.639 --> 00:54:46.880
c ks dot com for RSS feeds, downloads, mobile apps, comments,

793
00:54:47.239 --> 00:54:52.440
and access to the full archives going
back to show number one, recorded in

794
00:54:52.519 --> 00:54:55.280
September two thousand and two. And
make sure you check out our sponsors.

795
00:54:55.480 --> 00:55:00.599
They keep us in business. Now, go write some code you next time.

796
00:55:00.480 --> 00:55:08.559
I got a treadmittal bands, Dolly
and see the summer time is hard

797
00:55:09.039 --> 00:55:09.840
than my tax

