This is part two of 2021’s greatest clicks on Last Week in .NET. Today we’ll cover July-Present, and speaking of Presents… have you bought yours yet? Yea, that’s a Christmas Joke.
Today also marks the day that we’re driving back from Disney World by way of Charleston, because if you have young children, you’re not making a 15 hour drive in a single day. Historic Charleston is beautiful, and a special thanks to Kevin Jones (@vcsjones) on twitter for the Charleston recommendations.
Back in July, CoPilot was released, and you all were quite interested in the fact that you could trick CoPilot into coughing up someone’s SendGrid API keys, which is both impressive and a “How the hell did they not have a private beta that consisted of people we would normally put on the naughty list” moment.
🏫 Oskar Duycz has you covered with an updated readme and tutorial on event sourcing in .NET (Core). If you think of event sourcing like that annoying kid in your 6th grade class that reminds the teacher when she forgot to assign homework and when the teacher forgot to give a scheduled quiz, it makes a lot more sense.
⏳ Rick Strahl has a lengthy blog post about converting the Desktop application Markdown Monster to use C#’s Async/Await. This is as an indepth dive into real-world async that you’ll ever see and worth your time.
👨👩👧👦 You know you can run multiple projects when you hit ‘F5’ in Visual Studio, right? I love the gif method of teaching; and because of that I’ll forgive the horrible experience we’ve taught ourselves is adequate with debugging multiple projects via F5.
🏪 Microsoft publishes its own applications through the Microsoft Store, making it about 95% of the Microsoft Store.
👨🏼🤝👨🏼Cecil Philips and David Pine talk positional pattern matching in C# and how it works and true to the internet there’s at least two commenters who thinks they know better than the language creators.
🕵️♀️ Using Secrets in .NET Core Console Applications Console applications remain one of the least documented parts of the .NET Core experience (compared to ASP.NET), and I’m always happy to share content on that topic. Why are console applications important? If you’re in an event-driven microservices world in .NET, using a Console application to connect to your message queue and receive messages and put them into a database of some sort is an integral part of the work; as are services that respond to events but don’t necessarily expose HTTP APIs.
🐦 One thing I missed last week is that Random.Shared is available in .NET 6. Yes, a threadsafe Random API, as opposed to a threadsafe random API.
⚡ There’s word that LINQ statements will be twice as fast in .NET 6 than they are in .NET 5. David focuses on performance so I have no reason to doubt his word, and apparently the benchmarks will be coming soon.
🔮 Magick.NET 8.2.0 has been released which is an image manipulation library for .NET.
🤷♂️ The real names of features in Visual Studio. It’s a bit inside baseball, but still a wonderful walkthrough.
⬇Download New Azure Architecture Icons now! These icons look rather spiffy but you know some executive at Microsoft wanted the name ‘Azure’ somewhere on these icons.
🍧David Fowler tweets a thread explaining the coolness behind Minimal APIs, and I’ve said it before and I’ll say it again. This is why I’m on twitter. This sort of thing would have been too minor to make a whole blog post out of, but is perfect for twitter.
👀Minimal APIs at a glance in .NET 6 Scott Hanselman digs into what minimal APIs are and how they work. ‘Minimally’ is apparently the right answer.
5️⃣Nick Chapsas: 5 open source .NET projects that deserve more attention. The five? NBomber, CSharpRepl, Verify, FluentDocker, Cupboard. If you want to know what these do, watch the video.
📦.NET 6 will have a package validation tool to make the nuget experience even more decadant.
👋 Chris Dixon had gotten the highest of highs before writing this screed on twitter that charitably would be panned as “VC with vested interest in getting people to buy into Web3 says everyone should buy into Web3.” I’m not sure what’s worse: That “web3” is what Web 1.0 was like before Chris and other VCs cashed out on the likes of Facebook, Instagram, WhatsApp, and Twitter, or that if we buy into his vision, in a new world of ‘blockchain’ and ‘NFTs’, we could somehow get back to that web 1.0.
Maybe we could just… I don’t know… go back to Web 1.0? It’s not like Web2.0 hid web1.0 in a basement and tied them up and stuffed a gag in their mouth. We don’t have to ‘find’ web1.0 on a milk carton somewhere. It still… it just works. Right now, today.
If you think I’m full of it and you’ve bought into beanie babies NFTs as the way forward, may I be the first to offer you an NFT of this week’s newsletter for the low, low price of $100,000 ₿2.0372698? I’m not saying it’s going to go up in value, but I’m not saying it won’t either.
😡 The Executive Director of the .NET Foundation found herself in hot water for merging her own PR in on a .NET Foundation member project and my take on this is a bit more nuanced than you might think. You joined the .NET Foundation, and gave the .NET Foundation contributor rights, or even the copyright to your project. What did you think was going to happen? That they wouldn’t use those rights? If you give someone your toy, you can’t get mad that they play with your toy. You gave it to them.
I’ve been following topics like this for a while, and have asked for an update on the related topic.
❣ Did you know there was an alternative to Windows Explorer? I did not. Well version 2 of this alternative is out.
👀 Webview UI Toolkit for Visual Studio Code This finally puts the ‘visual’ in Visual Studio Code.
Also in October, the “Hot Reload” ‘incident’ happened. I can’t really parse out the links you liked from this without losing the whole context, so in case you missed it the first time:
On October 19th, the PM For “Hot Reload” (which honestly sounds like an urban dictionary term of art), showed off Hot Reload to internal stakeholders. On October 20th, Hot Reload was removed from the .NET 6 RC2 CLI in favor of a Visual Studio only release. On October 22nd, the news broke in the Register and the Verge, with the Verge stating the reasoning was a “business-led decision” by the CVP of Developer Division (DevDiv), Julia Luison. On October 23rd, Microsoft put it back in saying “we inadvertently ended up deleting the source code instead of just not invoking that code path”, and it was also reported by The Verge.
There is ample evidence to draw conclusions that this was not inadvertant, and that Scott Hunter’s blog post is to maintain political cover for the CVP that made the decision:
- If this were ‘inadvertant’, then there would have been no reason to close and lock the PR to prevent discussion.
- If this were ‘inadvertant’, then the myriad of developers that make up .NET’s online twitter presence wouldn’t have been radio silent on the subject for days.
- If this were ‘inadvertant’, then someone from the .NET team would have spoken up to explain what the reasoning was behind removing a working feature from a Release Candidate
I could go on. But unfortunately if I point to the back-channel ways the .NET Team was trying to show that it wasn’t their call, I would get them in trouble with their corporate overlords.
The .NET Community was largely pissed off (a technical term) at the removal of this working feature from the .NET CLI and making it ‘Visual Studio only’, and I can’t say I blame them.
The problem here is the same problem the .NET Community has with the .NET foundation’s governance: Microsoft.
One the one hand, Microsoft would like to be known as a steward of open source; going so far as to showing “We ♥ Open Source”, but on the other, each time it comes down to making a hard decision that would benefit the open source community but potentially harm Microsoft’s business interests, it chooses its business interests, every time.
This is a pattern of corporate interests at Microsoft wanting to lock down development ecosystems to enhance their product’s bottom line while hurting adoption that ends up hurting Azure’s bottom line. It’s like the 90s called and said “Hey, get in, we’re going shopping for Fanny packs, Lowrise Jeans, and Vendor lock-in”.
And that’s the rub. Visual Studio is great — I personally love it, but I also love not having to boot into Windows to write .NET. .NET Core saved me from leaving .NET. Seriously. I like a console-first workflow, and the developer affordances in a *nix based environment outweigh any improvements Microsoft has made, and I go so far as to say that a console-first workflow respects how I work.
October was a wild month.
🧵 A thread of System.Text.Json features in .NET 6. Which is more memorable: “System.Text.Json” or “Newtonsoft”? Hit reply and let me know.
🤔 Covariance & Contravariance in .NET C#. Co[|ntra]variance: the ultimate compiler “well, actually”.
Microsoft employees are upset about all the “.NET Drama”. As a personal reflection: Anytime someone uses the word ‘drama’ to describe another person’s lived experience, it’s always in a derogatory and dismissive fashion.
😒Microsoft MVP told to give up award because they work for Microsoft’s cloud competition. This did not use to be true, but now it is. I guess “Valuable” here relates to “Valuable to Microsoft” not “Valuable to the community”.
🙅♂️Remove MS Contributors from .NET Thanks Website. No. Microsoft contributors are people too.
🍴open-dot.net, a fork of .NET, has been created by Geoff Huntley This is one of those meme moments where someone following the directions on the tin and yet it’s as if they’ve adopted tinfoil as their chief clothing accessory. .NET is open source, open source projects can and should be forked when you want to change governance models, ergo .NET can be forked. My unease here extends across many levels, not the least of which is financial: Microsoft has a budget of probably around $25 million for the .NET team (including overhead that’s probably low, don’t @ me) per year and .NET is… well.. free. So we know off the bat that “new” development won’t happen in this fork; likely only tooling affordances and changes, but second to that is the extreme culture shock to the .NET community about anything open source. Oh sure, we like open source, as long as we don’t have to pay for it, or hear from it, or it does exactly what we want, and Microsoft hasn’t yet tried to compete it out of existence. So this something to watch, certainly, but I’m not so sure the cart and horse are in the right orientation yet.
🚢Anti-Patterns when Building Container Images There are a lot of little paper-cuts when using container images (docker images, the Xerox of Containers), especially if you want to host your database in a container image. So, read this and file it away for when you invariably run into a problem.
🧪Alba 6.0 is friendly with .NET 6, Minimal API, and WebApplicationFactory fun fact, I spent a few months reproducing Alba because I didn’t know it existed. If you want an easy way to test your HTTP APIs, use Alba.
And that’s part 2 of the greatest clicks in Last Week in .NET for 2021. Next week is Christmas, and the following week is New Years, so it’s unlikely there’ll be very much in the next few newsletters. If I don’t see you before then, stay safe, healthy, and I’ll see you in 2022.