Speaker 1: How'd you like to listen to dot net rocks with
no ads?
Speaker 2: Easy?
Speaker 1: Become a patron for just five dollars a month. You
get access to a private RSS feed where all the
shows have no ads. Twenty dollars a month, we'll get
you that and a special dot net Rocks patron mug.
Sign up now at patreon dot dot NetRocks dot com. Hey,
welcome back to dot net rocks. I'm Carl Franklin at
Amerchard Cabell, and we are gonna be talking to Jimmy
Bogard real quick as you do again, probably for the
what time, maybe eighth or nine?
Speaker 2: No, No, it's been a few Yeah, he hangs around,
Yeah he does.
Speaker 1: But before that, Richard, let's talk a little bit about
what happened in nineteen forty one. Oh, just this little
thing called Pearl Harbor that geez, yes, yeah, I kind
of mentioned that the US entering the war yeap December seventh,
the date that will live in FAMI. This year was
also marked by widespread conflict, of course, with millions of
casualties and the escalation of the Holocaust. It wasn't a
happy year. But according to the movie nineteen forty one,
High Wood.
Speaker 2: It was a romp though. I mean he was starting
to make it a play on the craziness in California
of the risk of the Japanese invading the mainland, which
was definitely a thing. Yeah, yeah, but a fun waste
of two hours. If you want to watch that movie,
maybe I.
Speaker 1: Think it was a longer movie, wasn't it.
Speaker 2: It was long. Yeah, It's one of Spielberg's very few debacles.
From a box offer's perspective. Sped to fortune and it
didn't make much.
Speaker 1: They spent a fortune, mostly on destroying things. I think
it has one of the records for most money spent
on destruction. So daft and John Belushi, of course doesn't.
He doesn't really have that big of a part in it,
but he is kind of funny.
Speaker 2: All right.
Speaker 1: Well that's what I got for nineteen forty one.
Speaker 2: What about you, Richard, I'm gone to talk about Conrad
Zoos Conrad Zeus. Conrad Zoos in nineteen forty one implemented
a computer called the Z three, which is arguably the
first true programmable with software computer in the world. Several
years before von Neuman even defined all the specifications for
what a proper computer would be and it's called the
Z three because it was his third to tenth. He
was working in Nazi Germany, although the Nazis weren't all
that interested in it. It used, it had all the
things you can think of, floating point arithmetic, input and
output device is a control unit, and it stored its
programs on a punch tape reader. But he didn't use
paper because paper was already in short supply. He used
old movie film. Oh wow, So he punched hole they
punched tape rate to punch holes in the movie film
to store his programs. But he only had a few
hundred bytes to work with, right, because it's nineteen forty one, right,
But it was the sort of first complete what Bond
Newman would consider a computer.
Speaker 1: And so I imagine this is way before transistors, so
vacuum tubes.
Speaker 2: Not even largely mechanical, you know, a bunch of that
stuff was Z one was fully mechanical. This was sort
of a hybrid. But yeah, sixty four words of memory,
so we didn't even have the term bite at that point.
So yeah, so what a word is two bytes? Right?
I think it depends on what you mean. In nineteen
forty one, right, it's complicated, but yeah, it was a
programmable digital computer in nineteen forty one that nobody valued.
So cool.
Speaker 1: I had no idea, and he escaped to Switzerland before
the end of the war with a bunch of his
tech and built his fourth machine, called the Z four,
which continued to run in Switzerland till the nineteen nineties. Wow,
no relationship to the Z eighty, which is a xylogue chip, right,
nothing to do with that at all. Yeah, wow, very cool.
All right, Well with that, let's roll the music for
better No a framework?
Speaker 2: A man, what do you got?
Speaker 1: So this is a kind of a cool blog post
I ran into it's relatively new things you should know
about HTML heading into twenty twenty five.
Speaker 2: Interesting.
Speaker 1: That's a great thought, right, So it says not all
of this is like absolutely brand spanking new, just dropped
in twenty twenty four stuff. Some of it is, but
generally it's relatively new stuff. That's all pretty great. I'm
pointing things out that I think are really worth knowing about.
It's possible you haven't kept up too much with HTML developments,
as it tends to rightfully move a lot slower than
say CSS or JavaScript. Sure, so I'm just gonna leave
that right there. I've read it and it's it's good.
I learned a lot of stuff. So just head over
to what is this nineteen forty one dot pwop dot
me e, or go to the show notes and get
the link.
Speaker 2: It's a good article. So always the first link in
the list HTML. In twenty twenty five.
Speaker 1: Yep, So who's talking to us today, Richard?
Speaker 2: So this is the seventh show with mister Bogart Panelted
Dipraama a few years back. The very first one was
only in twenty fourteen, which is embarrassing really because as
we all know, he was actually part of the n
hibername mafia. Even though he's one of the quieter ones,
we should have probably been talking to him back then.
Speaker 1: Yeah, that says a lot for Jimmy though he was
one of the choir.
Speaker 2: It was like the polite alt dot letter right, Yeah,
I mean he wasn't wrong. The guy was doing open
source before it was cool. And as we pointed out
to Jeremy a while ago, actually it's like, you know,
you guys won right like this the core movement taking
away the vitriol, the core movement of use more open source,
not just stuff made by Microsoft. Even Microsoft now thinks
that's a good idea, Like.
Speaker 1: Yeah, and Jeremy's like, I'd rather not talk about that.
Speaker 2: I'd rather not talk about it, and I just probably
suspend the Jimmy's very much in that same boat. But
jumping back to twenty twenty three episode eighteen sixty two
where we talked about mediator, got this comment from Alex Krause.
He goes on a bit, So I'm going to summarize
because he just say, hey, this is a bit of
a rough feedback, and he's been listening to the show
for a long time, and what he really gets into
it's like, if you the mediator pattern, which of course
is what media is built on, along with a bunch
of other tools along with the coupling, brings a violation
of the explicit dependencies principle, where a class should clearly
indicate what it needs in order to function, and hiding
dependencies backfires was run times errors and more complex call stacks.
It's not like this is the first time's come around.
Serve your locator back in two thousand and four or
so then became an anti pattern. Maybe we're just coming
back around again. He says, don't get me wrong, I've
successfully used the media or on many projects and I'm
not against it. Just the fact that most evs blindly
treated as the only way of good programming makes my
enrobal raise awareness to its downsides. I'm going to leave
that to Jimmy to comment on me, because I think
you know everything comes with a price, without a doubt.
But Alex you wrote, only wrote it a year ago,
But thanks so much for your comment and a copy
of music co buy. It's on its way to you,
and if you'd like a copy music Cobe. I wrote
a comment on the website at dot at rocks dot
com ra on the facebooks. We publish every show there,
and if you comment there and I read in the show,
we'll send your copy music code.
Speaker 1: And of course music to code by has a Brandy
spank in New Well about a month old now track
twenty two, So did you get it? Music tooco by
dot net You can get that by itself, the entire
collection as MP three wave or flak.
Speaker 2: So there you go.
Speaker 1: And also you can get us all on the social
media's of of course, we've been on ex Twitter forever,
We're on Macedon and also Blue Sky some form of
at Carl Franklin and at Rich Campbell you'll find.
Speaker 2: Out that's right. You can generally find us there, yep.
Speaker 1: So officially, let me introduce Jimmy Bogard as if he
needs an introduction by now. He's a superstar, but he
is the creator and maintainer of the popular open source
libraries Auto Mapper and mediator Meedia t capital R. Jimmy
is an independent software consultant based in Austin, Texas. He's
received the Microsoft Most Valuable Professional Award or the MVP
Award every year since two thousand and nine. Jimmy, how
you doing and how do you respond to that comment?
Speaker 3: Well? I was doing well. I should mention, though, I
have a very strict policy on negative feedback from my
open source and must be submitted in writing with a
self dress stamped envelope to po box. Not kidding, I
mean I've heard that a lot. It's all software's all
trade offs. I tend to shy away from these kind
of like hard and fast principles of software development because
it's just like someone's opinion, man, yep, And so to me,
it's it's it's all about that sort of trade off
and really, to me, the patterns that enables are more
interesting than like that that strict thing, that strict sort
of thing. So in other other kind of frameworks, I
just do different stuff. I don't know if you've had
the fast end points folks on, but they've got a
similar kind of thing that doesn't use like this, uh
doesn't have the kind of design issues. So I don't
care about that sort of stuff. I just look at, well,
what is does this enable the kind of development, the
kind of patterns I want? Otherwise I don't get too
hung up on that sort of stuff.
Speaker 1: Yeah, we pretty much rail against absolutism because only siths
speak in absolutes.
Speaker 3: And as we know, I mean at the end of
the day, like I'm just I'm there to ship features
for the customer and all the other stuff like they
don't care. They don't care about that stuff like can
I ship features today and can I continue to ship
feezer features fast going forward? That's really what they care about.
Speaker 2: And not to focus on mediator because we've already done
that show. But there are particular scenarios where the mediator
approach makes sense.
Speaker 1: Absolutely.
Speaker 3: Yeah, it's it's it's just name pattern with known benefits
and drawbacks. You just you just understand when it's when
it's helpful, when when you don't want those drawbacks. And
that's pretty much.
Speaker 2: It, right, And it's true most things.
Speaker 3: Yep, as my hair has gotten gray or I start
to care less about that sort of stuff.
Speaker 2: Yeah, yep. You know. The more you know, you more
you realize no one right way on anything. All right, Well,
congratulations on version fourteen of Automapper. I don't know how
that happened.
Speaker 3: It's a teenager. It's all growed up.
Speaker 2: Yeah, no kidding, it's like thinking about driving.
Speaker 1: What year did that come out?
Speaker 3: Automapper The first first release was on CodePlex, where you
had to download it manually from whatever downloads tab on
that website in two thousand and nine, but it originally
started in two thousand and eight. It was an internal
internal library for a client project I was on. And
then after about six months of being internal, we were like, okay,
now it's time to graduate to open source. I guess
put it up on CodePlex.
Speaker 1: That was the place it was.
Speaker 3: It was I place.
Speaker 2: Yeah, back in the day.
Speaker 3: Choice was that or source Forge, yeah.
Speaker 2: Source right, it was the less hostile to Microsoft. Source Forge,
althoughmittedly Coplex owned by Mind.
Speaker 1: Yeah, we liked CodePlex and Sarah was in charge of
it back then, remember, yeah, yeah, we interviewed it.
Speaker 2: It was a long time ago. So wow.
Speaker 1: So and you became an MVP in two thousand and
nine obviously because of the work you did with Automapper
and its instant popularity.
Speaker 3: Well I know, you say obviously, but they don't tell
you why you get the thing. It's like I put
all the stuff in a spreadsheet, I sent it out
and maybe something sticks. But at the time I was
at the also co authors of the NVC and Action
books with with Jeffrey Palermo as well. I assume that
was it, but who knows, because like back then, automapper
had like, you know, thirty downloads and like most of
it was me.
Speaker 1: I was thinking that it was an instant viral hit.
Speaker 3: No, I want to say, it's a good five years
or so before Microsoft even recognize open source as a
community contribution for.
Speaker 2: MVP award Wow right yeah wow.
Speaker 3: Or then it was like, oh that's fine.
Speaker 2: Those that transition time was weird, right, Yeah.
Speaker 3: That was an interesting time, So let's write a book
about it.
Speaker 2: Yeah, save me. I mean, yeah, Coplex, they thought they
shed their own source forage, and then Guthrie saw it
as a way to ship versions of silver Light out
of the box, right, Like that was his main problem was,
I can't wait for new versions of dot Net and
new versions of Studio to come along. I need to
move quickly on this, and he did, right. I mean,
they touched up four versions in two years. Like it
was really fast. Although I mean I would argue the
biggest thing that came up the Coplex interaction was the
re that jQuery showed up in twenty ten because the
MVC guys were on the path. They're building their own
dom tree navigator and they actually pushed the initial bits
out through Complex and the community went, what are you doing?
You should use jQuery and they did. And jQuery in
Student twenty ten was a big deal because it shipped
in the box with its original license with an MIT
license and they provided tech support for Yeah.
Speaker 3: That was the huge one, the support thing.
Speaker 2: Yeah, yeah, you're supporting a product you didn't right.
Speaker 1: I also remember those silver Light interim bill days as
being particularly heinous to oh dude developers who were trying
to find the latest version because all the blog posts
typically didn't have dates on them, and every one of
them said use this version.
Speaker 2: Right, and they were all wrong, right, and we're all wrong. Yeah,
but that's when we did that is software development two
complex panel.
Speaker 1: Yes, that's right, and out of that grew new get Hey,
what if we had an RSS feed for these things
so we could always know which one is the most recent?
Speaker 2: Well and really an MPM alternative, right, Yeah, that's what
that was. The mandate that Hack was given was go
forth and build GEMS or NPM or like.
Speaker 3: Well, no one likes to download zip files from a
random website.
Speaker 1: I wouldn't downloading zip filef I knew was the right file.
Speaker 2: All you knew for sure was it probably not the
right file.
Speaker 1: Yeah, those were hard times, but you know, if you
could keep up with Scott Guthrie's silver Light, you know
it installs updates, then it was it was good sailing.
Speaker 2: And what was happening to them VC?
Speaker 3: And you know there was actually an autumn opper for
silver Light at one point. It's unlisted now, but.
Speaker 2: Yes, yes, And the only reason we're angry about silver
Light is because they'd ever built us a bridge out right,
just stopped.
Speaker 3: No they said, they just set it on fire.
Speaker 2: That's fine, liking Fune put it into maintenance. Oh, it's
supportive for the next ten years. It's like, yeah, but
there's one way out. Yeah anyway. Anyway, it's strange how
who's still angry about that? Like, there's fewer people angry
about that. I know, I can find today angry about
like the old europinicious monopoly m you know, dollar sign
than silver, like because there's a ten year gap between
the two, right, it was two thousand with that stuff,
and those folks have moved on. But there's still folks
that are plenty angry about twenty ten, twenty eleven.
Speaker 3: Yeah, I was just angry about having to release a
separate package for people just for some light. It was
compiled separately those the days before, like net Standard and
all that sort of like multi targeting, So you had
to create something completely separate to support different run times.
Speaker 2: And you're also the guy who sort of pioneered all
of the abuse that maintainers take what you got there first.
That's why he's got That's why he's got the po box.
Richard self addressed staff downvelope.
Speaker 3: Yes, No, I know, I usually joke at my like
introduce introducing myself for like conference talks. Whatever I say,
Jimmy Buguart, author of bottom mapper, So I'm sorry or
you're welcome.
Speaker 2: Yes, No, I don't know which you said.
Speaker 1: It was about five years before automapper really took off.
What do you remember that moment?
Speaker 3: No, because it was it was something that I had
built for a specific problem we're having on a on
a project back in two thousand and eight, so a
long time ago, like some almost graduated high school this code,
and I just wrote a blog post of like, here's
you know, here's this problem we're trying to solve that
I guess was a common problem other people had, but
it's something that we said, you know this, we're having
this specific problem, and uh, we knew we needed something
to address it. And so that was the that was
the solution. But then after that I got out of
web development for three or three or so years doing
just like right a back end junk and so this
it was growing just kind of unbeknownst to me, and
then coming back to web to be like, oh, this
is the way people build these things now, I I
wasn't paying attention. I was, you know, back and doing
back in APIs and messaging apps and stuff.
Speaker 1: Were you tracking downloads right, I mean.
Speaker 3: As much as you could on coplex, which was to
say not at all, not so much. But really, once
once new get hits, it made it much easier to
consume packages, consuming libraries than every you know, every like
everything was taking off. I still don't know why this
took off exactly. I mean I didn't do conference talks
on it. My my talks and posts were mainly about experience,
things like here's what I'm doing on my projects, and
here's problems I solved the projects, and the autom mapp
was a soution for some of those things, but I didn't.
I never like just straight up advertised it. So no,
it's it's kind of a mystery.
Speaker 2: Well it's that.
Speaker 1: That's kind of way it grows is by the community
taking hold of it and telling each other about it,
so that that's the best. That's the best endorsement you
can get, right, Yeah.
Speaker 3: It was, even there was a few years in. It's
like some Raindow emailed me even like a logos that hey,
you should have a logo. I was like, I probably should,
and I can't draw, so thank you for that.
Speaker 2: He literally handed you a logo and says, what about this.
Speaker 3: Yeah, here's a here's a file with some weird extension.
I even recognize what that extension with a file was,
like dot ai or something. I have no idea what
it is. It's a photoshop file, so who knows.
Speaker 2: Yeah, I love there's still all old blog posts like
one from two thousand and nine and twenty ten, not you,
somebody else. I'll leave them namelessing. Here's how you get
started with automapper.
Speaker 3: That has been one of the biggest challenges though, because
it's been around for so long that the API has
changed over the years. So it's the kind of classic
thing of like you answer stack overflow posts, but there's
there's needs to be an expiration date almost of like
this is only good for five years, then it's probably wrong.
I guess it's a kind of a common promise sack overflow.
I don't trust anything. If it's a jobscript question, then
if it's older than two years, it's certainly wrong.
Speaker 1: I really got happy the day that the search engines
added that little filter you know, sort by most recent
oh yeah, or you know, only things that have been
written in the last year or month or whatever. That's
been invaluable to me because that was a huge problem
on the search engines before they did that.
Speaker 3: So this is that's no different that you know, people
still have these to this day, Like, oh, I tried
to copy the code from this post and it didn't work.
I'm like, oh gosh, you need to go through about
five upgrade guides and then it'll work.
Speaker 1: And it still infuriates me when I read a blog
post that doesn't have a date on it, it just
infuriates me. It's like, why wouldn't you put that.
Speaker 2: Just means don't trust it, right, yeah, or just.
Speaker 1: You know, view the source and try to find out
when it was written, you.
Speaker 3: Know, way back. Sometimes I do that too.
Speaker 2: Yeah, yeah, if you if you you can find that
an archive dot org in twenty ten, you should probably
not read it. Anything you find an archive not a
good idea. That game. Again, that's the issue of it's
been around for more more than a decade.
Speaker 3: So yeah, it's crazy.
Speaker 1: And so I mean, you're going to have access documentation
it is what it is. How how often did you
add well, you've obviously added features to it fourteen times,
but yeah, you know what were the what were they
bug fixes? Were they little features?
Speaker 2: Is it?
Speaker 3: You know? Well, there's a period of time when I
was just happy that people noticed it that I was
accepting every pole request that came through the door, not
realizing that you have to support everything that you're merging
to your code base. And so there's yeah, some things
that were in there and that I wound up taking
you out. But some of the things were like big
things or performance related. So the I and the whole
idea behind the libraries, I've got a dto data transfer object.
Usually that's exposed to an API or to the web.
If you go to render on htmail and it's a
simplified version of a more complex data model or EF model,
You've got going behind the scenes.
Speaker 1: Right, you don't want to expose everything to the client
that's in your data model.
Speaker 3: And I think everyone's done this too, where like they
expose an EF model on an endpoints and then not
realizing people can do navigation properties and like suddenly things
start breaking. It's like no, no, no, just only the data
you need, nothing else, nothing more. And then autom Apple
is just a tool to say, well, if the thing
on the left looks like the thing and the rights,
then go ahead and stuff the thing on the left
with the stuff on the rights. But initially behind the
scenes was using the slow reflection API, which was easy
to program against but terrible performance wise. So one big
thing was converting that all to expression tree compilation, yeah,
which is like you you don't have a full programming language,
but you have like the worst part of every world,
except it compiles into like native code and runs really
fast after that, So that was a big thing. Another
big thing we did was you can we could make
other targets for this kind of mapping, and so one
of the other mappings we did was going from you know,
the source complex model to the dt O. Instead of
that being an end memory expression compilation, it can also
push that expression tree over to something that translates that
expression tree to SQL. Right, so I can push that
translation to NITY framework. And when you do any framework,
you know, blow out include but include and if you
dot dot select, then it own. And then if we
do that select in any framework, it pushes that all
the way down to the database and only selects the
data at the database level too, so it makes it
it allows for much more efficient queries in fact, you
don't even need the dot includes anymore. You can just
say that select. So we extended to say, well, what
if automatic could do that for you? Because it's that's
what you're trying to do, is tak complex data model
and stuff into this. Why don't we push that down
to the SQL level and then have it figured out
just because like the shape looks like it should, you know,
just trimming out the stuff you don't need.
Speaker 2: Yeah, I know, that's and that goes faster. I'm just
thinking about the the convolutions you've gone through in fifteen years,
because that means you also jumped across the core too,
which you know so much your reflection like surprise.
Speaker 3: Yeah, I've ridden the whole ride of like d nx
kd id XC, all those like very early iterations of
dot net Core I had to deal with because like
people were using it and wanting to use my library.
So I got to learn what did David Fowler come
up with today? Okay, you'll put that there. Yeah, that's
the that's the least fun part of open sources. You know,
every three years, the way to do builds and deploys changes,
so you got to go right update the boring stuff
for all that, but well it these days it's pretty seamless.
Speaker 2: You're building tools for developers, and they always want to
use the new gadget. So it's like K is alpha alpha,
but why does the maper work with it? What's wrong
with you?
Speaker 3: Oh? Yeah, exactly, which is why I had that the
silver Life because like people ask for it, and you know,
again like at the time like sure, yeah, I'll do this,
and then I go, look, I just look at the
download cup five thousand, five thousand downloads.
Speaker 2: Of the silver Light edition, the Silver Life version.
Speaker 3: How much work did I put into that thing for
ten people?
Speaker 2: And you're talking over the duration of silver Light then,
so yeah, exactly, yeah, yeah means yeah, if you look
at it that way, Jimmy, you're just going to make
yourself sad.
Speaker 4: Yeah.
Speaker 3: I don't. I never had, I never. This is one
of my lessons learned too from open sources. You know,
it's it's good to provide features strictly for the community,
but because you have to support them forever, then you
need that level of commitment if you're going to bring
that stuff on. So for me, ninety five percent of
the open source work I do is client driven like
something my paying customers need, right, and I want to
use it on future things. So I make an open
source library and then boom, there we go.
Speaker 2: Yeah.
Speaker 3: I don't do the hobbyist aspirational open source anymore. I
just you know, don't have time for that dot gift
sort of thing.
Speaker 2: Yeah. Yeah, but I mean the conversation we've had with
minus targets and he thinks almost exactly the same way. Yes,
I could add that feature to c sharp, but how
many people are going to use it? And we have
to support it forever?
Speaker 3: Right records?
Speaker 2: Right, it can never take it out.
Speaker 3: Yeah, And there's only so much you can do with
a just sort of an upgrade guide to say, yeah,
lots of things change and here's a wiki doc to
fix things now, people and go, you know, for for
a more gradual approach. You Yeah, yeah, they're lucky and lucky.
I gave an upgrade guy, you know, like, just figure
it out?
Speaker 2: Did you want your money back? There? I mean, c
Shark has been very resistant about redeprecating features. Ever, they
never wanted to break anybody's code. But have you deprecated
features like taking stuff away down and breaking in fourteen versions?
I must have yeah, absolutely.
Speaker 3: Yeah, there's there's definitely things so you mentioned, like just
the people abusing or features I wouldn't use. That's something
that initially i'd see, Okay, I can see your use case.
That seems interesting, But you know, because that's not my
day job to consider other people's features, I just kind
of rubber stamp it and let it go right, And
then only after a year or two have been the
crazy follow up feature requests, I'm like, oh no, that
was actually a mistake. I shouldn't have allowed that.
Speaker 2: Yeah, yeah, you opened the door.
Speaker 3: So there's definitely features where I see like, okay, maybe
it could work in simple use cases, but because it
may fall in its face on anything more complex, it's
not even worth having. So I'm just gonna take it out.
Speaker 2: Yeah.
Speaker 3: There's also in cases where instead of me completely taking
out the feature or deleting it entirely, I will take
it out and put it into a separate package, and
then as someone opens an issue, I make them an administrator,
right like, now it's your problem there, you can fix this.
Speaker 2: So you have you have a separate package. What do
you call something like automapp or evil.
Speaker 3: Automa Rapper did go after yourself. I don't. It's either
when I completely delete it, but like, if there's enough
people that want it, Like.
Speaker 2: If you're going to depend on this evil, I'll give
you a place for the evil.
Speaker 3: Yeah, I mean the one example of that that was
it was actually a friend of mine the submitted pole request,
who directly support data reader, which I didn't quite understand.
But it was the idea that you could map from
data reader to a dt O. And the only reason
that exists is because no other micro ORMs exist, Like,
there was no dapper at the time, right, which does
basically that it just maps from SQL to code to
dt O and gets rid of the rum junk. It
didn't exist, so that thing exists on some like.
Speaker 2: And you're talking about dapper d a p p e
R as opposed to Dapper d a.
Speaker 3: P R Yes, sorry not DAPR. Yes.
Speaker 2: Just you know, we usually end up talking about da PR,
so it's nice to be talking about DAPPER.
Speaker 1: I have way more experience with d a p p
e R than I do d A p R.
Speaker 2: Yes.
Speaker 3: Pro tip open source people that want to or people
that are aspired to be open source developers is pick
names that don't conflict with other already existing names in
the universe. Yeah, that would be nice. Yeah, so that's
like automapper did not exist as a name thing before.
Although my kid does tell me that there's some automapper
for Minecraft or something that will I don't know.
Speaker 2: Oh my god, that has nothing to do with me.
Speaker 3: That's like, will automatically map out a terrain on something?
Speaker 1: Well, they should automatically send you a royalty check, is
what they share. Let's take a quick break. We'll be
right back after these very important messages. Did you know
you can lift and shift your dot Net framework apps
to virtual machines in the cloud. Use the elastic beanstalk
service to easily migrate to Amazon EC two with little
or no changes. Find out more at aws dot Amazon
dot com, slash elasticbeanstock. And we're back. It's dot need Rocks.
I'm Carl Franklin. That's Richard Campbell. Hello, that's our friend
Jimmy Boguard. Automapper turned fourteen, and we're sort of going
through the history of it, and you know, the bumps
and cracks along the way, and how much time Jimmy
wants to spend on it, you know.
Speaker 2: Yeah, I mean you've already. This was a tool you
built for yourself working on with your cloud allience, and
that's how features generally get at it. I guess other
people have contributed as well for their features for their
clients where it's made sense. Yeah, yeah, it's not. This
is not a for profit business, no, and.
Speaker 3: This is I mean, this is obviously a challenge for
any open source maintainers, just the sort of the economics
of it all, Like, how do you how do you
pay for the time for this sort of thing.
Speaker 1: Well, here's a simple question, is did it get you
any business that you otherwise wouldn't have had?
Speaker 3: I don't think so, because it's not something I generally
consult on.
Speaker 1: You're a consultant, though, yes I am so. H So
that's a nice little resume to have out there. Somebody
uses automapper and says, oh, we need somebody to do
it back end. Oh that Jimmy Bogart guy's pretty smart.
Let me call him, I know.
Speaker 3: And it's actually it was many years before I even
started letting people know that I was the author of it,
because I just it wasn't part of my like persona.
Speaker 1: I should we call auto mapper.
Speaker 3: I am not a I'm not like I pretend to
be like very arrogant, but actually I don't. I don't
like that kind of attentiones. So for the longest time,
I didn't like advertise myself as the author of it
because it's a shamed or anything. It's just realizing, oh,
people don't know that I made that thing, right, because
I just don't do like talks on it.
Speaker 2: I don't think I've ever seen you do a talk
on autobapper.
Speaker 1: No, your name. Your name's on the product though, right, oh.
Speaker 3: Yeah, yeah, yeah it is. But in terms of like
getting uh incoming business, that's just not the The recording
we did on modernization of dot net, migrating from Framework
eight migration that gives you know, eight thousand times more business,
because that's a big problem people have than So.
Speaker 2: I didn't make that show to get you business to
be I made that show because lots of people have
that problem. You know, you really do know your way
around solving it.
Speaker 3: No, I know, it's uh yeah, I mean that. My
blogging and talking has always been about here's what projects
have worked on in the past one or two or
three years, and sharing lessons learned. And I'm not there's
not just that many lessons learned I've had from just
strictly autom apple. It's always like, h just whatever random
project I've been working on. So yeah, I know, I
maybe that's true, Carl, because I don't like, I know,
marketing is such a weird thing of like how many
touch points do you get before someone comes into the door.
So I'm sure that didn't hurt anything, But I don't
get like, hey, can you help me fix this problem
related to automapp It's just not a thing.
Speaker 2: Yeah, And to me, the main conversation we have about
automappers are the dues and dots of maintaining a popular
open source library. Mostly don'ts.
Speaker 3: Don't accept every poll request. You do actually test the
release before you push it out onto new gets too.
Speaker 2: Yeah, that's a good one.
Speaker 3: Unsuspecting masses.
Speaker 1: Yeah, do you read through the code and make sure
it's not calling out to China or something?
Speaker 3: You know? I do get that every once in a
while of someone coming up like do you have any
not own security vulnerabilities? Like no, I don't. I mean
maybe there's unknown ones, but.
Speaker 2: No ship with a dozen vulnerabilities for your viewing pleasure.
Speaker 1: Security features.
Speaker 2: It's a tool that devs use to generate code. Right,
it lives in the dev environment. You don't deploy it anywhere,
like that's not a thing.
Speaker 3: No, it runs in production.
Speaker 2: It's not a okay, so it is part of the
production code.
Speaker 3: Yeah. Yeah, So that something that's different from like a
T four template style or co generations is this does
at runtime generate the mappings for you. And the main
reason for that is no one ever asked me to
do the co generator version and wanted to pay for it.
So it's just stayed like that until someone wants it
and wants to pay for it. That's like any major
feature in the open source it's like someone has to
put the bill initially, and if no one does, then
it's just not going to get done.
Speaker 2: Well, it's usually your customer, right, I'm just looking on
new Get it's like seven hundred and sixty million down loads.
Speaker 3: Well, I mean I do have a very extensive botnets
that is working over time to pump those numbers.
Speaker 2: Well, and the current before fourteen, the thirteen oh one,
which is the you know the that's eight eight and
a half million of those, Like that's a that's a
big version. That's what people are. It's nice to see
people are up to date. Yeah.
Speaker 3: Yeah. We had a lot of questions internally too, of
just like support, like what do we want to support
in terms of dot net versions? So at some point
we're like, we'll lock ourselves to LTS Microsoft, but again
that takes work to do. So these days it's mainly
what my clients are. My clients are all doinit eight.
So I support dot Nite eight.
Speaker 2: Sure that's the current LTS version.
Speaker 3: Yeah exactly. I think six just stops or.
Speaker 2: Six just came out. That's what people people are freaking
out about. But you're still going to put a security
patches for dot net sake. It's like, yeah, they just
call it dot net eight, but don't worry, it's patch.
Speaker 3: But even we even dropped support for framework just because
we were annoyed of having to to deal with it.
Speaker 2: It's just for four.
Speaker 3: Yeah, for for anything, right, I say, we it's me,
there's me and another roy Yeah exactly. Yeah, today what
do we feel? You know, what do we have time
to support? And uh, I only have only have time
for the one. Plus I switched to Mac and it's
hard to code framework on the Mac.
Speaker 2: So pretty card Yeah, and again, it's the logical thing
is you don't have customers, yeah running the four or
five too, right, So.
Speaker 3: Yeah, exactly, Well it's funny, but I did that, you know,
I did the thing about migrating from framework to to
core eight, so like that that decision did come back
to bite me of not supporting its, like, oh now
I got to kind of do an adjacent version to
make sure the framework code and dot net eight code
can both co exist together. So I probably could have
gone back and put in support, but I was like whatever.
Speaker 2: Right, it's a it's a bad I without a doubt.
Speaker 3: I mean the God of the days though, where I
would support, like I used to try to support every
framework that existed, so it was like a silver light
Windows Phone. There was like two or three versions of
Window Phone I think at the time.
Speaker 2: Unity well, because seven, eight, and ten had nothing to
do with each other, you basically had to redeploy everything.
Speaker 3: Yes, so there's like, if you go to look at
the nugodbergs, there's one that just like takes all the
framework boxes, and that was yeah at that point, is like, yeah,
let everyone use it. And then again someone opens a
bug and I'm like I can't debug Windows Phone seven.
I'm sorry, I don't know.
Speaker 2: No way, yeah, yeah, no way.
Speaker 3: So I just gave up, like, well, just some of
the things that I actually know how to run. And
I'm not going to try to support you know, random
iOS something or other.
Speaker 2: I know, yeah, you need to you need to own
more phones and more deployment methods, and oh.
Speaker 3: God, I'm trying to simplify my life, not making more
complic Yeah kidding.
Speaker 2: Have we even talked about what's new in fourteen?
Speaker 3: I don't. Well, I have to go look at the
release notes. I mean a lot of these. A lot
of the reasons these days are like quality of life improvements.
Speaker 2: Right.
Speaker 3: One of the big things of automapper is because it
doesn't generate code at compile time, you don't get compile
time errors if something doesn't match up. Right, This is
an intentional decision on our part. Is early on, I
had used those kind of cogeneration frameworks like T four
templates and things like that, and there's always just something
missing from those that maybe want to just throw them allway.
So I don't really use cogeneration for anything. Like some
people love the ef scaffolding, I don't like it. I
prefer just like I am adding this column to this database,
so I'm going to put the property here and put
the thing there and then I know everything lines up.
Not something just kind of magically do it for me.
So we it was an intentional decision in my part
not to do cojin. But the tradeoff means you don't
hit problems at compile time, you hit a run time.
So the quality of life thing was, well, let's make
a configuration validator that says make sure that all the
things on the left can be mapped to from the
things on the right. If you had a com if
you had a compiler, then it could usually show you like, oh,
this thing is misspelled, so it's not going to map
up for us. We said, okay, because we're doing a
run time, then we'll have something this checks to make
sure that if you put something on the left, it
should have something on the right, and if it doesn't
match up, then like you're doing something, something's wrong, something's off,
and see you have to tell us about it. So
we A lot of the stuff we do these days
is around making that validation process more comprehensive to catch
as many things as we can, which would be even
beyond what compilers can check, because compilers don't actually try
to execute things necessarily. We do like dry runs and
make sure like nothing's their dependencies are missing, that sort
of thing. It's like, make sure that it can take
it to the best of our abilities we can. We
think it can run at runtime too, right, So I
think that was one one of the big ones of
the last one was a bit of an overhaul of
the validation to make sure that we get everything together,
get a nice and pretty for you so that you
can fix whatever problems you have going on there.
Speaker 2: Yeah. I'm looking through the things in the fourteen milestone,
the closed off ones, and it does look like, hey,
we fix this OLP, we fix those naming conventions targeting
dot net nine obviously, I mean you you are pushing
out a version pretty much in sync with new versions
of dot net. It seems.
Speaker 3: Yeah, I do try to have I do have this
question like what's your support policy? And like this is
so this is a Wendy's.
Speaker 2: Yeah, it's a library.
Speaker 3: There's no.
Speaker 2: That's a great question, right, It's like, what do people
expect from this because it's a dev tool built by
a dev for the other devs.
Speaker 3: So, I mean, obviously people expect a lot, but what
I've always said is before we had stack overflow, you know,
we would try to get those things through the complex
issues or GitHub issues. But these days, I push as
much as I can't to stack overflow because it's like
gamified over there, and people get you know, fake Internet
points for answering questions. So I go over you know,
that's people and it's often me or one of the
other maintainers that actually answers the questions over there. But
it's way more searchable, way more you know, tag things and.
Speaker 2: Even if you're going to answer the question you answered
on stack overflow so that other people will find it.
Speaker 3: Yeah, and then and then I get to fake Internet
points as well, which.
Speaker 2: Is awesome, right. Yeah.
Speaker 3: So yeah, other than we like the versions, you know,
try to do yearly releases at the minimum if there's
but you know, if I critical bugs, then you know,
I'm going to try to fix it if I you know,
as quick as I can, because I've been on the
other side of that, right I've used some library downloaded,
breaking production and you know, if I can submit the
poor request, great, But I try to be you know,
try to be flexible.
Speaker 2: I see the pattern here too, which is generally it's
an version. Sometimes it's an one version, so that must
be okay, got it out there, and a month later
it's like damn and fixed.
Speaker 3: A month I'm like, sometimes it's hours.
Speaker 2: I get people like, oh my god, yeah, thirteen and
thirteen oh one, two days.
Speaker 3: Oh gosh, I'm surprised they didn't unlist the old I
usually unlist the old one because they're.
Speaker 2: All closed, push up into the close. But you know,
I know where to look. I know the detritus of
your failures lives, mister bo.
Speaker 3: There's you know, if you go if you did my
fart up, there's like even further mistakes of like oh
one o two oh three, No, it.
Speaker 2: Gets worse, of more versions back we go.
Speaker 3: Yeah yeah, but even these I don't even do like
alpha beta versions. I used to do that too, but
now there's you know that you can make separate Nougat feeds,
so I just do that instead and just say if
you want the latest and greatest build, you know, can
go over here. Otherwise, you know, I just it's not
worth it for me to do that.
Speaker 2: I perfectly willing to share your experimental yeah bits you know,
you use it your own risk, but I'm not going
to make anything formal in that, you know, just this
is where it lives. Yeah, that's cool exactly now I
think again, it's like I still feel like I'm doing
the right thing. Looking to you for a way to
look at open source in contemporary styles, like look how
stripped down this is now as to how you go
about building versions and managing people's expectations. It's pretty lean,
man like, it's very efficient.
Speaker 3: I well, that's the that's that I try to minimize
the boring parts of the open source stuff of like
pushing our releases even you know, release notes now are
so simple these days, like get hub. Let's you just say,
generate release notes and just spits them out from all
the closed issues. Like I used to have to go
back and like I used to write that stuff, create
milestones and assigned issues like it was a whole you know,
just paperwork of it. That is just way to it. Now.
I just push a tag and then everything goes from there,
as long as I remember to update the apike for
nugats which expires, then everything gets published correctly.
Speaker 2: And what's your protections around the APIQ expirings is just
an entry in Gmail calendar.
Speaker 3: Well, they do tell you know, I do good notification. Hey,
your API key is about to aspire. I'm like, I'll
get to that later, of course, later as the day
I'm trying to release.
Speaker 2: Yes, now you're on fire.
Speaker 1: Could be worse.
Speaker 2: Yeah, you got good problems. So what's it? What's coming
for fifteen friend? Yeah, what's new? I guess waiting for
the next version of dot net.
Speaker 3: Well, there's I mean, yeah, I always I try to
have the minimum yearly releases to keep up with just
package releases and dot releases from Microsoft.
Speaker 2: Yeah.
Speaker 3: But yeah, because it's such a reactive library, or at
least it was it has been. It's it's still driven
by what folks are asking for in what time I
have available to work on it. But that is one
thing that has changed a lot with my open sources.
I used to work for a consulting company for thirteen
years or so, and they were the unbeknownst to me,
and I figured this out after the fact that they
were actually sponsoring my open source like in fact, wow,
because we were the open source libraries were being used
for the clients and used to help deliver our projects
better faster or stronger or whatever. Okay, then it was
something like, oh, we see we've copied this code four
times amongst different clients. Let's create a package out of it,
Like why don't copy code everywhere? You know, just pulled
on to a new good package and you know, graduate
shared code to now share package and now it can
just more easily use it going forwards like Mediator for example,
came exactly from that. It was three or four clients
I copied the same code and then my boss is like, Jimmy,
make that a new good package. But at the time
I was still annoyed with automapper of dealing with that,
I was like automapp or silver Light days. I'm like, oh,
not more open source stuff, but other hey whatever, I'll
push that out as well. So that's that is what
that That was what almost all my open source was
was the you know, clients asking for stuff and the
company giving me the time to work on it if
I had time between clients.
Speaker 2: This is back in the head Spring days, yeah exactly,
head Spring Days. Yeah, okay, which what happened They got
acquired by Accenture, Yeah, acquired by centurewent one.
Speaker 3: And I had left just before then, and so one
of the things I noticed was I lost my primary
sponsor on the open source, which I didn't effectively. I
didn't realize that, oh right, when I had time off
between projects, I could just work an open source because
there was a full marketing sales. You know, there's a
whole organization around the company to to go to business.
Speaker 2: Yeah, they're going to bring you the next project. You
don't have to think about it.
Speaker 3: Yeah. So now my big challenge is being independent consultant.
When I have time between projects, I'm just working on
getting new projects. I'm not like, right, let me do
this big new feature for open source like that that
doesn't go by it like doesn't pay the bills. So
I'm no, you yeah, trying to find how to find
that time now, yeah, exactly.
Speaker 2: Yeah, no, no kidding. I mean, you got fourteen out,
but it's been a few years since Headspring now, like
you need you're in a new workflow entirely.
Speaker 3: Yeah. Yeah, I'm just curious as I hit five years
being independent in January and when looked at my contribution
graph for open source and was like and then went independent,
it's just flat lined. Look after that and It's not
something I noticed because I felt like I was still
doing stuff and then like the numbers didn't like Oh no, I.
Speaker 2: Mean the luxury of having a whole week to work
on your open source project, much less than a month.
Speaker 3: Yeah, yeah it was. It was great. I could, you know,
experiment with you, like the whole I rewrote the entire
underlying configuration model and execution model to be expression tree compilation.
Plus I made a static API, which was a mistake, Like,
don't do static stuff. It's it makes things so much
difficult to deal with. H and every wrote all that,
but that was like a month and a half between
projects that I could like dedicate to like, Okay, this
is a problem. I got to fix this. Like no,
clients are really complaining that it's slow, but I know
it's slow, so I need to fix I need to
fix this and do it, do it proper underneath the covers.
So yeah, I don't I don't know I'll be able
to capture that again, but it's something I'm trying to
figure out. Yeah, how do I get that flexibility back?
So I don't know.
Speaker 2: Yeah, well dude, you you're talking the open source matra here, right, Yeah,
it's a popular new complaint. Yeah, that you've been supporting
for years and years, and now how do you keep
this going when the situation is different?
Speaker 3: Yeah? So yes, features like that. I do have ideas
for features, but the challenge like how do I find
someone that wants to pay pay for that sort of thing?
Like sure, I would love to do a sorce generate
version of it as well, So people that want the
compile time or AOT is another big thing, right, AOT
cannot do run time compilation. Expression Tree cannot do it.
None of my libraryes support that because like, I don't
have clients asking for its, but people are asking for its.
Speaker 2: Yeah.
Speaker 1: Have you come close to a customer saying will pay
you to add this feature?
Speaker 3: No, that's part of the I guess maybe it's just
a problem of how I market myself. But I love
long term projects where I ship things, and that's not
often a thing people ask for in those kind of things,
Like I spent two and a half years migrating dot
net framework projects to the core. Had no point was
anyone like, hey, can you add this new autom Apple
feature in that project? Like no, I'm just focusing on
Like oh gosh, signal there is different in these two versions.
How do I manage those two totally different models or whatever?
Speaker 2: It's not you didn't make Automapper features, but you define
them based on the work you were doing.
Speaker 3: That.
Speaker 2: Hey, I can save myself time if I add this capability.
Speaker 3: Yeah, I would say purely selfish, but it's pretty selfish.
Speaker 2: Yeah, it ultimately does benefit the customer. Yeah, you just do. Hey,
I'm repeating this process, so I'll add it to autom
apport it's built, you know.
Speaker 3: Ye. Well that's the other thing is that's why I
have a hard time with poll requests from random people.
If it's not a use case that I have ever
seen and don't envision seeing, how can I know if
I'm doing this right or wrong. I don't know if
it's done unless I have some connection to the end
this sort of end use case available, And if I
don't have that, then it's kind of guessing.
Speaker 2: YEA knowing the obligation you're adding to your life for
putting that feature in. Yeah, that's a lot new stack
over full posts that I need to happen.
Speaker 3: I mean, there were features like I mentioned that the
whole link projection. I could see that like oh, this
could be really helpful. And so I saw no one,
no client was asking for it, but I saw it
off clients with that problem, right, said Okay, I can
see this solution could could address that problem. And then
I go backfail too. I would go backfell clients and say, okay,
let me go try to put this back into your
code base and see if it actually fixed the stuff.
I wouldn't necessarily like submit it back up to the
client because they weren't paying for that time, but just
to validate and say, hey, did this help in these
use cases and figure that out.
Speaker 1: Are you talking about like serializing and de serializing a
link query an iquery?
Speaker 3: Ooh boy, that's even crazier.
Speaker 2: No, but that's that's impossible.
Speaker 1: I've I tried looking at it. It's been attempted many times,
and none of them weren't because it's code.
Speaker 2: Essentially.
Speaker 3: My very first n DC OSLO talk was something with
external dsls, and what we did there was we translated
re translated a text expression into both SQL and C
sharp expression trees, so we could execute your code at
the sequel or in memory. That's the closest I've gotten.
But this part, this automatic thing is what. It merely
generates an expression and then hands it off to the
query provider to translate. It translates the expression, but it
needs that expression. So we would say here, here you go.
Here's the fully built expression of how to do the
select part of SQL. Basically, I give it the select
part and link and then it goes from there. So
you don't write the select. You say, give the select
to it, and it will regardless of the query provider.
I mean we've used it a Mango and raven to
be and EF of course all sorts of things. And
if it can handle the expression, then it's like yep,
I can translate it directly to your query. For the
database of choice.
Speaker 1: I built a filter tool that I can pay from
an API to a server to get a response that
just you know, it breaks down exactly what you're looking for.
You're looking for an expression within and uh you know,
a string, a string within a string, or it begins
with starts with ends with equals, and what are the
what are the data types? And you know the parameters
and all that stuff, and you just ship all that
off over an API I call and then you know everything.
Speaker 3: Wait, did you invent o data no, no, no, I'm
kidding data more like no data.
Speaker 1: This was it was for a customer, you know. It
was a simple thing that they wanted to do. But
ultimately what they wanted to do was serialize and de
serialize a link query, you know, an iqueriable. And I
tried it, and I tried and I looked, and it
just could can't be done because and fundamentally it can't
be done because there's code there, it's not data.
Speaker 3: Yeah.
Speaker 1: So I just turned you know, created a data you know,
a data objects.
Speaker 3: And Microsoft was really mean and took away our buyinary
format or where we could binary.
Speaker 2: Serialize right.
Speaker 3: Stick with security problems.
Speaker 2: I know, what's up with that? Trying to protect us?
What are they thinking? What's the matter with those people?
Speaker 1: All Right, well, guys, I gotta go because I gotta
keep working on O data.
Speaker 3: I mean that's what I meant.
Speaker 1: Yes, Jimmy, it's been a pleasure talking to you. It
always is, and hopefully I'll catch up with you somewhere
out there in one of these places.
Speaker 3: Thanks for having me. Appreciate it.
Speaker 2: You got it to talk you bred, all right, and we'll.
Speaker 5: Talk to you next time on dot net rocks.
Speaker 1: Dot net Rock is brought to you by Franklin's net
and produced by Pop Studios, a full service audio, video
and post production facility located physically in New London, Connecticut,
and of course in the cloud online at PWOP dot com.
Speaker 4: Visit our website at d O T N E t
R O c k S dot com for RSS feeds, downloads,
mobile apps, comments, and access to the full archives going
back to show number one, recorded in September.
Speaker 2: Two thousand and two.
Speaker 1: And make sure you check out our sponsors. They keep
us in business. Now go write some code, See you
next time.
Speaker 4: You got Javans
Speaker 2: And