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