Would you look at that — it's Monday again. I hope you had a wonderful weekend. Here's what we have going on this week.
- Let's go on a community blog tour
- Did you know?
- A housekeeping note
- Last week in the .NET world
Let's go on a community blog tour
Every week, I provide a big list of quick links for you to check out. I have them this week as I always do, but I wanted to also talk about five or so community blog posts this week. (To be clear, there are always many more great posts from the community that deserves special recognition. These are just some posts that caught my eye this week.)
My favorite post this week comes from Josef Ottoson, who describes working with sorting really large files in C#. If you think algorithms have limited real-world applications, think again: after starting with an in-memory application, he compares external merge sort, splitting, and merging. He shows off how he only consumes 32 megabytes when sorting with an external merge sort algorithm, over almost 6 gigabytes with an in-memory solution. (As expected, sorting in memory is a little bit faster.)
On the heels of the "Focus on F" .NET Conf, F# creator (and the creator of C# 8 and 9 😉) Don Syme has a Github readme called What operators and symbols does an F# programmer need to know? As someone who's been wanting to learn F# for the last few years now, I appreciate the candor: as with C#, there's much of the language that you don't need on a daily basis.
Over at the Visual Studio Code blog, Chris Dias writes about the rise of notebooks. School is starting back up soon, but I'm not talking about those: here I'm talking about docs that contain text, executable code, and its output. It provides interesting use cases for learning and development.
With VS Code, the experience in working with notebooks is a big concern:
To complete the metaphor, notebooks in VS Code have matured from those awkward teen years into (young) adulthood, confident and strong, with a bright future. Working with VS Code notebooks may take a bit of adjustment if you are moving from Jupyter, but we hope it will be worth it in the end. And, as we always try to do, you can customize the experience through settings.
We've geeked out about .NET source generators quite a few times in this space. To that end, last week Khalid Abuhakmeh writes about using them to retrieve class declarations from a project. He uses a
ISyntaxReceiver, which retrieves the class declarations.
Jeremy Miller wrote a nice post about testing effectively with or without mocks or stubs. Are you spending most of your time writing effective tests or simulating data with mocks to avoid writing integration tests? With the advancements in networking and containerization, does it need to be an either/or discussion?
In the past, we strongly preferred writing “solitary” tests with or without mock objects or other fakes because those tests were reliable and ran fast. That’s still a valid consideration, but I think these days it’s much easier to author more “socialable” tests that might even be using infrastructure like databases or the file system than it was when I originally learned TDD and developer testing. Especially if a team is able to use something like Docker containers to quickly spin up local development environments, I would very strongly recommend writing tests that work through the data layer or call HTTP endpoints in place of pure, Feathers-compliant unit tests.
Did you know?
Did you know that in Visual Studio Code, you can make Integrated Terminal sessions appear as editor tabs, instead of taking up valuable space in the panel? Not me.
Quick housekeeping note
A quick note: The .NET Stacks is taking a brief break until September. Over the next several weeks, my free time will be extremely limited and I won't be able to devote the time. Thanks as always for your support and I'll be back next month.
🌎 Last week in the .NET world
🔥 The Top 3
- Gregor Suttie sets environmental variables in an Azure Function.
- Anthony Giretti writes about record structs in C# 10.
- Jeremy Miller tests with or without mocks or stubs.
Over at JetBrains, the v2021.2 releases for dotCover, dotMemory, dotTrace, and dotPeek have arrived. Alexandra Kolesova writes about updates to Rider 2021.2, and Alexander Kurakin writes about updates to ReSharper 2021.2.
📅 Community and events
- In standups this week, ASP.NET talks about logging updates in ASP.NET Core 6 and MAUI discusses the .NET Upgrade Assistant.
- Shameless plug alert: I'll be on David McCarter's "Rockin' the Code World" on Saturday.
🌎 Web development
- Marinko Spasojevic uses Azure Active Directory B2C with Blazor WebAssembly hosted apps.
- Derek Comartin compares using async messages and synchronous requests and responses.
🥅 The .NET platform
- Dennes Torres warns: be careful with the .NET Core folder structure.
- Nick Randolph explores custom validation and multi-language resource loading for validation with INotifyDataErrorInfo for XAML applications.
- Andrew Lock inserts and removes characters using StringBuilder.
- Khalid Abuhakmeh uses source generators to find class declarations.
- Don Syme writes: what operators and symbols do an F# programmer need to know?
- Marc Clifton explains C# code to non-programmers.
- Matthew Jones explores file-level namespaces in C# 10 and also writes about null parameter checking in C# 10.
- Niels Swimberghe levels up on data structures and algorithms as he writes a generic bubble sort in C#, works with merge sort, quick sort, insertion sort, binary search, the Generic Boyer–Moore–Horspool algorithm, and linear/sequential search.
- Mahesh Chand writes about the DataTable in C#.
- Josef Ottosson sorts really large files with C#.
- Scott Hanselman compares stringly typed and strongly typed.
- Justin Chadell introduces heredocs in Dockerfiles.
- Miroslav Shtilianov designs load tests with Test Studio and Fiddler.
- Shawn Wildermuth looks at static site generators.
- Chris Dias writes about the coming age of notebooks.
🏗 Design, testing, and best practices
- Oren Eini writes about "open for extension, closed for modification" as an architectural pattern.
- Beej Burns writes about a fixed vs growth mindset.
- Jimmy Bogard continues writing about domain-driven refactoring.
- George Stocker writes about why contexts matter.
- J.B.Rainsberger writes about BDD.
- The Coding Blocks podcast talks about the 2021 State of the Developer Ecosystem.
- The Merge Conflict podcast talks to Maddy Leger.