POPULARITY
Seventeen years of Automapper! Carl and Richard talk to Jimmy Bogard about his latest version of Automapper - and the challenge of maintaining a long-lived and much-loved open-source library! Jimmy talks about the origins of Automapper as a tool he needed for working with clients and automating the mapping of objects. Initially, he moved to GitHub on Codeplex in 2009, and as open source became more popular in the .NET community, Automapper has hundreds of millions of downloads. And now, the next challenge - how to sustain this open-source project!
Seventeen years of Automapper! Carl and Richard talk to Jimmy Bogard about his latest version of Automapper - and the challenge of maintaining a long-lived and much-loved open-source library! Jimmy talks about the origins of Automapper as a tool he needed for working with clients and automating the mapping of objects. Initially, he moved to GitHub on Codeplex in 2009, and as open source became more popular in the .NET community, Automapper has hundreds of millions of downloads. And now, the next challenge - how to sustain this open-source project!
How do you migrate to .NET 8? Carl and Richard talk to Jimmy Bogard about his experiences helping teams migrate from .NET Framework 4.8 to more modern versions of .NET. Jimmy talks about the team wanting to be able to use ASP.NET Core in their applications as the incentive to make the migration in the first place. The conversation digs into landing on .NET 6 to make migration easier but then wanting to move quickly to later versions to take advantage of the latest features. And no dead-drop migrations - using a reverse proxy to operate the two applications side-by-side so that over months, everything moves across while remaining functional - a great story of migration!
How do you migrate to .NET 8? Carl and Richard talk to Jimmy Bogard about his experiences helping teams migrate from .NET Framework 4.8 to more modern versions of .NET. Jimmy talks about the team wanting to be able to use ASP.NET Core in their applications as the incentive to make the migration in the first place. The conversation digs into landing on .NET 6 to make migration easier but then wanting to move quickly to later versions to take advantage of the latest features. And no dead-drop migrations - using a reverse proxy to operate the two applications side-by-side so that over months, everything moves across while remaining functional - a great story of migration!
Jimmy is the creator and maintainer of the popular OSS libraries AutoMapper and MediatR. Jimmy is an independent consultant based in Austin, TX. Jimmy has received the “Microsoft Most Valuable Professional” (MVP) award every year since 2009. Topics of Discussion: [3:45] How do we modernize old software systems? [4:55] Dividing the modernization process into small steps to minimize dependencies and validate changes along the way. [5:01] Does Jimmy have a preferred sequence of work that he has found that makes modernizing a system easier? [7:01] Modernizing legacy ASP.NET web applications with test coverage. [7:24] System web adapters. [12:02] Database migration to Azure using SQL Data Sync and Hangfire. [12:09] Any “gotchas” on the database side? [15:27] What exactly is Hangfire? [17:02] The flexibility of Hangfire in its triggers and scheduling. [23:49] How system web adapters enable easy migration of controllers and actions. [25:16] Second success story for YARP: Yet Another Reverse Proxy. [27:15] What was the thought about observability architectures? [29:02] What are some of Jimmy's favorite features? [32:08] The team modernized the telemetry system for a large organization, enabling them to query data more efficiently and gain valuable insights. [35:05] Lessons learned and best practices while modernizing.NET applications with Azure DevOps. Mentioned in this Episode: YARP Clear Measure Way Architect Forum Software Engineer Forum Programming with Palermo — New Video Podcast! Email us at programming@palermo.net. Clear Measure, Inc. (Sponsor) .NET DevOps for Azure: A Developer's Guide to DevOps Architecture the Right Way, by Jeffrey Palermo — Available on Amazon! Jeffrey Palermo's Twitter — Follow to stay informed about future events! Architect Tips — Video podcast! YARP: Yet Another Reverse Proxy Want to Learn More? Visit AzureDevOps.Show for show notes and additional episodes.
How about some in-process messaging with no dependencies? Carl and Richard chat with Jimmy Bogard about his work with MediatR, a simple mediator pattern implementation in .NET. Jimmy talks about how MediatR emerged from his work with customer applications having controllers and/or managers that slowly got bigger and more complicated... and how they became difficult to maintain. Using the mediator pattern to break down those blocks of code into more manageable chunks needed a bit of tooling that was cut and pasted from project-to-project until MediatR was born!
How about some in-process messaging with no dependencies? Carl and Richard chat with Jimmy Bogard about his work with MediatR, a simple mediator pattern implementation in .NET. Jimmy talks about how MediatR emerged from his work with customer applications having controllers and/or managers that slowly got bigger and more complicated... and how they became difficult to maintain. Using the mediator pattern to break down those blocks of code into more manageable chunks needed a bit of tooling that was cut and pasted from project-to-project until MediatR was born!This show is part of the Spreaker Prime Network, if you are interested in advertising on this podcast, contact us at https://www.spreaker.com/show/5634793/advertisement
Jimmy Bogard, Creator of AutoMapper and MediatR, joins us to talk about his recent talk about the DevTernity conference, “Effective microservice communication and conversation patterns.” Links https://twitter.com/jbogard https://jimmybogard.com https://github.com/jbogard https://www.youtube.com/playlist?list=PLd-Kkce6KA23xB_EJuxSw8cmFD62BsMFR https://www.linkedin.com/in/jimmybogard/ https://stackoverflow.com/users/58508/jimmy-bogard https://www.youtube.com/watch?v=C8giVjZ02 https://vimeo.com/131633177 https://www.youtube.com/watch?v=f64tZ90Dntg Tell us what you think of PodRocket We want to hear from you! We want to know what you love and hate about the podcast. What do you want to hear more about? Who do you want to see on the show? Our producers want to know, and if you talk with us, we'll send you a $25 gift card! If you're interested, schedule a call with us (https://podrocket.logrocket.com/contact-us) or you can email producer Kate Trahan at kate@logrocket.com (mailto:kate@logrocket.com) Follow us. Get free stickers. Follow us on Apple Podcasts, fill out this form (https://podrocket.logrocket.com/get-podrocket-stickers), and we'll send you free PodRocket stickers! What does LogRocket do? LogRocket combines frontend monitoring, product analytics, and session replay to help software teams deliver the ideal product experience. Try LogRocket for free today. (https://logrocket.com/signup/?pdr) Special Guest: Jimmy Bogard.
Jimmy Bogard takes us through the interesting possibilties of logging with OpenTelemetry. Then we discuss refactoring strategies friendly for Domain Driven Design. Panel Shawn ClaboughWai Liu Guest Jimmy Bogard Sponsors Dev Influencers AcceleratorRaygun | Click here to get started on your free 14-day trial Links .NET 057: Open source, MediatR and Automapper with Jimmy Bogard | Devchat.tvThe Twelve-Factor Appmartinfowler.comTwitter: Jimmy Bogard ( @jbogard ) Picks Jimmy- Power AppsShawn- Fiber internetWai- Developer Program Contact Wai: Linkedin: Wai LiuFacebook: Wai Liu Contact Shawn Twitter: Shawn Clabough (DotNetSuperhero) Special Guest: Jimmy Bogard.
Jimmy Bogard takes us through the interesting possibilties of logging with OpenTelemetry. Then we discuss refactoring strategies friendly for Domain Driven Design. Panel Shawn Clabough Wai Liu Guest Jimmy Bogard Sponsors Dev Influencers Accelerator Raygun | Click here to get started on your free 14-day trial Links .NET 057: Open source, MediatR and Automapper with Jimmy Bogard | Devchat.tv The Twelve-Factor App martinfowler.com Twitter: Jimmy Bogard ( @jbogard ) Picks Jimmy- Power Apps Shawn- Fiber internet Wai- Developer Program Contact Wai: Linkedin: Wai Liu Facebook: Wai Liu Contact Shawn Twitter: Shawn Clabough (DotNetSuperhero)
Jimmy Bogard joins us to talk about how he approaches open source development and consulting. MediatR and AutoMapper were created when he and his team found themselves doing a lot of copy and pasting. Panel Caleb Wells Shawn Clabough Wai Liu Guest Jimmy Bogard Sponsors Dev Heroes Accelerator Links GitHub | jbogard/MediatR Jimmy Bogard AutoMapper Vertical Slice Architecture - Jimmy Bogard Vertical Slice Architecture Twitter: Jimmy Bogard GitHub | Jimmy Bogard Picks Caleb- The Magicians | Netflix Jimmy- The Umbrella Academy | Netflix Jimmy- Dark | Netflix Shawn- Searching for Bobby Fischer (1993) Wai- Coinbase Rewards Contact Caleb: Caleb Wells Codes Twitter: Caleb Wells (@calebwellscodes) Linkedin: Caleb Wells Facebook: Caleb Wells Contact Wai: Linkedin: Wai Liu Facebook: Wai Liu Contact Shawn Twitter: Shawn Clabough (DotNetSuperhero)
Jimmy Bogard joins us to talk about how he approaches open source development and consulting. MediatR and AutoMapper were created when he and his team found themselves doing a lot of copy and pasting. Panel Caleb Wells Shawn Clabough Wai Liu Guest Jimmy Bogard Sponsors Dev Heroes Accelerator Links GitHub | jbogard/MediatR Jimmy Bogard AutoMapper Vertical Slice Architecture - Jimmy Bogard Vertical Slice Architecture Twitter: Jimmy Bogard GitHub | Jimmy Bogard Picks Caleb- The Magicians | Netflix Jimmy- The Umbrella Academy | Netflix Jimmy- Dark | Netflix Shawn- Searching for Bobby Fischer (1993) Wai- Coinbase Rewards Contact Caleb: Caleb Wells Codes Twitter: Caleb Wells (@calebwellscodes) Linkedin: Caleb Wells Facebook: Caleb Wells Contact Wai: Linkedin: Wai Liu Facebook: Wai Liu Contact Shawn Twitter: Shawn Clabough (DotNetSuperhero)
This is Last Week in .NET for the week that ended... well.. last week (January 16th, 2020). It was a rocky week last week; and more of the same expected this week for the Washington DC area, and with an inauguration and Martin Luther King day as our backdrop, let's dive into what happened last week in the world of .NET.Releases
Hey again, what a week. We had a blue moon, Halloween, and Daylight savings time end all one one night.In case you're the voting type here in these United States, that's happening tomorrow, where the choices are between two old white guys. You would think we would have learned our lesson by now, but we have not.But this is not last week in politics, this is last week in .NET, so let's get to it.
Mostly community goodies this week. No releases, but that's not surprising given the impending release on November 10th. Here's what I found last week in .NET:
The critics agree, Vertical Slice is nice! Join Patrick this episode as he talks to Chief Architect and speaker, Jimmy Bogard, about what Vertical Slice Architecture is and how to use it in practice. Jimmy describes his own journey to the slice-side from traditional layers, and advises on when and how to use this style (or when not to!). Him and Patrick dig deep into the testing side of things and discuss how vertical slice can move you towards better design—plus an all-around better time for developers!SHOW LINKSBlogs:How Vertical Slice Architecture fulfills Clean Architecture’s broken promises (includes diagrams!)Testing done right with Vertical Slice ArchitectureEvents:WEBINAR - Refactor over Rewrite: How to save your existing application with Vertical Slice Architecture (Wed. Sept. 9, 1pm CST)Github:Microsoft’s ContosoUniversity on ASP.Net Core and Razor Pages refactored in Vertical Slice Architecture
In this episode of Adventures in .NET, guest Derek Comartin talks to us about Command Query Responsibility Segregation. He explains CQRS benefits, downsides and usage in real world situations. Sponsors PVS-Studio | Try PVS-Studio for free using the promo code; #advdotnet CodeRush for Visual Studio | FREE 30-DAY TRIAL See the latest in VueJS on the Views on Vue podcast Panel Shawn Clabough Caleb Wells Wai Liu Special Guest Derek Comartin Links MediatR Brighter CodeOpinion Jimmy Bogard Picks Shawn Clabough A First Look at Unreal Engine 5 Caleb DragonHumpers Wai Ring Fit Adventure Derek Build Stuff YouTube Channel
In this episode of Adventures in .NET, guest Derek Comartin talks to us about Command Query Responsibility Segregation. He explains CQRS benefits, downsides and usage in real world situations. Sponsors PVS-Studio | Try PVS-Studio for free using the promo code; #advdotnet CodeRush for Visual Studio | FREE 30-DAY TRIAL See the latest in VueJS on the Views on Vue podcast Panel Shawn Clabough Caleb Wells Wai Liu Special Guest Derek Comartin Links MediatR Brighter CodeOpinion Jimmy Bogard Picks Shawn Clabough A First Look at Unreal Engine 5 Caleb DragonHumpers Wai Ring Fit Adventure Derek Build Stuff YouTube Channel
Joining Jeffrey today is Jimmy Bogard, an Independent Consultant, long-time Microsoft MVP award recipient, C# guru, and author and maintainer of AutoMapper (as well as many other open-source projects!) He has twenty years of experience building mission-critical applications and distributed systems with extensive experience in Agile, Test-Driven Development, Domain-Driven Design, Object-Oriented Design, Service Oriented, and Distributed Systems. Jimmy’s convention-based object-object mapper, AutoMapper, is used by tons of teams everywhere and has over 14 million downloads on NuGet. In this episode, Jimmy speaks about the genesis of AutoMapper, how it has evolved over time, shares about his career journey, speaks about MediatR, and gives his thoughts on Blazor and beyond. Topics of Discussion: [:38] Be sure to visit AzureDevOps.Show for past episodes and show notes. [:48] About The Azure DevOps Podcast and Jeffrey’s offer to speak at virtual user groups. [1:31] About today’s episode with Jimmy Bogard! [1:50] Jeffrey welcomes Jimmy to the show! [2:15] Jimmy gives a rundown of his career. [3:12] Jimmy shares his thoughts around consulting and what he misses about it. [5:15] Jimmy tells the story of how AutoMapper got started. [8:30] Jimmy gives some advice for those who have not used AutoMapper before. [12:43] Jimmy speaks about the refactoring of the original AutoMapper interface to a top-level interface. [14:51] With AutoMapper now going on 13 years old, what would Jimmy say are its main strengths? What does he always reach for it? And what uses does he advise against using it with/for? [17:37] A word from Azure DevOps Podcast’s sponsor: Clear Measure. [18:04] Jimmy shares some background about MediatR and how it got started! [20:07] What MediatR started out as and how it developed over time. [21:13] Jimmy shares about the practical uses of MediatR and why someone would want to use it. [25:32] How the MediatR library makes it easy to codify everything your application does as a command, query, or event. [26:24] Jeffrey and Jimmy discuss how to think about what’s complex for developers. [28:32] Side effect of using the MediatR library: telemetry. [30:26] Jimmy’s thoughts on Blazor and beyond! [37:55] How to follow-up with Jimmy and find him online! Mentioned in this Episode: Azure DevOps Clear Measure (Sponsor) .NET DevOps for Azure: A Developer's Guide to DevOps Architecture the Right Way, by Jeffrey Palermo — Available on Amazon! bit.ly/dotnetdevopsebook — Click here to download the .NET DevOps for Azure ebook! Jeffrey Palermo’s Youtube Jeffrey Palermo’s Twitter — Follow to stay informed about future events! The Azure DevOps Podcast’s Twitter: @AzureDevOpsShow Jimmy’s Blog: JimmyBogard.com Jimmy’s Twitter @JBogard Github.com/JBogard AutoMapper AutoMapper on NuGet MediatR Blazor JSON StructureMap ASP.NET Core Angular React Vue Microsoft’s MAUI Project Microsoft Silverlight Want to Learn More? Visit AzureDevOps.Show for show notes and additional episodes.
In episode 22 of O11ycast, Liz and Charity speak with Jimmy Bogard of Headspring. They discuss maintaining balance for on-call engineers, what's missing in the average engineer's toolkit, and moving from monoliths to microservices.
In episode 22 of O11ycast, Liz and Charity speak with Jimmy Bogard of Headspring. They discuss maintaining balance for on-call engineers, what’s missing in the average engineer’s toolkit, and moving from monoliths to microservices. The post Ep. #22, Designing for Observability with Jimmy Bogard of Headspring appeared first on Heavybit.
In episode 22 of O11ycast, Liz and Charity speak with Jimmy Bogard of Headspring. They discuss maintaining balance for on-call engineers, what’s missing in the average engineer’s toolkit, and moving from monoliths to microservices. The post Ep. #22, Designing for Observability with Jimmy Bogard of Headspring appeared first on Heavybit.
In episode 22 of O11ycast, Liz and Charity speak with Jimmy Bogard of Headspring. They discuss maintaining balance for on-call engineers, what's missing in the average engineer's toolkit, and moving from monoliths to microservices.
Таймкоды: 04:50 - How to scale yourself as a first-time leader | Poornima Vijayashanker (https://youtu.be/LKkohgxsZdI) 19:15 - Bridging the gap between engineering and customer success | Annie Cook (https://youtu.be/5Bj4TLcBjnU) 27:10 - The four components of high performing teams | Lisa van Gelder (https://youtu.be/HcB7IeUClEk) 49:20 - Hiring junior developers remotely | Romina Suarez (https://youtu.be/4KMsgTQ6EaM) 01:03:00 - Splitting the monolith | Jimmy Bogard (https://youtu.be/oyY3Iec5IAc) 01:07:50 - The race to Mach 2.0 at scale | Nickolas Means (https://youtu.be/2sIzfGzf_50) 01:24:00 - Lessons from flying for engineering leadership | Rebecca Murphey (https://youtu.be/Tk1LFnoPvxM) 01:35:00 - On motherhood and leading engineering teams | Tara Feener (https://youtu.be/YdYZnvw7GGs) Мы в соцсетях: 1. Telegram: https://t.me/proConf 2. Youtube: https://www.youtube.com/channel/UCvasfOIImo7D9lQkb1Wc1tw 3. SoundCloud: https://soundcloud.com/proconf 4. Itunes: https://podcasts.apple.com/by/podcast/podcast-proconf/id1455023466 5. Twitter: https://twitter.com/ProconfShow
Hi and welcome back to Weekly Dev Tips. I'm your host Steve Smith, aka Ardalis. This is episode 68 with guest Jimmy Bogard. This week's tip is brought to you by devBetter.com. ## Sponsor - devBetter Group Career Coaching for Developers What is devBetter? It's a private group coaching community geared toward accelerating developer careers. We meet weekly for live Q&A sessions and have an active Discord-based discussion the rest of the week. Topics range from coding skills to interviewing and personal branding. Check out [devBetter.com](https://devbetter.com/) and read the testimonials at the bottom of the page. # Respawn with guest Jimmy Bogard This week's guest is Jimmy Bogard, author of popular OSS projects AutoMapper and MediatR. And less popular project Respawn. ## Show Resources and Links - [Jimmy on Twitter](https://twitter.com/jbogard)- [devBetter](https://devbetter.com)- [Ardalis Blog](https://ardalis.com/blog)- [Pluralsight Courses](https://www.pluralsight.com/authors/steve-smith) That's it for this week. If you want to hear more from me, go to [ardalis.com/tips](https://ardalis.com/tips) to sign up for a free tip in your inbox every Wednesday. I'm also streaming programming topics on [twitch.tv/ardalis](https://twitch.tv/ardalis) most Fridays at noon Eastern Time. Thank you for subscribing to Weekly Dev Tips, and I'll see you next week with another great developer tip.
My guest on today’s show is Chief Architect at Headspring, author of MVC in Action books, an international speaker and a prolific OSS developer. He is an expert in distributed systems, REST, messaging, domain-driven design and CQRS. EPISODE DESCRIPTION: Phil’s guest on today’s podcast is Jimmy Bogard. He has a BSEE in Computer Engineering. But, he became a software developer and engineer. Jimmy worked for Icabob Design, VI Technology and Dell Inc in those roles. In 2008, he joined Headspring and, today, he is their Chief Architect. Jimmy is an expert in distributed systems, REST, domain-driven design, messaging and CQRS. He is also the author of the ASP.NET MVC in Action books, as well as a prolific OSS developer and public speaker. KEY TAKEAWAYS: (00.46) – So, Jimmy, could you tell us a little bit more around your background and your current role as chief architect at Headspring? Jimmy starts by explaining that he graduated with a computer engineering degree and kind of fell into an IT career, when he left university. In time, he landed a job at Headspring. (1.47) – Can you please share a unique career tip with the I.T. career audience? When he studied to become a computer engineer he was told that to succeed in that field you need to be continuously learning. He was told that he would need to reinvent himself every 5 or 10 years. It was a good habit to get into. When he moved into software he was already able to move from one technology to another fairly quickly. Jimmy says it is also important to stay in the know. That way you will be learning and growing in the right ways. In other words you have to become a T-shaped developer. That is to say you have a broad knowledge of a lot of subjects and technologies. But, have also taken the time to dive deep on at least one of them. (3.07) – What approach do you take when learning new technologies? Jimmy explains that the client’s needs drive the skills he learns. He focuses on learning those technologies that will help them to achieve their goals. You have to be careful not to dive in too deep. If you do that you spend too much time learning and not enough time working on the projects. To stop that from happening Jimmy periodically pauses and asks himself does this really matter? If the answer is no, he stops learning that tech or skill and focuses on something that is more relevant to what he is working on, at that moment. (4.11) – Can you tell us about your worst career moment? And what you learned from that experience. Years ago, Jimmy was working on a loyalty rewards project for a major retailer. He came up with what he thought was an important, but easy change to implement. For some reason, it went live not long before Black Friday, the busiest time of the year for the retailer. Unfortunately, a mistake slipped through. Jimmy had miss configured the dependency injection container in a way that registered some components twice. The net result was that everyone was awarded double reward points. Worse, nobody noticed the error for about 10 days. When the client asked him to check he did. But, he only ran the test locally. Not in the full environment. So, everything looked fine. In reality there was an issue. People were receiving a 10% off coupon via email. Followed shortly by an identical coupon giving them another 10% off, which they were not actually entitled to. The customers thought it was their lucky day, so did not complain. So, there were no emails from them saying there was an issue. Just a spike in the figures that was disguised by the fact this was all happening at the retailer’s busiest time. Eventually, Jimmy could see the issue and was able to fix it. But, he felt awful. The mistake was an expensive one. Understandably, the retailer did not want to take the coupons off of their customers. They were only able to revoke the duplicates that were attached to unopened emails. Naturally, changes were made to make sure something like that could not happen again. One of which is to track the key metrics and forecast what they should look like once any changes went live. Now, if they change up or down further than anticipated the system immediately flags it as a potential issue. This triggers extra tests to track down and solve any issues. (10.49) – What was your best career moment? Jimmy says that it is the things that he deliberately set out to achieve that he is proudest of. For example, building a system for a local county government in Texas, whose budget had just been slashed. For them, he took a 100% paper-based case file system and digitized it. They had tried off the shelf software, but none of it quite worked for them. When Jimmy presented his tailor-made solution to the team, he got a standing ovation. They like it that much. Better still, Jimmy was able to physically see what a difference his new system made. (13.52) – Can you tell us what excites you about the future of the IT industry and careers? The fact that the work he and other IT professionals do makes it possible for companies to do things they could not before is exciting. Jimmy knows the work he and other IT professionals makes a huge difference to people. (15.10) are there any particular tech advancements you are attracted to? Jimmy’s interest lies in technologies that help people to get their jobs done faster. (16.20) – What drew you to a career in IT? When he graduated, there were not enough computer engineering jobs to go around in Texas. He realised he had to do something else and decided to get involved in software. After all, everyone needs software and it is constantly evolving. (16.57) – What is the best career advice you have ever received? About 12 or 13 years ago, his mentor suggested to Jimmy that he start a public blog. He did, and that was what sped up his progress in the IT industry. It is something Jimmy recommends others do too. He finds that writing things down chrysalises his thoughts about things. (19.02) - Conversely, what is the worst career advice you've ever received? When he and his fellow graduates spoke to their professor about the fact they could not find jobs, his professor suggested they all go to graduate school. Advice Jimmy did not follow. He did not want to spend even more time and money studying, especially because there was no guarantee it would improve his job prospects. (19.48) – If you were to begin your IT career again, right now, what would you do? Jimmy says he would focus on finding good mentors from the start. Early in his career, he made the mistake of trying to emulate what the most popular and vocal developers were doing. But, his hero worship only took him so far. His mentors helped him far more. (20.47) – What are you currently focusing on in your career? Jimmy is working on his communication skills. He wants to be able to effectively communicate with, and influence, people who are high up in the structure of organizations. The more they understand, the better their IT-related decisions will be. He believes that this top-down approach will lead to fewer people working on projects that were flawed from the start and never see the light of day. (22.23) – What is the number one non-technical skill that has helped you the most in your IT career? When we build something the customer does not like we all have a tendency to blame them. In reality, most of the time, both parties play a role in these types of failure. Usually, it comes down to bad communication. Over the years, Jimmy has honed his communication skills, which has helped him to get better results for his customers and build a successful career. So, he sees that as his number one non-technical skill. (23.45) - What do you do to keep your own IT career energized? Jimmy has found keeping on the move helps to energize his career. Working on projects that keep him learning is essential. That is part of the reason consulting is such a good fit for him. He finds that role to be particularly energizing. (26.46) – Phil asks Jimmy to share a final piece of career advice with the audience. When Jimmy first started out he had a really bad case of imposter syndrome. He felt he could not match up to his heroes. The guys he followed and whose books he read. Around 2003, he attended a Java conference and was able to meet some of them. He went up to one of them and said something like I am happy to meet you, congratulated him on his work and told him that he was one of his heroes. The guy said thank you. But, he also said “we’re all just developers.” Basically, people trying to figure out what we’re doing and learn how to do things better. In short, all developers are novices, beginners who need to work together to figure things out. In the world of IT, you will rarely find one true expert. Things move too fast for that to happen. Nobody is an imposter, we are all still learning and everyone has something to contribute. BEST MOMENTS: (2.07) JIMMY – "Career-wise you have to reinvent yourself every five or 10 years." (2.28) JIMMY – “Make sure that you're always growing and expanding." (13.52) JIMMY – "It is exciting to know that the things we build enable our customers to do things they couldn’t before." (17.48) JIMMY – "Writing helps me to crystallize thoughts about things." (27.58) JIMMY – "Embrace your imposter syndrome. It's OK not to know exactly what you’re doing, because no one else does either." CONTACT JIMMY: Twitter: https://twitter.com/jbogard LinkedIn: https://www.linkedin.com/in/jimmybogard/ Website: https://jimmybogard.com/
How do you use messaging? Carl and Richard talk to Jimmy Bogard about his work developing messaging architecture for applications. Jimmy talks about the mistakes he's made along the way, starting with not using formal messaging systems - yes, you can use a text file or a database table as a queue, but should you? And when you do embrace messaging, there is an overhead of code and effort to work with queues properly. Is it worth it? The answer is always, it depends!Support this podcast at — https://redcircle.com/net-rocks/donations
How do you use messaging? Carl and Richard talk to Jimmy Bogard about his work developing messaging architecture for applications. Jimmy talks about the mistakes he's made along the way, starting with not using formal messaging systems - yes, you can use a text file or a database table as a queue, but should you? And when you do embrace messaging, there is an overhead of code and effort to work with queues properly. Is it worth it? The answer is always, it depends!Support this podcast at — https://redcircle.com/net-rocks/donations
In today’s episode, Jeffrey is joined by Eric Hexter, the Chief Technology Officer of Quarterspot LASO — a fintech company that produces lending platforms using machine learning. He built the company in the Cloud with DevOps as a foundational component of delivering the product. Eric has filled roles as CTO, Chief Architect, Developer, and Consultant. He’s spent most of his career working with web technologies, with a total of twenty years experience producing technology solutions that deliver business value. As Jeffrey says, Eric is the DevOps King. He’s done some incredible work over the past decade and a half and has even written some books — well, namely one book back in 2012, ASP.NET MVC 4 in Action, co-authored by Jeffrey as well. Eric and Jeffrey talk all about DevOps Diagnostics today, running through the various categories within it, such as: system metrics, log files, air conditions, heartbeats, and data integrity checks. Eric also gives his recommendations to those new and experienced with the system — tools, resources, and services. Topics of Discussion: [:47] About today’s guest, Eric Hexter. [1:19] Jeffrey welcomes Eric to the podcast. [2:28] How Eric first got interested in the world of DevOps. [4:01] Eric talks about some of the key points made from his presentation on the Azure DevOps User Group on Meetup. [6:46] What Cloud DevOps diagnostics consist of. [8:10] What categories .NET developers need to be watching in order to operate their systems effectively. [9:08] Eric talks about one of these categories: his favorite system metrics. [12:15] Eric gives a quick rundown on queue-based processing. [14:23] Eric’s favorite queue at the moment. [15:21] The importance of having metrics on every running piece of your application. [18:23] A word from Azure DevOps sponsor: Clear Measure. [18:52] How Eric looks at system metrics. [20:06] On Eric’s team, who looks at the metrics? [20:34] Eric gives an explanation of the next category of Cloud DevOps diagnostics: log files. [22:32] What Eric recommends developers should be logging to a text file. [23:33] Eric explains what a decorator pattern looks like in code. [24:42] Eric briefly explains built-in log files. [25:03] How Eric brings all these log files together to cohesively view them all. [26:31] How does Eric log files? [27:30] Why logging as a first class feature within the application can be incredibly useful. [29:14] The next category of Cloud DevOps diagnostics: air conditions and common patterns within it. [38:13] The next category: heartbeats. [42:00] Eric dives into the next diagnostics category: data integrity checks. [44:04] The differences in structured logging compared to regular logging. [48:46] For structured logging, does Eric have a favorite library? [50:41] Eric’s recommendations tools and services to get started in all of this. [53:06] Eric’s advice on how to consolidate all your flat files to start a consistent view. [54:16] Eric’s favorite heartbeat source. [55:00] Additional resources Eric recommends listeners to go check out after this week’s episode. Mentioned in this Episode: Quarterspot ASP.NET MVC 4 in Action, by Eric Hexter, Jeffrey Palermo, Jimmy Bogard, Matthew Hinze, and Jeremy Skinner Azure DevOps Azure DevOps User Group on Meetup PREMISAzure Storage New Relic Stackify Application Insights Azure Queue Storage Clear Measure (Sponsor) Grafana Loggly The Netflix Tech Blog Want to Learn More? Visit AzureDevOps.Show for show notes and additional episodes. Follow Up with Our Guest: Eric Hexter’s LinkedIn
Jeremy Miller is using Jasper to distribute computing. This episode is sponsored by Smartsheet. Show Notes: Nancy (NancyFx) was mentioned FubuMVC was mentioned too. TIBCO webMethods RabbitMQ as a "store and forward" queue (video) Azure Service Bus NServiceBus (from Particular Software) More on the Happy Meal metaphor from Jimmy Bogard The Oatmeal (comic) Jasper website - Jasper on Gitter Book: Enterprise Integration Patterns For more on Akka, check out episode 062 with Ted Neward Jeremy Miller is on Twitter. Want to be on the next episode? You can! All you need is the willingness to talk about something technical. Music is by Joe Ferg, check out more music on JoeFerg.com!
Summary Jimmy Bogard creator of AutoMapper, MediatR and HtmlTags talks to me about his move into the world of containers. Details Who he is, what he does, his open source projects. What containers are, why use them, containers are like Lego bricks. How many apps to a container. Windows containers types. Differences between Windows and Linux containers, why choose over the other, size and ease of scaling; if you choose Linux you need to know something about Linux admin. Do apps need to written in a different way to work on containers. Be mindful of the size of Windows containers. Is an app in a container a microservice. Jimmy Bogard's liver. Jimmy likes Microsoft docs on containers.
Domain Events - After Persistence The previous tip talked about domain events that fire before persistence. This week we'll look at another kind of domain event that should typically only fire after persistence. Sponsor - DevIQ Thanks to DevIQ for sponsoring this episode! Check out their list of available courses and how-to videos. Show Notes / Transcript If you're new to the domain events pattern, I recommend you listen to episode 22 before this one. In general, I recommend listening to this podcast in order, but I can't force that on you... When you have a scenario in your application where a requirement is phrased "when X happens, then Y should happen," that's often an indication that using a domain event might be appropriate. If the follow-on behavior has side effects that extend beyond your application, that's often an indication that the event shouldn't occur unless persistence is successful. Let's consider a contrived real-world example. Imagine you have a simple ecommerce application. People can browse products, add them to a virtual cart or basket, and checkout by providing payment and shipping details. Everything is working fine when you get a new requirement: when the customer checks out, they should get an email confirming their purchase. Sounds like a good candidate for a domain event, right? Ok, so your first pass at this is to simply go into the Checkout method and raise a CartCheckedOut event, which you then handle with a NotifyCustomerOnCheckoutHandler class. You're using a simple in-proc approach to domain events so when you raise an event, all handlers fire immediately before execution resumes. You roll out the change with the next deployment. Unfortunately, another change to the codebase resulted in an undetected error related to saving new orders. Meaning, they're not being saved in the database. Now the result is that customers are checking out, being redirected to a friendly error screen, but also getting an email now confirming their order was placed. They're mostly assuming everything is fine on account of the pleasant email confirmation, but in fact your system has no record of the order they just placed because it didn't save. In this kind of situation, you'd really rather not send that confirmation email until you've successfully saved the new order. While in-proc domain events are often implemented using simple static method calls to raise or register for events, post-persistence events need to be stored somewhere and only dispatched once persistence has been successful. One approach you can use for this in .NET applications is to store the events in a collection on the entity or aggregate root, and then override the behavior of the Entity Framework DbContext so that it dispatches these events once it has successfully saved the entity or aggregate. My CleanArchitecture sample on GitHub demonstrates how to put this approach into action using a technique Jimmy Bogard wrote about a few years ago. It involves overriding the SaveChanges method on the DbContext, finding all tracked entities with events in their collection, and then dispatching these events. His original approach fires the events before actually saving the entity, but I much prefer persisting first and using a different kind of domain event for immediate, no side effect events. In the Clean Architecture sample, I have a simple ToDo entity that raises an event when it is marked complete. This event is only fired once the entity's state is saved. At that point, a handler tasked with notifying anybody subscribed to that entity's status could safely send out notifications. The pattern is very effective as a lightweight way to decouple follow-on behavior from actions that trigger them within the domain model, and it doesn't require adding additional architecture in the form of message queues or buses to achieve it. Would your team or application benefit from an application assessment, highlighting potential problem areas and identifying a path toward better maintainability? Contact me at ardalis.com and let's see how I can help. Show Resources and Links Clean Architecture Sample (GitHub) Domain-Driven Design Fundamentals - includes Domain Events
At NDC London Jimmy and Jessica met up with Jimmy Bogard They talk about his passion for open source projects, how to start and how to get the time. They also talk about what Microservices is and why we should use it. https://github.com/jbogard/Respawn https://github.com/HtmlTags/htmltags https://github.com/AutoMapper/AutoMapper https://github.com/jbogard/MediatR https://jimmybogard.com/ Guest: Jimmy Bogard @jbogard
Primitive Obsession Primitive Obsession describes code in which the design relies too heavily on primitive types, rather than solution-specific abstractions. It often results in more verbose code with more duplication of logic, since logic cannot be embedded with the primitive types used. Sponsor - DevIQ Thanks to DevIQ for sponsoring this episode! Check out their list of available courses and how-to videos. Show Notes / Transcript Primitives refer to built-in types, like bool, int, string, etc. The primitive obsession code smell refers to overuse of primitive types to represent concepts that aren't a perfect fit, because the primitive supports values that don't make sense for the element they're representing. For example, it's not unusual to use a string to represent a ZIP Code value or a Social Security Number. Many systems will use an int to represent a value that cannot be negative, such as the number of items in a shopping basket. In such a case, if the system even bothers to enforce the invariant stating that shopping basket quantity must be positive, it must do so somewhere other than in the type representing the quantity. Ideally, the shopping basket or basket item type would enforce this, but again in many designs the shopping basket item quantity is simply a property that can be set to anything. In which case any service, UI call, etc. that manipulates a basket item would first need to ensure it was being set properly. This can result in a great deal of duplicate code, with the usual technical debt that arises when you violate the Don't Repeat Yourself principle. In some places, someone will forget to perform the checks, or they'll perform them differently, and bugs will creep in. Or the rules will be updated, but not everywhere, which results in the same inconsistent behavior. When you work with too primitive of an abstraction, you end up having to code around this deficiency every time you work with the type. Encapsulation I've talked about encapsulation before - it's obviously an important concept in software design. By choosing to represent a concept with a primitive, you give up the ability to leverage encapsulation when working with this concept in your solution. The biggest problem with primitive obsession is that it results in a lot of behavior being added around the types in question, rather than encapsulated within them. Instead of having to check, probably in many places, that Quantity is positive or that a string represents a valid ZIP code, it's far better to create a type to represent the concept in question, along with its rules. Such types should typically be immutable value objects that cannot be created in an invalid state (and thus need not be validated where they are passed in as parameters). It's useful to have easy ways to cast primitives to and from these value objects, but this should be done only at the edges of the application (user input/output, persistence). Try to use the value object as much as possible within your actual business logic or domain model, rather than a primitive representation of the type. You can make working with your new type about as easy as working with the primitive it's replacing by making sure you override its ToString method. You can also handle comparisons and equality, and configure implicit and explicit casting operators. Jimmy Bogard wrote an article about 10 years ago that describes how to do exactly this for a simple ZIP Code type in C# - there's a link in the show notes. Yes, you'll end up with a dozen or so lines of code in your ZIP Code class instead of just using a string, but any logic that relates to ZIP Codes will also live in this class, rather than being scattered throughout your application. When you represent a concept in your system with a primitive type, you're asserting that the concept can be represented by any value that type can hold. If you expose method signatures that accept primitive values, the only clue you might offer to clients of that method could be the names of the parameters. Invalid values might no immediately be discovered, or if they are, the related errors might be buried within the behavior of the method, rather than immediately apparent. If instead you use a separate value object to represent a concept, a method that accepts parameters using this type will be much easier for clients to work with. If there are exceptions related to type conversion, they will be discovered immediately when the client attempts to create an instance of the value object, and this behavior will be consistent everywhere, unlike different methods that may or may not perform validity checks on their inputs. You can learn more about the primitive obsession code smell and literally dozens of others, along with how to refactor them, in my Pluralsight course, Refactoring Fundamentals. Show Resources and Links Encapsulation Don't Repeat Yourself Refactoring Fundamentals Dealing with Primitive Obsession - Jimmy Bogard Design Smell: Primitive Obsession - Mark Seeman
Ed and Brian cover the latest news in the development community including: Microsoft ends it's quest to include an object mapper. We'll look at all the ways you can build Native Mobile applications that look professional. Your favorite text editors battle it out for a place in our hearts. And JavaScript Dominates the Stack Overflow Developer survey. 01:00 EC: Let me start off with a quick update about our previous shows. We covered some issues where Microsoft was trying to come up with their own object-mapper utility to bundle with '.NET MVC and that would have been probably '.NETs' Core MVC. And most of you guys out there that build those type of apps are probably already using something called AutoMapper, so I invited Jimmy Bogard on the show to give his point of view on what exactly was Microsoft trying to accomplish with this and it turned out to be a really good show focused on app security and talking about what Microsoft's idea was. Microsoft actually decided to back off the idea and they're kinda closed on the issue for now, so it looks like they've kinda left things as is. The community provided a solution for the problem and they're just gonna leave it that way for the time being. So that discussion is over with anyway, but it made for some great content. If you wanna go back and listen to Jimmy on the show, that was last week's podcast. Like I said, there are some really great points in there about security, if you haven't caught it already. 02:19 EC: So on Developer Digest shows, we go through our weekly or bi-weekly newsletter and cover some of the topics that were discussed in the newsletter. Some of the articles we highlighted in the newsletter and just kinda give our opinions on what the content was like in those articles and our experience. So first up we have "Creating Your First Native Mobile App With Visual Studio." So this is an article by... Or an article series rather, by Rob Lawler, one of our developer advocates here and he's kinda showing the ins and outs of creating a native mobile application in Visual Studio using NativeScript. 03:08 BR: Yeah. It's a good series, it's pretty detailed. He has four parts of it, all of which are pretty extensive. So obviously, he kind of talks about other options, being Xamarin being the obvious choice if you're a Visual Studio developer, but he explains why you might wanna consider NativeScript and goes into detail on how to actually build an app from the ground up and I loved his idea for an app. It's a Bill Murray app... Find out more at http://developer.telerik.com/content-types/podcast/developer-digest-automapper-update-native-mobile-editors-javascript-dominates/
On this episode of Eat Sleep Code guest Jimmy Bogard shares his perspective on Microsoft's basic object-mapper. Jimmy talks about the future of Automapper and support for .NET Core & .NET Standard. 00:57 EC: So I wanted to get you on the show today, because of a GitHub issue I saw on the MVC GitHub repository. And this GitHub issue is… It reads, “Basic object mapper for simple model view. View model property mapping.” And I have a feeling that you have some opinions about this, having one of… A very popular NuGet package for ‘.NET’ AutoMapper. And it’s been quite successful. And this, to me, it looks like it may step on your toes a little bit. So I wanted to get you to talk about kinda where you’re at and how this affects you. But before we get started, why don’t you give everybody a quick introduction of who you are and what you do, Jimmy? 01:56 JB: Okay. I guess I really write code for customers for a living. I work at a consulting company called Headspring out of Austin, Texas. And nearly all of the open-source stuff I work on, is just stuff that I build to help my clients. It’s just tools I wanted to keep using, and using, and using as we go from client to client. And so, almost everything that I write and use these days with open-source is stuff I’m actually using on client projects, that I don’t wanna lose when I go to the next client. 02:33 EC: And you have this tool called AutoMapper, which is an object mapping tool. Why don’t we give everybody a quick elevator pitch. What is an object mapper? 02:46 JB: Well, the basic idea is I have two objects that look pretty similar, and my general use case was I’m building web applications in ASP.NET MVC, typically. And I have a rich domain model that’s bound to the database in some way or another, usually with an ORM, like in any framework. But then, I had this other thing I’m using to show information on the web, either for showing forms, or also posting data from the web. And you have this general problem, and that’s your backend object is generally very rich and behavioral, and has a lot of things associated with it, but the thing you’re coming in from the web, is generally not. And you typically don’t wanna mix those two things together. So about… Gosh, eight or nine years ago, I saw this issue of when we’re starting out MVC, that we wanted to have these DTOs that we use for the MVC side and have these rich backend objects. But what would be the mechanism that we copy that information from the rich backend objects to the frontend dumb DTO objects? And I didn’t wanna do that all by hand, and I looked around, and saw there really wasn’t anything that did it for you automatically. And so, I created AutoMapper as a way to automatically figure out how to copy information from one object to the other. 04:12 JB: Probably a stupid idea. That didn’t seem that complicated, but there were a few things that I wanted to have out of the box that would help us out. One of the big ones was flattening, so if you have “foo.bar.baz” on your destination object, you could just have a single property, “foo, bar, baz.” And it would automatically traverse those associations, and figure out how to flatten that object for you. It handled nulls as well. If foo was null or bar was null, it’d be able to handle that as well. And the other big thing that I wanted to do, was make sure we could test it as well. So if I misspelled something or removed a property, I could just have one line of… Just check all my configuration is valid, and all the names match up, and there’s nothing missing. And if there is, go in exception, so it’s really easy for us to test, to say, “Make sure all my mappings are good.” Find out more at http://developer.telerik.com/content-types/podcast/automapper-net-core/
Summary Jimmy Bogard talks about AutoMapper, why and how he built, and recent performance improvements. Details Who he is, what he does; how AutoMapper started, what it is; projections, what that are, how they work, expression trees; early mistakes, inspired by Structure Map, performance problems, difficulties with projections, rewrite, how Jimmy uses AutoMapper vs how other people use it, learning from other mappers, improving performance, expression trees are hard to debug; upcoming conferences.
What does modern open source look like? While at Techorama in Belgium, Carl and Richard moderated a panel of Bill Wagner, Udi Dahan, Nik Molnar and Jimmy Bogard to discuss their experiences working in open source in this day and age. Much of the discussion focuses the various approaches that folks make a living while building and maintaining open source projects. Does it make sense for a commercial product to be open source? What's the right way to go about that? Why would someone put their project into an entity like the Dot Net Foundation? What happens when large companies want to take a dependency on your little open source project? Lots of great thinking from folks who have been there!Support this podcast at — https://redcircle.com/net-rocks/donations
What does modern open source look like? While at Techorama in Belgium, Carl and Richard moderated a panel of Bill Wagner, Udi Dahan, Nik Molnar and Jimmy Bogard to discuss their experiences working in open source in this day and age. Much of the discussion focuses the various approaches that folks make a living while building and maintaining open source projects. Does it make sense for a commercial product to be open source? What's the right way to go about that? Why would someone put their project into an entity like the Dot Net Foundation? What happens when large companies want to take a dependency on your little open source project? Lots of great thinking from folks who have been there!Support this podcast at — https://redcircle.com/net-rocks/donations
Summary Julie Lerman tells me all about Entity Framework Core* and her love of learning. Details What's new with EF, whole new code base, no EDMX, no object context, EF 6 is not going away; in memory provider for testing, better disconnected scenarios, proof of concept for NOSql, batch updates; is it production ready; learning cool things; Julie has been working on EF since 2006; books on EF; using Aurelia; Julie Lerman uses a Mac now; domain driven design; demoware vs good practices; learning from Jimmy Bogard; Julie's hectic conference schedule. * this podcast was recorded before the rename from Entity Framework 7 to Entity Framework Core 1.
What is it like managing a mature open source project? Carl and Richard talk to Jimmy Bogard about his experiences with AutoMapper, an open source project he started back in 2009 that is still going strong today. While open source has been around for many years, the ecosystem has been evolving, and Jimmy talks about how site like GitHub and Stack Overflow has made it much easier to stay engaged with your user base and have meaningful conversations about code - without having to repeat yourself over and over. The discussion also dives into the challenges of contributions, people's sometimes unreasonable expectations, and just being patient with the world while you write code you actually use. Great thinking from a guy who's been there!Support this podcast at — https://redcircle.com/net-rocks/donations
What is it like managing a mature open source project? Carl and Richard talk to Jimmy Bogard about his experiences with AutoMapper, an open source project he started back in 2009 that is still going strong today. While open source has been around for many years, the ecosystem has been evolving, and Jimmy talks about how site like GitHub and Stack Overflow has made it much easier to stay engaged with your user base and have meaningful conversations about code - without having to repeat yourself over and over. The discussion also dives into the challenges of contributions, people's sometimes unreasonable expectations, and just being patient with the world while you write code you actually use. Great thinking from a guy who's been there!Support this podcast at — https://redcircle.com/net-rocks/donations
On this episode of Eat Sleep Code, guest Jimmy Bogard technical architect with Headspring, shares his experience with running a successful open source project. Later, Sam Basu and Michael Crump join the show to talk about Apple, Microsoft and Telerik open source initiatives.
Guest: Jimmy Bogard @jbogard Full show notes are at https://developeronfire.com/podcast/episode-007-jimmy-bogard-the-primacy-of-simplicity
Carl and Richard talk to Jimmy Bogard about his experiences scaling an MVC web site to thousands of pages and thousands of users. The conversation starts out focused on why to use MVC - comparing original ASP with ASP.NET Web Forms and MVC. Jimmy talks about the early days of MVC and the challenges of making a very new product work, but in exchange for some substantial benefits - but perhaps not the ones you'd think! Jimmy also digs into scaling an MVC web site across multiple servers, dealing with state management (Session is evil!) and what you can do to web pages to keep them performing well with large numbers of users. The discussion also moves to managing huge number of pages and developing patterns for UI and object naming to simplify development and testing. Automation is key when you're working at scale!Support this podcast at — https://redcircle.com/net-rocks/donations
Carl and Richard talk to Jimmy Bogard about his experiences scaling an MVC web site to thousands of pages and thousands of users. The conversation starts out focused on why to use MVC - comparing original ASP with ASP.NET Web Forms and MVC. Jimmy talks about the early days of MVC and the challenges of making a very new product work, but in exchange for some substantial benefits - but perhaps not the ones you'd think! Jimmy also digs into scaling an MVC web site across multiple servers, dealing with state management (Session is evil!) and what you can do to web pages to keep them performing well with large numbers of users. The discussion also moves to managing huge number of pages and developing patterns for UI and object naming to simplify development and testing. Automation is key when you're working at scale!Support this podcast at — https://redcircle.com/net-rocks/donations
Jimmy Bogard gives his thoughts on building distributed systems.