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
