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.480 --> 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:34.320
person conferences around the world. NDC
Copenhagen is happening August twenty seventh through the

8
00:00:34.399 --> 00:00:40.600
thirty first. Go to NDC Copenhagen
dot com for more information. DC Porto

9
00:00:40.719 --> 00:00:45.359
is happening October sixteenth through the twentieth. Go to Dcporto dot com to register

10
00:00:45.759 --> 00:00:52.479
and check out the full lineup of
conferences at NDC Conferences dot com. Hey

11
00:00:52.520 --> 00:00:57.119
there, this is Jeff Fritz,
the purple Blazer guy from Microsoft, letting

12
00:00:57.159 --> 00:01:00.200
you in on a little secret about
my friend Carl Frank. You know,

13
00:01:00.479 --> 00:01:04.879
the guy who started dot net Rocks, the first podcast about dot net in

14
00:01:04.959 --> 00:01:10.599
two thousand and two, The guy
who's been teaching Blazer on YouTube since twenty

15
00:01:10.680 --> 00:01:15.959
twenty. Yeah, that Carl Franklin. Well, Carl's joined up with the

16
00:01:15.000 --> 00:01:21.000
folks from CODE in a Castle to
teach a week long hands on Blazer class

17
00:01:21.040 --> 00:01:26.200
at Are you Ready to Get This? At a castle slash villa in Tuscany.

18
00:01:26.239 --> 00:01:32.519
It's sort of a luxury vacation with
Blazer learning built in. Carl's calling

19
00:01:32.519 --> 00:01:38.879
it the Blazer master Class. You'll
learn Blazer from the ground up, finishing

20
00:01:38.920 --> 00:01:44.400
the week with the ability to build
and deploy Blazer applications. Since the training

21
00:01:44.439 --> 00:01:48.359
happens for only four hours in the
morning over six days, you can bring

22
00:01:48.400 --> 00:01:53.159
your significant other your partner with you
and you should right This part of Italy

23
00:01:53.280 --> 00:01:59.359
is absolutely beautiful. There's so much
to see and do and and Larry and

24
00:01:59.400 --> 00:02:05.040
Marco from Code into Castle are organizing
daily activities both at the castle and in

25
00:02:05.079 --> 00:02:08.199
the area. The castle is in
the Marema, a less touristed region of

26
00:02:08.280 --> 00:02:15.120
Tuscany, offering both classic Tuscan hill
country as well as easy access to the

27
00:02:15.120 --> 00:02:21.439
Etruscan Riviera, with sublime local food, wine and olive oil around every corner.

28
00:02:21.759 --> 00:02:24.639
Breakfast is included every day. There
will be two communal dinners at the

29
00:02:24.639 --> 00:02:30.400
castle, book ending the experience,
and most other meals and all activities are

30
00:02:30.400 --> 00:02:35.479
included. And did I mention you'll
learn Blazer in person from Carl Franklin.

31
00:02:36.199 --> 00:02:39.319
Listen, space is limited, and
for very good reason. This is quality

32
00:02:39.400 --> 00:02:46.039
training in a beautiful setting. Go
to code in Acastle dot com slash Blazer

33
00:02:46.120 --> 00:02:53.000
twenty twenty three that's bla z R
two zero two three to take advantage of

34
00:02:53.039 --> 00:02:59.840
this amazing opportunity to join Carl in
Tuscany for an unforgettable week of led dulce

35
00:03:00.199 --> 00:03:17.639
vita while advancing your programming skills in
this important new technology. Hey, it's

36
00:03:17.680 --> 00:03:22.719
dot net Rocks. I'm Carl Franklin, and I'm Richard Campbell, and Jeremy

37
00:03:22.759 --> 00:03:24.000
Miller is here with us. We'll
talk to him in a few seconds.

38
00:03:24.039 --> 00:03:28.560
But first, Hey, buddy,
how's it going. I'm slightly wounded.

39
00:03:29.199 --> 00:03:32.080
No really, what happened? You
know, we're we're getting close to moving,

40
00:03:32.159 --> 00:03:36.000
and so the neighbors for his little
party last night, and I may

41
00:03:36.039 --> 00:03:40.159
have pulled out a twenty one year
old bottle of whiskey and somehow the whole

42
00:03:40.199 --> 00:03:46.120
thing disappeared. Oh my god.
So uh, you know, neighbors.

43
00:03:46.240 --> 00:03:50.479
The toughest part of leaving this house
is the neighborhood. I got that because

44
00:03:50.520 --> 00:03:54.719
you always talked fondly of your neighborhood
parties, and that's just nice. I

45
00:03:54.800 --> 00:03:59.439
have. I have neighbors on one
side that I like, the rest of

46
00:03:59.479 --> 00:04:05.280
them across the street from me doesn't
speak English, and the one Candywompus across

47
00:04:05.319 --> 00:04:12.639
the street, I'd rather not talk
to him. So just one of those

48
00:04:12.680 --> 00:04:15.840
things, right, It's just one
of those things. Well, anyway,

49
00:04:15.040 --> 00:04:28.839
let's roll the crazy music for better
No framework awesome. Well, what I

50
00:04:28.920 --> 00:04:32.680
have is episode ninety seven of Blazer
Train, which is coming out today as

51
00:04:32.720 --> 00:04:36.839
we speak. You're staring one hundred
in the face. Brother, almost yeah,

52
00:04:36.879 --> 00:04:42.959
but this one's important because there's no
code demos. It's a conceptual overview

53
00:04:43.000 --> 00:04:47.480
of Blazer and dot Net eight and
I won't basically the mantra is it changes

54
00:04:47.879 --> 00:04:51.360
everything, and I won't tell you
what it is yet. You got to

55
00:04:51.399 --> 00:04:56.519
watch it. But I had this
revelation while, you know, the first

56
00:04:56.560 --> 00:05:00.800
time I was talking about they were
talking about Blazer United and stuff. They're

57
00:05:00.839 --> 00:05:04.199
talking a lot of features that didn't
have anything to do with interactivity, and

58
00:05:04.240 --> 00:05:11.199
then I realized, that's a good
thing. They've added stuff to Blazer that

59
00:05:12.360 --> 00:05:15.959
asp net Core NBC has been doing, but now you can do it with

60
00:05:16.000 --> 00:05:23.240
Blazer components and it doesn't require any
you know, any server side signal er

61
00:05:23.600 --> 00:05:27.839
or circuits or anything like that.
They're just features. So I think,

62
00:05:27.959 --> 00:05:31.800
you know, with the new interactivity
stuff being dynamic and you can choose it,

63
00:05:32.720 --> 00:05:40.439
plus these these features of existing stuff
that now now Blazer, the Blazer

64
00:05:40.480 --> 00:05:48.480
web app template in dot net eight
becomes your go to ASP net core project

65
00:05:48.639 --> 00:05:55.360
type template because because there's no reason
not to. Right anyway, I just

66
00:05:55.519 --> 00:05:59.319
blew my mind sort of a Blazer
grows up moment. Yeah, it really

67
00:05:59.439 --> 00:06:03.399
is. And you know that this
is where Microsoft is putting their effort into.

68
00:06:03.680 --> 00:06:06.560
You know, these Blazer components are
great. You don't have to do

69
00:06:06.600 --> 00:06:09.959
interactivity, you don't have to do
web assembly, you don't have to do

70
00:06:10.000 --> 00:06:13.480
Blazer server ken if you want to, but you don't have to. Right,

71
00:06:13.560 --> 00:06:15.079
it just changes everything. So anyway, check it out. No,

72
00:06:15.199 --> 00:06:19.839
it learned it, Levet. This
is episode eighteen sixty, So if you

73
00:06:19.879 --> 00:06:24.560
go to eighteen sixty dot poop dot
me, you can go right to the

74
00:06:24.639 --> 00:06:27.920
video or go to blazer train dot
com look for episode ninety seven. That's

75
00:06:27.920 --> 00:06:30.439
it awesome. Who's talking to us
today. Richard grab comment off of show

76
00:06:30.519 --> 00:06:33.839
eighteen twenty three, the one we
did with one Jeremy miller Hey talking a

77
00:06:33.879 --> 00:06:39.079
bit about Wolverine, dot net and
command and Message bus. I had a

78
00:06:39.079 --> 00:06:42.560
lot of comments on this show.
I mostly about Jeremy's rant at the end

79
00:06:42.600 --> 00:06:45.560
of the show, which was hilarious. It was great. Yeah, look,

80
00:06:45.600 --> 00:06:48.199
maybe a touch hyperbolic, so the
literalists had a little problem with it.

81
00:06:48.399 --> 00:06:53.279
Yeah, and rack Yak says,
this is a great episode, and

82
00:06:53.319 --> 00:06:56.519
I was amused by Jeremy's rant at
the end. I feel like he might

83
00:06:56.560 --> 00:06:59.800
have missed the mark a bit there. In my experience, the prime benefits

84
00:06:59.800 --> 00:07:03.199
of clean Onion style architecture do not
really pertain to the horizontal, so to

85
00:07:03.240 --> 00:07:05.439
speak. I've worked in several such
systems, and I can show you that

86
00:07:05.439 --> 00:07:10.680
the vertical thinking was still very much
the norm on all of them. Sure,

87
00:07:10.680 --> 00:07:14.480
by throwing a repository interface, which
is by the way, not prescribed

88
00:07:14.560 --> 00:07:16.879
and clean, in front of the
data access, you leave the door open

89
00:07:16.920 --> 00:07:20.720
to swapping underlying providers and data stores. But honestly, whoever does that?

90
00:07:21.600 --> 00:07:26.680
Rather, the prime benefit of clean
in my experience, comes from just abstracting

91
00:07:26.720 --> 00:07:30.759
away infrastructure and out of process details
like databases and messacues. Something that clean

92
00:07:30.839 --> 00:07:35.920
does prescribe. Doing so promotes isolation
of core domain logic, and that process

93
00:07:36.000 --> 00:07:41.079
is hugely facilitates automated testing of that
logic, which is where I've reaped the

94
00:07:41.120 --> 00:07:46.199
greatest benefits. Yeah, that's fine. I'm not going to disagree for a

95
00:07:46.240 --> 00:07:50.120
moment with you know, Jeremy's core
purpose, which was you can over engineer,

96
00:07:50.720 --> 00:07:56.480
you can turn architecture into dogma,
and that doesn't necessarily serve in delivering

97
00:07:56.519 --> 00:08:01.000
software. But you know, to
Rack gass point, there are textual styles

98
00:08:01.040 --> 00:08:03.759
that certainly support making software more testable, and yep, testable software is more

99
00:08:03.800 --> 00:08:07.480
reliable. Yeah, yeah, so, Rack yak, thank you so much

100
00:08:07.519 --> 00:08:09.560
for your comment, and a coffee. Music cod By is on its way

101
00:08:09.600 --> 00:08:11.680
to UNI if you'd like him a
cofee of music code By, write a

102
00:08:11.680 --> 00:08:13.759
comment on the website at dot net
rocks dot com or on the facebooks.

103
00:08:13.759 --> 00:08:16.879
We publish every show there, and
if you comment there and I reading the

104
00:08:16.879 --> 00:08:18.720
show, we'll send you a copy
of music go By and you can follow

105
00:08:18.839 --> 00:08:22.439
us on X if you want.
I can't believe I just said that.

106
00:08:22.600 --> 00:08:26.879
Why Why why? X? He's
everybody knows, you know, he's not

107
00:08:28.000 --> 00:08:31.439
like anybody's confused when you say Twitter, Right, let's take a great brand

108
00:08:31.639 --> 00:08:35.360
and change it. I just don't
get Apparently he's auctioned off all the last

109
00:08:35.399 --> 00:08:37.559
of the logo stuff. You can
buy the big sign off the front of

110
00:08:37.559 --> 00:08:41.399
the building and things. Anyway.
You can follow us there Twitter is what

111
00:08:41.440 --> 00:08:48.200
I'm talking about. Or on mastodon. I'm Carl Franklin at tech Hub dot

112
00:08:48.240 --> 00:08:50.759
social and I'm Rich Campbell at mastadon
do social. Send us a two let

113
00:08:50.799 --> 00:08:56.879
us know you're out there, and
let's bring on Jeremy Miller for like the

114
00:08:56.360 --> 00:09:00.639
I don't know ninth time he's been
on a long time. He gets around.

115
00:09:00.720 --> 00:09:03.679
Yeah. So Jeremy Miller started his
career as a real engineer and that's

116
00:09:03.720 --> 00:09:09.399
in quotes, but wandered into software
because that looked like more fun. Since

117
00:09:09.440 --> 00:09:13.039
then, Jeremy has worked in and
led software development teams in the computer manufacturing

118
00:09:13.080 --> 00:09:18.679
industry, finance, insurance, healthcare, and banking industries. Lately, Jeremy

119
00:09:18.720 --> 00:09:24.679
has been focused on leading software architecture
teams and helping mentor other software architects,

120
00:09:26.039 --> 00:09:30.840
having had roles both as an in
house software architect and as a software consultant,

121
00:09:31.240 --> 00:09:35.039
Jeremy has a great deal of insight
into the challenges that confront companies developing

122
00:09:35.399 --> 00:09:41.120
and maintaining enterprise systems over time.
Jeremy is well known for his open source

123
00:09:41.120 --> 00:09:46.759
software tools, starting with structure Map
and continuing today to Martin and Wolverine,

124
00:09:46.440 --> 00:09:50.759
also known as the Critter Stack,
which we'll talk about. Jeremy is also

125
00:09:50.799 --> 00:09:56.639
a frequent author and technical speaker at
software conferences and can be found at Jeremy

126
00:09:56.759 --> 00:10:01.600
dmiller dot com. Welcome back,
buddy, Hey guys, glad to be

127
00:10:01.639 --> 00:10:05.399
back. Just kind of point out
if you're really all the way up to

128
00:10:05.600 --> 00:10:09.440
episode eighteen sixty, you understand that
puts us right on the verge of the

129
00:10:09.480 --> 00:10:13.799
Civil War. Yeah, right on, one more episode and it's Civil war

130
00:10:13.879 --> 00:10:18.840
time. And sorry for the long
winded bio. I remembered you were going

131
00:10:18.919 --> 00:10:22.240
to have to read that out.
It's like when your kids want you to

132
00:10:22.240 --> 00:10:26.200
read a book that is just the
most awkward thing in the entire world to

133
00:10:26.240 --> 00:10:31.919
read. Right, let's read Robinson
Crusoe. Yeah. Okay, So I

134
00:10:31.919 --> 00:10:33.799
don't know if anyone else to remember
this as a kid, but there are

135
00:10:33.879 --> 00:10:39.000
the Lloyd Alexander series the I think
Pridane books. No, I don't remember

136
00:10:39.039 --> 00:10:43.159
those we read as kids, so
it's a fantasy series. It went all

137
00:10:43.240 --> 00:10:48.720
kinds of Newberry Awards for kids,
and I loved it as kids. The

138
00:10:48.759 --> 00:10:50.559
Black Cauldron. Disney made a movie
out of it. Okay, yeah,

139
00:10:50.600 --> 00:10:58.159
yeah, yeah, But it's all
based on Welsh Welsh myths and mythology,

140
00:10:58.720 --> 00:11:03.480
so all the names are will Welsh
Smith's and apologies to any Welsh speakers,

141
00:11:03.799 --> 00:11:09.759
they are a little hard to pronounce. Some weird consonants in there in places

142
00:11:09.759 --> 00:11:16.720
where they promise shouldn't be yea,
yeah, well if you have a comment

143
00:11:16.759 --> 00:11:22.960
on the comment, I do.
So he's right in the sense that that

144
00:11:22.559 --> 00:11:26.440
you can be okay with clean or
onion or all that kind of stuff if

145
00:11:26.440 --> 00:11:33.440
you focus on vertical slices first,
keeping the places. And I did an

146
00:11:33.600 --> 00:11:39.879
entire conference talk at in dc Oslo
this year the contrarian view of software architecture.

147
00:11:39.200 --> 00:11:45.960
Right. Where all these these prescriptive
layered architectures go wrong, It's because

148
00:11:46.000 --> 00:11:50.879
people follow them, maybe a little
bit naively, but they build these massively

149
00:11:50.039 --> 00:11:56.799
horizontal layers where you still have this
massive project where every single feature is spread

150
00:11:56.799 --> 00:12:01.039
out on these four or five layers. You can't follow the code at all.

151
00:12:01.399 --> 00:12:05.960
You can't upgrade anything because each individual
layer is just too big. It

152
00:12:05.080 --> 00:12:11.600
is impractical to reap any of the
theoretical supposed benefits of clean architecture and whatnot.

153
00:12:13.240 --> 00:12:16.440
Yeah, so I'm gonna stand by
that rant. I've even got a

154
00:12:16.440 --> 00:12:20.639
whole talk about it now on online. It's a good rant. Well what

155
00:12:20.759 --> 00:12:26.120
you've been working on. So,
at the tender age of forty nine,

156
00:12:26.639 --> 00:12:31.799
I have gone solo. So founded
a company called jasper FFX Software. It's

157
00:12:31.840 --> 00:12:37.480
based named after my little hometown back
home, map dot on a blacktop.

158
00:12:37.759 --> 00:12:41.840
But we should disambiguate jasper FFX,
the company with jasper ffx the product that

159
00:12:41.960 --> 00:12:46.960
is now Wolverine. Right. Well, so somewhere another there's like an old

160
00:12:46.000 --> 00:12:50.960
recommendation to don't name no damn your
product after your company. Yeah, and

161
00:12:52.440 --> 00:12:56.440
so jasper was going nowhere we renamed
it. Somebody said, having a conversation

162
00:12:56.480 --> 00:13:01.799
with my other contributors on core MC
team member for Martin of you know,

163
00:13:01.879 --> 00:13:05.039
hey, what if we call it
Wolverine. It's the same family as Martin.

164
00:13:05.360 --> 00:13:11.200
You know. Somebody started laughing and
calling the critter Stack our buddy killed

165
00:13:11.519 --> 00:13:16.320
from from jet brains just you know, in thirty seconds just popped up.

166
00:13:16.519 --> 00:13:22.120
Here's the possible graphics and emblem for
it. So critter stack was born.

167
00:13:22.360 --> 00:13:26.200
I love creatter stack. That's cool. Yeah, it's a lot more fun.

168
00:13:26.440 --> 00:13:31.360
You could be critters inc. You
know, yes, yes, yeah,

169
00:13:31.639 --> 00:13:35.840
all right, So it's called Jasper
Effects. So is it based on

170
00:13:35.039 --> 00:13:43.039
services around your products? I guess
and consultations? So you know, obviously

171
00:13:43.080 --> 00:13:48.399
this is very topical because of all
the conversations going on in lieu of the

172
00:13:48.720 --> 00:13:52.320
mock incident. We're gonna throw spaghetti
up against the wall, right, We're

173
00:13:52.360 --> 00:13:56.320
gonna start. We are already started
as a services model. We're helping a

174
00:13:56.320 --> 00:14:01.879
couple of clients with Wolverine specifically,
but we're hoping to grow into both the

175
00:14:01.960 --> 00:14:07.759
services and a full blown product company
service contracts, consulting of course, but

176
00:14:07.799 --> 00:14:13.440
we are going to build licensed to
add on models to Martin and Wolverine,

177
00:14:13.960 --> 00:14:18.720
specifically for bigger companies and need big
volumes of data. Right, sure,

178
00:14:18.200 --> 00:14:24.200
so you're sort of taking the identity
server model route. It sounds like,

179
00:14:24.759 --> 00:14:30.399
yes. So we're very conscious of
what do enda software is done. You

180
00:14:30.440 --> 00:14:33.600
know, we don't start from as
anywhere near as big user base as they

181
00:14:33.639 --> 00:14:39.360
did, so we're going to try
to stay with an MIT licensed open core

182
00:14:39.639 --> 00:14:45.200
but build commercial products on top.
Yeah. You know, we've we've kicked

183
00:14:45.200 --> 00:14:50.360
around the idea of going to the
Business Business Software License maybe at some point,

184
00:14:50.360 --> 00:14:54.039
but right now open core. Did
you Your listeners will know that's very

185
00:14:54.080 --> 00:14:58.879
controversial. How do you take an
open source project and take it sustainable with

186
00:15:00.000 --> 00:15:05.639
without managing to aggravate the hell out
of your users? Yeah? Yeah,

187
00:15:05.799 --> 00:15:09.639
that's been a topic of many of
our shows. Yeah, it's you know

188
00:15:09.679 --> 00:15:13.559
this. We have this story arc
of the evolution of open source going on

189
00:15:13.639 --> 00:15:16.360
in docmond Rocks, and certainly we've
had great conversation different folks, including the

190
00:15:16.399 --> 00:15:20.559
de Ende folks, about how they're
how they're trying to make a living as

191
00:15:20.600 --> 00:15:26.879
well as support their customers properly because
it's also impediments there. But the nature

192
00:15:26.919 --> 00:15:31.440
of their product as an identity product, very enterprise centric, was genuinely enterprises

193
00:15:31.600 --> 00:15:35.759
just plain old one to pay for
it. I almost been paying attention to

194
00:15:35.879 --> 00:15:41.679
Troy Hunt's battles with things like like
the have I been pooned API? He's

195
00:15:41.759 --> 00:15:46.000
charging like five bucks for it,
but the barrier to pay that five dollars

196
00:15:46.039 --> 00:15:50.039
for most organizations like it's got nothing
to do with the money, has to

197
00:15:50.080 --> 00:15:52.720
do with the workflow, like what
does it take to get a bill paid

198
00:15:52.840 --> 00:15:58.080
essentially inside of a company. It's
it's just fascinating to me that we struggle

199
00:15:58.120 --> 00:16:03.120
with this in software to this day. So you know, I'm still very

200
00:16:03.120 --> 00:16:07.159
early in the journey how to get
how to monetize things. I don't know.

201
00:16:07.639 --> 00:16:11.679
I am just paying right now.
We're paying attention to everyone else,

202
00:16:11.200 --> 00:16:17.799
you know, dinga going first,
definitely watching particular software. Just there's just

203
00:16:17.840 --> 00:16:22.200
a small handful of open source companies
in the dot net world, and we're

204
00:16:22.519 --> 00:16:26.159
hoping to be one of them.
But I don't I don't have those answers

205
00:16:26.200 --> 00:16:29.600
yet. Yeah, we haven't made
it. We haven't made it. I

206
00:16:29.639 --> 00:16:33.879
don't think we will make a show
about this situation with Mack. It's we're

207
00:16:33.879 --> 00:16:37.799
in the middle of it right now
while we're recording the show. Do you

208
00:16:37.919 --> 00:16:40.360
have a comment on it? Well, first of all, people need to

209
00:16:40.399 --> 00:16:45.159
know what happened, right, they
took a dependency on something that was sharing

210
00:16:45.480 --> 00:16:52.159
data, right, So I'll try
so folks, I and guys. Honestly,

211
00:16:52.200 --> 00:16:55.919
I probably wouldn't have reached out to
be on the show if i'd known

212
00:16:55.960 --> 00:16:59.799
that what's going to happen. So, you know, mock you is you

213
00:17:00.000 --> 00:17:06.039
actually used I was. I don't
use it personally. I prefer in substitute

214
00:17:06.160 --> 00:17:11.799
and other options. But it's massively
used, right framework for those of you

215
00:17:11.880 --> 00:17:15.680
don't, yeah, sorry, you
know, And it's there's a long history,

216
00:17:17.640 --> 00:17:19.920
so it's been around a long time. It is. The download numbers

217
00:17:19.960 --> 00:17:25.400
he quoted online and kind of shocked
me. Those were big. So it's

218
00:17:25.519 --> 00:17:29.359
very widely used, you know,
And as far as I know, it's

219
00:17:29.400 --> 00:17:33.200
just just Daniel. It's probably the
only guy that's really managing it. So

220
00:17:34.119 --> 00:17:40.839
he has worked up this other small
library that as a way to try to

221
00:17:40.880 --> 00:17:44.920
gather up support. It was going
to try to gather up if you were

222
00:17:45.039 --> 00:17:48.720
using the library. It was going
to try to look in assuming it get

223
00:17:48.759 --> 00:17:51.519
you were going to get repository.
It was going to try and find email

224
00:17:52.799 --> 00:17:56.720
emails from contributors from the get history
and it emailed it back, It sent

225
00:17:56.839 --> 00:18:02.440
that back to some kind of central
phoned home, right. You know.

226
00:18:02.680 --> 00:18:06.799
I think it was a well meant
attempt to just figure out who's using my

227
00:18:06.880 --> 00:18:10.920
tool, and I can build an
email list and I can send them out

228
00:18:10.960 --> 00:18:12.519
and hey, do you you're using
this, you're getting value. Kid,

229
00:18:12.599 --> 00:18:15.680
You want to do you want to
support it? You know the problem He

230
00:18:15.720 --> 00:18:19.400
did tell people about this ahead of
time, but you don't really get feedback

231
00:18:19.559 --> 00:18:26.039
on that kind of thing until people
get impacted. But when people started understanding,

232
00:18:26.519 --> 00:18:30.519
hey, this is sending information back, you know, there's privacy concerns.

233
00:18:30.759 --> 00:18:34.279
People start talking about the European privacy. I started paying attention to it

234
00:18:34.319 --> 00:18:41.799
when somebody said mocking library compromising pa, you know, potentially sensitive information that

235
00:18:41.799 --> 00:18:47.839
that's the first time I started wondering
what is going on here. So that's

236
00:18:47.880 --> 00:18:55.640
my understanding of what's happening, and
the the the reaction has been pretty harsh

237
00:18:55.759 --> 00:18:57.920
from the community game Yeah, I
mean at the moment again, I don't

238
00:18:57.960 --> 00:19:03.000
we don't do you know, daily
shows here read real time, so it's

239
00:19:03.079 --> 00:19:07.519
unfair to public. Were published this
a few weeks later, but you know

240
00:19:07.640 --> 00:19:12.880
today on Twitter you've got smart people
in software saying everybody makes a mistake like

241
00:19:14.359 --> 00:19:17.799
be kind, you know, which
I think is a good policy, Like

242
00:19:17.960 --> 00:19:22.359
in general, it would have been
worse if he shared it with you know,

243
00:19:22.480 --> 00:19:26.160
or sold that data, I think, but if if he's using it

244
00:19:26.200 --> 00:19:29.440
for his own personal email list,
to say hey, thank you for using

245
00:19:29.440 --> 00:19:33.920
my stuff or whatever. It's not
it's a little more benign than than sharing

246
00:19:33.200 --> 00:19:37.720
everything. Still not cool. No, tips, I think he's back.

247
00:19:37.839 --> 00:19:41.079
He's back that out. Let's give
it a bit of about that. He's

248
00:19:41.119 --> 00:19:45.559
going to take care of the privacy
concerns, So get on the right side

249
00:19:45.599 --> 00:19:51.359
of those kinds of issues. I'm
gonna say, I don't think you should

250
00:19:51.400 --> 00:19:53.400
have done it exactly the way he
did it. But on the other hand,

251
00:19:53.759 --> 00:20:02.759
he's apparently gained empty new GitHub sponsors, so maybe in this particular case

252
00:20:02.960 --> 00:20:06.319
there there's a happy ending for him. But it's bringing to light all the

253
00:20:06.359 --> 00:20:11.559
normal issues about how how is open
source is going to be maintainable and sustainable

254
00:20:11.640 --> 00:20:15.279
here when so many of us depend
on it in our jobs. Sure,

255
00:20:15.440 --> 00:20:18.839
yeah, you can't just act as
if you're a business and you've got a

256
00:20:18.920 --> 00:20:26.359
user agreement and yeah, so anyway, no, I mean he was he

257
00:20:26.480 --> 00:20:32.240
didn't experiment. Again, we can
debate the methodology, but I understand it.

258
00:20:32.240 --> 00:20:34.559
It's and it's funny to see that
what it did get generate with a

259
00:20:34.559 --> 00:20:38.119
whole bunch of new sponsors. So
anyway, I don't I won't. I

260
00:20:38.240 --> 00:20:41.359
want to show this as a strategy, right, It's just like, yeah,

261
00:20:41.759 --> 00:20:48.519
I hope it doesn't happen to you. I mann create controversy, controversy,

262
00:20:48.559 --> 00:20:52.839
get money. Yeah, I don't
know if I want that system that

263
00:20:52.920 --> 00:20:57.200
either, all right, man,
I know of mock. I don't know

264
00:20:57.279 --> 00:21:00.960
that I have it in any projects
at the moment, I understand the situation's

265
00:21:00.960 --> 00:21:06.880
got into it seems unfortunate, and
I don't know that will where it'll go

266
00:21:07.000 --> 00:21:11.359
from here, whether it's becomes a
talking point going forward in this larger story

267
00:21:11.400 --> 00:21:14.279
of how we make a living on
our open source projects. So, on

268
00:21:14.319 --> 00:21:18.960
another topic, what's new with Wolverine
A lot. So it's made it post

269
00:21:18.319 --> 00:21:22.119
just since we last talked. It's
made it post one. It's made it

270
00:21:22.160 --> 00:21:26.440
to the big one point zero.
You know. It's the usage numbers aren't

271
00:21:26.440 --> 00:21:29.720
off the chart, but it's enough
that I'm busy every day answering questions on

272
00:21:29.880 --> 00:21:34.519
discord. Start to work with some
initial initial clients that are implementing it right

273
00:21:34.519 --> 00:21:38.640
now. About to push a lot
of improvements for as your Service bus integration.

274
00:21:40.640 --> 00:21:45.519
We've pushed Sequel server, a new
Sequel server back transport for people that

275
00:21:45.599 --> 00:21:49.119
want to do messaging. They already
have a sequel server database. They don't

276
00:21:49.119 --> 00:21:57.720
want to invest in other infrastructure trying
to drive It also has a model to

277
00:21:57.759 --> 00:22:03.960
build HP point points that would be
an alternative to a minimal API or MVC

278
00:22:04.160 --> 00:22:11.519
for web services that was specifically meant
for originally for Hey, you're using Wolverine,

279
00:22:11.640 --> 00:22:15.359
you might as well pull this in
because you'll need when you're integrating with

280
00:22:15.480 --> 00:22:22.599
Wolverine, you're gonna want to use
transactional outboxes. There's a very strong middleware

281
00:22:22.640 --> 00:22:27.119
approach. And it turns out I
think the HP service model is starting to

282
00:22:27.160 --> 00:22:33.519
catch on because it's it's lower ceremony
code ceremony than VC. I think we

283
00:22:33.559 --> 00:22:37.400
have the potential to beat minimal API
and MVC by quite a bit with performance

284
00:22:37.440 --> 00:22:41.359
as well, just by having a
lighter weight, just letter weight runtime.

285
00:22:42.680 --> 00:22:48.599
So I'm real happy with how it's
going. And to circle back, so

286
00:22:48.839 --> 00:22:52.799
some things that have changed significantly since
the last time we talked that kind of

287
00:22:52.839 --> 00:22:57.680
surprised me. It has through a
lot of early user suggestions that I'm glad

288
00:22:57.720 --> 00:23:03.440
I listened to. It's kind of
gone off into kind of a quasi functional

289
00:23:03.480 --> 00:23:11.319
programming approach. I'm gonna take a
lot of online from f sharp driving to

290
00:23:11.359 --> 00:23:17.680
a point where I think Wolverine.
Using Wolverine is going to allow you to

291
00:23:18.000 --> 00:23:22.839
get to a very maintainable code base
with very low code ceremony, without deal

292
00:23:22.920 --> 00:23:30.559
having to pull in really complicated clean
architecture onion architecture. Whatnot? Being able

293
00:23:30.599 --> 00:23:37.720
to do more doesn't use affluent syntax
for example, no functional decomposition a little

294
00:23:37.720 --> 00:23:44.759
more much more more conventional based,
but being able to break a break a

295
00:23:44.759 --> 00:23:49.279
single handler, single message based.
Start organizing our code around use cases rather

296
00:23:49.359 --> 00:23:56.240
than nouns. Being able to put
very cleanly put your data, access the

297
00:23:56.319 --> 00:24:02.839
actual business logic, and supposed processing
handling all in one file, but still

298
00:24:02.839 --> 00:24:08.960
have very clean separation of concerns.
Just you have far fewer coding archifacts.

299
00:24:10.039 --> 00:24:15.279
All the related code is together in
one place, all the testability you want.

300
00:24:15.880 --> 00:24:21.799
Put closely related code together, minimal
abstractions, don't scatter your code all

301
00:24:21.839 --> 00:24:27.000
around a prescriptive, clean architecture project
structural Well that sounds great. So why

302
00:24:27.000 --> 00:24:33.519
did you WinCE when you said the
word functional? I have gotten into it

303
00:24:33.599 --> 00:24:38.599
quite a few times online. The
the f sharp community can be very enthusiastic.

304
00:24:40.000 --> 00:24:42.559
Oh come on, you can say
it better way than that. Do

305
00:24:42.599 --> 00:24:48.359
you all remember decades ago on Silent
Life, there was a skit with Pat

306
00:24:48.480 --> 00:24:52.440
Sir Patrick Stewart, Yeah, the
if it's not Scottish it's crap. Oh

307
00:24:52.480 --> 00:24:56.920
yeah yeah, and Mike Myers.
Yeah to me, the F sharp folks

308
00:24:57.000 --> 00:25:02.200
there there, Sir Patrick, stupid
little dogmatic. I mean, if it's

309
00:25:02.240 --> 00:25:06.559
not their way, it's crap and
that that can rub me the wrong way

310
00:25:06.680 --> 00:25:11.480
sometimes. But Wolverine is probably turning
out. I think it's probably turning out

311
00:25:11.519 --> 00:25:17.400
to be eventually very sharp friendly.
It is going to allow C sharp developers

312
00:25:17.480 --> 00:25:21.480
to maybe write code a little bit
more functionally. Oh that's good. That's

313
00:25:21.480 --> 00:25:23.319
certainly. That's certainly a show we've
done as well, right, that that

314
00:25:25.079 --> 00:25:29.759
you learn learning a functional language helps
you write more functionally in other languages as

315
00:25:29.799 --> 00:25:32.960
well. I don't know that I
necessarily pointed the F sharp folks as the

316
00:25:33.039 --> 00:25:37.640
dogmatic ones. Folks that like functional
because it's not the most popular way to

317
00:25:37.640 --> 00:25:41.160
write code in the world. They
tend to be very enthusiastic about doing that,

318
00:25:41.240 --> 00:25:45.599
Like you don't write functionally by accident. Yeah, that's true, Richard,

319
00:25:45.720 --> 00:25:48.319
that's well said. I don't think. I don't think I've done sime

320
00:25:48.359 --> 00:25:52.839
as dogmatic. I didn't say dogmatic, said I did, so I'll take

321
00:25:52.880 --> 00:25:57.279
that one. But but but if
folks can also you know, whenever you

322
00:25:57.519 --> 00:26:00.880
talk to a smaller community like that, like they're there for a reason.

323
00:26:02.079 --> 00:26:06.319
Yeah, there tends to be a
higher intensity in general the way they approach

324
00:26:06.400 --> 00:26:11.440
their language and programming styles. And
they probably worked pretty darn hard to get

325
00:26:11.480 --> 00:26:15.720
good at it too, you know. Yes, yes, functioning is functional

326
00:26:15.799 --> 00:26:18.759
is challenging way to think in two
ways about it. But just to follow

327
00:26:18.920 --> 00:26:25.599
up on that just a little bit, so a crucial difference between Wolverine and

328
00:26:26.079 --> 00:26:32.000
it's natural competitors, the mediator and
service bus mass transit. I'm going to

329
00:26:32.079 --> 00:26:36.359
leave some out, sorry, folks, brighter for me and Cooper Rebus,

330
00:26:36.720 --> 00:26:41.519
they're all they generally follow pattern I
prefer to as the eye handler of t

331
00:26:41.839 --> 00:26:45.400
approach. You know, sooner or
later there is some interface you have to

332
00:26:45.519 --> 00:26:52.640
implement that has a couple couple generic
constraints for what's the input type? Right,

333
00:26:53.039 --> 00:26:59.039
you have to conform to their model. Wolverine instead wraps code around we

334
00:26:59.160 --> 00:27:04.160
wrap or adapt or around your code. Okay, the sounds a little abstract.

335
00:27:04.240 --> 00:27:10.640
As with inheritance model, it's doing
runtime code generation code great it's not

336
00:27:10.680 --> 00:27:15.960
as crazy as it sounds, but
it enables us to do a lot of

337
00:27:15.000 --> 00:27:21.720
things like out of your handler methods
or your web service methods, you can

338
00:27:21.759 --> 00:27:26.079
return an object that just says I
want this document saved, I want this

339
00:27:26.160 --> 00:27:30.279
file saved. So one of the
things that destory or I want this other

340
00:27:30.319 --> 00:27:34.440
message sent out. My message I'm
going to decide what gets done next,

341
00:27:34.480 --> 00:27:40.160
doesn't go to this web service that
web service. How does it continue?

342
00:27:40.400 --> 00:27:45.400
But you're just returning a value.
Your handler functions become pure functions. They

343
00:27:45.400 --> 00:27:48.359
don't have to be asynchronous anymore.
They just return, take in data,

344
00:27:48.559 --> 00:27:53.400
return data for what's going to happen. In some cases that's great. Actually,

345
00:27:53.640 --> 00:27:59.000
the more I don't have to modify
my code to suit a transport,

346
00:27:59.160 --> 00:28:02.920
the better. Yes, that's that's
our theory, and that's our hope.

347
00:28:02.960 --> 00:28:06.240
That some people are going to hate
it, but we just hope that enough

348
00:28:06.279 --> 00:28:08.279
people love it that we have a
viable path forward. Yeah, And you

349
00:28:08.319 --> 00:28:15.559
know it's funny how much there you
have these thoughts about using this path of

350
00:28:15.680 --> 00:28:19.240
success or you know, falling into
the pit of success approach to if we

351
00:28:19.359 --> 00:28:22.119
use the tool this way, like
just good things are going to happen,

352
00:28:22.680 --> 00:28:27.960
and that's very hard to do.
It's very very hard as a tool company.

353
00:28:29.039 --> 00:28:33.039
It's really the only way to get
it's the goal, but the only

354
00:28:33.079 --> 00:28:37.440
way to get there is to get
it out used by enough people that you

355
00:28:37.480 --> 00:28:41.200
get feedback on all the things that
are confusing or the ways that they use

356
00:28:41.279 --> 00:28:47.240
it that you didn't anticipate in it's
kind of a long term sand paper approach.

357
00:28:47.359 --> 00:28:49.640
You know, they find all the
rough spots in your system, everything

358
00:28:49.640 --> 00:28:56.680
that's confusing, and you're just constantly
standing off off that. So but at

359
00:28:56.680 --> 00:28:57.759
the same time, you still want
to stick to a path, right,

360
00:28:57.799 --> 00:29:02.319
Like you don't want to be all
things to all people. This is kind

361
00:29:02.319 --> 00:29:07.119
of an opinion approach to building software. So you know, it's a it's

362
00:29:07.119 --> 00:29:08.799
a question of it is that a
rough edge or is it the wrong way?

363
00:29:11.319 --> 00:29:15.119
Yes? And so far. You
know, again, it's not a

364
00:29:15.200 --> 00:29:18.720
huge amount of usage. I don't
know if it'll ever go mainstream, but

365
00:29:18.400 --> 00:29:23.599
some people that are into it have
really liked it and even seem to prefer

366
00:29:23.680 --> 00:29:27.960
it over the older eye handler of
t approach. Hey, if it delivers

367
00:29:29.000 --> 00:29:33.079
results, right, that's what people
care about. Yes, and gentlemen,

368
00:29:33.200 --> 00:29:36.319
I use that term loosely. I'm
gonna interrupt for one moment for this very

369
00:29:36.319 --> 00:29:42.400
important message, and we're back.
It's dot net Rock. I'm Richer Campbell.

370
00:29:42.440 --> 00:29:45.480
Let's call Franklin. Hey, Hey, chatting with our friend Jeremy Millner

371
00:29:45.559 --> 00:29:52.799
a bit about his new re organization
and reorganization for Martin Wolverine, the Jasper

372
00:29:52.880 --> 00:29:57.519
FX folks, and just this idea
of how approaching software. I'm not gonna

373
00:29:57.559 --> 00:30:03.799
say from a less formal style,
but you know, lightweight. I think

374
00:30:03.799 --> 00:30:07.680
you should call it critter style.
Serious. We're definitely aiming for the lowest,

375
00:30:07.920 --> 00:30:11.960
for a very low ceremony code style, right that that also leans towards

376
00:30:12.000 --> 00:30:18.200
and I'm thinking about conversations we've had
recently towards this mindset of small teams,

377
00:30:18.960 --> 00:30:26.279
and a lot of these ceremony ceremonious
approaches to software are built around the mindset

378
00:30:26.279 --> 00:30:29.359
of we have a large number people
that we want to work simultaneously, and

379
00:30:29.440 --> 00:30:32.960
so the ceremonies actually a way to
keep those folks in line. But if

380
00:30:32.960 --> 00:30:36.519
your team's not that big and everybody
can fit around a table for dinner,

381
00:30:37.200 --> 00:30:40.759
then then stay in low ceremony makes
a lot of sense. You get more

382
00:30:40.759 --> 00:30:44.440
delivered in less time. So maybe
taking a tangent from what you're saying,

383
00:30:45.759 --> 00:30:48.680
going to the topic of microservices,
which I know we're in a full blown

384
00:30:48.720 --> 00:30:55.000
backlash against micro services. Yes,
the pendulum has swung. Yeah, we're

385
00:30:55.000 --> 00:31:04.079
in the trough of the disillusionment.
So what I am seeing is some efforts,

386
00:31:04.079 --> 00:31:11.880
some attempts to adopt microservices are defeated
because they still try to adopt a

387
00:31:11.920 --> 00:31:15.720
full, big bang, clean architecture
approach of Yeah, this thing is technically

388
00:31:15.880 --> 00:31:18.640
very small, it could be,
but I'm still going to use four different

389
00:31:18.680 --> 00:31:22.839
projects. I'm gonna layer do a
bunch of layering. I have all the

390
00:31:22.839 --> 00:31:26.720
exact same overhead to get all the
extra stuff in there to write just a

391
00:31:26.759 --> 00:31:32.440
tiny bit of functionality, and that's
defeating the purpose of using a microservice.

392
00:31:33.079 --> 00:31:37.079
So I think the pendulum is going
to correct just a tiny bit. Yeah,

393
00:31:37.160 --> 00:31:40.519
I think so, I hope so
at tiny bit. Yeah, it's

394
00:31:40.599 --> 00:31:44.400
it's going to come back a little
bit. But the microservices thing is going

395
00:31:44.480 --> 00:31:48.119
to work if you can just write
much simpler code where you can see everything

396
00:31:48.160 --> 00:31:55.680
together and stin stay in the arena
of I'm also going to try to pick

397
00:31:55.799 --> 00:32:00.880
purposely picked tools that play very nicely
in Integration testing kind of another theory,

398
00:32:00.880 --> 00:32:05.400
and this is something Wolverine and Martin
especially you're built on. Is the idea

399
00:32:05.920 --> 00:32:08.440
if you can make I think,
if you can make integration testing easy all

400
00:32:08.480 --> 00:32:15.279
the way end through the database or
through the messaging with Wolverine, if you

401
00:32:15.319 --> 00:32:20.119
can do that, then I think
you worry much less about abstractions and malch

402
00:32:20.279 --> 00:32:25.119
libraries and all this extra stuff.
If it's still easy to test your code,

403
00:32:25.519 --> 00:32:30.880
I don't worry quite so much about
splitting that stuff up with that extra

404
00:32:30.440 --> 00:32:35.680
extra stuff just to get get unitestine. So it's another way of driving towards

405
00:32:35.720 --> 00:32:39.039
simpler code. Yeah. Absolutely.
Wait, you use the term tropic disillusionment,

406
00:32:39.079 --> 00:32:42.799
which is from the Gartner hype cycle. It's funny because I've been using

407
00:32:42.799 --> 00:32:45.720
it on Windows weekly lately to talk
about large language models. Right it's like

408
00:32:45.880 --> 00:32:50.400
h's changed everything. It's always like
we are at the height of a hype

409
00:32:50.400 --> 00:32:53.960
cycle right now. Boys, Let's
be clear, you know you're not more

410
00:32:54.079 --> 00:32:59.359
you could never be more deluded than
we could possibly be about this technology right

411
00:32:59.400 --> 00:33:02.079
now. All the noise that's going
on, but just the you know,

412
00:33:02.119 --> 00:33:06.680
it's not just up and then down, it's coming you come back up again.

413
00:33:06.799 --> 00:33:12.319
Right. The gardener folks call it
the slope of enlightenment to you climb

414
00:33:12.400 --> 00:33:16.920
out of the tropic disillusionment with it. There is this oscillation overreacting both ways

415
00:33:17.039 --> 00:33:22.599
before you start of settle into a
sort of reasonable productive approach. Right,

416
00:33:22.720 --> 00:33:28.759
Anything that's parabolic is ultimately going to
come back, Yeah, come back down.

417
00:33:29.079 --> 00:33:30.839
Yeah, I'm wear or the other. I'm sorry. I did have

418
00:33:30.920 --> 00:33:34.000
this queue up because I knew we
were going to have to talk about the

419
00:33:34.000 --> 00:33:39.759
mock cue situation. Yeah. So
one of the a thread common thread I

420
00:33:39.799 --> 00:33:45.640
see going on what's left of whatever
Twitter is called now and Mastodon is why

421
00:33:45.680 --> 00:33:50.160
are you using mach libraries? You
should never be using moch libraries. So

422
00:33:50.759 --> 00:33:55.519
two things would be true here.
Huh, folks, You mugously overuse mach

423
00:33:55.559 --> 00:34:01.119
libraries in ways that makes their tests
very brittle, very slow, extremely hard

424
00:34:01.119 --> 00:34:06.519
to understand. I've I have probably
caused that younger in my career, and

425
00:34:06.559 --> 00:34:12.199
I have tried in vain to help
teams get out of that situation. But

426
00:34:12.199 --> 00:34:15.960
at the same time, there's absolutely
some very valid usage for these mock libraries,

427
00:34:16.079 --> 00:34:20.760
like mock you or in substitute.
So don't don't throw the baby out

428
00:34:20.760 --> 00:34:24.320
with the bathwater. I call these
things they're kind of rip pepper appropriate pepper

429
00:34:24.320 --> 00:34:29.000
flakes approaches. You know, a
little bit can be good, a lot

430
00:34:29.199 --> 00:34:34.039
is probably always going to be bad. So don't don't swing guardrail the guardrail

431
00:34:34.239 --> 00:34:37.159
of you know, we're way over
using it now, they're always bad.

432
00:34:37.239 --> 00:34:40.599
Throw it out all together. Well, there's a there's a couple of silos

433
00:34:40.599 --> 00:34:45.119
and scenarios that really you do need
mocks. You know, when you're doing

434
00:34:45.159 --> 00:34:49.599
communication with something that costs money and
you don't want your tests to rack up

435
00:34:49.639 --> 00:34:52.840
a lot of bills, and it's
relatively simple data, throw a mock in

436
00:34:52.920 --> 00:34:58.199
there. You know, there are
some situations where it makes absolute sense.

437
00:34:58.440 --> 00:35:01.000
It does right now. Some people
are gonna argue with you as well that

438
00:35:01.840 --> 00:35:07.360
you would just use some kind of
static hand rolled fake fake, and and

439
00:35:07.400 --> 00:35:10.320
that's that's valid too. But there's
there's absolutely places I would want to use

440
00:35:10.880 --> 00:35:16.320
a mocking library for testing, collaboration
or interactions. Yeah. Yeah, but

441
00:35:16.480 --> 00:35:20.800
all things can be overused, and
yep, we're better worth. I think

442
00:35:21.320 --> 00:35:25.559
our industry is prone to overuse,
you know, I think like I think

443
00:35:25.760 --> 00:35:29.679
we struggle enough with tools that once
we get good at when we try to

444
00:35:29.760 --> 00:35:31.320
use it, for a lot of
things. It's like you get your you

445
00:35:31.360 --> 00:35:35.920
get your head around a mocking library, like I will not mock all the

446
00:35:36.039 --> 00:35:42.039
things. Yeah, and I helped. I helped cause some of that that

447
00:35:42.039 --> 00:35:52.039
that was Jeremy clearly I've seen I've
seen it go very badly. Yeah,

448
00:35:52.079 --> 00:35:57.320
but yes, I helped cause cause
that with structure Map had an automocker that

449
00:35:57.320 --> 00:36:00.079
that made it way too easy to
use use us kind of tools, and

450
00:36:00.639 --> 00:36:05.119
folks ran with it. Yeah.
I think that if you just inserted more

451
00:36:05.199 --> 00:36:10.880
pain into your into your your software, it made it more painful to use.

452
00:36:12.480 --> 00:36:15.119
That's the way to go, because
then people won't use it, and

453
00:36:15.159 --> 00:36:19.920
that's what you want, right,
and it's you're laughing, but that's an

454
00:36:20.000 --> 00:36:24.320
argument we really had over automocking tools
ten fifteen years ago. Yeah, that

455
00:36:25.039 --> 00:36:29.360
you it's better for everybody if we
make it a little more painful, so

456
00:36:29.440 --> 00:36:32.079
people notice when things are off the
rails. Right, you're gonna put up

457
00:36:32.119 --> 00:36:36.639
in in the I D eight.
Are you sure you want to do this?

458
00:36:38.639 --> 00:36:44.280
Is that really the answer too?
But yeah, you know, we

459
00:36:44.400 --> 00:36:47.599
live living in the Microsoft space.
Microsoft is famous for the very gradual level

460
00:36:47.639 --> 00:36:52.239
of education you can get in early
not no much get some results. There

461
00:36:52.239 --> 00:36:57.039
are plenty of other tools out there
that have high cliffs where you've got to

462
00:36:57.079 --> 00:37:00.760
you've got to look quite a bit
before you know. Compile one works and

463
00:37:00.800 --> 00:37:05.760
you get somewhere, and there's a
trade to that. You end up with

464
00:37:05.800 --> 00:37:10.719
a much more gradient range of skills
with these easy entry tools. And although

465
00:37:10.840 --> 00:37:16.840
you know, you find someone you
know who's who's effective in a challenging language.

466
00:37:17.000 --> 00:37:20.400
And I'm that you can pointed F
sharp, Like, if you can

467
00:37:20.400 --> 00:37:23.199
get cod out the door with F
sharp, you probably know quite a bit

468
00:37:23.400 --> 00:37:27.800
because getting good at that isn't trivial. Yeah, you know, I had

469
00:37:27.840 --> 00:37:31.039
bet too it would be easier if
you started with F sharp versus going through

470
00:37:32.079 --> 00:37:36.159
you know, I don't think people
really do a lot of oo oh yeah

471
00:37:36.360 --> 00:37:39.599
with C sharp, but you know, starting with a class oriented language like

472
00:37:39.599 --> 00:37:44.760
like C sharp or chava. Oh
yeah. The unlearning effect is very interesting.

473
00:37:45.280 --> 00:37:47.239
You know, if if the first
line programming languages you ever learned are

474
00:37:47.239 --> 00:37:52.760
functional, you just that's the way
you're gonna think. Switching between those thought

475
00:37:52.760 --> 00:37:58.119
processes is that's tough, yeah,
or from our generation of folks, I

476
00:37:58.159 --> 00:38:00.360
know, I'm a little younger than
you are, but our generation of folks

477
00:38:01.519 --> 00:38:07.159
learning very database intensive programming first.
Yeah, I think it. You know,

478
00:38:07.719 --> 00:38:10.920
what was the terrible saying that if
you learned basic first, you can

479
00:38:10.960 --> 00:38:17.559
never learn to be a real developer, getting people to move beyond between off

480
00:38:17.599 --> 00:38:22.320
of being a very database centric developer. That's something folks used to struggle with.

481
00:38:22.719 --> 00:38:29.159
Yeah, because that depends on what
area you're from as to what were

482
00:38:29.159 --> 00:38:30.760
you learning and why were you learning
it? Right, If you came into

483
00:38:30.840 --> 00:38:37.480
software development in the client server time, that's you were doing the same data

484
00:38:37.519 --> 00:38:39.800
modeling approach over and over and over
again. We were speaking directly to databases.

485
00:38:39.800 --> 00:38:44.280
Everybody wrote a little sequel like that
was just the world as it stood

486
00:38:44.400 --> 00:38:49.320
at that time, And it is
interesting you to think about how much of

487
00:38:49.320 --> 00:38:54.519
your original coding mind is shaped.
Then it's true taking that as a tangent,

488
00:38:54.599 --> 00:39:00.079
because I refuse to let this go
going back to picking on cleaner onion

489
00:39:00.159 --> 00:39:06.719
architectures. A lot of the prescriptive
guidance you see from those things, people

490
00:39:06.840 --> 00:39:10.840
very naturally, I think, use
very crud centric examples. You know,

491
00:39:10.920 --> 00:39:15.280
here's the to do or I haven't. We're going to do something about invoicing,

492
00:39:15.320 --> 00:39:20.440
so I have an invoice controller and
everything that touches an invoice, goes

493
00:39:20.440 --> 00:39:24.079
through an invoice control or an invoice
service, an invoice repository. That kind

494
00:39:24.119 --> 00:39:31.440
of noun based code organization is where
bigger apps go terribly wrong, with clean

495
00:39:31.679 --> 00:39:37.800
or onion or anything like that.
I see several other people they're starting to

496
00:39:37.840 --> 00:39:40.280
talk about this a little bit more, and I'm jumping on this bandwagon,

497
00:39:40.840 --> 00:39:50.400
moving toward organizing more around use cases
or the message messages or inputs and operations,

498
00:39:50.599 --> 00:39:53.719
you know, the vertical slice architecture
idea. Can you explain what you

499
00:39:53.760 --> 00:39:57.599
mean by noun based, like what
kinds of nouns are you seeing? People?

500
00:39:58.159 --> 00:40:02.079
Yeah, So, in a creud
centric work view of the world or

501
00:40:02.360 --> 00:40:07.320
really a data centric view of the
world, I have Let's say I use

502
00:40:07.360 --> 00:40:12.000
an invoice because it's soason a lame. Everybody has an invoicing system somewhere,

503
00:40:12.719 --> 00:40:19.960
so I would have an invoice controller
that may have get post put for modifying

504
00:40:19.960 --> 00:40:22.000
an invoice, and if it gets
bigger, it probably gets a lot of

505
00:40:22.039 --> 00:40:27.800
extra operations for approve the invoice,
you know, so on and so forth.

506
00:40:29.400 --> 00:40:32.320
But I am first organizing the code
of anything that touches an invoice goes

507
00:40:32.360 --> 00:40:38.440
in these big these files invoice controller
to service layer to the invoice repository,

508
00:40:38.840 --> 00:40:43.760
and you can very if you're not
careful. And this happens all the time,

509
00:40:44.280 --> 00:40:49.800
these classes, these horizontal layers for
an invoice get very bloated. That

510
00:40:49.960 --> 00:40:55.000
that's kind of a noun centric view
of I am organizing code based on it's

511
00:40:55.119 --> 00:41:00.639
data storage or how this relates to
an entity. Now, So the entity

512
00:41:00.679 --> 00:41:02.920
now and would be invoice in this
case, Yes, I got it.

513
00:41:02.960 --> 00:41:08.039
So in that vertical slice architecture,
I think that's that's Jimmy Bogart's terminology.

514
00:41:08.199 --> 00:41:14.599
People, I think I like the
terminology, you know. Instead, I

515
00:41:14.599 --> 00:41:16.679
want to organize, and other people
describe it. I want to organize around

516
00:41:16.719 --> 00:41:20.960
the verbs. What I would say
is you want to organize around the use

517
00:41:21.000 --> 00:41:24.480
case a message. Say I want
to organize code around approving an invoice.

518
00:41:25.440 --> 00:41:31.440
So in one file or one one
namespace, I'm going to have the DTOs

519
00:41:31.559 --> 00:41:37.679
that that model the message for the
approve invoice. Yeah, I'm going to

520
00:41:37.760 --> 00:41:42.159
put any kind of any kind of
data access business logic that's specific to that

521
00:41:42.320 --> 00:41:45.480
use case goes right there, you
know, And there's all kinds of racoles.

522
00:41:45.559 --> 00:41:50.239
If it's shared logic, then it
doesn't go there. But anything that

523
00:41:50.320 --> 00:41:52.239
has to do with that particular use
case, I'm going to put it together

524
00:41:52.599 --> 00:41:57.719
right there in a tight area of
code. I still want separation concerns.

525
00:41:58.400 --> 00:42:02.599
And also, you're not you not
building a slice for approving everything. It's

526
00:42:02.639 --> 00:42:07.599
just approving an invoice. Yes,
so it's more granular. Yes, But

527
00:42:08.119 --> 00:42:12.800
just think of all the times you're
in one of these big, very very

528
00:42:12.880 --> 00:42:16.159
large systems and there's some kind of
problem and you're trying to troubleshoot what's wrong.

529
00:42:16.280 --> 00:42:22.280
Right, You're not reasoning about your
data layer, You're reasoning about the

530
00:42:22.400 --> 00:42:27.280
vertical pipe of how does this message
turn into whatever it does? Yeah,

531
00:42:27.519 --> 00:42:30.039
like putting all the code for that
one message as close together as possible,

532
00:42:30.679 --> 00:42:35.599
I think you've got a better chance
at being able to unwind what's going on.

533
00:42:35.920 --> 00:42:38.280
Yeah, it makes sense. It
means I find this fascinating, Like

534
00:42:38.280 --> 00:42:42.920
we're really kind of talking about a
minimal approach here. One of my issues

535
00:42:42.960 --> 00:42:47.559
with vertical slicing the vertical slice approach
then is is also you've got this Conway's

536
00:42:47.599 --> 00:42:52.079
law effect. You now have a
piece of code that works that's kind of

537
00:42:52.199 --> 00:42:54.440
end end. I think you're prone
to hanging more things off of it than

538
00:42:54.480 --> 00:43:00.119
you probably make you you should like
at some point you're just sticking stuff there

539
00:43:00.119 --> 00:43:02.960
because it's easy to add it rather
than make a new slice. Right,

540
00:43:04.719 --> 00:43:09.079
Yes, yes, so I'm gonna
take that one as well. So I've

541
00:43:09.119 --> 00:43:14.960
been preaching a little bit about coat
ceremony and sorry, folks were going on

542
00:43:15.000 --> 00:43:19.159
a little bit of a trip.
My furry four legged coworker really desperately wants

543
00:43:19.199 --> 00:43:21.960
to come in. Oh yeah,
that's okay. The other thing that strikes

544
00:43:21.960 --> 00:43:24.239
me is that once you've got a
working vertical slice, it's somewhat you know,

545
00:43:24.280 --> 00:43:28.400
the Conway's law fact comes into play
off. That's that you know you've

546
00:43:28.400 --> 00:43:30.880
got as system that works, so
you're going to tend to reflect it.

547
00:43:30.440 --> 00:43:34.679
I suspect you started hanging features off
of it that maybe should be in a

548
00:43:34.679 --> 00:43:38.480
different slice, because the commit to
building another slice is pretty high compared to

549
00:43:38.719 --> 00:43:40.880
well, I'll just stick it in
the slice to work. Yeah. Yes,

550
00:43:42.239 --> 00:43:45.840
so that's a great point. So
let's let's dive back in get again

551
00:43:45.840 --> 00:43:51.519
into that theme of trying to go
for lower ceremony code, because what you're

552
00:43:51.559 --> 00:43:55.000
talking about, that's something I have
really seen be a huge problem in big

553
00:43:55.119 --> 00:44:00.840
enterprise systems that they just accumulate code
as client A wants this, client B

554
00:44:01.039 --> 00:44:07.280
wants a special logic, and you
get these very bloated controllers, message handlers,

555
00:44:07.440 --> 00:44:10.840
whatnot, so code ceremony, and
you think of that is, how

556
00:44:10.840 --> 00:44:16.280
many mandatory steps do I have to
take to split something off? Do I

557
00:44:16.400 --> 00:44:20.880
have to add four five different classes
to do it? Do I have to

558
00:44:20.880 --> 00:44:24.480
go to up team different projects?
Do I have to map something? Or

559
00:44:24.559 --> 00:44:29.800
can I just kind of pop something
off in one file and do it very

560
00:44:29.880 --> 00:44:36.559
lightly mandatory steps? For do I
have to explicitly code up new authorization rules.

561
00:44:37.880 --> 00:44:40.199
I've seen that kind of splitting you're
talking about. I've seen it defeated

562
00:44:40.199 --> 00:44:51.840
by mandatory instrumentation. Like if you're
doing hopefully your framework handles things like open

563
00:44:51.840 --> 00:44:57.800
telemetry, emitting and air handling,
air handling and logging for you like Wolverine

564
00:44:57.800 --> 00:45:00.239
does. But if you're not,
if you're doing that manually, where you're

565
00:45:00.280 --> 00:45:07.480
saying the developers have these rules of
you shall always write this log statement,

566
00:45:07.599 --> 00:45:12.360
you have to error explicitly handle errors
this way that is going to add so

567
00:45:12.440 --> 00:45:16.039
much overhead that you will tend to
not split features and those slices up,

568
00:45:16.400 --> 00:45:21.079
and that will lead to bad code
So what you're saying is in a plug

569
00:45:21.119 --> 00:45:23.960
for Wolvertine ra RA, which is
cool. But what you're saying is because

570
00:45:24.599 --> 00:45:34.800
Wolverine doesn't inject its impede or impose
you to redo your stuff. Like it

571
00:45:34.880 --> 00:45:39.199
sounds like you have air handlers around
this stuff that you're calling, so you

572
00:45:39.239 --> 00:45:43.199
don't have to do that. You
have logging around the stuff that you're calling.

573
00:45:43.559 --> 00:45:46.679
Yes, And you know, in
another sense, Wolverine is that way

574
00:45:47.559 --> 00:45:52.280
because of the experiences I've seen with
enterprise systems. Yeah, the where they

575
00:45:52.320 --> 00:45:59.039
had higher ceremony coding models, try
trying to take care of things like like

576
00:45:59.199 --> 00:46:04.719
instrumentation, insecurity or was great examples
you want at this point, you want

577
00:46:04.719 --> 00:46:08.000
to open telemetry on everything these days, and it's really nice if it's just

578
00:46:08.079 --> 00:46:12.239
done for you, so developers don't
have to think about it, right,

579
00:46:12.320 --> 00:46:15.920
But you don't necessarily want to do
that at the stack level or the slice

580
00:46:15.000 --> 00:46:19.559
level. Rather, yes, or
that. That's that's how I feel about.

581
00:46:20.000 --> 00:46:22.599
Well, yeah, you used to
have to roll this stuff, you

582
00:46:22.679 --> 00:46:25.000
used to have to build those horizontal
pieces. But I mean, I think

583
00:46:25.039 --> 00:46:29.559
it's this is your to your point, It's like these are solved problems,

584
00:46:29.800 --> 00:46:35.679
just use them. Right, yes, and to go back to to here

585
00:46:35.719 --> 00:46:40.840
to really put this in perspective for
younger folks. So I started my first

586
00:46:40.880 --> 00:46:45.239
serious software development it was Oracle PLC
quel, but then it was Visual Basic.

587
00:46:45.679 --> 00:46:52.280
Yeah and yeah, so VB six
didn't have stack traces. You know,

588
00:46:52.599 --> 00:46:55.400
younger folks are horrified at this idea
that they didn't exist. You would

589
00:46:55.440 --> 00:47:00.519
manually in every single method, every
single fuck and you would have a little

590
00:47:00.559 --> 00:47:05.760
bit of on hair or something.
You would manually build up a stack tress

591
00:47:06.400 --> 00:47:10.280
yourself in every single method to make
this happen. This is a rule I

592
00:47:10.440 --> 00:47:15.880
enforced on my team because web programmers
didn't write bugs, so why would we

593
00:47:15.920 --> 00:47:23.440
need a snack but here that bloated
the size of your code to the point

594
00:47:23.480 --> 00:47:27.599
where you didn't want to break things
up or sorry, Richard, maybe to

595
00:47:27.639 --> 00:47:31.880
go to your generation, Cobalt developers
nice things. So we are at the

596
00:47:31.920 --> 00:47:38.599
same age. You know, if
you've worked around Cobal developers. I used

597
00:47:38.599 --> 00:47:42.719
to say, I can look at
code in any language and tell you that

598
00:47:42.760 --> 00:47:47.199
was a Cobal developer. So there
was a very serious penalty, performance penalty

599
00:47:47.599 --> 00:47:52.679
for pulling out a separate method or
a separate function. Yeah, so if

600
00:47:52.719 --> 00:47:57.559
you look at Cobalt. Quote they
were taught, Yeah, they were taught.

601
00:47:57.920 --> 00:48:01.679
They would have these massive pay up
on page functions that were bigger than

602
00:48:01.719 --> 00:48:07.559
anything you've ever seen before because they
had an incentive to do that way.

603
00:48:07.599 --> 00:48:12.800
And just how awful that is to
deal with. Yeah, I argued that

604
00:48:12.800 --> 00:48:16.800
the object orientation won back in the
eighties because it utilized the computing resources more

605
00:48:16.840 --> 00:48:22.519
effectively. At the time, that
manipulating a given area of memory that you

606
00:48:22.519 --> 00:48:29.599
were calling an object was more resource
efficient than the tendency of functional to do

607
00:48:30.199 --> 00:48:35.440
copies of things in memory. Call
for immutability. You know, we'd like

608
00:48:35.480 --> 00:48:38.159
immutability from making more reliable software,
but it used more process or to use

609
00:48:38.239 --> 00:48:43.639
more memory, and at the time
those were constraints. They aren't anymore.

610
00:48:44.239 --> 00:48:47.320
You know, today we have enough
memory and compute that we could afford to

611
00:48:47.360 --> 00:48:53.199
make more reliable software using these techniques
than what was necessary in the eighties with

612
00:48:53.280 --> 00:48:59.199
the single core memory restrictive machines we
were using. It's not my fault,

613
00:48:59.239 --> 00:49:02.840
man happy, We're just trying to
write. I had to do it that

614
00:49:02.880 --> 00:49:07.400
way, that's all it was.
Shall we talk about No, we're not

615
00:49:07.599 --> 00:49:09.559
kind of talk about it, but
I might bring up the memory of on

616
00:49:09.880 --> 00:49:14.679
error resume next, which means,
hey, if there's an error, I

617
00:49:14.719 --> 00:49:16.679
don't want to know about it,
just keep going. It'll be fine.

618
00:49:16.719 --> 00:49:23.559
Everything fine. So I the first
thing I ever did professionally, when I

619
00:49:23.599 --> 00:49:30.239
was still a real engineer, I
wrote an ASP classic system on access ninety

620
00:49:30.360 --> 00:49:35.039
seven from my engineering shop. It
was great fun, but I just remember,

621
00:49:35.159 --> 00:49:37.559
hey, if you sprinkle this on
error resume next thing everywhere. Thanks,

622
00:49:37.599 --> 00:49:40.559
just work, Thanks, just work. It's awesome. It's crazy.

623
00:49:42.280 --> 00:49:45.719
And then, of course, you
know this first system, it became successful

624
00:49:45.880 --> 00:49:51.559
enough that other people in my engineering
group started using it until we start discovering

625
00:49:51.639 --> 00:49:54.039
no values in the database. Where
did this come from? I don't know.

626
00:49:54.119 --> 00:49:58.119
It seems to be working. Well, it's it's worse than that.

627
00:49:59.760 --> 00:50:02.519
I I was running this on my
just my compact desktop and I came in

628
00:50:02.559 --> 00:50:07.199
one morning on a Friday morning and
this heard this terrible clicking sound where it

629
00:50:07.239 --> 00:50:10.360
was using my machine so hard it
threw a head through the hard job.

630
00:50:12.280 --> 00:50:15.599
All right. But and so everybody's
using this system now, and it's like

631
00:50:15.679 --> 00:50:19.360
Jeremy when you're gonna get it up, uh my boss at the time,

632
00:50:19.639 --> 00:50:22.760
or somebody from the real it people. Because I was a shadow it.

633
00:50:22.159 --> 00:50:27.000
Okay, so Jeremy, where is
this in source control and we'll help standard

634
00:50:27.360 --> 00:50:30.639
up for you on on a real
server. And I looked at bat him

635
00:50:30.679 --> 00:50:37.719
and I asked, what source control? Yeah? Yeah, well, and

636
00:50:38.159 --> 00:50:43.320
I feel like the power platform stuff
that's that's hot at the moment is a

637
00:50:43.360 --> 00:50:46.239
new generation of new developers. Yeah. You know, they're their domain experts

638
00:50:46.280 --> 00:50:49.960
who are trying to get things done
and they're using these tools. And I

639
00:50:50.000 --> 00:50:53.800
see that same sort of reaction of
you know, quote unquote real developers making

640
00:50:53.840 --> 00:50:58.840
fun of them. Oh, I'm
like, that's not wise. But they

641
00:50:58.960 --> 00:51:00.480
have to learn all these things too, you know. Over on the on

642
00:51:00.519 --> 00:51:06.480
the run as side of my life, I'm talking to administrators about we're going

643
00:51:06.519 --> 00:51:09.039
to need to give these guys governance. Yeah, they give them some guardrails,

644
00:51:09.119 --> 00:51:13.280
make sure they follow the permission rules. You know, the same thing

645
00:51:13.320 --> 00:51:15.920
they at that that piece of software
is be stufs. When more people are

646
00:51:15.960 --> 00:51:17.639
using it, let's get it out
of the personal account of that person and

647
00:51:17.719 --> 00:51:23.440
into an administered system. Like you
know, that's the reality of solving things.

648
00:51:23.480 --> 00:51:28.199
But more importantly, it's just acknowledging
we're never getting to the bottom of

649
00:51:28.199 --> 00:51:34.239
our to do list. Ever,
like that's not a thing. So anything

650
00:51:34.280 --> 00:51:37.000
that'll take a few more things off
the to do list is a good day.

651
00:51:37.239 --> 00:51:43.239
Have you done any major updates to
Martin speaking of you know, the

652
00:51:43.280 --> 00:51:51.239
current state of your creator software.
It's coming so oscar oscar Nex has mostly

653
00:51:51.280 --> 00:51:53.840
been dealing with things. It's been
a ton of there's just bug fixing never

654
00:51:54.000 --> 00:51:59.599
ends, you know, dealing with
new dot net versions. What is coming

655
00:51:59.679 --> 00:52:04.679
up for Martin is, you know, I'm making We're making a big run

656
00:52:04.840 --> 00:52:12.280
at revamping the link provider. Link
link Provider. It's just it's ultimate permutation.

657
00:52:12.360 --> 00:52:16.559
Hell, so we're taking another stab
at it. But also trying you

658
00:52:16.599 --> 00:52:22.519
know, we did have a very
serious contribution come in sponsoring link improvements,

659
00:52:22.519 --> 00:52:27.719
so I'm trying to trying to get
that folks, those folks their improvements,

660
00:52:27.800 --> 00:52:30.920
trying to make it a lot faster
after that. It is a lot of

661
00:52:30.039 --> 00:52:36.400
it's actually gonna be a lot of
integration with Martin and Wolverine. First class

662
00:52:36.440 --> 00:52:39.440
subscriptions, you know, the ability
to stream data out of Martin, whether

663
00:52:39.519 --> 00:52:45.119
that's to cough or something else.
And then the big thing which I probably

664
00:52:45.119 --> 00:52:49.519
talked about the last time I was
here, but this is our our this

665
00:52:49.559 --> 00:52:55.159
will be our paid a model of
being able to distribute work across multiple nodes

666
00:52:55.159 --> 00:53:00.599
in a big cluster, whether it's
multi tenancy, moving tenants around, but

667
00:53:00.760 --> 00:53:06.920
finding ways to scale up Martin and
specifically that a sinkers projection work you have

668
00:53:06.960 --> 00:53:12.400
to do with with event sourcing,
to be able to spread that load over

669
00:53:12.480 --> 00:53:17.280
different nodes and maybe even dynamically bring
things up and down elastically. That'll be

670
00:53:17.320 --> 00:53:22.639
our paid model. That that's something
we hope to get started. Well,

671
00:53:22.719 --> 00:53:25.840
we we've already put some work into
it, but that's that's the subscriptions,

672
00:53:27.000 --> 00:53:30.440
scalability, link improvements, that's where
we're going next. I think with Martin,

673
00:53:31.840 --> 00:53:36.199
maybe next year we try to branch
out. We might try to branch

674
00:53:36.239 --> 00:53:40.280
out into other non dot net platforms. Yeah, I don't know what that

675
00:53:40.280 --> 00:53:45.039
would mean yet, but that that's
that's longer term. I find it fascinating

676
00:53:45.079 --> 00:53:47.920
that, you know, you have
folks that come at you with, hey,

677
00:53:47.920 --> 00:53:52.559
we really want this feature. How
do we support you to to get

678
00:53:52.599 --> 00:53:58.880
this feature done? And sometimes that's
a monetary compensation. Sometimes yes, I

679
00:53:58.920 --> 00:54:02.960
mean that's that is interesting. And
if anyone's listening, bar the Shingle is

680
00:54:04.000 --> 00:54:07.760
open, We're open for business.
We've already done custom, custom feature work

681
00:54:08.280 --> 00:54:10.800
inside of Wolverine and Martin hit us
up. Sure. Well, what I

682
00:54:10.840 --> 00:54:15.880
appreciate about this conversation and about you
and your products is that your products have

683
00:54:16.320 --> 00:54:22.000
your experience and wisdom built into them, and that's very clear, So I

684
00:54:22.079 --> 00:54:28.159
have no problem recommending them. I
appreciate them. Yeah, and thanks for

685
00:54:28.360 --> 00:54:30.159
thanks for being with us. It's
been great. Hey guys, thanks for

686
00:54:30.199 --> 00:54:34.599
having me yet again. All right, and we'll see you next time on

687
00:54:34.800 --> 00:54:59.519
dot net rocks. Dot net rocks
is brought to you by Franklin's Net and

688
00:54:59.599 --> 00:55:04.960
produce by PLoP Studios, a full
service audio, video and post production facility

689
00:55:05.280 --> 00:55:09.199
located physically in New London, Connecticut, and of course in the cloud online

690
00:55:09.199 --> 00:55:15.320
at pwop dot com. Visit our
website at dt n et r ocks dot

691
00:55:15.360 --> 00:55:21.679
com for RSS feeds, downloads,
mobile apps, comments, and access to

692
00:55:21.760 --> 00:55:25.480
the full archives going back to show
number one, recorded in September two thousand

693
00:55:25.480 --> 00:55:29.920
and two. And make sure you
check out our sponsors. They keep us

694
00:55:29.920 --> 00:55:35.760
in business. Now go write some
code, see you next time. Ban

