How'd you like to listen to dot net rocks with no ads?
Easy?
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?
No, No, it's been a few Yeah, he hangs around, Yeah he does.
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.
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.
Think it was a longer movie, wasn't it.
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.
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.
All right.
Well that's what I got for nineteen forty one.
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.
And so I imagine this is way before transistors, so vacuum tubes.
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.
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?
A man, what do you got?
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.
Interesting.
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.
It's a good article. So always the first link in the list HTML. In twenty twenty five.
Yep, So who's talking to us today, Richard?
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.
Yeah, that says a lot for Jimmy though he was one of the choir.
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.
Yeah, and Jeremy's like, I'd rather not talk about that.
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.
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.
So there you go.
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.
Out that's right. You can generally find us there, yep.
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?
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.
Yeah, we pretty much rail against absolutism because only siths speak in absolutes.
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.
And not to focus on mediator because we've already done that show. But there are particular scenarios where the mediator approach makes sense.
Absolutely.
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.
It, right, And it's true most things.
Yep, as my hair has gotten gray or I start to care less about that sort of stuff.
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.
It's a teenager. It's all growed up.
Yeah, no kidding, it's like thinking about driving.
What year did that come out?
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.
That was the place it was.
It was I place.
Yeah, back in the day.
Choice was that or source Forge, yeah.
Source right, it was the less hostile to Microsoft. Source Forge, althoughmittedly Coplex owned by Mind.
Yeah, we liked CodePlex and Sarah was in charge of it back then, remember, yeah, yeah, we interviewed it.
It was a long time ago. So wow.
So and you became an MVP in two thousand and nine obviously because of the work you did with Automapper and its instant popularity.
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.
I was thinking that it was an instant viral hit.
No, I want to say, it's a good five years or so before Microsoft even recognize open source as a community contribution for.
MVP award Wow right yeah wow.
Or then it was like, oh that's fine.
Those that transition time was weird, right, Yeah.
That was an interesting time, So let's write a book about it.
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.
That was the huge one, the support thing.
Yeah, yeah, you're supporting a product you didn't right.
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.
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.
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?
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.
Well, no one likes to download zip files from a random website.
I wouldn't downloading zip filef I knew was the right file.
All you knew for sure was it probably not the right file.
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.
And what was happening to them VC?
And you know there was actually an autumn opper for silver Light at one point. It's unlisted now, but.
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.
No they said, they just set it on fire.
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.
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.
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.
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.
Yes, No, I don't know which you said.
It was about five years before automapper really took off. What do you remember that moment?
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.
Were you tracking downloads right, I mean.
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.
Well it's that.
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.
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.
He literally handed you a logo and says, what about this.
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.
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.
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.
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.
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.
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.
Just means don't trust it, right, yeah, or just.
You know, view the source and try to find out when it was written, you.
Know, way back. Sometimes I do that too.
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.
So yeah, it's crazy.
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?
Is it?
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.
Right, you don't want to expose everything to the client that's in your data model.
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.
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.
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.
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?
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.
Of the silver Light edition, the Silver Life version.
How much work did I put into that thing for ten people?
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.
Yeah.
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.
Yeah.
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.
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?
Right records?
Right, it can never take it out.
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?
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.
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.
Yeah, yeah, you opened the door.
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.
Yeah.
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.
So you have you have a separate package. What do you call something like automapp or evil.
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.
If you're going to depend on this evil, I'll give you a place for the evil.
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.
And you're talking about dapper d a p p e R as opposed to Dapper d a.
P R Yes, sorry not DAPR. Yes.
Just you know, we usually end up talking about da PR, so it's nice to be talking about DAPPER.
I have way more experience with d a p p e R than I do d A p R.
Yes.
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.
Oh my god, that has nothing to do with me.
That's like, will automatically map out a terrain on something?
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.
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.
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.
Well, here's a simple question, is did it get you any business that you otherwise wouldn't have had?
I don't think so, because it's not something I generally consult on.
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.
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.
I should we call auto mapper.
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.
I don't think I've ever seen you do a talk on autobapper.
No, your name. Your name's on the product though, right, oh.
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.
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.
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.
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.
Don't accept every poll request. You do actually test the release before you push it out onto new gets too.
Yeah, that's a good one.
Unsuspecting masses.
Yeah, do you read through the code and make sure it's not calling out to China or something?
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.
No ship with a dozen vulnerabilities for your viewing pleasure.
Security features.
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.
No, it runs in production.
It's not a okay, so it is part of the production code.
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.
Well, it's usually your customer, right, I'm just looking on new Get it's like seven hundred and sixty million down loads.
Well, I mean I do have a very extensive botnets that is working over time to pump those numbers.
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.
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.
Sure that's the current LTS version.
Yeah exactly. I think six just stops or.
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.
But even we even dropped support for framework just because we were annoyed of having to to deal with it.
It's just for four.
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.
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.
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.
Right, it's a it's a bad I without a doubt.
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.
Unity well, because seven, eight, and ten had nothing to do with each other, you basically had to redeploy everything.
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.
No way, yeah, yeah, no way.
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.
I know, yeah, you need to you need to own more phones and more deployment methods, and oh.
God, I'm trying to simplify my life, not making more complic Yeah kidding.
Have we even talked about what's new in fourteen?
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.
Right.
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.
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.
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.
Yeah, it's a library.
There's no.
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.
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.
Even if you're going to answer the question you answered on stack overflow so that other people will find it.
Yeah, and then and then I get to fake Internet points as well, which.
Is awesome, right. Yeah.
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.
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.
A month I'm like, sometimes it's hours.
I get people like, oh my god, yeah, thirteen and thirteen oh one, two days.
Oh gosh, I'm surprised they didn't unlist the old I usually unlist the old one because they're.
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.
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.
Gets worse, of more versions back we go.
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.
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.
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.
And what's your protections around the APIQ expirings is just an entry in Gmail calendar.
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.
Yes, now you're on fire.
Could be worse.
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.
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.
Yeah.
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.
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.
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.
Yeah, they're going to bring you the next project. You don't have to think about it.
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.
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.
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.
Mean the luxury of having a whole week to work on your open source project, much less than a month.
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.
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?
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.
Yeah.
Have you come close to a customer saying will pay you to add this feature?
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?
It's not you didn't make Automapper features, but you define them based on the work you were doing.
That.
Hey, I can save myself time if I add this capability.
Yeah, I would say purely selfish, but it's pretty selfish.
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.
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.
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.
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.
Are you talking about like serializing and de serializing a link query an iquery?
Ooh boy, that's even crazier.
No, but that's that's impossible.
I've I tried looking at it. It's been attempted many times, and none of them weren't because it's code.
Essentially.
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.
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.
Wait, did you invent o data no, no, no, I'm kidding data more like no data.
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.
Yeah.
So I just turned you know, created a data you know, a data objects.
And Microsoft was really mean and took away our buyinary format or where we could binary.
Serialize right.
Stick with security problems.
I know, what's up with that? Trying to protect us? What are they thinking? What's the matter with those people?
All Right, well, guys, I gotta go because I gotta keep working on O data.
I mean that's what I meant.
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.
Thanks for having me. Appreciate it.
You got it to talk you bred, all right, and we'll.
Talk to you next time on dot net rocks.
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.
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.
Two thousand and two.
And make sure you check out our sponsors. They keep us in business. Now go write some code, See you next time.
You got Javans
And
