WEBVTT

1
00:00:01.080 --> 00:00:05.679
How'd you like to listen to dot
NetRocks with no ads? Easy? Become

2
00:00:05.679 --> 00:00:09.839
a patron For just five dollars a
month, you get access to a private

3
00:00:10.000 --> 00:00:14.439
RSS feed where all the shows have
no ads. Twenty dollars a month will

4
00:00:14.439 --> 00:00:19.039
get you that and a special dot
NetRocks patron mug. Sign up now at

5
00:00:19.039 --> 00:00:23.800
Patreon dot dot NetRocks dot com.
Hey, Carl and Richard here with your

6
00:00:23.920 --> 00:00:28.800
twenty twenty four NDC schedule. Will
be at as many NDC conferences as possible

7
00:00:28.800 --> 00:00:33.280
this year, and you should consider
attending no matter what. Ndcoslow is happening

8
00:00:33.439 --> 00:00:38.560
June tenth through the fourteenth. Get
your tickets at ndcoslow dot com. The

9
00:00:38.600 --> 00:00:43.640
Copenhagen Developers Festival happens August twenty sixth
through the thirtieth. Early bird discount ends

10
00:00:43.679 --> 00:00:51.520
April twenty sixth. Tickets at Cphdevfest
dot com. Ndcporto is happening October fourteenth

11
00:00:51.560 --> 00:00:57.799
through the eighteenth. The early bird
discount ends June fourteenth. Tickets at Ndcporto

12
00:00:57.920 --> 00:01:14.200
dot com. And we'll see you
there, we hope. Hey, welcome

13
00:01:14.200 --> 00:01:18.319
back to dot net rocks. I'm
Carl Franklin and I'm Richard Campbell. I'm

14
00:01:18.519 --> 00:01:23.879
in my studio and Richard is in
Sweden. I am Sweden. I'm at

15
00:01:23.920 --> 00:01:30.439
the Castle komf At in Orbro,
nice just outside of Stockholm. Very nice.

16
00:01:30.599 --> 00:01:34.280
Yeah, and we're going to have
a really good talk today with Gyorgy,

17
00:01:34.920 --> 00:01:47.959
but first let's do better no framework
awesome in Richard, you probably saw

18
00:01:48.000 --> 00:01:55.920
this already, but DARPA revealed that
an experimental X sixty two a AI control

19
00:01:56.159 --> 00:02:02.079
jet successfully faced the human pilot during
an in air dog fight test carried out

20
00:02:02.159 --> 00:02:06.239
last year. Fue huh, yeah, you've probably read about it when it

21
00:02:06.400 --> 00:02:08.400
happened. But yeah, well and
to be clear, and X sixty two

22
00:02:08.680 --> 00:02:12.919
is an F sixteen, Yeah,
it's just customized. Yeah, they were

23
00:02:12.919 --> 00:02:16.479
already fly by wire, so they
just added in this new set of modules

24
00:02:16.479 --> 00:02:22.479
to fly itself. And apparently human
pilots were on board with controls to disable

25
00:02:22.520 --> 00:02:24.879
the AI system, but DARPAS says
the pilots didn't need to use the safety

26
00:02:24.879 --> 00:02:30.199
switch at any point. So isn't
that interesting and a little scary, But

27
00:02:30.360 --> 00:02:37.039
you know, just warfare. I
guess I would rather have something being flown

28
00:02:37.080 --> 00:02:40.719
by wire than flown by a pilot. But you know, for the pilot's

29
00:02:40.759 --> 00:02:46.520
sake. Anyway, Yeah, apparently
recently they put the head of the Air

30
00:02:46.520 --> 00:02:49.039
Force in the backseat of the F
sixteen. They did the same thing.

31
00:02:49.879 --> 00:02:53.479
So oh wow, they're bringing to
light that this is how good the software

32
00:02:53.560 --> 00:02:57.560
is now boys, right, Yeah, it does bring up a little Star

33
00:02:57.639 --> 00:03:00.919
Wars the angst, you know,
sort of, although you know, curiously

34
00:03:00.960 --> 00:03:06.400
they modeled all the Star Wars battles
after World War One air dogfights. So

35
00:03:07.199 --> 00:03:12.319
yeah, I was I was thinking
of Episode one, you know, where

36
00:03:12.360 --> 00:03:17.039
all the all the little drones were
flying around so like like little gnats,

37
00:03:17.639 --> 00:03:22.520
like little mosquitoes, just shooting darts
at people, and I thought, oh

38
00:03:22.560 --> 00:03:25.400
my god, that we have to
look forward to. Well anyway, yeah,

39
00:03:25.479 --> 00:03:30.960
the Air Force has this project called
Loyal Wingman, which is unmanned vehicles

40
00:03:31.120 --> 00:03:37.879
that they that the pilots are flying
with. So things are getting interesting,

41
00:03:38.080 --> 00:03:40.960
Yeah, they certainly are. So
anyway, that's what I got. Who's

42
00:03:40.960 --> 00:03:45.319
talking to us today, Richard Graby
Common top of a show eighteen fifty five,

43
00:03:45.360 --> 00:03:47.840
the one we did with Ted Neward
back in July last year. We

44
00:03:47.680 --> 00:03:52.599
were talking about multiple types of data
stores and called it multimodal. It is

45
00:03:52.680 --> 00:03:55.960
fun and Andy Perth had this somewhat
long comment, but I thought it was

46
00:03:57.000 --> 00:04:00.439
relevant to what we were talking about
today. Says if RM is the Vietnam

47
00:04:00.479 --> 00:04:02.280
of computer science, And of course
we were talking to Ted NewART. That's

48
00:04:02.319 --> 00:04:06.919
a reference to an old show,
old set a blog posts too, And

49
00:04:06.960 --> 00:04:12.199
my repeated trips back to some kind
of RM must make me the US State

50
00:04:12.199 --> 00:04:15.720
Department that would appreciate my citing that
paper When we were discussing how to layer

51
00:04:15.759 --> 00:04:20.199
an API on top of an instantly
complex XML model back around two thousand and

52
00:04:20.279 --> 00:04:25.600
seven, you know, that's the
whole complain about n Hybrid eight was that

53
00:04:25.680 --> 00:04:29.160
the XML was out of control.
Right, So I have to snark at

54
00:04:29.199 --> 00:04:32.560
your comments on the mosing of using
XML to describe XML scheme on two grounds.

55
00:04:32.879 --> 00:04:39.720
The first is XML bodies first tried
non XML formats with DTD. Okay,

56
00:04:39.800 --> 00:04:42.759
that did suck more, That's true, yeah it did. And two,

57
00:04:42.879 --> 00:04:46.040
slipping even further down the rabbit hole
of stuff for XML should be XML.

58
00:04:46.079 --> 00:04:49.079
They went even further to add a
programming language called XSLT, which I

59
00:04:49.160 --> 00:04:53.800
did some work in, which was
written in XML and should cure anyone if

60
00:04:53.800 --> 00:05:00.959
ever complaining about mere semicolons as too
much punctuation because you were usedckets in your

61
00:05:00.079 --> 00:05:05.680
life until you wrote exslt my god. You know. That's why. That's

62
00:05:05.720 --> 00:05:10.240
why we had tools to write that
stuff, because it was not Yeah,

63
00:05:10.399 --> 00:05:15.079
it was sorry for you the tool
for my sins. I used to teach

64
00:05:15.120 --> 00:05:20.160
a multi day course on the W
three XML schema to geologists and mining engineers.

65
00:05:20.519 --> 00:05:27.319
That insanely complex model encompass geos basically
located or bodies described as full three

66
00:05:27.360 --> 00:05:30.920
D structures somewhere in Australia. Wow. It also included laboratory essay results for

67
00:05:31.360 --> 00:05:35.480
a sampling chorus drill if to find
such bodies. All that as salted with

68
00:05:35.519 --> 00:05:41.600
a dash of Sarbanes Oxley traceability on
top. And that experience taught me two

69
00:05:41.680 --> 00:05:45.000
things. One never try to get
scientists from different disciplines to agree on a

70
00:05:45.079 --> 00:05:49.519
definition. And two, XML camera
respect complex object graphs. Liberal use of

71
00:05:49.560 --> 00:05:56.000
the ID attribute is the key.
Amazing extensible results are possible. So keep

72
00:05:56.040 --> 00:05:59.879
the government theme and borrow a sentiment
from Winston Churchill. I'd like to romose

73
00:06:00.079 --> 00:06:04.720
that XML is the democracy of data
structures. Well DBL liked it, but

74
00:06:04.800 --> 00:06:11.720
even he backed off eventually. Oh
man, yeah, I love it,

75
00:06:11.759 --> 00:06:15.519
but yeah, Andy, you're a
true believer. I like it. And

76
00:06:15.600 --> 00:06:16.800
so a copy of music Coba is
on its way to you. And if

77
00:06:16.839 --> 00:06:18.800
you'd like a copy of music,
go buy. I write a comment on

78
00:06:18.800 --> 00:06:23.360
the website at dot Netwrocks dot com
or on the facebooks. We publish every

79
00:06:23.399 --> 00:06:25.720
show there, any of the comment
there and everything in the show. We'll

80
00:06:25.759 --> 00:06:28.720
send your copy of music go by. Hey did I tell you that Code

81
00:06:28.759 --> 00:06:30.839
in a Castle is back on this
year? I heard rumor. Yeah,

82
00:06:30.920 --> 00:06:34.639
so it's going to be the last
week of September. Uh and it's in

83
00:06:34.720 --> 00:06:40.639
the same castle in Tuscany. So
if you missed out and you've you know

84
00:06:40.800 --> 00:06:44.480
you you regretted it, go check
it out Code in a Castle. And

85
00:06:44.560 --> 00:06:46.800
also the video from last year is
up there. So anyway, that's all

86
00:06:46.800 --> 00:06:50.279
I want to say about that.
So all right, let's bring Georgy on.

87
00:06:50.439 --> 00:06:56.839
Giorgi Dala kish Philly is a software
developer with more than a decade of

88
00:06:56.920 --> 00:07:00.680
experience. He works mainly with c
sharp as Peanut, Core rest, Maui,

89
00:07:00.879 --> 00:07:05.199
zamorin and any framework, Core AWS
and SQL server. So you know,

90
00:07:05.439 --> 00:07:09.079
just a couple of couple of interests
here and there, just a couple

91
00:07:09.120 --> 00:07:13.279
of things. He has also worked
with many other frameworks in systems such as

92
00:07:13.319 --> 00:07:16.279
graf ql, aspen at, NBC, as pnut, web API, w

93
00:07:16.439 --> 00:07:21.079
CF, Avalonia, wind Forms,
Oracle, and others. In short,

94
00:07:21.120 --> 00:07:25.120
he doesn't know what he wants to
be when he grows up. Nice Giorgi

95
00:07:25.279 --> 00:07:29.240
is an open source author and contributor
on GitHub and a member of the dot

96
00:07:29.279 --> 00:07:34.519
Net Foundation. Welcome Giorgy, thanks
for relining me to NERO. I have

97
00:07:34.639 --> 00:07:40.399
been listening to it since ten years, so, Ladie, I think.

98
00:07:40.480 --> 00:07:43.920
So it's a pleasure to be on
the show. Awesome. Yeah, well

99
00:07:43.959 --> 00:07:47.199
you're welcome. It's it's great to
have you here. We are really getting

100
00:07:47.279 --> 00:07:53.199
used to a lot of the people
that spent their career listening to dot net

101
00:07:53.319 --> 00:07:58.120
rocks now being guests. So it's
very cool. It's very cool to have

102
00:07:58.199 --> 00:08:03.160
you. So you're you're here to
talk about e F queries and debugging them

103
00:08:03.240 --> 00:08:07.279
visually. So that caught my interest. What do you what do you mean

104
00:08:07.319 --> 00:08:16.560
by that? Uh? Yeah,
so one of the biggest uh uh well,

105
00:08:16.600 --> 00:08:20.720
not not disadvantages, but one of
the biggest downsides of using the using

106
00:08:20.759 --> 00:08:26.279
an O n uh and any kind
of O M probably not just a framework

107
00:08:26.319 --> 00:08:33.879
qure is that it's it hides the
squirl behind the uh leak queries and uh

108
00:08:33.600 --> 00:08:39.399
m hmm. It's it tries to
obstruct or all the database related stuff behind

109
00:08:39.480 --> 00:08:46.519
the strongly typed quarries and C sharp
which is very comfortable, definitely, but

110
00:08:46.559 --> 00:08:52.360
it also can can cause some performance
issues if you are not careful biting your

111
00:08:52.440 --> 00:09:00.879
queries and uh and some people think
that you can just uh learnf core and

112
00:09:01.120 --> 00:09:07.200
you don't need to look at the
aneratedescul or scular is an old language and

113
00:09:07.399 --> 00:09:11.360
we don't need it anymore. But
yeah, it's kind of like if your

114
00:09:11.440 --> 00:09:15.279
car is going along fine and then
it just starts going very slow and you

115
00:09:16.120 --> 00:09:18.480
think, oh, this car stinks. I'm going to bring it into the

116
00:09:18.519 --> 00:09:22.559
shop, rather than you know,
having a look under the hood and actually

117
00:09:22.879 --> 00:09:26.159
trying to see what's going on,
you might discover the problem. Yeah,

118
00:09:26.159 --> 00:09:33.759
and actually it's not as frightening as
some people probably think, so for me

119
00:09:33.879 --> 00:09:41.559
personally. For me personally, when
I started programming about fifteen or seventeen years

120
00:09:41.600 --> 00:09:48.120
already ago, see, there was
no oren so if you needed to interrupt

121
00:09:48.120 --> 00:09:52.879
to this database, you've had to
write your as an ad hoc ascol in

122
00:09:54.360 --> 00:10:01.600
C shop code or storage procedures which
was even more in full and ye,

123
00:10:01.840 --> 00:10:09.279
so yeah, ants to framework is
definitely nice, but you should also definitely

124
00:10:09.600 --> 00:10:16.320
understand the s qol behind it,
and it will change change the way you

125
00:10:16.360 --> 00:10:22.679
write your framework queries and it will
also make your code and your application more

126
00:10:22.840 --> 00:10:30.519
performance definitely. So is it easy
to discover what SQL or sequel is being

127
00:10:31.879 --> 00:10:35.759
created under the hood and sent to
the SQL server engine with the NITY framework.

128
00:10:35.879 --> 00:10:39.320
Yeah, so even without the extensions
that I wrote that we will be

129
00:10:39.440 --> 00:10:46.200
talking about in a couple of minutes, it's it's still very easy with ANSTI

130
00:10:46.279 --> 00:10:52.279
framework with a nicer I think it's
two as quils drink building message in activity

131
00:10:52.440 --> 00:10:58.440
framework. That's to to get the
SQL and use the SQL or you can

132
00:10:58.600 --> 00:11:05.799
just also logging in your application and
when you develop your application, you if

133
00:11:05.840 --> 00:11:11.759
I use the generative s q in
the output window of visual Studio. Let's

134
00:11:11.759 --> 00:11:16.440
go back to to SQL string.
Is that extension available on the connection on

135
00:11:16.480 --> 00:11:22.879
the dB set on the Yeah,
it's it's available on on a on I

136
00:11:22.039 --> 00:11:28.879
queriableuble as far as I remember.
So you just take your query and call

137
00:11:28.000 --> 00:11:33.159
this too. It's called two query
strength. If if I remember it correctly

138
00:11:33.960 --> 00:11:39.559
and you will get the query strength
programmatically or as I said, you can

139
00:11:39.639 --> 00:11:45.200
configure logging and you kind of use
all the escubal statements in the output window

140
00:11:45.360 --> 00:11:48.440
of visuals to deal right. You
also hinted at a tool that you wrote

141
00:11:50.200 --> 00:11:54.200
that makes it much easier, so
let's talk about that. That sounds fun.

142
00:11:54.360 --> 00:11:58.240
Yeah, So so my two goes
a little bit beyond just cutting the

143
00:12:00.159 --> 00:12:07.039
squal query. So this is Visuals
to Do extension you downloaded and the stop

144
00:12:07.120 --> 00:12:13.559
directly from the marketplace. We tend
to it tirely inside Visuals Studio without linnk

145
00:12:13.600 --> 00:12:20.879
it and just searching for it in
the extensions. And essentially it's a debugger

146
00:12:20.960 --> 00:12:28.759
visualizer. So a depoper visualizer is
a kind of extension that lets you visualize

147
00:12:30.200 --> 00:12:35.000
the objects when you have are your
mouse pointer on the on the variable nice

148
00:12:35.279 --> 00:12:43.200
so just just just like you can
we all see string or XML or Jason

149
00:12:43.840 --> 00:12:48.879
in a nicely formatted way in visual
Studio. When you when you have your

150
00:12:50.159 --> 00:12:54.519
mouth your pointer on the eige qualiable
variable inside visual Studio and your items will

151
00:12:54.559 --> 00:13:01.120
hear in the over lave or whatever
it is called in vigosty and it will

152
00:13:01.159 --> 00:13:07.480
say query plan visualizer. So when
you click on it, the extension will

153
00:13:07.600 --> 00:13:13.919
actually fetch the query ecution plan from
the database and display it in a nice

154
00:13:15.080 --> 00:13:20.919
graphical HTML format it inside the web
you, so you can use the query

155
00:13:20.960 --> 00:13:28.399
itself, and also you can use
the plan that's the database it well as

156
00:13:28.960 --> 00:13:33.919
you can use the plans that the
database generated to your query under the hood.

157
00:13:35.000 --> 00:13:39.080
Can you tell us one more time
what that visual studio extension is called.

158
00:13:39.200 --> 00:13:43.960
Yeah, it's called theF core dot
visualizer, okay, and it is

159
00:13:43.039 --> 00:13:48.279
this using your Enerity framework dot exceptions
library under the hood. Which is the

160
00:13:48.279 --> 00:13:52.720
next thing I'd like to talk about. No, no, it is,

161
00:13:52.200 --> 00:13:58.720
It doesn't. It's separately. That's
a separate library. Okay. So my

162
00:14:00.000 --> 00:14:05.279
experience has been if you've got a
problem with an NDY framework call that,

163
00:14:05.399 --> 00:14:11.080
you should just rewrite it to call
a store procedure like that. That's that's

164
00:14:11.120 --> 00:14:15.679
the work around. Like I really
really appreciate what you're doing here that Yeah,

165
00:14:15.759 --> 00:14:18.799
I've written an expression in link and
that translates into this query and sequel

166
00:14:18.879 --> 00:14:26.840
server and it's a table scan So
it's sucking. But the I mean,

167
00:14:26.879 --> 00:14:28.960
I guess the question is is someone
actually going to modify the database to make

168
00:14:30.000 --> 00:14:33.080
this perform better, or do we
just switch to a store procedure and then

169
00:14:33.120 --> 00:14:37.600
the DBA can optimize the store procedure. Well, Richard, you're getting in.

170
00:14:37.639 --> 00:14:41.720
You're opening a can of worms here, man, wouldn't it first time?

171
00:14:41.000 --> 00:14:46.919
We're going back to the Ornini versus
Ted Neward's SmackDown here? Yeah?

172
00:14:48.000 --> 00:14:50.600
What do you think anyway? Kirogi, what do you think? Yeah?

173
00:14:50.720 --> 00:14:54.879
Well, well, no, you
don't necessarily out of town anything to start

174
00:14:54.960 --> 00:15:00.559
to put it, Jude Saint Scott, you can u Well, in most

175
00:15:00.559 --> 00:15:07.480
cases it's it's either a missing index
from your table, or or your query

176
00:15:07.559 --> 00:15:13.039
is just written in a way that
can't utilize the existing indexes on the table.

177
00:15:13.639 --> 00:15:20.799
Or maybe in some cases you just
have to redesign your table because it's

178
00:15:22.039 --> 00:15:26.879
it's not design the most optical way. So your queries are going to be

179
00:15:26.159 --> 00:15:31.159
slow nowhere, no no matter how
hard and no matter what you try.

180
00:15:31.360 --> 00:15:35.159
Yeah, I just question, is
I didn't write that query, anity framework

181
00:15:35.279 --> 00:15:39.519
wrote it? If it's not utilized
my index as well? What are my

182
00:15:39.679 --> 00:15:43.320
choices here? Like? What what
do you what are you actually able to

183
00:15:43.360 --> 00:15:48.440
do? So the most the most
common reasons that I have seen that your

184
00:15:48.480 --> 00:15:54.200
playery does not use indexes is for
example, so this is there's a term

185
00:15:54.639 --> 00:15:58.720
sargeble or surgeible queries. I think. So if you have a condition like

186
00:16:00.080 --> 00:16:03.679
there is a date of purse,
for example, in the database table,

187
00:16:03.960 --> 00:16:10.120
and you want to find all the
records where the year is, for example,

188
00:16:10.799 --> 00:16:15.279
two thousands, and if you just
uh she just call the date parts

189
00:16:17.720 --> 00:16:23.559
function in a school sell or date
dot year in C sharp and compare it

190
00:16:23.639 --> 00:16:30.639
to two thousands, then it's it's
it's impossible for the database to use an

191
00:16:30.000 --> 00:16:34.720
existing in depths even if it's there, because for for every record it has

192
00:16:34.759 --> 00:16:40.799
to calculate the year from the dates
on the fly, and it can't use

193
00:16:40.840 --> 00:16:42.960
the intepts. Yeah. Yeah,
so it's now going to process every road

194
00:16:44.000 --> 00:16:47.799
to do that for you. Yeah. Whereas if you gave it a range,

195
00:16:48.080 --> 00:16:51.679
you know, then it could actually
write a better where it could be

196
00:16:51.679 --> 00:16:55.320
in it. So yeah, So
in this case, for example, the

197
00:16:55.360 --> 00:17:00.639
solution will be to find our records
where data perse is more end two thousand

198
00:17:00.960 --> 00:17:07.119
first January and less oi equal than
two thousand December thirty one. And in

199
00:17:07.160 --> 00:17:11.359
this case you don't have any more
calpulations on the fly. You just give

200
00:17:11.440 --> 00:17:18.039
the range as you said that you
want all the records where the data pairth

201
00:17:18.119 --> 00:17:22.759
value is from this value until this
value, and as long as the indexes

202
00:17:23.319 --> 00:17:27.720
on the table, it will use
the index ent. It will be a

203
00:17:27.720 --> 00:17:33.400
lot faster because it will just scan
the subset of zeros that it needs to

204
00:17:33.599 --> 00:17:40.119
return your results. That's the most
common mistake I think I have seen.

205
00:17:40.240 --> 00:17:45.000
And it's also easy to make that
mistake because when you are started writing your

206
00:17:45.079 --> 00:17:48.759
query, it's natural to write.
It's like I said, if you don't

207
00:17:48.119 --> 00:17:52.240
think what's going on under the hood. So that's one of the reasons why

208
00:17:52.279 --> 00:18:00.319
it's important to understand what's going when
you wright to acquirying c shape which and

209
00:18:00.799 --> 00:18:04.920
you can't also blames it develop us
always because if you have just one hundred

210
00:18:06.079 --> 00:18:10.039
or one thousand dollars in your test
database, it is going to be fust

211
00:18:10.200 --> 00:18:14.400
so they can't even notice that there's
a problem on Dozi quotes no, And

212
00:18:14.400 --> 00:18:17.440
then you have a million rows and
you notice right away. Yeah, and

213
00:18:17.480 --> 00:18:21.200
you could still blame the developers,
let's face it, but I could see.

214
00:18:21.279 --> 00:18:25.400
You know, setting a date range
is kind of a nuisance because like,

215
00:18:25.480 --> 00:18:29.880
do you really go you know,
greater than equal to two thousand and

216
00:18:29.920 --> 00:18:33.440
one oh one oh one, and
you need time to those zeros zero zero

217
00:18:33.559 --> 00:18:41.119
and less than you know, twelve
thirty one and twenty three fifty nine fifty

218
00:18:41.200 --> 00:18:45.960
nine point nine ninety nine or you
know, or that'd be less than equal

219
00:18:45.000 --> 00:18:48.160
to Like Richard, we said we
weren't going to quote code on this show.

220
00:18:49.079 --> 00:18:52.079
We weren't going to read code.
But it's such a dead thing to

221
00:18:52.119 --> 00:18:56.640
say, hey, if the year
in this date is two two thousand,

222
00:18:56.759 --> 00:19:00.079
get it. Yeah, just not
understanding that you just defeated all in,

223
00:19:00.559 --> 00:19:07.799
Like the index doesn't have a chance
because it's not sargable because Georgy pulled that

224
00:19:07.839 --> 00:19:14.400
one out today, it's the correct
but not everybody knows it. But yeah,

225
00:19:14.480 --> 00:19:17.319
okay, but I mean that there
lies The point here is you're presumably

226
00:19:17.599 --> 00:19:21.119
as a developer, you're also responsible
to the database and you're just trying to

227
00:19:21.119 --> 00:19:23.640
figure out why. And so you've
assembled all the bits together to say,

228
00:19:23.839 --> 00:19:26.839
this is the query that's generated,
here's the query plan that it did.

229
00:19:27.599 --> 00:19:32.559
Yeah, now go figure it out. Like you've now got the ingredients to

230
00:19:32.599 --> 00:19:34.880
say, can I can I write
this as an expression that will query more

231
00:19:34.880 --> 00:19:38.400
effectively or do I have to go
to all the other approaches. Yeah,

232
00:19:38.440 --> 00:19:44.119
another thing to consider is if we
use this saying example, like, if

233
00:19:44.119 --> 00:19:49.799
you're searching for records data versus larger
than here two thousands, then it can

234
00:19:49.839 --> 00:19:56.119
I use index even if you write
it's quietly. But if see if the

235
00:19:56.279 --> 00:20:02.240
condition changes and you want records,
for example, from now fifty and it

236
00:20:02.319 --> 00:20:07.000
turns out that like ninety five percent
of your records in your database have data

237
00:20:07.039 --> 00:20:11.960
perse which is higher than ninety fifty
or ninety twenty or whatever, then the

238
00:20:11.039 --> 00:20:17.240
database may decide that it doesn't make
sense to use the indepths because I have

239
00:20:17.359 --> 00:20:21.440
to return all the almost all the
records that are in the table, So

240
00:20:22.000 --> 00:20:25.440
why bos are with the index.
So it will still not use the index

241
00:20:25.480 --> 00:20:30.119
because it's faster to just scan the
whole table and step the indext So you

242
00:20:30.240 --> 00:20:37.400
have to be careful with it because
depending on the type of data and depending

243
00:20:37.440 --> 00:20:41.680
on the conditions that you are putting
in the work close, it may decides

244
00:20:41.680 --> 00:20:45.519
to use the indevxce in one situation
and not use an index in another situation

245
00:20:45.599 --> 00:20:51.240
on a different type of records.
Sure, so databases are tricky, Yeah,

246
00:20:51.319 --> 00:20:53.519
it always is, And like I
love the one where they go you

247
00:20:53.559 --> 00:20:57.680
know, greater than January first and
less than December thirty first. It's like,

248
00:20:57.720 --> 00:21:02.000
you know, you just left off
all of this number thirty first people.

249
00:21:02.160 --> 00:21:06.160
Yeah, yeah, so it's probably
better to just write less than one

250
00:21:06.200 --> 00:21:11.359
Genuary of two thousand and one and
you yeah, we have anyone. Noah.

251
00:21:11.799 --> 00:21:15.920
I hate date math I hate it. I had a date math bug

252
00:21:17.119 --> 00:21:22.200
in one of my in my websites
just recently about listing gigs, like the

253
00:21:22.279 --> 00:21:23.720
day before the gig. It disappeared
from the site. Like, no,

254
00:21:26.160 --> 00:21:29.279
just a plus instead of a minus
or less than instead of a greater than.

255
00:21:29.960 --> 00:21:32.759
Yeah, I love it. I
know it's and it's these are the

256
00:21:32.759 --> 00:21:36.039
things we chase around, so,
you know, being able to see into

257
00:21:36.119 --> 00:21:38.880
the data set and answer a bunch
of questions. Did I write the link

258
00:21:38.960 --> 00:21:47.400
query wrong, did the actual output
query being correct? Or just badly perform

259
00:21:47.440 --> 00:21:49.240
it? Like how you have a
bunch of choices on how to fix it.

260
00:21:49.759 --> 00:21:53.480
If you tweak the database, you
tweak your expression, you could switch

261
00:21:53.519 --> 00:21:56.200
over to a different methodology, you
know, like you have a bunch of

262
00:21:56.319 --> 00:22:00.279
choices, but at least you know, you know that's that's that's that's the

263
00:22:00.319 --> 00:22:07.480
problem. Yeah. Yeah, so
this this extension supports simple seller and postcus

264
00:22:07.680 --> 00:22:11.839
so you can you'll see graphical quaripulin
fall for post of these databases. M

265
00:22:12.000 --> 00:22:15.880
hmm, it's cool. Yeah,
you can see if there are any table

266
00:22:15.920 --> 00:22:22.480
scans which which will make your query
slow. Yeah, if it's using indepsies,

267
00:22:22.799 --> 00:22:27.960
is its doing in deep scan or
indepsy or things like sets like reading

268
00:22:29.079 --> 00:22:33.880
and understanding quarduplants is a separate science. Probably don't set of skills. Although

269
00:22:33.880 --> 00:22:37.519
the documentation is better than it ever
was, it's it's easier now than it

270
00:22:37.599 --> 00:22:41.799
used to be used to be.
Really, you had to know what query

271
00:22:41.839 --> 00:22:48.359
plan statements were. Like, I
can sense thousands of document database users listening

272
00:22:48.359 --> 00:22:52.960
now, going, ah, sucks
to be you. Yeah, if we

273
00:22:52.960 --> 00:22:57.559
don't have to write any four loops
there, kiddo. Sometimes you need to

274
00:22:57.559 --> 00:23:03.960
look for data in your docum in
store too, right. Yeah. Now,

275
00:23:03.160 --> 00:23:06.640
if there was one right way to
do this, everybody would do it.

276
00:23:06.680 --> 00:23:10.319
The reality is there's a bunch of
ways to be successful, and there's

277
00:23:10.319 --> 00:23:11.720
a bunch of ways to get into
trouble, and it's good to have tuling.

278
00:23:11.759 --> 00:23:15.799
It will help you go down the
right path. True, So I

279
00:23:15.839 --> 00:23:19.480
know you said it before. It's
just an extension. But when you were

280
00:23:19.599 --> 00:23:22.799
explaining it how to use it,
I was thinking, what's the name off

281
00:23:22.839 --> 00:23:26.640
it? Again? So can you
go over like one more time, just

282
00:23:26.000 --> 00:23:30.720
how how you would use this?
It shows up as an extension. Where

283
00:23:30.720 --> 00:23:34.319
does it manifest itself in visual Studio? Yeah you can. Uh. So

284
00:23:34.400 --> 00:23:41.880
once you'll install it, you start
debugging your runs debubble as you would in

285
00:23:41.920 --> 00:23:47.920
any other case. You power over
your equeriable variables. So it's the equery

286
00:23:47.960 --> 00:23:51.759
and police a thins. You can't. You can't use a query plan.

287
00:23:51.880 --> 00:23:56.799
You need to have an eye queriable
and when you holler your mouse on the

288
00:23:57.160 --> 00:24:02.839
ee queriable variable in the in visual
Studio, you can. You will see

289
00:24:02.880 --> 00:24:08.039
a query plant visualizer under the magnifying
class that Visual Studio shows whenever you are

290
00:24:08.079 --> 00:24:12.519
trying to inspect variables. Yeah,
very cool. And when you click on

291
00:24:12.599 --> 00:24:18.359
the quare plant visualizer, it will
it will open a new window. It

292
00:24:18.400 --> 00:24:22.160
will take a second or two to
actually fetch the plan from the database,

293
00:24:22.480 --> 00:24:29.880
and it will render the planning in
an imbedded wheew control. That's very cool.

294
00:24:30.000 --> 00:24:36.759
If see database connection is slow or
the query takes more than five seconds,

295
00:24:36.799 --> 00:24:42.400
then it will time out because that's
the hard timeout limits by the visuals

296
00:24:42.440 --> 00:24:48.759
to do itself, so that's one
thing to keep in mind. That's great,

297
00:24:48.920 --> 00:24:55.240
and also it's uh, it's not
very helpful for queries where you have

298
00:24:55.880 --> 00:25:04.279
first or default dacing or COUNTYCIN or
similar queries which just materialize the results immediately

299
00:25:04.759 --> 00:25:11.920
and you don't have an equerable because
for such queries you don't have an equalable

300
00:25:12.000 --> 00:25:19.640
variable. So's you could remote the
calls to the two first and count or

301
00:25:19.640 --> 00:25:23.960
some and so on, but it's
it's not the same query now because you

302
00:25:25.039 --> 00:25:30.400
are fetching the coal least, not
just count or some or first titan.

303
00:25:30.680 --> 00:25:34.039
So it's nice to be able to
debug what you're actually using rather than have

304
00:25:34.119 --> 00:25:40.119
to piece the debugger just to see
it. That's cool. I guess maybe

305
00:25:40.160 --> 00:25:41.119
it's time to take a break.
When we come back, can we talk

306
00:25:41.160 --> 00:25:47.000
about the Enterity Framework exceptions library.
Yeah, just one thing that I wanted

307
00:25:47.039 --> 00:25:52.799
to add is that this extension uses
existing libraries to render the cirquel server and

308
00:25:52.920 --> 00:25:59.960
postlus quibulence. So I wanted to
say thanks to the source of those libraries,

309
00:26:00.119 --> 00:26:04.359
because without those products, I wouldn't
be able to build this extension.

310
00:26:04.400 --> 00:26:10.000
So yeah, good point cents again
for buildings, a schools, sever and

311
00:26:10.160 --> 00:26:15.640
postcuss visualizer libraries. Cool. Excellent, all right, hold that thought.

312
00:26:15.680 --> 00:26:22.920
We'll be right back after these very
important messages. And we're back. It's

313
00:26:22.920 --> 00:26:27.519
dot net Rocks. I'm Carl Franklin, that's Richard Campbell there, hey,

314
00:26:27.799 --> 00:26:33.640
and that is Georgy Dolla Kish Philly, and we're talking about Nity framework and

315
00:26:33.680 --> 00:26:40.319
what's going on under the hood.
And he's got a great visual studio extension

316
00:26:40.319 --> 00:26:42.160
that you can use to see what's
going on with your queries under the hood.

317
00:26:42.839 --> 00:26:48.279
And I want to bring up this
other a couple other actually really great

318
00:26:49.559 --> 00:26:56.839
GitHub reposts that you have. One
is Nity framework exceptions and the other is

319
00:26:56.039 --> 00:27:02.039
duc dB dot net. But let's
talk about the extensions exceptions right now.

320
00:27:02.039 --> 00:27:06.160
A new framework exceptions thing. Tell
us about that. So this is a

321
00:27:06.240 --> 00:27:14.599
libraries that started. I guess most
libraries start from an internal usage because some

322
00:27:14.599 --> 00:27:18.799
something that I found copying from one
project to another, and I decided,

323
00:27:18.920 --> 00:27:25.640
so we're a bit in a library
and publish thinking that others would find it

324
00:27:25.799 --> 00:27:30.599
useful. So what it does is, again when using anti framework, and

325
00:27:30.599 --> 00:27:36.200
let's say you have a table with
a unique constraint, for example, email

326
00:27:36.240 --> 00:27:45.039
address is a unique constraint in your
table, and you are inserting customers or

327
00:27:45.079 --> 00:27:48.559
whatever in your table, and if
you try to insert a record with the

328
00:27:48.680 --> 00:27:53.680
saying email, the database will throw
an error because the unique constraint is violated.

329
00:27:53.880 --> 00:28:00.079
And when in anti framework, this
means that you will get an t

330
00:28:00.160 --> 00:28:03.680
B updates exception in your c sharp
code. That think with that is that

331
00:28:03.799 --> 00:28:10.559
TB update exception doesn't really tell you
whether this was the unique constraint violation or

332
00:28:10.640 --> 00:28:17.759
the save the insert fild because of
some other error in the database detail somewhere.

333
00:28:17.839 --> 00:28:22.319
Yeah, so you you have to
get the iner exception of this TB

334
00:28:22.440 --> 00:28:27.599
update exception and gets the innermost exception, the deepest one. It's the start

335
00:28:27.599 --> 00:28:30.759
of the whole thing, right,
Like, that's the one that's all the

336
00:28:30.759 --> 00:28:33.039
way and is the one with the
original error, and then it cascades outwards.

337
00:28:33.119 --> 00:28:37.720
Yeah that's that's yeah. Usually that's
the most interesting one, which gives

338
00:28:37.759 --> 00:28:41.680
you the lowest level. Thank you
first, yeah, same time, definitely,

339
00:28:42.319 --> 00:28:45.799
now you're back. So yeah,
it's the it's the lowest level exception,

340
00:28:47.160 --> 00:28:49.759
the one that started all yeah.
Yeah, so the lowest level in

341
00:28:49.839 --> 00:28:56.240
the inner exception has h if you
are if it's sent a skull several database

342
00:28:56.400 --> 00:29:03.920
Senitulian sc exception. If it's a
postcast database, it will be entergy or

343
00:29:03.920 --> 00:29:07.880
whatever it's called exception. And defending
on the on the database, you have

344
00:29:08.000 --> 00:29:15.640
to reject either the error number property
or the error code property or whatever the

345
00:29:15.640 --> 00:29:21.319
library user puts there. And then
again depending on the database, the error

346
00:29:21.400 --> 00:29:26.880
number made the different between different database
engines. So if you want to find

347
00:29:26.920 --> 00:29:30.759
the root cause, and if you
want to know that it's a unique constraint

348
00:29:30.200 --> 00:29:37.359
violation, we have to dig deeper
and write some database specific code in your

349
00:29:38.039 --> 00:29:45.440
anti framework code where you are trying
to abstruct over the database implementation. So

350
00:29:45.759 --> 00:29:53.240
so what this library does is that
it adds an interceptor to your anti framework

351
00:29:55.000 --> 00:30:03.440
dep context and whenever there is an
exception generated from safe changes, it will

352
00:30:03.799 --> 00:30:12.720
dig into the innermost exception and translate
the database specific error in a and the

353
00:30:14.799 --> 00:30:18.119
in different type of exceptions that is
probably by this library. So you can

354
00:30:18.279 --> 00:30:25.599
just change your code to catch unique
constraint exception and if your code hits that

355
00:30:25.880 --> 00:30:32.079
catch block, you now know for
sure that this catch block was caught because

356
00:30:33.359 --> 00:30:38.039
this catch block was hit because of
the unique constraint violation. In the database.

357
00:30:38.759 --> 00:30:44.759
And even if you switch between databases, and if you go from Siquel

358
00:30:44.799 --> 00:30:56.119
Sellers to oralclor myuscule or any other
major databases, your trackage stases insane because

359
00:30:56.160 --> 00:31:07.519
the database obstructed because the at framework
solution's library obstructs it along between all the

360
00:31:07.640 --> 00:31:14.160
databases. So you don't have to
update your code, and you you you

361
00:31:14.400 --> 00:31:19.279
just put your exception handling code in
the in the touch block, and the

362
00:31:19.319 --> 00:31:26.119
expectation is that all the other stuff
that's in the exception handling block is just

363
00:31:26.279 --> 00:31:29.759
residual of the initial error. Yeah, you can. You can show that

364
00:31:30.000 --> 00:31:36.440
this email addresses already in use or
whatever whatever you need. Yeah. So

365
00:31:36.599 --> 00:31:42.680
yes. Apart apart from unique constraints, it handles some other cases like when

366
00:31:42.680 --> 00:31:48.440
you exceed the length of the column
for example, or you provide a now

367
00:31:49.160 --> 00:31:53.559
value for the columns that does not
allow now and so on. You you

368
00:31:53.599 --> 00:32:00.160
will get a strong type exception in
these cases instead of generic w update exception.

369
00:32:00.519 --> 00:32:04.519
Right, Okay, should we move
on to duc dB. First of

370
00:32:04.559 --> 00:32:07.480
all, what is duc dB and
why do we need a duct dB dot

371
00:32:07.559 --> 00:32:14.960
net for it? Yeah? Deb
is a embedded database just like syquol lights.

372
00:32:15.880 --> 00:32:21.799
So you don't you don't need to
set up any database sever or uh

373
00:32:22.400 --> 00:32:29.599
complex configuration. Now complex configuration is
needed. It's relatively new, but it's

374
00:32:29.640 --> 00:32:36.799
becoming popular in the data science work, especially in the Python community, I

375
00:32:36.839 --> 00:32:44.960
think because Python is uh frequently used
for data science and data and mancuation and

376
00:32:45.200 --> 00:32:51.319
things in these types of projects.
See The main difference between dough deb andscularity

377
00:32:51.400 --> 00:32:59.920
is that uscularity is uh transceptional OLI
tip oriented database and stuff. Debe is

378
00:33:00.799 --> 00:33:08.279
all of database more peered for analytical
queries and analytical processing. It's is it

379
00:33:08.319 --> 00:33:14.480
all in in memory or is it
can it persist? To imagine if it's

380
00:33:14.480 --> 00:33:16.480
a memory can persist, well,
it can. It can persist to a

381
00:33:16.559 --> 00:33:22.079
disc as well. It has its
own database format. It can also run

382
00:33:22.839 --> 00:33:25.480
queries on top of CS three files, which is very cool, very cool.

383
00:33:25.519 --> 00:33:34.000
The old old CSV files suddenly become
queriable. It can also run queries

384
00:33:34.039 --> 00:33:39.599
on top of Parket files. And
what's also coool is that you can run

385
00:33:39.680 --> 00:33:45.240
queries on top of Jason files.
And you can also run quarryspond files that

386
00:33:45.319 --> 00:33:52.759
are stored in S three buckets in
AWS, so you don't yeah, and

387
00:33:53.759 --> 00:33:59.720
if if you are if you have
Parket files in S three, it will

388
00:33:59.839 --> 00:34:04.480
just fetch the part of the file
that is needed to answer your queries by

389
00:34:04.559 --> 00:34:09.159
using the HTTP range headers. How
do you pass the S three credentials to

390
00:34:09.239 --> 00:34:16.719
It has its own secret store,
I think, where you can sell your

391
00:34:16.719 --> 00:34:25.679
credentials and for for development purposes.
It can also use your a WS credentials

392
00:34:25.679 --> 00:34:35.480
from your home directory where your store
the dotaland and the all the temporary credentials

393
00:34:35.480 --> 00:34:42.320
that you're using. That's cool.
So set's shorts over you of w B.

394
00:34:42.519 --> 00:34:47.400
It's it's very fast for analytical queries. And if you compare it to

395
00:34:49.039 --> 00:34:53.920
panders, which is very popular library
in Python, or ollars, which is

396
00:34:54.039 --> 00:35:05.239
also a popular library for data manipulation
in r r UH, it's it's lastising,

397
00:35:05.559 --> 00:35:08.039
it's it's very fast compared to them. And so doc TB dot net

398
00:35:08.159 --> 00:35:13.239
is an ad O provider for doc
TB. Yes, yes, that's right.

399
00:35:13.559 --> 00:35:19.320
It's an IDEO dot net provider for
f t B. And you can

400
00:35:19.920 --> 00:35:27.960
query uh f B databases, uh
CSV files, parkt files basically whatever DOTB

401
00:35:28.559 --> 00:35:34.079
supports, you can do it from
a dot net. You can also write

402
00:35:34.159 --> 00:35:42.599
to the B tables and doctor B
also has these very helpful commands for exporting

403
00:35:43.159 --> 00:35:47.119
the database to CSV or PARKT or
whatever style you need. So you can

404
00:35:47.360 --> 00:35:52.960
just use this provider to write to
B and then should see copy command and

405
00:35:53.119 --> 00:36:00.440
it will copy to CSV or PARKT
or whatever formats you specify. That's very

406
00:36:00.440 --> 00:36:06.320
cool. So you have your hands
and a lot of different technologies, which

407
00:36:06.360 --> 00:36:10.000
is you know, kind of typical
of people that you know do open source

408
00:36:10.000 --> 00:36:16.480
work and stuff these days, but
you also have been doing open source and

409
00:36:16.559 --> 00:36:23.079
working on other repos as well,
and especially as you remember the dot net

410
00:36:23.119 --> 00:36:28.360
foundation. Can you can you tell
me what's what's going on in the world

411
00:36:28.400 --> 00:36:30.719
of open source as you see it
right now? What's hot? Well,

412
00:36:30.760 --> 00:36:39.400
I think the usual problem, which
is Microsoft in most cases versus the open

413
00:36:39.480 --> 00:36:45.960
source community. Well, well maybe
maybe it's really verses, but uh,

414
00:36:45.360 --> 00:36:51.840
sometimes people expect Microsofts to provide all
the libraries they need. Yeah, sometimes

415
00:36:52.000 --> 00:36:57.000
sometimes they they are angry when the
Microsoft comes. How is new library beclose?

416
00:36:57.039 --> 00:37:02.800
It kills the sound existing open source
source library. So the usual the

417
00:37:02.880 --> 00:37:09.960
usual complaints, the usual complaints,
right, and the usual complaints from users

418
00:37:09.960 --> 00:37:16.840
who stepped support for free for open
source libraries. How's your experience been with

419
00:37:17.000 --> 00:37:22.880
these? I mean you say in
your notes here that you received some sponsorship

420
00:37:22.360 --> 00:37:28.880
from AWS dot net for TB dot
net. That's pretty cool. Huh yeah,

421
00:37:29.320 --> 00:37:35.599
it happened this March, so yeah, it's probably useful library if a

422
00:37:35.800 --> 00:37:39.599
w S thinks that it's worth the
sponsorship, right, so do they find

423
00:37:39.599 --> 00:37:44.599
that people on using it on a
WS in the cloud? Actually, one

424
00:37:44.599 --> 00:37:50.239
of the members of the committee who
picked these libraries was asking on Twitter which

425
00:37:50.280 --> 00:37:59.719
library to consider for sponsorship and I
mentioned my projects. It didn't get picked

426
00:38:00.199 --> 00:38:06.599
that mass but uh but up to
a couple of mass layte got this supprise

427
00:38:06.920 --> 00:38:09.920
from a w list So wow,
was that a one time payment or is

428
00:38:09.960 --> 00:38:17.880
it recurring? So it's the client
payment of five hundred dollars uh one,

429
00:38:19.079 --> 00:38:23.519
yeah, so twote payments. Wow, that's great. Congratulations, thank you.

430
00:38:23.760 --> 00:38:25.679
Yeah no, no, no,
you're not gonna retire on that.

431
00:38:25.719 --> 00:38:29.559
But it's nice to at least take
some conversation for it. That's cool.

432
00:38:29.679 --> 00:38:34.599
But it also shows, like you
said, that it's an indication that they

433
00:38:34.639 --> 00:38:37.599
find it valuable, right mm hmm. And so my question is, you

434
00:38:37.639 --> 00:38:43.920
know, why, why is this
like something that AWS wants to put the

435
00:38:44.159 --> 00:38:46.280
you know, their support behind,
and not because it doesn't deserve it,

436
00:38:46.320 --> 00:38:51.199
but do they find that their customers
are using it in the cloud, Like,

437
00:38:52.280 --> 00:38:54.840
is duc dB something that you would
use in the cloud as opposed to

438
00:38:55.639 --> 00:38:59.840
I don't know, a SEQL server
or document database to save time and money.

439
00:39:00.760 --> 00:39:06.280
Well, it's it's not an alternative
for simple server, but it can

440
00:39:06.320 --> 00:39:14.239
be UH useful for for example,
UH just recently I needed to use it's

441
00:39:14.280 --> 00:39:21.280
in my UH in my work projects, so I was I'm a little bit

442
00:39:21.320 --> 00:39:27.639
biased, I guess, but one
one one of our vendors is UH sending

443
00:39:27.760 --> 00:39:34.000
a patch of parpet files UH daily
when data changes on their side, which

444
00:39:34.039 --> 00:39:38.199
we need to import in our data
base. Sure, so so we we

445
00:39:38.239 --> 00:39:44.559
set up in a w S lambda
which uses f B and there's the codes

446
00:39:44.599 --> 00:39:51.480
to quality parpet files from S three. So they approat the parpet files to

447
00:39:51.880 --> 00:39:58.440
shared three bucket and the LAMPTA will
run in response to the new file and

448
00:39:58.719 --> 00:40:06.719
use aptybus to to read the profit
files and safe to potrous database. So

449
00:40:07.960 --> 00:40:14.039
so yeah, I think it can
be useful in h in different use cases.

450
00:40:14.159 --> 00:40:19.199
And and to be honest, I
won't be surprised if one day aws

451
00:40:19.519 --> 00:40:24.159
U comes out with a new service
which uses doctably under the hood, because

452
00:40:24.800 --> 00:40:32.639
they have done it frequently with many
different open source projects like elastic search and

453
00:40:34.000 --> 00:40:37.199
but this is also I think if
I'm not mistaken, and probably some other

454
00:40:37.480 --> 00:40:40.639
services as well. Yeah, I
know your numbers are excellently clearly you're building

455
00:40:40.639 --> 00:40:46.000
stuff that helps people when they're starring
and forking and contributing. So that's pretty

456
00:40:46.000 --> 00:40:50.039
cool. Yeah, do you get
a lot of contributors on some of these

457
00:40:50.039 --> 00:40:53.400
projects. I'm just going to take
a peek and think, because you kind

458
00:40:53.400 --> 00:40:59.199
of do that one on your own. The visualizer, like they're fairly unique

459
00:40:59.199 --> 00:41:04.920
products. Takes work. Yeah,
So for TB that net I got,

460
00:41:06.519 --> 00:41:13.519
I think it's the project with most
contributors. I'm not sure in terms of

461
00:41:13.800 --> 00:41:21.239
source code how is it, but
I think it's at like ten or fifteen

462
00:41:21.440 --> 00:41:27.159
contributors. Some of the contributions may
be small, but I remember one or

463
00:41:27.199 --> 00:41:34.400
two contributors who contributed quite a significant
portion of the code, right. And

464
00:41:34.480 --> 00:41:39.360
it's definite to help because when you
are coding alone all the time these projects,

465
00:41:39.400 --> 00:41:45.519
it can become boring sometimes or if
can become tired, which is obvious,

466
00:41:46.119 --> 00:41:52.880
and it's nice to have a person
who who helps even from time to

467
00:41:52.960 --> 00:41:59.719
time because we get tired. Also, sure, sure. I can't write

468
00:41:59.760 --> 00:42:01.400
the same encode every day, you
know, gets old after a while.

469
00:42:01.559 --> 00:42:07.320
Yeah, indeed, Yeah, that's
that's probably one one more reasons why why

470
00:42:07.440 --> 00:42:13.079
the sponsorship is important, because it's
it's it's it's a show. It's a

471
00:42:13.119 --> 00:42:20.320
way to say same kyoto the person
who who spends their own time or people

472
00:42:20.360 --> 00:42:24.159
on something for me? Is there
anything that we missed in these projects that

473
00:42:24.199 --> 00:42:31.639
you'd want to want to mention on? Entity framework exceptances is the most popular

474
00:42:31.639 --> 00:42:38.920
project open source projects that I held
with h more than a million downloads in

475
00:42:39.199 --> 00:42:45.360
case of Siquo, sellulent postcars and
more than one thousand stars. Don't get

476
00:42:45.480 --> 00:42:50.400
up. That's great. And what's
your role that foundation? Do you sit

477
00:42:50.519 --> 00:42:54.880
on some committees? No? No, I just wanted to join it.

478
00:42:55.440 --> 00:43:00.320
Remember what was Yeah? What was
going on? Remember? But you sound

479
00:43:00.400 --> 00:43:04.400
like someone who's you know, doing
serious working open source, so you could

480
00:43:04.440 --> 00:43:07.679
have some good conversations there. They're
all trying to get better. Yeah,

481
00:43:07.719 --> 00:43:12.000
well, what are you working on
now? Or is there anything new that

482
00:43:12.000 --> 00:43:16.320
that you can share? Uh?
In the works, it's uh, it's

483
00:43:16.519 --> 00:43:25.400
the sill features to thew dot nets
library say they have supports for composite types

484
00:43:25.480 --> 00:43:32.960
like leasts and stops and uh net
and so on. So currently you can't

485
00:43:34.320 --> 00:43:40.800
insert those data types from dot nets
and looking towards making it possible to write

486
00:43:40.800 --> 00:43:46.239
those types to the database from the
dot net code. Nice right, sounds

487
00:43:46.280 --> 00:43:50.960
like you're a busy guy. Is
it that you You must really love doing

488
00:43:50.960 --> 00:43:53.239
this? Do you and do you
have a life outside of programming or is

489
00:43:53.280 --> 00:43:59.119
this like your twenty four to seven
obsession. It's a lot of projects.

490
00:43:59.440 --> 00:44:05.519
Yeah, yeah, yeah. There
is this joke when so software engineer goes

491
00:44:05.559 --> 00:44:14.719
on vacation and finally I can work
on my projects now. Oh yeah,

492
00:44:14.880 --> 00:44:17.360
all right, so this is it's
been great talking to you, and wow,

493
00:44:17.519 --> 00:44:21.880
what a jam. This is great
stuff. People need to spend some

494
00:44:21.920 --> 00:44:24.039
time in these repositories and take a
look around and some tools that can help

495
00:44:24.079 --> 00:44:30.239
you. Absolutely. Yeah. So
what one one thing that I I think

496
00:44:30.280 --> 00:44:35.719
I found it on Twitter aple a
couple of weeks have always sought towards The

497
00:44:35.760 --> 00:44:43.199
discussion was why do so engineers write
code after work end? But why do

498
00:44:43.280 --> 00:44:50.519
they spend their time on something that's
uh that they do as a job And

499
00:44:50.519 --> 00:44:55.920
and one of the comments was that
engineers like solving problems. They enjoy it

500
00:44:57.239 --> 00:45:04.199
and they work on h so they
spend time after the work. People say

501
00:45:04.400 --> 00:45:07.920
enjoy solving the problems. So they
are just doing what they was they enjoy.

502
00:45:07.039 --> 00:45:14.280
So yeah, I think that's a
good explanation, and it's true,

503
00:45:14.760 --> 00:45:19.000
It's absolutely true. And yeah,
sometimes I find it hard to explain to

504
00:45:19.039 --> 00:45:23.920
other people, like why are you
doing a tense I just yeah, yeah,

505
00:45:24.280 --> 00:45:28.039
I did too, and I do
it for fun, you know,

506
00:45:28.159 --> 00:45:30.400
when I'm looking around and saying,
you know, I got a little lull

507
00:45:30.480 --> 00:45:36.639
here, Shall I like learn some
new music on guitar? Yeah, no,

508
00:45:37.199 --> 00:45:42.599
I'm going to write some code,
Yeah for sure. All right,

509
00:45:42.719 --> 00:45:45.119
Georgie. Great talking to you,
and thanks for thanks for sharing the time

510
00:45:45.159 --> 00:45:47.880
with us. Thanks again, all
right, and we'll talk to you next

511
00:45:47.960 --> 00:46:13.599
time on dot net rocks. Dot
net Rocks is brought to you by Franklin's

512
00:46:13.639 --> 00:46:17.599
Net and produced by Pop Studios,
a full service audio, video and post

513
00:46:17.599 --> 00:46:22.320
production facility located physically in New London, Connecticut, and of course in the

514
00:46:22.400 --> 00:46:29.280
cloud online at pwop dot com.
Visit our website at d O T N

515
00:46:29.320 --> 00:46:32.880
E t R O c k S
dot com for RSS feeds, downloads,

516
00:46:34.039 --> 00:46:37.000
mobile apps, comments, and access
to the full archives. Going back to

517
00:46:37.039 --> 00:46:42.639
show number one recorded in September two
thousand and two. And make sure you

518
00:46:42.719 --> 00:46:45.440
check out our sponsors. They keep
us in business. Now go write some

519
00:46:45.440 --> 00:47:07.159
code. See you next time you
got jamdavans to the Nest area.

