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
