A podcast that details the happenings around the .NET ecosystem, generally a week at a time. I can neither confirm nor deny that there will be attempts at humor involved.
For any confusion caused to fishermen thinking they've gotten a new podcast devoted to the tools of fishing, I am sorry. This is about the technology stack. Naming is hard.
Two years of simmering discord came to a head last week as the .NET OSS maintainers openly revolted against the .NET Foundation for years of non-communication, the Executive Director resigned, and newly elected board members are left to pick up the pieces.
It was a wild week.
First, there was some discord due to the .NET Foundation saying a board member left ‘for personal reasons’ when in reality they left due to the nature of the .NET Foundation itself.
Second, during this brouhaha and when finding out the Executive Director merged a PR without communicating, the .NET community learned that their projects were moved to the Foundation’s Github Enterprise account without their consent, that the DNFAdmin service account was basically a trojan horse (an actual Trojan Horse, not the virus variety), and that even if they signed the ‘contributor model’ contracts, they may not own their own projects.
As I said, it was a wild week.
So, the Executive Director apologized, not for the lack of communication, or moving the projects to the .NET Foundation’s Github Enterprise account, or misstating why Rodney Littles II left the board, or for the fact that the foundation has not been up front with what it means to have a project join the .NET Foundation, but for… forcing through a PR on a project that the foundation ostensibly owned.
Naturally members of the community asked for the Executive Director’s resignation, and they got it. And we sit, a few days later, watching more communication from a single member of the board than we had from entire previous Boards of Directors, particularly around most of the painpoints the community mentioned previously. One of the board members spoke up during the incident but said nothing of consequence, except to say, “Likewise, I think that the community and projects may have not understood what they were agreeing to when they were brought under the .NET Foundation umbrella.”. That’s what we in the biz like to call an understatement. I’m also not the only person to call this entire thing a brouhaha.
And since I’m writing this newsletter, I get to have my say.
I don’t think Claire Novotny should have resigned as the Executive Director of the .NET Foundation. I believe her to be a scapegoat for the structural issues the .NET Foundation has, as I’ve written about and spoken about previously. We’ve had entire Boards of Directors come and go from the .NET foundation with nary a peep from them in public about their work, no after-action review or postmortem, nothing outside of their initial interview to become a member of the Board of Directors.
I believe if anyone should resign, it should be the Boards of Directors. They ultimately are responsible for what the Executive Director and what the .NET Foundation does, and while half the board is fresher than a prince from Bel-air, the other half aren’t, and in some form of irony, it’s only the new people who are speaking out. I think they’re Good People, but they either have no idea what they’re doing or they haven’t seen and felt the issue simmering for the last few years, in which case they most assuredly shouldn’t be representing the community in the .NET Foundation.
It really all comes back to a single question: What does the .NET Foundation do? or, taken further: Why does the .NET Foundation exist?. We haven’t really gotten an answer to that question yet; especially the vague “commercially friendly” mission statement.
I’m willing to bet the Board of Directors haven’t been taking minutes for their daily meetings over the past week, even though the bylaws require them to, and so I’ve taken to asking that the bylaws be amended to require that the minutes are shared for review by the membership of the foundation.
If the .NET foundation is going to exist, then it’s going to have a vision and a purpose. If you care about .NET and the future of .NET, you should be right there, holding their feet to the fire. Otherwise we’re going to get what we’ve always got, a mono-culture that seeks to fulfill Microsoft’s whims about .NET; not what the actual OSS community wants or needs of .NET.
With that bit of news in the can, let’s see what else happened Last Week in .NET:
📚🔥Facebook went down, and of course since it wasn’t DNS it had to be BGP. Honestly I can’t explain BGP to you. I’d like to, but I can’t. Back in the day when I was building a product to discover and map legacy networks, a network engineer took me aside to explain BGP to me and the nightmares didn’t stop for weeks. I’ve since blocked out most of it except for “it’s a way for networks to tell other networks how to route to them”. It’s astonishing that anything works and that we aren’t all finding a desert island to inhabit, away from people and technology.
🧓 Maybe because of, but certainly related to in some form, I learned what a Basil Hayden Old Fashioned was from Adam Rackis, and it sounds delicious. Also if you’re making Old Fashioneds in your kitchen and you have a gas stove, you can use the burner to burn the inside and outside of the orange peel, which apparently helps with the flavors of the orange.
🦄 Either SQL is old or SQL is new again and I can’t figure out which because C# 9 loves some SQL keywords like is, or, and and. If a C# developer fell asleep between 2013 and 2022 they’re gonna be really confused as to the language they came back to.
📅 I did it before it was cool, but Jetbrains released their .NET Annotated Monthly for October 2021, and if you really want a list of links in a monthly format, you could read this list, or just wait and not read LWiDN for a month and read it all at once.
📞 The iPhone 13 can finally photograph dark-skinned folks. This is why diversity in tech matters. 14 years of phone-based cameras for non-white people to get good photos. That’s far too long.
📨 The Register covered Rodney Littles resignation from the .NET Board. They have also previously covered other tech issues like the various Stack Overflow community brouhahas. It’s still weird to me to see inside baseball topics show up in ‘traditional journalism’ that I have to assume that they just have people devoted to these topics.
🌟🦗The CVP for the Windows Developer Platform writes a blogpost on Developing for Windows 11, and because irony is dead, writes that “Windows 11 was built to unlock the full power of the PC”. Because Windows 1 through 10 weren’t?
❣ Did you know there was an alternative to Windows Explorer? I did not. Well version 2 of this alternative is out.
🧀 They moved your cheese in .NET 6 New project templates won’t include the ceremony you remember. They’ll just have the new Minimal API templates because some people just like to watch the world burn.
If you want the old style templates, select .NET 5 when looking for Templates to get the ‘old’ templates back.
🧺 Implicit Usings in .NET 6 With this change you can now use a namespace that isn’t referenced by your .cs file; and so if you want any hope of figuring out where a namespace is from you’d better use an IDE because a text editor can’t tell you. This is a brilliant idea if your goal is to reinforce the necessity of an IDE… like Visual Studio.
🤯 A look at the upcoming improvements to LINQ in .NET 6. There’s Chunking, Range Support, a new Zip Overload, and much, much more.
📝 The WinAppSDK team is actively looking for developer input. Better give it while the giving is good or you’ll just have to go back to Microsoft Connect and wait for them to ignore your issues for years until they finally just shut down the platform.
📹 Dotnetos Conference 2021 carried a talk by Jared Parsons on performance features in C#. I don’t know how to pronounce Dotnetos, sooo. sorry.
📹 Maoni Stephens does a deep dive from A .NET Object from allocation to collection. Any time Maoni speaks, you should watch it. It’s good stuff.
🔉 Mads Torgersen talks C# 10 and I’m starting to feel MCU’d out on the whole C# version number thing.
🥌 And because we need a little fun in our lives, Corey Quinn shares ancient SysAdmin wisdom. Remember when SysOps were a thing? Those were the good ol’ days.
I hesitate to say that’s it for what happened Last Week in .NET… But that’s the standard way to close this thing out, so there you go. See you next week.
VC that sells attention for NFTs wants you to buy NFTs. The .NET foundation decides to force its operations on member projects, and the Microsoft Store really really wants you to use the Microsoft Store. Please. Thank you.
Patch Tuesday gets delayed for more fixes, the word 'themes' now means 'new color schemes', and Microsoft releases a video called that's two minutes long filled with 8 new products... Or two minutes of 8. Not a really bright idea, that.
Arcade == .NET Foundation build tooling; .NET 6 RC 1 is out; and you can now specify what repositories to pull your nuget packages from -- individually.
The 20th anniversary of the September 11th attacks is commemorated, Minimal APIs bet maximum attention, and technologies as old as it gets should be Good Enough For Everyone, says Linux Torvalds.
Windows 11 is coming October 5th; .NET Gets a plan for Deep Learning; and Techbash 2021 has been postponed.
The biggest news this week (and will likely trump any sort of news for the next couple of weeks in the Microsoft space) is that Azure has a vulnerability dubbed “ChaosDB” that exposed its customers keys to the world, leaving every single CosmosDB customer’s database data exposed for the taking. There’s a technical deep-dive into this vulnerability as well. I hope the Azure team is wearing their brown pants.
This is as bad as it gets. Good news though! They gave out a bounty of $40,000 to the finder of this vulnerability. Which values this vulnerability as akin to a Tesla Model 3 — and not even a fully decked out one.
Apply rounded corners in desktop apps for Windows 11. In some cases, rounded corners will be applied to your applications automatically, in others, here’s what you can do to make them rounded. As Apple intended.Razer Bug lets you become a Windows 10 admin by plugging in a mouse. This is a pretty easy exploit to… well.. exploit, so if you’re using Razer mouses in a corporate context, you may want to rethink that decision.The real names of features in Visual Studio. It’s a bit inside baseball, but still a wonderful walkthrough.David Fowler writes to tell us that New .NET 6 APIS [are] driven by the developer community. In this blog post, David details new APIs available in .NET 6, and highlights the fact that well, they were authored by members of the community. I’m a fan of Parallel.ForEachAsync, as that seems rather useful for my needs.This is your warning: Get out of the Dev Channel for Windows 11 unless you want to experience some turbelance. If you want stability, use the beta channel or get out of the insider program entirely. If you want to see new builds of Windows 11 that may have the stability of Windows Vista, stay in the Dev channel.Nicole Miller-Abuhakmeh is the new Community Manager for the .NET Foundation. This is a wonderful choice for CM, congrats Nicole and the .NET foundation.Looks like there’s another tactic available to exploit Proxyshell vulnerabilities. A few weeks ago, a researcher showed off an exploit of Microsoft Exchange Server dubbed ‘ProxyShell’ and it seems like the gift that keeps on giving to attackers. Bottom line: keep your Exchange servers up to date.In .NET 6, FirstOrDefault(), LastOrDefault() and SingleOrDefault() now let’s you specify a default value. Sadly it has to be a compile-time constant so you can’t have something like new Random().Next() available.Microsoft Ignite is November 2-4, 2021 and is virtual again this year because people can’t bother to vaccinate.Github’s Copilot can get you in trouble 40% of the time and if you’re the type to use AI to write code, maybe you deserve to have problems.Using SignalR in your Blazor applications This is an nice pairing of technologies. Like Chardonnay and Brie, or Hotdog and Chili. Ketchup is forbidden, Mustard is recommended, however.
And I say this with a twing of irony, but that’s it for what happened Last Week in .NET.
No releases this week; but lots of interesting tidbits nonetheless. If you read just one article this week, check out “The Myth of the Treasure Fox”. Link below, of course.
Get the Drop on Sorting. Kevlin Henney does a deep dive on the drop-sort, a sorting algorithm that sorts by dropping elements in the collection. This is not as useless as it immediately appears, and Kevlin explains why. It’s engaging and informative.In a screenshot that is strangely alluring Maarten shows off what VB looks like in the brave new world of .NET 6, with a pattern based XML Literal. If I were to rate VB on this screenshot alone, I’d give it a 12/10. Having worked in VB, I give it a 4/10. It’s slightly ahead of the readability of JavaScript 5, and slightly behind Python. These ratings are final.Chat Wars! How microsoft tried (and failed) to keep MSN compatibility with AIM. If AIM and MSN were still alive, they’d have graduated college by now and be grumbling about the state of the job market. I mean, they unemployed, strictly speaking, with AIM having been retired in 2017, and MSN Messenger having been retired in 2014..NET 5 Support of Azure Functions OpenAPI Extension Yes, now Azure Functions support .NET 5 for OpenAPI Extensions. If you, like me, have no idea what that is, then this blog post isn’t for you! (It’s becoming increasingly clear that these blog-posts with keyword laden titles are there to help hit some sort of internal Microsoft KPI related to pushing Azure). “George, you’re being unfair!”, I can hear you say. If I’m being unfair, then why aren’t these blog post titles telling you the outcomes they can help you acheive, instead of keywords of processes related to their own products?No, NVidia Didn’t Fool Everyone with a Computer-Generated CEO In case you missed this, NVidia used a Computer Generated capture of its CEO for a short scene in its presentation, but their initial blog post on the subject made it seem like they used the CG’d CEO throughout. It’s still impressive, bu tnot nearly as impressive as initially made out to be.Microsoft revamps Visual Studio JavaScript projects in forthcoming version. Visual Studio will now rely on whatever the ‘system’ has installed for JavaScript frameworks when creating a new JavaScript-ish project in Visual Studio 2022. I assume it will work seamlessly with things like nodeenv and other virtual environments, and if it doesn’t that would be a bit embarassing, wouldn’t it?.NET Optional SDK Workloads This came about because I saw the word ‘workload’ in reference to .NET, and had no idea what it meant. It means a way to extend the SDK to do other things than it’s meant to. I can’t figure out if this is a public thing (you too can write extensions for the SDK) or if this is a Microsoft Only addition, or who this is even for.A Decade Later, .NET Developers Still Fear being ‘Silverlighted’ by Microsoft. Killing Silverlight was the closest thing .NET Developers had to experiencing the Red Wedding. An entire developer stack killed overnight. I don’t claim there’s any sort of ‘guest right’ when it comes to Technology Stacks, but there’s a certain amount of creative destruction taking place that Microsoft was not known for previously. They have several hundred projects to kill to even get close to Google’s bloodthirstiness. There are, of course, differing views, as is the norm on Twitter.Async code has signficantly less overhead using .NET 5 compared to .NET Core 3.1. Screenshots of the benchmarks in the link if you like that sort of thing.The myth of the treasure fox in Skyrim. This is why I love twitter. You learn things you’d otherwise never hear about. I won’t spoil the story for you, but it’s worth your time to read.Introducing DevOps-Friendly EF Core Migration Bundles. DevOps here means “Deploying your code easily” and has nothing to do with Azure DevOps (either Azure DevOps On-Prem, or Azure DevOps on Azure — and no, I’m never letting Microsoft live that atrocious naming down). Anyway, The EF Core team has made it easier to run database migrations in a CI environment.Highlights from Git 2.33. The news here is that git now has a new rewritten and faster merge strategy called merge-ort. To try it out (it’s not the default yet), you can use the command git merge -s ort when merging two branches in git. The -s ort is some sort of a cruel joke, I think. Or at least proof that no one talks their way through commands any more. Can you imagine telling someone with your mouth-words how to do it? “Type g i t space dash s space o r t”.Performance Improvements in .NET 6. If you like performance blog posts and you tolerate IL, this blog post is for you. As deep a dive as you’ll get on just what performance improvements have been made in .NET 6, and what it looks like under the covers.Visual Studio 2022 Preview 3 offers a new breakpoint context menu to set advanced breakpoints more easily. If you don’t use advanced breakpoints, they’re quite magical to improving productivity when debugging — like setting a breakpoint after a specific number of times, or setting conditional breakpoints.In the “We can’t help being evil” department, It’s harder to switch default browsers in Windows 11. Besides the tweet, there’s an in-depth article about it on the verge, and what that means for us. Since 90s clothing is come back in style, I suppose 90s monopoly practices should too? You can now have global using static
And that’s it for what happened last week in .NET. It was a light week; but as we get closer to November (and .NET 6), we should see more releases.
Releases
🔮 Magick.NET 8.2.0 has been released which is an image manipulation library for .NET.
📢 Windows App SDK 1.0.0-experimental has been releasedand Kevin Gallo attended the App Development Community STandup to underscore why it’s an important release. The release notes tout several experimental features, push notifications and windowing improvements.
📢 Visual Studio 2022 Preview 3 now available! This preview release includes improvements to the Dark Theme, added new JavaScript and TypeScript project types, and because of course they did, easier one click publishing to Azure DevOps.
📢 Announcing .NET 6 Preview 7. There’s new .NET SDK templates that use the latest C# features and now there’s literally a one line console application template. Everyone wants to be like Perl.
📢 .NET 5.0.9 has been released. There are several CVEs resolved in this release, including CVE-2021-34485, an information disclosure vulnerability related to crash dumps, CVE-2021-26423, a Denial of Service Vulnerability, and CVE-2021-34532 which is an ASP.ENT Core Information Disclosure Vulnerability, this time areound logging JWT tokens that are unparsable.
📢 .NET Core 3.1.18 has been released and these same vulnerability were backported from .NET 5 to this release.
🙌 Github Codespaces has been released and you can access it from any repository by pressing the period key. Yes, launch a Visual Studio Code instance, in your browser, already targetting a repository with a single keypress. That’s pretty remarkable and allows me to forgive the many sins JavaScript committed.
News and Notes
🙋♂️ Microsoft abandons semi-annual releases for Windows Server. Opting instead for the ‘You can have frequent updates if you want to use Azure’ which already fills this week’s bingo for requiring Azure needlessly because it’s on someone’s KPI. Joking aside, this is a dive into marrying frequent Windows Server updates with using Azure HCI (Hyper Converged Infrastructure), and it appears that Windows Container updates will now be married to that same infrastructure. Just as well, I suppose since outside of Azure, Windows containers are as rare as an honest politician.
❓ Microsoft deprecated the Snipping Tool, and asked everyone top move to Snip/Sketch and now they renamed Snip/Sketch to Snipping tool, and we’ve once again been reminded that naming is hard for Microsoft.
📹 Aaron Stannard is hosting a webinar called “Introduction to Akka.NET Streams” on August 27th. If you’re interested but your dance card is full on the 27th, you can register and watch later.
🗣 .NET Conf is November 9th-11th, 2021 and the CFPs are open. As usual I’ll be live-tweeting the interesting bits of the conference.
🎉 Jetbrains is celebrating the release of 2021.2 of Resharper and Rider with a … party? This ‘party’ is being livestreamed on August 17th, 2021 at 10:00 EDT (-4 UTC).
‼ One of the more interesting bits of Visual Studio 2022 going 64-bit is that ReSharper can now use more memory. Previously it shared the max 4GB of memory with VIsual Studio. Will performance improve? We’re given a vague “it depends”, which is… fitting.
🤷♀️ Windows 11 FAQ: Here’s everything you need to know says ZDNet. If you’re looking to upgrade, here’s what you need to know: Buy a computer with a new processor.
🥔 CodeMash 2022 CFP is open, and closes August 31st, 2021. I haven’t been to Codemash myself, but I’d love to attend.
🦷 .NET Core 2.1 is end of life at the end of August. It’s getting pretty long in the tooth so migrate now.
🥈💡 Getting off Microsoft Silverlight for Good Silverlight goes out of support in 57 days, and Mobilize.NET, a consultancy that helps companies migrate off of it want you to know this.
🥇 For the F# Folks, Don Syme, one of the language team members for F#, talks about active pattern matching in F# and why it’s superior to alternative forms of matching. I mean you wouldn’t expect an F# person to ever say it isn’t superior, would you?
and lastly, and because I’m obligated to report it but not because I care:
🤑 Microsoft and Amazon battle over yet another $10 billion U.S. government cloud contract. Last time Amazon protested Microsoft winning a DoD Contract worth $10 Billion, and now the shoe, as they say, is on the other foot. However, this time it’s the NSA, and I can’t find the words to care about the plight of the trillion dollar companies.
Microsoft sunsets OneNote, only to expand OneNote, and the .NET Compiler has a bit of chaos inside of it. Let’s get to it.
⛔✅ David Fowler, member of the .NET team, writes that “null checking in C# has gotten out of hand”. David’s right, of course, and a follow up tweet in that thread narrows it down to merely three methods to checking for null. Another day, another chance to tap the sign: Just because you can doesn’t mean you should. It’s felt like that ever since C# was de-coupled from the .NET Framework, the language has exploded with new syntax; and yes, while newly divorced people sometimes do go through a sowing phase, you reap what you sow.
👨🦯 Adam Lein breaks down the user experience and human centered design problems with Windows 11.
🚫🍆 Announcing Code of Conduct Enforcement Services for member projects!. The .NET Foundation now provides CoC enforcement across all .NET Member projects. If you’re a dick in one place, you’re going to get banned from all the places. Don’t be a dick.
💳 Techbash Tickets are now onsale Appropos of the current delta variant issues, Techbash has also kindly responded to my request for information about cancellation:
If we cannot hold the event due to safety concerns, we’ll work with the Kalahari to handle the event cancellation and refunding as we did in 2020. However, our current plan is to continue to have a safe and fun event for all in October.📹 Humans of Microsoft S02E01: Abel Wang You may know that ABel Wang passed away recently; but we are lucky enough to live in an age where we can hear his words even now. In this video Abel talks about life, health, and his favorite software project ever.
1️⃣1️⃣Top 11 things you can do to make your app great on Windows 11 This is a good list and it dovetails nicely with the design issues in windows 11 we spoke about previously. We never successfully got Winforms applications to be updated to WPF, and now suddenly we’re expecting three generations of old Windows applications to get updated to Windows 11. So long as software backwards compatibility remains paramount to Microsoft’s business arm, design will suffer.
🏃♂️ Install WSL with a single command now avialable in Windows 10 version 2004 and higher Now dropping Windows is just a command away. This reminds me of using Internet Explorer to install Chrome back in the day.
🐦 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 a List of Features available for all the C# versions; including what’s coming in C# 10 and C# Next and with no hint of irony at all towards the ample ways to check for null in C#, there’s a parameter null checking proposal.
⚡ 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.
🚗 Rider 2021.2 has been released and it now includes Blazor WebAssembly debugging, support for removing redundant suppressions, support for refactorings in source generators, and lots more.
📹 The monthly .NET MAUI Community Toolkit Standup was last week.
🙃 A helpful safety tip: Stick to the Beta channel if you’re on Windows 11 Preview, with the Dev channel you can’t go back.
🧵 Infoworld’s SImmon Bisson talks about project Coyote: a way to unit-test multithreaded asynchronous C# Code You can learn more about Coyote on its project site.
🔓 Some Infosec folks looked into the ‘base’ level security in Windows 365 and were… not impressed. From cleartext password dumps, and making everyone admin, it’s a little embarassing what the out of the box settings are.
🌇 Microsoft to Sunset OneNote for Windows 10, OneNote is the Future That sentence is not a typo. Apparently there were two different applications called OneNote, and now in the future there will be one. Also, Microsoft clarified that they are not building a third application called OneNote. Just ‘evolving’ the current applications.
💥 There seem to be no end to the ways pistachios can kill, suffocation, explosion, and fire, to spoil the lede.
💁♂️ If you’re running ASP.NET Core on IIS, make sure you’ve enabled the UriCacheModule. It’s recommended for ASP.NET Core deployments but is not enabled by default. Let’s pour one out for everyone still running ISAPI.
💁♂️ Marc Gravell reminds us that not even the compiler in .NET can reliably tell he declaration order of types or members. If your product depends on that being knowable, you’re in for a world of pain. It’s also worth noting that this knowledge is about as inside baseball as it gets; and yet at least one of you has written a hack to deal with it.
🥴 Semver doesn’t mean MAJOR.MINOR.PATCH, it means FAILS.FEATURES.BUGS. No, this has nothing to do with .NET, but it is insightful and funny.
And that’s it for what happened Last Week in .NET. I’m giving a free webinar on August 18, 2021 about Event Driven architecture: Bringing Order to Chaos. If you’re thinking about breaking up your monolith or moving to microservices, this talk is for you.
🕵️♀️ 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.
🔨 Erik J markets his EF Core Power Tools Visual Studio Extension I did not know this existed. I mean, I vaguely had heard of it, but had no idea what EF Core Power Tools would even do. Luckily Erik shared a link to his extension, which according to the download page, lets you Reverse engineer a context and classes from an existing SQL Server Database, has diagramming support, right-click migration support in Visual Studio, and more.
🔌 The .NET Download Site had an outage last week and there is not, and I quote, “There is no workaround using Azure DevOps.”
Can you imagine the protocols Microsoft put in place to push Azure at all times?
👨💼 “Mention Azure.”
👨💻”But sir, this is an outage on our public website.”
👨💼”MENTION AZURE.”🦜 David Fowler tweets about some new additions to ASP.NET in C# 10 and .NET Core 6: Default Global Usings, File Scoped Namespaces, and a “minimal” Hosting API.
🐈 Nicole Express blogs about the cause and fix for a long standing ALF Bug. Yes. That adorable animatronic 80s TV star that had its own movie and video game, and liked to eat cats.
🧟♂️ What if Github Copilot worked like a real programmer Not listed: Copilot engaging in a flame war over whether The Last Jedi was the worst Star Wars movie ever made, and reminding other programmers that programming is a meritocracy, while failing to see how self-serving that statement is. This is satire, of course. The Last Jedi is arguably the best Star Wars movie ever made.
🍪 If You use Chocolately, a fresh install of Visual Studio can inadvertantly nuke your nuget package source configuration oops.
🐢 How To: Use Azure AD Powershell to Work With Extension Properties (User Attributes) This blog post does what it says on the tin, but for you the use case here is you need to use Powershell to retrieve and set extension properties from Azure AD. If you know what that sentence means, please reach out and let me know. Thanks.
🐿 On July 27th, 1993, Windows NT 3.1 was released. I know it wasn’t NT, but Windows 3.1 was glorious, but only for me because that’s the first OS I played Chip’s Challenge on. Also Chip’s Challenge and its sequel is available on Steam. You’re welcome.
❤️ Brent Ozar has released an update to his First Responder and Consultant’s Toolkit. Ok, naming aside. If you use SQL Server, and you’re a DBA or even a C# developer that needs to interact with Sql Server,you will want to download, install, and run these scripts. They’re very useful in understanding performance issues in SQL Server, in understanding if your table structure and indexes are optimal, and helping you resolve emergent issues with SQL Server. These scripts should be in every team’s toolkit that uses SQL Server.
🍭David Lee Roth retells the famous “brown M&Ms” story that Van Halen used in its Rider. The reason they used it is not what you think. It’s well worth your time to listen to. Thanks to @textfiles on Twitter for sharing a link to this.
🆙 Visual Studio 2022 will not be able to build .NET Applications that target anything in .NET 4 before .NET 4.5.2. The writing is on the wall: Upgrade your framework, folks.
📢 Dapr v1.3 has been released and this minor update includes several minor updates but still no explanation of why drop-in-replacement architecture is such a ‘win’. Developing to the Lowest Common Denominator gets you… The most boring and undifferentiated features of all of your options.
✈️ I asked the CEO of Jetbrains for an update to the Solarwinds/Team city mess and he obliged. If you’re new to this, the NYTimes ran an article that claimed — anonymously, of course — that TeamCity was why the Solarwinds attack happened. Because of that, some companies and organizations have dropped using Jetbrains products. We hadn’t heard from the CEO of Jetbrains since their ‘update’ several months ago, and I asked them to let us know if anything ahd changed. They obliged by reinforcing that the NYTimes article probably shouldn’t have been published in the first place.
🔈 .NET Conf Call for Speakers is Open I have submitted a session that will undoubtedly be turned down because I don’t mention Azure in the abstract at all.
🤯 C# 10 will also support var as a lambda expression initializer, and I’ve hit the point where I’m now souring on var. I have no idea what that type is or well be, and I can’t see how that’s a good thing. @ me @gortok on twitter if you think I’m wrong, and why.
💸 Marten, the Generic Host Builder in .Net Core, and why this could be the golden age for OSS in .Net. Jeremy Miller spells out why the addition of Generic Host Builder has made his life better as an OSS Maintainer. Personally I think the problems with OSS in .NET are mostly commercial interference by Microsoft; and I’m not so sure we can fix that.
😥 Abel Wang passed away last week He was a Principal Program Manager, and Technical Assistant to the CTO of Azure. Take a moment and read the accompanying link to learn more about Abel and his life.
Is your .NET Team thinking about transitioning to microservices? Take my free five day course at https://movetomicro.services.
Several Zero-Days, and some more pontificating on the future of Programming as it relates to CoPilot. It’s been a busy week, so let’s see what happened Last week in .NET:
🧱 Next-generation firewall capabilities with Azure Firewall Premium. Microsoft is literally charging a premium for better security. Not a great plan.
🔓 Let’s make Visual Studio even more accessible together This is a wonderful shift in focus, and I hope Visual Studio accessibility continues to improve.
👨🏼🤝👨🏼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.
🌃🐎Kevin Beaumont validates that Microsoft made the SAM database (user passwords) accessible to non-admin users on Windows 10 which is… problematic, to say the least. Kevin followed up with a blog post that goes deeper into how #HiveNightmare works.
I would like one week. Just one week where it doesn’t feel like the sky is falling in info-sec.
🟥 Speaking of the sky falling, Windows Hello bypassed using infrared image. We call it science fiction because it isn’t realistic — and that’s true: They put more effort into security than real life.
🕵️♂️ DevSecAI: Github Copilot prone to writing security flaws Microsoft’s designs of monetizing CoPilot seem like it’s fading. The problem with artificial intelligence is that it mimics our own intelligence.
🗃 Jonathan Blow, creator of the Braid and The Witness, says Don’t use fopen() on Windows turns out there’s a bug when you do file stuff in multiple threads where file flushes don’t happen at predictable times.
🔮 Github Copilot: Fatally Flawed or the Future of Software Development? Yes.
✌ Ars technica writes: Two-for-Tuesday vulnerabilities send Windows and Linux users scrambling Exploit #1 was the aforementioned SAM Database vulnerability; and the second is a vulnerability in the linux kernel, by creating, mounting, and deleting a deep directory structure with a total path length that exceeds 1GB and then opening and reading the /proc/self/mountinfo file.
💻🏫 The ML.NET Community standup happened last week, and they talked about ML.NET 1.6 and more.
🔐 Christo Matskas has a blog post out on how to Secure Open API (Swagger) calls with Azure Active Directory.
😴 Azure SDK Release (July 2021) and yes, the word Azure is in the title but not much else, which means it is definitely an azure blog post. The Azure SDK includes new App configuration settings, features for iOS in Azure Communication Services, and releases Azure Cosmos DB for Java, Azure Data Tables, and Azure Metrics Advisor for .NET, Java, JavaScript, and Python, and more. Yes. And more. I’m going to fall asleep if I have to type all these services out. So if you use the Azure SDK, check this post out — but pour yourself some coffee first.
🆘 Miguel Ramos tweets that if you do Windows UI development, they’re going to want to know what you think.
📢 Visual Studio 2019 16.10.4 has been released. This update includes several bug fixes and performance improvements, as usual.
🍾 There is a new System.Text.Json source generator in .NET 6. This allows you to have System.Text.JSON serialization classes auto-generated for you and results in more optimized serialization and deserialization.
💁♂️ Github Policy releases Minimum Viable Governance: lightweight community structure to grow your FOSS projects. It’s a document that gives some… sensible defaults for open source project governance on Github.
🚫🐜 Michael Peña (not that one) gave a talk to the Philippine .NET Users Group on the state of .NET on Mac OS and it’s well worth your time.
📃Looking for the 20 best C# and .NET Blogs? Seb Nilsson has you covered. It’s my personal opinion that Eric Lippert’s blog is criminally underrated.
There is a self-reported Intuitive Gudie to Understanding Closures in C# and while I won’t pass judgement on ‘intuitive’, I will call it informational.
And that’s it for what happened Last Week in .NET.
If your .NET team is thinking about moving to microservices, check out https://movetomicro.services first.
📆 July 29th is .NET “Focus on F#” Day. You can sign up to watch a whole day of videos on F# at focus.dotnetconf.net. I haven’t ever seen a CFP for these “Focus” events so I’m unsure of how they pick their speakers; but it looks like a good lineup.
🏪 Microsoft publishes its own applications through the Microsoft Store, making it about 95% of the Microsoft Store.
📹 On July 8th, Kathleen Dollard, Rich Lander, and Immo Landwerth ‘sat down’ on youtube to talk about What’s new in .NET 6 Preview 6 & 7, and how they handle “breaking changes”. Which they can handle now that they aren’t wed to “Don’t break anything at all costs” .NET Framework.
💁♀️ Bill Wagner and Beth Massi talk to .NET Notts about what the .NET Foundation does, and that’s important because
☑ The .NET Foundation 2021 Board Nominations are open but don’t get your hopes up because there’s a nomination committee who will decide who actually gets voted on. There’s also a job description of what board members do, if you’re interested.
⏩ The ASP.NET Community Standup – Building with Blazor happened last week and it shows how Powered4.tv was built using Blazor.
📢 .NET 5.0.8 has been released. The interesting bit here is that now you can use Windows Forms and WPF are supported for Arm64. This was initially in .NET 6 Preview 1 and backported to .NET 5.0 with this release.
📢 .NET Core 3.1.17 has been released. Several non-security bug fixes are in this release.
0️⃣ Microsoft Patches 3 Under-Attack Windows Zero-Days the big news here is that if you have Windows Systems, you’ll have already wanted to patch them. If not, patch them now. One of the three Zero-days includes a drive-by attack via web browsers. Second to that is that there are 117 vulnerabilities patched, with 17 labeled ‘critical’.
👨👩👧👦 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.
🌎 Global Usings are in .NET 6 and this seems like something that will in no way ever be abused or lead programmers to wonder what namespaces are avialable.
☁ Microsoft introduced the Windows 365 Cloud PC last week and the interesting bit here is that now you can build Windows applications without needing windows. You’ll never have to worry about zero-days plaguing your personal computer, and you’ll get to snobbishly remind people that you use linux all at the same time! As usual the licensing situation with Windows 365 is inscrutable to mere mortals.
📢 Announcing .NET 6 Preview 6 with the previously mentioned Arm64 support, Apple Silicon support.
📢 Visual Studio 2022 Preview 2 is out and it includes Web Live Preview for ASP.NET? Wait a second. ASP.NET… Webforms? That’s still a thing? There’s doubling down on an old technology, and then theres… this.
📝 The Microsoft Windows Developer Team has their ‘notes’ publicly visible for Windows Development and these pages are chock-full of interesting tidbits. If you find yourself doing native Windows development, you’ll want to bookmark this.
📢 ML.NET 1.6 has been released and it now supports Apple’s Silicon, along with several other fixes.
😜 Microsoft released a new emoji introduction video and whatever team did this needs to be responsible for the Windows Experience in general. I have a feeling they could do better than what we’ve got.
🚫🐧 System.Drawing.Common will be Windows-only in .NET 6. While a good move, it feels like ‘Common’ isn’t. Programmer hubris comes for us all in the end.
and Lastly,
A helpful tip for debugging, you can use Debugger.IsAttached as a way to catch Exceptions, but wouldn’t you just click the ‘Break on All Exceptions’ checkbox in Visual Studio? How is this different from that?
And that’s it for what happened Last Week in .NET.
Moving to Microservices? Sign up for a free 5 day email course at https://movetomicro.services
🍄 Jetbrains' Simon Cropp is hosting an "OSS Power-ups: Verify" event and I have no fracking idea what any of these words put together means. Which, if you think about it is entirely on brand for OSS, where marketing is shunned.
⏳ 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.
🖨🌙🐎 Microsoft released a patch against the PrintNightmare vulnerability and lo-and-behold it doesn't actually mitigate the vulnerability, writes Brad Sams. Who among us hasn't had a patch that "Worked on my machine"? Now none of us are worth 2.09 Trillion, but does that really change things?
🗣 .NET Conf "focus on F#" is July 29th, and you can sign up here Now's your chance to learn about F# and tell the world about it.
🚫⚔ The Pentagon has canceled the disputed JEDI cloud contract with Microsoft and in order for the project not to spend the next ten years in litigation will pursue a multi-cloud strategy -- with Amazon, Microsoft, and possibly other cloud vendors. We are in the "Too big to deal with" stage of capitalism decline.
👮♀️ Did you ever want to check to see if if the app is being run as sudo or admin on linux? This code snippet will help you do just that.
🕵️♂️ Several Netfilter Rootkits -- signed by Microsoft -- hit the wild today. In case that sentence didn't sufficiently scare the shit out of you; a rootkit is bad. Microsoft signing rootkits is about as bad as it gets. It's like your spouse giving a crook the keys to your house and letting them know when you all will be gone.
🔟 Wassim Chegham writes about 10 Things to Know about Azure Static Web Apps and this is a good write up and a reminder that Microsoft is very late to this party but markets as if they created sliced bread.
🏫 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.
🐕Scott Carey of Infoworld talks to developers about their reactions to Copilot Surprisingly none of them were upset at the lack of lubrication involved in getting 'Copiloted' by Microsoft. Yes, that is a euphemism now.
🎥 On Friday, July 16th, 2021, Jon Skeet will be talking about the .NET Functions Framework that is available for Google Cloud Functions. Google has a better name for it (.NET Functions) than Microsoft does -- and no shit the name Microsoft gave it (according to the website title) is "Azure Functions Serverless Compute".
📢 The June 2021 (version 1.58) release of Visual Studio Code came out on July 8th. It includes the ability to move terminals to the editor, the Debugger now remembering your previous environment choices, Jupyter code improvements and debugging, and Workspace trust -- which sounds vaguely enterprisey but really means "browse code without worrying about the 25 years of macro-exploits that made Microsoft Office synonymous with getting hacked".
💸 This next one is a commercial plug I didn't catch; but I'll own that. If you're still on silverlight, support ends in 101 days and Mobilize.NET wants to help you modernize your silverlight application through this webinar. Honestly at this point if you're still using Silverlight you need a commercial partner to get you out of the hole you've dug yourself into. Also, this webinar talks about "Reserving your seat" but does not specify a date or time so I can only assume it's a marketing trick to get you to sign up and it's actually an on demand webinar. In related news I have found the an extra category for the 9th circle of hell.
💯 Last week i shared Part 1 of how StringBuilder works; and Steve Gordon is back this week for Part 2 of how StringBuilder works. I applaud the effort Steve put into this post; I love the visualizations and it's a good overview.
🔫 For the InfoSec (and cyber security, sigh @ govies) folks among us, Zac talks about a CobaltStrike hunting tip. I refuse to read the contents of the tweet into this newsletter because it is functionally indistinguishable from the contents of a hex editor. For the people who know, it will make sense though.
👽 As a bonus for making it through last week, here's an oral history of movie Independence day titled “You Can’t Actually Blow Up the White House”: An Oral History of ‘Independence Day’ -- which turned 25 last week.
And that's it for what happened Last Week in .NET. It was Independence Day / listen to fireworks at midnight all week here in the States, so that could attribute to the lack of releases. Stay frosty and I'll see you next week.
I swore up and down I would not release a newsletter this week owing to the July 4th holiday (Treason day for the Brits out there), and then Microsoft's Github announced and released Github Copilot, and my promise fell apart.
CoPilot is an ML trained code snippet generator. What is it trained on, you ask? All the public code on Github, GPL'd or otherwise. This has angered the internet lawyers and is generally considered to be a Dick Move™ by everyone else (except those that have read the parable of the Scorpion and the Frog). And since there really isn't any magic in ML, that's led to some interesting bugs... like reproducing the inverse-sine function from Quake to include the PG-13 rated comments. Or giving internet randos the API keys that Sendgrid users put in their source code on accident, or even reproducing the GPL in its entirety in a source code header file and none of this includes the mundane but possibly Office Space plot inducing every day bugs present in CoPilot.
It's almost trite to call these 'bugs', these aren't bugs. These aren't misunderstandings of product requirements, or bad coding. No, these are Ian Malcoms:
Your scientists engineers were so preoccupied with whether or not they could, they didn’t stop to think if they should. (original source)AI and ML have given us a new class of software defect: the Ian Malcom, and we can thank Github for playing the role of movie villian here.
With that out of the way, here's what else happened last week in .NET.
🚉 In Windows 11 you can now specify which Terminal you want to use and not have to have cmd.exe launch all the time. I don't want to be cruel; but would anyone willingly choose cmd.exe as their terminal? @ me if you would, and why.
🚅 ZDNet's Jason Berlow says he'll bite the bullet and buy a new PC for Windows 11 and it's important to note that 'more secure' here means "less likely to get taken down by ransomware". Microsoft's usual track record for security post-boot-up still applies.
👔 Adam Storr has a blog post out titled Test Your .NET HttpClient Based Strongly Typed Clients Like a Boss, and I'm not clear from the title if he means the every day "exploit them" or if there's a more sinister meaning, like "gaslight them into believing working 60 hours a week means you're a team player".
🎭 There was a LinkedIn Breach announced on June 29th, with the field "Inferred Salary" included. Since no one knows what "inferred" means here, we'll just go with the face-value interpretation that LinkedIn calculates what your salary should be based on your experience and roles and local market and that is exactly why naming is so important in software.
🍞 I got a little flak last week for suggesting that Azure Static Web Apps were mundane but being touted as The Next Great Invention After Sliced Bread, and here's just another example. Now, I get that if you work at Azure, you should be touting Azure products -- but my concern here is that treating something mundane like Static site hosting as revolutionary in your verbiage (awesome, awe inspiring? Really?) is overplaying the marketing angle without understanding that a crucial part of marketing is credibility, and it's easy to lose it if you overplay your hand.
🖨😲 There's a new CVE out for Windows dubbed "Printer Nightmare". CVE-2021-1675 allows an attacker to take over your system through the windows printer spooler service. and this is reason #2 why I had to release a newsletter this week. Holy forking shortballs Microsoft.
🖨😲 Kevin Beaumont gives us an indepth report on "Printer Nightmare" including most importantly how to mitigate this zero-day. Also important to note there appear to be 2 CVE classifications for "Printer Nightmare", the aforementioned -1675, and CVE-2021-34527. 1675 covers Privilege Execution, and 34527 covers Remote Code Execution. Happy Monday.
🖨😲 There's a POC out for Printer Nightmare that was promptly deleted but still available via caching sites if that's your thing. I'm not going to look and see whether or not my old Livejournal is cached somewhere, thanks.
🖨😲📊 Interested to know if you're affected and you like Flowcharts? @StanHacked has you covered.
🖨😲🚉 Interested in seeing if your machine is exploitable for "Printer Nightmare"? Try this powershell one-liner (please don't).
📢 YARP Preview 1.0.0-preview12 has been released and we are promised that this is the last 'big set of API changes'. I admire their optimism.
📢 The Pull request for finishing out W^X support for .NET is open and the problem with naming it W^X is that I can't find -- either on github in my old releases or on google any reference to what this means. My memory seems to recall it means Write Xor Execute; which means that a piece of memory is either writable or executable, but not both. I could be way off on this, and I take corrections @Gortok on Twitter and via email at george+lwidn@georgestocker.com.
🚫👴💻 Windows 11 will leave millions of machines behind and Microsoft is struggling to explain why writes TheVerge. I guess "We're getting hammered by side-channel attacks and ransomware attacks because we have the most popular operating system of all time and we're sitting on a long legacy of a single-user disconnected operating system vs an internet connected system" is hard to say?
👩💻🥌 There is a Fortnite VS Code theme and I have not played First Person Shooters since Battlefield 2 so I don't really know what the hype is. Fortnite really just looks like Team Fortress 2 meets Starseige:Tribes Without the Jetpacks, he says, yelling at the kids to get off his lawn.
💉☁ AT&T is moving its 5G Network to Azure for Operators and now I guess the COVID Vaccine will give you Azure interopability as a side-effect?
👋 Valid Kubernetes YAML that also happens to be AT&T x86_64 assembly code and I need a shower after seeing that. Ew.
☕ Leslie Richardson and Cecil Phillips have a .NET video out on Exception Filters and I promise if you catch System.Exception and don't filter it, bad things will happen (also please don't filter on System.Exception, just pick the execption sublcass and filter on that. Your maintenance programmer and I will thank you).
📖 dotnet-wtrace Command Line Tool has been released and it captures .NET traces. No, I don't know anything more than that and Open Source Projects aren't exactly known for their Marketing.
🔧 The .NET team has a blog post that covers the Object allocation tool in Visual Studio. Think of this tool like dotMemory or ANTS Profiler, just built into Visual Studio.
UWP Projects will not have ongoing support in the new WinAppSDK World, according to a Youtube video by the WinUI team, and the longer discussion that alerted me to this fact is here.
And that's it for what happened Last Week in .NET. I'm especially interested to see if there's any legal action around CoPilot (ha), and how bad PrintNightmare turns out to be, so if either of those get more press, you'll hear about it here.
The Windows 11 livestream happened last week, and the big news there is just about every computer older than 2017 will require you to upgrade your hardware to use Windows 11. This is bad news and I am unhappy
☠ Barry "I love tormenting people with pictures of beans" Dorrans reminds all of us that .NET Core 2.1 is End of Life at the end of August. I'm impressed support for .NET Core 2.1 lasted this long.
🚜R# and JetBrains Rider will support "Create from usage" for C# Records, which is pretty neat if you ask me.
⚡ Let's Learn .NET - Blazor" free Livestream happened June 25th so if you want to learn Blazor, this is your chance to catch up on the video.
🏛 David Fowler And Damien Edwards talk about ASP.NET Core's Architecture (Part 3) in this youtube video. This is a very informative series, and I'm looking forward to watching the recap.
💰 .NET Nanoframework received $10,000 (USD) from the Microsoft FOSS Fund. This was from a vote held by Microsoft Employees that work on FOSS projects.
📢 Releasing Windows 10 Build 19042.1081 (20H2) to the Release Preview Channel and it's clear that no one ever speaks these blog titles out loud. They could at least name them funny names.
📢 Remote Desktop Connection Manager v2.81 has been released and there are no release notes so I just have to assume everything listed is what's new. It seems... packed.
2️⃣ Blazorday happened on 17 June 2021 and I can only find one video so I have to assume this one is it.
🤷♀️ The Azure Static Web Apps Launch is June 30th. The amount of press this event has gotten leads me to believe this is something more exciting than static web hosting launching, so I have to assume it's something more than that.
♥♦♠♣Exception Not Found (the blog, not the exception) has a Part 3 to their blog post Solitaire in Blazor, Part 3 - Drawing, Discarding, and the Stacks I'm loving this approach to teaching blazor.
⚔Attack Surface Analyzer is open source and I'm mentioning this because Barry "I wish I had married Beans" Dorrans did not realize it was open source and so it's news to at least two of us on the internet.
🎩 Microsoft is now a $2 trillion dollar company and there is positively no excuse for them to need ICE's money at this point.
📆 The .NET Oracle Team is looking to release ODP.NET support for EF Core 6 'by the end of 2021'.
🏪 The Microsoft Store now supports PWA, Win32, and UWP and oh yea, Developers can use their own commerce engines and keep their profits This is one way to get people to adopt the Microsoft store, although I have a sinking feeling if it does get adoption, this will change.
🎲 XBox Game Pass will be built into Windows 11 and I have no idea what XBox Game Pass is because I have three kids and no time to game.
🙇♂️ In what I consider a kindness, Kevin Gallo blogs about What Windows 11 means for developers, my thanks to Kevin.
⏯ The Windows 11 Livestream is available for replay in case you missed it. I did.
📝 Project Reunion has been 'renamed' to Windows App SDK and this is quite possibly the least Microsoft Name it could have been given. It's clear the marketing team was not involved in the naming of this, and we are all the better for it.
🧯If you enjoy gambling and want to try out Windows 11 Insider Preview, Here's a handy blog post that will take you back to Windows 10 if and when you hate it.
🤼It's Official, Windows 11 Is just a reskinned OSX... 11.
⏩Ok fine so it's not really a reskin, apparently, as updates are 40% smalle and happen in the background, so something is going on under the hood.
😞Want to see if your PC can be upgraded to Windows 11? Use this tooland prepare for disappointment
👍 And No, .NET 6 will not be bundled with Windows 11 because that's a terrible idea
.NET 6 Preview 5 is now on Azure App Service and Byron is clearly not following Microsoft's Marketing KPIs because Azure appears no where in the blog post title.
And that's it for what happened in .NET. This coming weekend is a holiday weekend; so there will be no Last Week in .NET Next week, and I'm starting to regret the title.
Windows 10 supports ends On October 14, 2025 according to a Microsoft support document. We’re expecting Microsoft to unveil Windows 11 this week, but I gotta say: It’s not going to be hard to get me off Windows 10 if Windows 11 promises less ads and less ‘synergy’. Appropos of nothing I bet this article on how to Disable OneDrive will be as useful to you as it is to me.
1⃣ Uno Platform 3.8 – New WinUI Calendar, Grid controls, 2x performance, new Linux scenario and more is the tale of a headline that doesn’t know what it wants to be when it grows up. Regardless, if you use Uno, a new version is out.
Visual Studio teaches you how to use the updated C# language features and this is pretty neat to watch. I maintain, of course, that if the Egyptians had access to gifs they would have used them to communicate instead of emojis.New data access benchmarks for .NET 5 and .NET Framework 4.8 This benchmark covers all major ORMs (and Microsoft data access strategies like ADO.NET) and has been updated for .NET 5 and .NET Framework 4.8. Enjoy.Migration of Bing’s Workflow Engine to .NET 5, by Ben Watson The only fault I have with this blog post is that they never tell you what XAP stands for. If you know, could you do me a solid and let me know, please?Richard Lander talks with folks from the .NET team about “diagnostics” in another “Conversation” series The format is neat, even if the title is a little boring. Microsoft continues its tradition of parroting Mac by parroting Mac OS X for Windows 11. I’m not even mad. That does look better. Here’s another article on Windows 11 updated look, if you’re interested in that sort of thing.So good I’ll share it twice. You wanted a .NET Repl, right? Well now you’ve got one.Thanks to Khalid Abuakmeh I’ve learned that Entity Framework Core Exceptions are pretty nice. It tells you the problem and how to fix it. We’re in 2021 folks, so this shouldn’t be revolutionary, but it is.Microsoft had an outage related to its Ubuntu repositories because of… Diskspace issues. Ok, first off, #hugops to the team that had to deal with this outage. Second: You’re the #2 cloud provider in the world. You don’t get to have diskspace issues, especially when you have invaded my desktop with “OneDrive”. Those are the rules.Visual Studio 16.11 Preview 2 has been released and this release includes lots of little fixes plus improvements for Git in Visual Studio.You can now try out Visual Studio 2022 Preview 1 (64-bit edition) for free.
July 29th you can hear F# developers drone on about how much better F# is because it’s .NET Conf “Focus on F#” Day. I can’t wait.
July 21st Microsoft wants its employees to learn more about racial justice and inequality.And finally, Juneteenth (June 19th) was passed into US Law as a national holiday last week. You learn that not all of the confederacy surrendered on April 9, 1865, and that some (like Texas) decided to keep on until Union soldiers arrived on their doorstep. June 19th, 1865 is the day that union soldiers arrived and told Black slaves they were finally free. Long overdue and a small step towards righting the wrongs of our history.
And that’s it for what happened Last Week in .NET. If you’re pursuing microservices, take my five day course before making the move.
We’ve come down from build and gotten back to the grind. Two releases this week followed by a ton of interesting stuff that’s happening in the .NET Space.
.NET 5.0.7 has been released and it’s a small release that fixes CVE-2021-31957. In the same vein, .NET Core 3.1.16 has been released and it fixes the aforementioned CVE.Microsoft’s Kate Crawford says “AI is neither artificial nor intelligent and I’ve never agreed with a headline more.End to End encryption coming to Microsoft Teams which will send corporate legal compliance teams into tizzies. So I’ll assume that it’s “End to End” but your employer will probably have keys to decrypt and record it, because that’s who’s paying the tab.There’s a design proposal to make Directory.Build.targets just work and as someone who is still very scared of MSBuild, I hope this is means fewer nightmares.MSTIC helped the FBI confiscate the hacker’s wallet from the Colonial Pipeline ransomware hack and they’re being mum on what ‘help’ means. Some commenters note that Windows 10 has a built in keylogger; and I’m seriously reconsidering linux.Visual Studio now supports deep links for git pull requests and the 1990s called and asked for royalties on this tech.First known Malware targetting windows containers but everyone is safe because no one uses windows containers. Also if you are forced to use Windows Containers I have to assume that’s about the 20th worst part of your job.Jet Brains Rider ‘Must Use’ Plugins. Selling Microsoft based developers on a better IDE is like selling shoes to the cobbler’s kids. I respect Jetbrains here but it’s always going to be an uphill battle. JetBrains has another blog post just released titled “Import settings from Visual Studio and Visual Studio Code to JetBrains Rider” In case you wanted more evidence of that uphill battle.The .NET Community Standup asks “What’s new with Blazor” in this video. What’s new, Blazor?Do you need to inject text into an ASP.NET Core Response? Rick Strahl has you covered this is over a year old but still the best resource if you need to rewrite the response in ASP.NET Core.Immo Landwerth wants to make Exception.ToString() useful and if accomplished I’d like to have Immo’s babies. Only one of these statements is a joke and I’ll leave that to you to decide which one.Azure App Service supports .NET 6 Preview on Linux and Windows Early Access according to Byron Tardif (@bktv99 on twitter).Visual Studio Code 1.57 has been released and there will come a tipping point where new features gives it a similar bloat profile to Visual Studio. It’s like the Wilford Brimley line for software.Rediscovering Implicit Casts or as I like to think about it “More than you ever wanted to know about implicit casting in C#.Christina Warren shows us that comic sans makes a pretty good mono-spaced font and I hate myself for how much I like this.
And that’s it for what happened Last week in .NET.
It’s a light week this week; everyone is coming down from Build. If you missed that, check out last last week’s newsletter. Now on to what happened Last week in .NET.
Jared Parsons, member of the Roslyn core team, talks about string vs. String. That is, for those of you listening to this instead of reading it, the keyword string vs. the class String. As it turns out, they’re not the same thing. There is also a special circle of hell for people who override String. @ me on Twitter @gortok if you think I’m wrong about this. Not about .NET but relevant to our interests, Michele Hansen’s preorder for “Deploy Empathy” is open. Michele is the founder of https://geocod.io, which is, as the name says, a geocoding API. She does a lot of customer interviews for Geocodio, and previously she was a product manager for The Motley Fool, where she — you guessed it — did a lot of customer interviews. Anyway, she’s written a book (and she has a newsletter!) about customer interviews that will give you the feedback that you need for your product or service. I don’t do sponsored content here, and if you work on a product or are a consultant trying to sell a service, you need to read this book. Periodt. Benefits of the preorder is you get rough drafts of the book. Seriously, buy it.This is one of the best produced virtual keynotes I’ve seen ever Scott Hanselman “and friends” bring you a Build keynote unlike any other. I mentioned this last week, but it’s worth noting again. Watch it. It’s that good.Raymond Chen talks about Arm32 If this is your introduction to Raymond Chen, you’re one of today’s lucky 10,000. Feel free to peruse his back catalog and be amazed and entertained for thousands of hours. Today he talks about Windows and Arm32.Microsoft is partnering with Morgan Stanley to provide reference cloud architectures for highly regulated industries (like the financial industry). This is akin to Las Vegas partnering with Satan, but I get it. This is corporate synergy.C# 9’s blazor ‘colorization’ and appropriate C# 9 syntax highlight and documentation is live If this sentence is confusing to you I’d like to point out I present the links; I do not vet them for sanity.Paint.NET Is smackdab in the middle of its migration to .NET Core and some parts are already live. If you aren’t aware of Paint.NET. It’s… Paint. In .NET. That’s it, that’s the hook. All joking aside, it’s a rather wonderful paint program and it just happens to be written in .NET — now .NET Core. Microsoft.IO.RecyclableMemoryStream 2.1.0 is released Could someone explain to me how a .NET 4.6.2 targeted application can now use Span
Microsoft wants to be twitter’s main character for a day by censoring the “Tienanmen Square Tank Man” image on the anniversary of the Tienanmen Square massacre. rubs head with hands… Do you see how this is bad, Microsoft? Do you? I can’t rub a company’s nose in their own mess, but I’d sure like to.
And that’s it for what happened last week in .NET. Tip your service staff, and tune in next week.
So Build happened last week. This email newsletter is shockingly late for reasons that you probably don't care about but have messed up my entire week. Mea culpa.
📢 .NET 6 Preview 4 is out and contains a metric ton of bug fixes and new docker images for your testing pleasure. Seriously, far too many to list here. Thankfully though Microsoft has a blog post out detailing what's in it. I'll talk about some of these updates independently.
In .NET 6 Preview 4, there's now a "Date Only" and "Time Only" struct which does what it says on the tin. This greatly simplifies my own code that tries to handle 'date only' and 'time only', so I'm prettty happy this is here.
📢 Announcing Maui Preview 4 which I can only assume was released with .NET 6 Preview 4, because otherwise there'd be two things named Preview 4 that track different releases and no self-respecting company would do that... right? RIGHT?
🎉 Visual Studio 16.10 has been released and appropos of nothing Visual Studio has multiple version numbers for a given 'year' version. 16.10 adds new productivity enhancements, Docker and git features. Of note is that they've finally added a "Remove Unused references" command, which assumes parity with ReSharper from 2016.
🍽 Ginny Caughey shows you how to write platform specific code for MAUI and GIFs as teaching tool are magic.
📹 A video from Build titled .NET 6 Deep Dive; what's new and what's coming is the headline, and I categorically refuse to make the easy joke about the headline. If the punchline doesn't pop in your head, bless you.
📃 Azure Application Service feature list, in a tweet; special thanks to Jeremy Sinclair (@sinclairinat0r ) for the screen grab.
💻 Microsoft and Qualcomm team up to create a Windows on Arm64 Developer PC So microsoft is releasing a PC that is lower priced than their Surface X ($999) to encourage development on Windows. I say this as I am typing this up on a Mac, possibly the most expensive development machine ever to hit mass market usage. On a lighter note, you could think of it as a Windows Mini machine.
📢 The Windows Procmon tool has been reimagined for Linux What has the world come to that we can credibly say Microsoft is trying to provide a good Linux experience?
🐧 What do you mean George? Well Microsoft support for Linux GUI apps on Windows 10 coming later this year. I'm not sure if this is a tacit admission that Microsoft lost the hearts and minds of developers or an admission that Linux lost the desktop war?
🗣 In news that will only shock managers, Developers days are interrupted by meetings, a Github Study finds. They interviewed developers and found out when and how they were most productive and it was when there were few meetings and long stretches of open time. This is my shocked face.
🏃♂️ Richard Lander has a conversation with members of the Ready to Run Team about... Ready To Run This Q&A dives into what Ready to Run is (spoiler: it's code that's ready to run anywhere without JITing) and how it's different from other toos like NGEN.
5️⃣ For all five of you that use F#, there are F# and F# tools updates for Visual Studio 16.10. Features include better interop between F# and C# projects, fixes and improvements on refactoring and other sundries.
👋🌎 Bryan Hogan blogs about Github Actions with .NET, Part 1 - Hello World and Documenting the Artifact and in what I hope becomes the norm, the full source code for this is also linked from the blog post. This is good. More of this, please.
👨👨👨👨👩 Want a nice recap of what happened at Build Day 1? the poorly named but fun-filled session named "Microsoft: Into Focus with Scott Guthrie, Scott Hanselman, Rajesh Jha, and Kevin Scott" is available for your viewing. They left poor Fillsha Shah off the title for reasons passing understanding, even though she's listed as one of the speakers for the talk.
🎂 WinGet hits 1.0 after more than a year of sucker-punching AppGet with being announced at Build 2020, Winget is now 1.0. It will be available on Windows 10, 1809, and "ships soon". Windows Insiders can use it now.
📧 Microsoft Threat Intelligence Center blames the actor behind the Solarwinds attack for a recent email based attack. Luckily the email attack is just a wide-spreadh phishing campaign, and not a sophisticated supply chain attack that took the entire software industry by surprise.
And that's it for what happened Last Week in .NET.
This week's newsletter is late because my wife and I were gone all weekend for our 10th anniversary. I am chagrined and refreshed all at the same time. With that said, let's get into what happened Last Week.
🙅♂️ Microsoft Teams is now available for personal use. I want to have the confidence of the executive that this would be a hit. Also in a facepalm moment, you must have both a Microsoft Account and a Phone number to use Teams for personal use. Stop making Live.com a thing. It's never going to be a thing.
⌚ Project Reaqtor is open source and to quote the parent, it "provides a set of framework components that enable devs to build distributed event processing systems across cloud and devices". It sounds cool, but the number of use-cases that need something like this is small. You can also read about the history of Reaqtor, and @geoffreyHuntley has a twitter thread that includes the highlights.
🥓🥞 There's a community standup concerning Project Reunion's 0.5 release. Kevin Gallo and Seth Juarez bring you the latest on Project Reunion, which sadly is not a reference to getting the actors from The Breakfast Club back together.
🚫 Replacing Thread.Abort() in .NET 6, .NET 5, and .NET Core The story here is that Thread.Abort is not in .NET Core, and so what should you do instead? "Don't ever try to abort a thread" is apparently not the right answer.
☠ Microsoft is finally retiring Internet Explorer in 2022 Because money is more important than security, Edge will support ActiveX to ensure businesses don't ever have to invest money in upgrading their systems.
⏲ Enhanced Date, Time, and Timezone support is coming in .NET 6 Preview 4 You will now be able to have a date without a time, and vice-versa. My presidential platform remains committed to the abolishment of timezones.
🌪 Introducing EcoQoS Microsoft is putting ecological sustainability in software because Intel will never be encouraged to dump x86.
📚 You can now download Microsoft's Hybrid Workplace Flexibility Guide reminding us that danger comes in many forms. The form present in this 'guide' is corporate jargon. It's hard to dispute something when you can't understand what the hell they're trying to say.
It's a light week because Build is this week; and so next week's Last Week in .NET will be all about Microsoft Build. Confused? Not as much as you would be if you tried to read the Flexibility Guide.
🔧 Dave a Brock writes on how to use Configuration with C# 9 Top Level Programs One of the nicer features of C# 9 was pulling out the ceremony of the Main method. Dave uses this blog post to show how you can use configuration in this new world of no Main method. Now if only there weren't years of documentation showing varying ways to use configuration for varying versions of .NET Core.
📔 There's an Adobe Reader 0day vulnerability that's been exploited in the wild this is part of CVE-2021-28550, and as usual patch when you can, as soon as you can.
💣 Fragattacks.com documents "Fragmentation and aggregation attacks" against Wifi. It's shockingly clear from the website name that no one involved ever read about the Vietnam war.
🌼 CVE-2021-31204 is an Elevation of Privilege Vulnerability that affects Single File Deployment applications on Mac and Linux and the latest patch fixes this vulnerability; so again, patch your systems if you're on .NET Core 5.05 or lower, or .NET Core 3.1.14 or lower.
Speaking of that latest patch,
📢 .NET 5.0.6 has been released and includes the CVE fix I mentioned before as well as a smattering of bug fixes.
📢 .NET Core 3.1.15 has been released and has that CVE fix and some SignalR fixes, among others.
📢 Visual Studio 2019 Version 16.9.5 has been released and this update includes a lot of estoric sounding stuff that you'd proably not even realize was an issue. What you would probably notice is that this version now includes Xcode 12.5 support. This version also fixes the aforementioned CVE as well as CVE-2021-27068 which is a Remote Code Execution vulnerability that could affect you if you use Python.exe in a scripts subfolder. If you do use Python with Visual Studio I'd like to point out that you're rarer than an honest politician.
🏴☠️ [Microsoft] Office based malware is "one of the biggest threats to companies" and yet it seemingly gets very little attention from Microsoft on how to mitigate it. Instead of making a better zipper, Microsoft chooses to tattoo "Remember to close the barn door" on people's hands.
📈 Build is May 25-27, 2021 register now to hear three days of Azure Marketing KPIs being realized.
📢 Speaking of Microsoft's Marketing KPIs which, Azure Static Web Apps is now GA. If you have a static website, and you aren't enamored by the plethora of other possibilities for static site generation, to include Hugo, Ghost, Netily, Github pages, you now have... Azure. The least cool (and probably most corporate) option.
⏩ FileStream operations are getting faster in .NET 6 to the tune of 2.5 times faster reading a 1MB file, and writing is 5.5 times faster. If you're an allocation junkie, they drop in .NET 6 from 39Kb to 192 bytes. For all you corporate behemoths out there that have corned your market, it appears that blowing everything up and starting over does have some perks.
🛅 Microsoft is shutting down its Azure Blockchain Service which was abbreviated "BaaS", which I maintain stands for "Bullshit as a Service".
📢 TypeScript 4.3 RC is out and this is your periodic reminder that TypeScript -- even though it transpiles down to JavaScript and uses NPM -- does not, I say again, does not support SemVer, so every release is potentially a breaking release. This release is no different, so plan accordingly. Another note, they did not drop this release with a version suffix on "Release Candidate", reminding us that Programmers are nothing if not optimistic.
📢 Visual Studio 16.10 Preview 3 has been released and the big note here is that the compiler is now "C++20 feature-complete". I've never actually seen a masochist in the wild; but I have to believe someone that still uses C++ qualifies. For the rest of us, There are improvements in MSBuild based code-bases. I have no idea what that means but if it affects you, you probably do.
🎁 try-convert v0.7.226301 has been released If you want to port .NET Framework projects to .NET Core, try-convert is your huckleberry. Also, holy cow does Microsoft's versioning vary among teams.
🏫 Let's Learn .NET: Accessibility is happening on May 21, 2021. This big note here is that not only will you learn more about accessilbility in general and using ASP.NET Core, you'll also learn how to improve Accessibility in Xamarin.
That's it for what happened Last Week in .NET, Thank you, and I'll see you next week.
👽 Do you live in the UFO Hotspot? Boing Boing Asks, and my answer is: "What answer gets the aliens to come and take us away from this madness we call 2021?"
🥤📦 CVE-2020-15257 has been dubbed "Abstract Shimmer". I hear "shimmer" and I think "thirst trap". So yea. A CVE has officially been called a thirst trap. Free Association is one of the many reasons why you subscribe to this newsletter. And what is a thirst trap if not getting someone to click a link to look at what you want them to?
🕸 Progress Delayed is Progress Denied says Alex Russell about Apple's ban of iOS apps that don't use their browser engine. This has nothing to do with .NET, except tangentially (hi, Xamarin folks). But, it's an interesting read nonetheless.
🕹 SwiftOnSecurity has a thread about games that overwrote system memory due to ingame actions. This is not that TayTay, but it is that TayTay. If that confuses you, welcome to twitter.
🏠🏗 Tomorrow, May 11th, 2021, Jeff Doolittle will talk about how REST Wrecks Microservices I agree but I don't know if we have the same reasoning. I'm currently snorting the Event-driven architecture powder, so I'm against inter-service communication using HTTP for that reason; but I guess we'll have to attend the talk to find out.
☠ Yes, there's another attack against CPU caches Short version: "Bad". Very Bad.
☠ Prime+Probe cache side-channel attack implemented using CSS And you thought the alien come take us away comment was weird. Now here it is in context. Not even CSS is safe.
👬 Is the era of reflection-heavy C# libraries at an end? Marc Gravell asks, and the answer is "Yes, if you can stomach the re-work you have to do." So in reality the answer is going to be "no" for a very long time.
💔 Bill Gates is getting a divorce in case anyone is looking for a Sugar Daddy. Be careful though, he apparently associated with Jeffrey Epstein after the truth about Epstein came to light.
👍 Microsoft now uses the Contributer Covenant 2.0 for their open source projects.
🚫💰 Newtonsoft.Json hits one billion downloads Billion with a "B". If Open Source were sustainable, James Newton-King should probably have millions coming to him from all the commercial entities using Newtonsoft.Json, but instead he gets to deal with Github Issues.
🤯 Weird ways to execute unmanaged code in C# Because we need more ways to shoot ourselves in the foot.
📅 Is your .NET application acting up every 49.7 days? If so you should read this github issue. Bug opened due to perfomance latency with JsonPlatform, and it turns out the Ticks is a signed integer that goes negative (wraps around) every 49.7 days. See? I told you it was amusing.
🎹 David Fowler is playing name that tune with ASP.NET Core We're now down to three lines (last week it was 7) to have a running web application in C#.
⏏ Microsoft is finally ditching its Windows 95-era icons I would pay for a Windows 95 Remastered edition on Windows 10. That's the window manager I want, a remastered Windows 95, not this flat sh*t that I can't tell where the buttons are. Yea, I said it.
📚 Microsoft has released a set of Incident Response playbooks I checked, and as expected they don't yet have a response to "Github and Microsoft has contracts with ICE".
👋 The Rijndael class is now obsolete and if you know what I'm talking about then the word 'crypto' has at least two meanings to you.
🐐 You can now pack a Readme.MD with your nuget package and have it display on nuget.org How long until Goatse makes an appearance?
💰 Microsoft's Barry "I have a bean fetish" Dorrans releases a statement about the commercialization of Identity Server Long story short, The status quo will stay the status quo. For now. This has real Darth Vader vibes to it, if I'm being honest.
🐍 The Virtual ML.NET Community Conference 2021 - Day 1 videos are up I try to limit my snake-oil ingestion, so I'll pass, thanks.
That's it for this week. If you have some interesting .NET Content, reach out and let me know at george@georgestocker.com. I'll give you a plug and everyone on this list will get to share in your joy.
☠ .NET Framework 4.5.2, 4.6, 4.6.1 will reach End of Support on April 26, 2022 At least, that's the word right now. Governments around the world are still using Windows XP, so it's not like this is a firm 'end of support'.
🤡 Basecamp lost a third of its employees after a controversional series of blog posts last week A CEO couldn't destroy their company's reputation any faster if they tried. This is truly impressive in the depth and breadth of DHH and Jason Fried's stupidity here.
🎁 The Developers @ Redhat blog has a blog post titled "Some more C# 9" Lots of goodies in here that people who write unsafe code will want to know about.
🔎 .NET Interactive video up for watching Cecil Philip and crew take you through what .NET Interactive is, and how to use it.
📅 .NET Days (produced by Jetbrains) is May 11-12, 2021 No need to attend if you can't -- the videos will be available online after.
📢 Akka.NET 1.4.19 has been released This maintenance release, includes (quote)
"Akka.NET v1.4.19 is a substantial release that includes a number of critical Akka.Cluster fixes, baseline Akka.NET performance improvements, and entirely new dispatcher that has shown to improve performance when used across all of the major actor groups that run both inside the /user hierarchy and the /system actor hierarchy as well."🛑 If You haven't updated Windows 10 in the last week, maybe wait a bit longer? Looks like last tuesday's update can cause your system to ... misbehave. Looks like the problem centers around WSL2.
👨💻 The "State of .NET" on Survey is done, and the results are... not great 92% of respondents were dudes. That's embarassing.
🌨 Easily build real-time apps with WebSockets and Azure Web PubSub—now in preview Being a cloud provider means having terrible naming
📅 Microsoft's Build (virtual) conference is May 25th-May27th, 2021. I don't see conferences like this going back to in person. The networking is the real value (and the free stuff Microsoft gives away).
Not many releases last week, but lots of shenanigans. I spelled that word on the first try which matters not a whit to anyone else but I'm proud of myself. The shenanigans themselves are an age old story: Big Corporation finds feeble consumers, and exploits them.
🤑 Microsoft pushes MVP Influencers to Spruik Azure in Lead up to AWS: Reinvent. That's the headline, here's the story: Microsoft wants the community MVPs to shill for SQL Server on Azure and claim it's cheaper and better, when the fact that SQL Server is more expensive on AWS is due to Microsoft's own shenanigans. When an MVP called this out as the bad behavior it is, Microsoft removed them from the MVP Program.
Microsoft seems to want MVPs to shill for Microsoft, forgetting that any of the trust these MVPs have is because they don't shill for Microsoft.
🚚Meet the .NET Upgrade Assistant, Your .NET 5 Moving Company In this blog post, Dave Brock from Telerik
🌊'Agile' F-35 fighter software dev techniques failed to speed up supersonic jet deliveries In other news, water is wet, and Government agency buys into marketing hype and complains when they were hoodwinked.
🕹There's a series on building Testris in Blazor A fun way to learn blazor, no doubt.
📢Visual Studio 2022 is announced and it includes making Visual Studio 64-bit. A lot can change in 10 years, especially when the world changes around you.
⬆Update existing projects to the latest release of Project Reunion The latest stable release of Project Reunion is 0.5.5, and as it says on the tin this blog post shows you how to upgrade.
💰Octopus Deploy raises 172.5 Million in venture capital The 500K on the end seems like an odd number, doesn't it?
🏬Microsoft is building a new app store for Windows 10 in major revitalization effort. Microsoft is, at its heart, an enterprise software company. It's the only way to explain why so many of their consumer efforts have failed. To have a successful app store, you have to give developers a compelling reason to write for it and for consumers to adopt it. As of yet, neither has happened with desktop App stores.
💸NetEscapades.AspNetCore.SecurityHeaders 0.14.0 has been released and it supports opting out of FLoC. FloC is a Google's replacement for Third party cookies. You know Google, right? The Ad giant and owner of the web browser with 90% market share? Neither of those facts say that Google "has the best interests of its users at heart".
🐧Windows now supports Linux GUI Apps Somewhere the founder of Lindows is crying.
🔚David Fowler shows off how small ASP.NET Endpoints will be in the future A svelte 7 lines to get an endpoint. Of course, there's no Authentication, Authorization, or any of the database connection code, but still. 7. lines.
☁You can run and debug AWS Lambda from Jetbrain's Rider. I have nothing snarky to say here. This is just cool.
🐣Intro to Uno Platform, Intelligent Virtual Agents and Cloudflare These three topics are brought to you by scattergories and the Cape Town MS Developer User Group.
💨EF Core is now at 93.5% speed of Dapper. Well known enough for Microsoft to compare to, but not backed by enough money for Microsoft Legal to care enough to change the name of "Dapr" to something that doesn't conflict.
🚨🚨🚨🚨Microsoft Exchange has four new vulnerabilities with patches. CVE-2021-28480, CVE-2021-28481, CVE-2021-28482 and CVE-2021-28483. For some things the cloud does not make sense, but for the "I really don't want to deal with patching my own stuff", the cloud makes sense. Maybe it's time to migrate to O365, if you haven't already?
By the way, this is so bad that the NSA is actually telling everyone about these flaws immediately.
😆Schadenfruede is watching someone else try to set up Microsoft Teams @mcclure111 tries to set up Microsoft Teams to talk to a client, and all hell breaks loose. It's a fun read if you define fun as "I'm glad that isn't happening to me" and "Holy cow did Microsoft not think through their user experience?"
📆Jetbrains ".Net Days" is May 11-12th and it's free. Scheduled talks include
"C#, F#, GraphQL, Blazor, gRPC, Hedy, working with databases, and debugging. On top of that, we’ll discuss stereotypes around legacy code and demonstrate how to build a React app backed with Azure features."And Azure makes an appearance because of course Azure makes an appearance.
🎁Visual Studio 2019 16.10 Preview 2 is out with lots of .NET goodies included.
🎈Julia Evans releases her network debugging "Choose Your Own Adventure" game as an early draft. I played through this and it is wonderful. I highly recommend it.
🎁Visual Studio 2019 16.9.4 has been released It patches CVE-2021-27064, CVE-2021-28313, CVE-2021-28321, CVE-2021-28322, and patches several upvoted bugs present in Visual Studio.
🚌EventDriven.EventBus.Dapr 1.0.0 RC 1 has been released Your weekly note that we use the term "RC" because "Using Customers as our QA" has less zest to it.
🎥The .NET foundation hosts a project spotlight on "Roslyn" which is also Microsoft owned. Would love a bit more outward focus but Roslyn is cool.
🗣There's a new C# Standard repo that helps to standardize the language used to describe C# I don't understand it but perhaps I'm not meant to. This is about standardizing the language we use to describe the language we use?
🧵The next version of C# will support building interpolated strings with a... builder based approach What does this look like in practice? I have no idea because the authors are more concerned with the structure of the API than showing us what that API would mean with examples.
🚚Are you planning to migrate from UWP to WinUI 3 Desktop? These are some guidelines that Microsoft is writing. Also Microsoft promises that this is not another "Lucy with the football" moment.
🧓Andrew Lock writes about Viewing overwritten configuration values in ASP.NET Core Environment variables are from 1979, and we still have not come up with a better to deal with this in 2021, but in true tech fashion "you can always write code for it!"
💩Instant Feedback Is Here: Introducing Hot Reload in .NET 6 Dave Brock from Telerik shows us what Hot Reload is, and how it works in .NET. And no, this is not an urban dictionary term.
🤖There's a Root Cause analysis out for CVE-2021-1647 That CVE, just in case you don't have them memorized, was the Windows Defender CVE. This is a shorter read than the last one I linked to, but still has good information.
🤡Eric S. Raymond believes that it's easier to tolerate a few jerks than it is to have rules regarding toxicity in a community reaffirming the adage that if you look around the table and can't see the jerk, the jerk is you.
💥The NSA and US Intelligence Community has affirmatively pinned the Solarwinds attack on Russia's Foreign Intelligence Service, the SVR. When people said "The 80s are back in style" I didn't think they meant the Cold War.
📢Announcing Windows 10 Insider Preview Build 21359 Several fixes, previews, and Apparently the Timeline is not going away. I have no idea what the Timeline is, but it's not going away. Good news?
👐The Razor Compiler no longer produces a separate Views Assembly in .NET 6 Preview 3 If this affects you, here's your notice.
💾Git is gitting (sorry) better in Visual Studio 16.10 Preview 2. I've started to try out Git in Visual Studio, and it's not bad. I still prefer the command line, but that's because I'm a snob.
🐅If you've made it this far you deserve a treat. Here's the story as to why He-Man rides a tiger, and I guarantee it'll take you to places you did not expect
🕳Microsoft keeps digging itself into a hole with its MVP Program "Astro Turf for SQL Server on Azure" is a helluva strategy.
🤵🥳Microsoft releases its Hybrid Work Strategy Program It's only a decade behind the curve.
📚Turns out the Visual Studio logo has a backstory.
🎁SQL Server Management Studio 18.9 is out Lots of bug fixes and improvements, as always. I used to get on release notes people for writing "Bug fixes and PErformance improvements" but now I realize I can just link to the real release notes and get away with using that term, sooo.
🙋♂️Show dotnet: Build your own unit test platform? The true story of .NET nanoFramework. Sometimes I share things I'm interested in and this is that other time. I'm sure this is cool but I have no idea what it is.
👶If you have a Peloton be aware that it eats children. I don't feel the need to go any deeper on that, except to say this is not a euphemism.
😢I want AppGet back. Almost a year ago Microsoft released Winget and people who loved AppGet wish they hadn't. The rest of us are going to wait the requisite 5 years for WinGet to be usable for our day-to-day work.
🍬NPR talks about the Solarwinds Hack. Reese's make an appearance as do razor blades.
And that's it for what happened Last Week in .NET.
🎁.NET 5.0.5 has been released. This release fixes an issue where dotnet restore wouldn't work on Linux.
💸Jimmy Bogard takes you through local development on Azure Service Bus. Developers won't pay $99 a year for a tool that saves them hundreds of hours, but will happily pay to develop software in the cloud.
🕴Leverage enterprise-scale reference implementations for your cloud adoption. I think Microsoft marketing is skimping on their KPIs: The title doesn't have the word "Azure" in it.
🙋♀️Your top .NET Microservices questions answered The link itself isn't as interesting as the links available in the post. If you find yourself wanting to learn more about microservices and their structure and communication patterns, these links are a great place to start.
📢Announcing .NET 6 Preview 3 performance improvements, more platforms supported (iOS, Apple's M1, and Android!), and plenty of bug fixes for ASP.NET Core, Entity Framework Core, and the runtime itself.
☠🔒Tayrn Pratt, Stack Overflow's DBA, writes about fighting with deadlocks in SQL Server when needing to generate 10,000 schemas (not a typo). Stack Overflow Teams uses an interesting mechanism for multi-tenancy: database schemas. It scales, but there are some issues. Taryn dives into those issues and how they fixed them.
🕵️♂️Exploiting Windows RPC to bypass CFG mitigation: analysis of CVE-2021-26411 in-the-wild sample Sometimes we get exploits with no code samples, and other times the author goes into a deep dive into how the CVE operates, with examples. This is the latter, and we're all the better for it.
ILSpy 7 RC1 is now available and the big news here is that you can now build ILSpy for .NET 5. Oh, and it has dark mode too.
💣Jesse Liberty started off the week with violence by introducing his team's updated coding standards for C#. For the most part I agree with these standards, but there are a few I have problems with... which I suppose was the goal all along.
✒Do you author Markdown files in VS Code? If so Paige Bailey (@DynamicWebPaige on twitter) has an amazing extension you should try. This extension made for markdown authors includes linting, spellchecking, image compression + resizing, templates, and so much more. So much more is doing some lifting in that sentence. You should really check it out.
🤡 Can we just take a moment and admire the absurdity that are cookie popups on the modern web? Government makes, what is at its core, a pretty sensible law, and in true governmental fashion the implementation looks like a 5 year old describing a platypus.
🤿Nick Dives deep into Project Reunion and its versioning. If you do desktop development for Windows, you're going to want to read this. This blog post is the simplest explanation I've seen yet of "Project Reunion" and all the ins and outs that trying to "reunite" the APIs entails.
💁♂️Scott Hanselman teaches you how to launch Windows terminal for all your shell needs. Want to have the command prompt launch Windows Terminal? How about Powershell launching in Windows Terminal? This hack can help you do that.
⚖Microsoft registers its 'concern' with the Atlanta Election Law. They registered 'concern' in the same way my spouse registers concern when I have a second piece of cake. In the same way, it's not going to make the Republicans rethink their actions, it'll just make them not brag about it as much.
🍾Visual Studio Code v1.55 has been released Lots of little updates and customizations in this one because if there's one thing programmers love, it's customizing their IDEs.
🐛Nuget has about 80 weeks to fix a bug with how it stores its download counts. Newtonsoft.Json gets 12 million downloads a week(!) and in about 80 weeks it will overflow the int32 storage defined in Nuget's download count. It is out of sheer schadenfreude that I'll point out System.Text.Json (NSJson's replacement) gets around 267,000 downloads a week.
🟦Public preview: Azure Static Web Apps now supports deployment with Azure DevOps. Azure can mean on prem or in the cloud because I've come to conclude Microsoft's teams OKRs require them to adopt the word "Azure" for everything. Enjoy that thought.
🔐There's a POC for the Windows Console Driver Vulnerability. CVE-2021-24098 has been patched, and if you haven't patched your systems, the usual disclaimer applies: You should.
😜There's a new insight into the old Microsoft Coffee april fool's prank. If you remember this one, enjoy this blog post about how it all started.
🚧Azure Portal and Azure services went down last week, and to no one's surprise the cause was DNS.
📆Microsoft Build is virtual and is happening May 25-27, 2021.
👮♀️.NET 6 will have W^X enabled for all architectures W^X is write xor execute and it provides that memory is either writable or executable, but not both. It's a lot of work, but will make .NET better when it's done.
🤚TypeScript 4.3 has a neat addition for imports it will now auto-complete the import for you.
It's a light week. Not much going on except for me being stung by the "30 is old in tech" rebuke. What happened in the world of .NET (which turned 20 this year)? Let's get to it:
🤞Edit and Continue support for Linux? Not happening any time soon. The Jetbrains folks received complaints that Edit and Continue support for Linux wasn't available in Rider, and this particular rabbithole leads right to Microsoft's door step.
It's indicative of a bigger problem, that the promise of cross-platform .NET is the sort of promise you'd make like 'we should get together for lunch sometime' with a friend you bump into while shopping on a saturday afternoon.
💫Releasing Windows Feature Experience Pack 120.2212.3530.0 to the Beta & Release Preview Channels. The title is almost as long as what they actually released, to wit:
"We are improving the reliability of displaying the candidate list for users of the Input Method Editor (IME)."
🔨C# holds steady as the 5th most popular language according to Redmonk.
The fact that JavaScript is number 1 is proof-positive more people are into masochism than we know.
💾Create ZIP files on HTTP request without intermediate files using ASP.NET MVC, Razor Pages, and endpoints The take away here is that using this technique you can create zip files without writing files to disk on your server. Especially handy if you're into that cgi-bin serverless craze.
🎁NewtonSoft.Json 13.0.1 has been released. New major version number, and it looks like the 'breaking change' is the default MaxDepth:
Change - JsonReader and JsonSerializer MaxDepth defaults to 64
There are a smattering of bug fixes along for the ride as well.
It was a light week in the world of .NET, and with Easter coming up in the states, you can expect this week to be light too.
☠Azure AD fell down last week, causing outages with Microsoft's Cloud properties Outlook 365, Office 365, the Azure Portal, and Teams were all affected.
The root cause was a bug during key rotation, and I'll let the Azure Post Mortem team take it from here:
Azure AD utilizes keys to support the use of OpenID and other Identity standard protocols for cryptographic signing operations. As part of standard security hygiene, an automated system, on a time-based schedule, removes keys that are no longer in use. Over the last few weeks, a particular key was marked as “retain” for longer than normal to support a complex cross-cloud migration. This exposed a bug where the automation incorrectly ignored that “retain” state, leading it to remove that particular key.
Metadata about the signing keys is published by Azure AD to a global location in line with Internet Identity standard protocols. Once the public metadata was changed at 19:00 UTC on 15 March 2021, applications using these protocols with Azure AD began to pick up the new metadata and stopped trusting tokens/assertions signed with the key that was removed. At that point, end users were no longer able to access those applications.
Service telemetry identified the problem, and the engineering team was automatically engaged. At 19:35 UTC on 15 March 2021, we reverted deployment of the last backend infrastructure change that was in progress. Once the key removal operation was identified as the root cause, the key metadata was rolled back to its prior state at 21:05 UTC.
This is the second time in six months that Azure AD has gone down. This happened 6 months ago. These are growing pains for Microsoft's cloud endeavors, and the ops teams involved need #hugops. Microsoft being the "safe bet" for enterprises means in part being stable, and two enterprise outages in 6 months is a lot.
🤑Microsoft wants to pay you to build Cloud applications on Azure. I jest, but only a little. They want you to try out their new developer experience on Azure, and get your feedback on it.
🎁NuGet 5.9 is out and there's a nice blogpost by the nuget team on what's in it. Easier UI around version floating, a new "right click -> update", and some nice improvements in Visual Studio for NuGet.
🎁Microsoft releases a one click Microsoft Exchange mitigation tool. Download. Click. Mitigate the vulnerability.
📚Microsoft has Architecture guides for building .NET applications of all sorts. And of course, because Microsoft can't do anything without pushing Azure, the guides include how architect those applications in Azure. There's a reason why the Ebooks are free.
🏫Getting Started with the Microsoft Graph Toolkit is now free on Microsoft Learn. I had to google what Microsoft Graph was, and given the ... paucity of the Wikipedia article, I'm not sure anyone knows.
🖥Announcing Windows Community Toolkit 7.0 It includes a smattering of helpers for developing UWP apps, if that's your thing.
🎥#Include2021 is done, but you can view the videos if you register by March 24th. Include talked about diversity with voices from different industries.
🏰Microsoft Build is May 25th - May 27th, 2021. I don't have more info but when I do, you can guess where it'll be.
Last Week in .NET - 3/13/2021
💍There's a new proposal for a "static abstract" keyword. My brain is foggy on the use-cases here; but let's go with it.
🚨 Do you use System.Text.Encodings.Web? There's a vulnerability that has been patched. The vulnerability is captured in CVE-2021-26701
This vulnerability has been patched with the release of .NET 5.0.4, and .NET Core 3.1.13.
For .NET 5.0.4, .NET 3.1.13, and .NET 2.1.26 this is a patch release that contains the CVE Fix. The usual provisos apply and patch your systems.
🎉 .NET 6.0.0 Preview 2 has been released. .NET 6.0.02 Preview 2 has been released. This release includes faster blazor compilation, CSS Isolation for ASP.NET MVC views and Razor pages, more blazor improvements, and some MAUI thrown in for good measure.
🕷👨⚕️ .NET 6 introduced the Priority Queue and an enterprising Khalid Abuakumah shows how it works with a nice Avengers example Black Widow and Dr. Strange are far too down on his list, but other than that it's a pretty good ranking.
🎥 There's a Windbg video series out, and as someone who has had to suffer through the blog posts and documentation, I'm glad they've taken to video. You won't need Windbg until you do, and by then you'll wish you had already watched these videos.
🕵️♂️ There's a nasty CVE out that details vulnerabilities in Microsoft's DNS server. You know, that server that generally serves AD environments? There's a paper out about the CVEs.
🦈 Do you remember the Exchange CVE from last week? (If you haven't patched your Exchange server, please, do so. Now.), well some security researchers published a Proof of Concept on Github (PoC) and that PoC was taken down by Microsoft. Without any word from Microsoft, I can only take this as bad behavior on their part. Exposing this research only helps the pen-testers and security research community improve their craft; and the bad guys already had this information anyway. Taking it down from Github just reminds us that Microsoft owns Github; which may not be such a good. Plan accordingly.
🧓🎁 Visual Studio now lets you remove unused references which brings it up to par with ReSharper from... 2012.
👮♂️ Microsoft has a security scanner that can tell you if there are backdoors installed on your server I don't know if it can find rootkits, but there is a little comfort in this tool.
🕵️♀️ CISA has released new info on webshells created by the Exchange exploit. Keep a look out if you're an SRE.
Jobs
💰 Microsoft has an opening for a Senior Program Manager in... Data Storage for its Azure team.
Last Week in .NET - Microsoft Ignites Exchange - Week Ending 6 March 2021
Microsoft Ignite happened last week. Its releases were all about Azure, azure, azure, and at least for the moment tangential to the work we do here. There's a playlist if that's your thing, but the first video on the list, and I am not shitting you here, is a video is titled "Faster Management Performance – Inventory and Financial Management learnings in Azure". ...and I'm already asleep.
🚨🚨🚨 Microsoft Exchange is currently being hacked. Yes. That's currently as in right now. If your organization hasn't patched your Exchange server, please stop reading this and do that now. Even cisa.gov is getting into the act.
🕵️♀️ The .NET Foundation snuck in a change last November that removed the "Contribution" model for Open Source projects that want to join the .NET Foundation. They just as quietly removed it, but their verbiage and their few comments on the matter push the "Assignment" model rather heavily. The Assignment model will assign the copyright of your project to the .NET Foundation. And in case you weren't aware, the .NET Foundation is controlled by Microsoft. Its paid employees are paid by Microsoft, it has a non-revocable and single-seat veto power on the Board of Directors, and now it would like you to pretty-please assign the copyright of your open source project to this 'independent' organization.
The latest is that the Executive Director says it's not the only model, it's just the preferred model. Yes, I too would prefer other people gave me their stuff instead of having to share it. Keep your eyes on this space; as I know more, you'll know more.
🔊 Want to know more about how the .NET Foundation is set up and how it works? I covered that on a previous podcast episode of Last Week in .NET.
🗃 Adam Sitnik wants to hear from you if you use FileStream in a performance related scenario. If you use it and you have a need for speed, reach out to Adam and let him know how you're using it. "On a computer" probably isn't a good answer.
🆘 Microsoft has realized leaving Nuget to die probably isn't a good idea, and so they're finally paying attention to it. Nearly every .NET team in existence relies on Nuget, and yet it's received less love than a 12 year old dog at a pound. There are signs that Microsoft wants to change this; and that's a wonderful thing. We'll see what comes of it.
🎉 Windows Terminal Preview 1.7 has been released Speaking of showing some love, the Windows Command Prompt is the bane of sys-admins and developers everywhere; and Microsoft recognizes how lackluster its been, and to asuage us into wanting to use Windows as a Development platform, they're showing some love by replacing it with something that doesn't outright suck. Thank you, Microsoft. I mean it.
🎉 SecureString was officially deprecated in .NET 5,and some Azure libraries are catching up to this new reality. SecureString was a literal black box labeled "secure" when in reality you just needed to open the lid to peek in. It was never meant to be 'secure' and deprecating its usage helps remind any yahoos that it isn't.
🎉 Microsoft releases the .NET Upgrade Assistant Preview That's its name. Preview is just sitting on the end like that friend that comes along to dinner even though they weren't invited. I guess we're just lucky they didn't tack on "Azure" or "365" to the name. As it says on the tin, it helps you upgrade your .NET Framework projects to .NET 5 (and beyond, one assumes).
🎉 Visual Studio 16.10 Preview 1 has been released You see Microsoft? You can put a version number on a "Preview". Since the New York Times "Jetbrains" debacle (where they basically published an opinion as fact), some enterprises are moving away from Jetbrains Resharper. This is of course bad for the developer community since even in the year 2021, Microsoft's refactoring tools pale in comparison to ReSharper. In an effort to gain some ground, Microsoft has released new Refactorings in this preview. These same refactorings (with the possible exception of the "find all references for Source Generators") have been in Resharper since... well.. forever?
Remove Unused References
Smart Break Line
Simplify LINQ expression refactoring
IntelliSense completion for Enum values
IntelliSense completion mode setting
Code style preference for new lines
Find All References support for Source Generators🎉Microsoft released a new "low code" language called "PowerFX" and no it's not on the .NET platform because a cohesive brand vision is not a thing Microsoft does.
🎉Windows Server 2022 is in preview and includes changes to make Windows Containers Smaller. They currently clock in up to 5GB; which is an order of magnitude larger than debian based images, and two orders of magnitude larger than alpine based images. Let that fact marinate.
☑ The .NET Foundation has published their "January/February 2021" newsletter. There are lots of little release goodies in here as well as another exhortation to fill out their survey. Please, take the survey.
🐦🦃 What's the difference between .NET and .NET Core? Mahesh Chand spells out the differences. In a fit of irony, the article itself is out of date, having only been released in July of 2020.
🎉Visual Studio 2019 for Mac Version 8.9 has been released and it now supports .NET 6 Preview 1 (not so hard, is it Microsoft) and debugging and running tests in Unity.
🐷Windows 10 Insider Preview Build 21327 is released and Microsoft is touting a re-designed "News and interest" section as a feature. I don't want lipstick on the pig. I don't want the pig sitting there, in my taskbar, pretending to be relevant. It's an operating system, folks. Focus on that, please.
🎉S4M for .NET It's a state machine library for .NET, and I'm a big fan of Event Driven Architectures, and when you combine them with State Machines, a whole large swath of both reasoning issues and bugs just go out the window (to be replaced with abusing the state machine; but we can't have everything). I'm going to give this a try and see how it fares. In a "It better do what it says on the tin" moment, S4M stands for "Short, Simple, and Straightforward State Machine Library".
🗣There are murmurings towards total "Notebook" support in Visual Studio. I love Visual Studio -- I believe it to be the second best product Microsoft has ever produced (Excel is pretty amazing), and it getting actual interactive support for C# notebooks would be a nice addition. Maybe they could just do us a favor and acquire the LinqPad folks?
And that's it for what happened last week in .NET. Patch your systems and stay frosty.
Releases
📢 Python for Visual Studio Code introduces its February 2021 release. TensorBoard integration , better docstring and improved go to declaration behavior have all been released as a part of this... release.
📢 TypeScript 4.2 has been released with several new features, like an abstract constructor signature, stricter checks for the 'in' Operator, smarter "Type alias preservation", and More. Yes, and more is doing a bit of heavy lifting in that sentence. Check it out and rememberr that TypeScript does not respect SemVer so upgrading from 4.1->4.2 is a breaking change. Thanks, Microsoft.
.NET News
📝 Blazor Desktop: The Electron for .NET? by Matthew MacDonald asks this question. It's an interesting way of pitching Blazor that I hadn't considered previously; and I'm excited to see where this goes. We do already have a perfectly good electron, however.
📝 Did you see the .NET Foundation speaker's directory If you want to book a speaker for your meetup, there are lots to choose from. I am also in the directory, for what that is worth.
📝 Khalid Abuhakmeh talks about 18 pitfalls you can encounter and EF Core 5 and how to avoid them I've hit just about all of these in my work; and that's either an indictment of me or of the framework itself. You choose.
📝 The four part series on building apps with Azure API Mangaement functions, Power Apps, and Logic Apps is now complete and it's clear from the title that Microsoft's KPIs for 2021 include how often Azure services are used in a blog post.
⚠ NET 6 will only support Mac OS 10.14 and up Mac OS 10.13 "High Sierra" is 4 years old at this point, so who can blame them? Thanks to Kevin Jones (@vcsjones on twitter) for the link.
👨💻Microsoft has a github repo devoted to WPF Samples and to my relief the only reference to azure in these code samples is the color.
🎉 Maoni Stephens made "Partner" at Microsoft Maoni has a neat video series out on the Garbage collector that I linked to a few newsletters ago. And this promotion is well deserved. Congrats Maoni!
📝 Speaking of Maoni, she also has a blog post out on the Pinned Object Heap in .NET 5. The POH is new in .NET 5, and you may want to get acqauinted with it, just in case you ever need it.
Last Week in .NET - February 20th, 2021
.NET Releases
📢 .NET 6 Preview 1 is out. Besides MAUI, there's a lot being packed into .NET 6, and what I'm looking forward to most are Single File Apps. They were 'released' in .NET 5 for Linux only, and in .NET 6 they'll be available for Windows and MacOS as well.
📢 Dapr 1.0 has been released. Dapr allows you to hot-swap microservice features like queues, data stores, authorization schemes and secrets management. It's a way to write Microservices for the least common denominator. it's like Kubernetes for Tech Stacks... and that's not a compliment.
.NET News
📝 Do you need a high performing CSV parser in .NET? Cesil has you covered and it now supports source generators. Kevin is a really smart guy and he dives deep into how to use source generators for Cesil and what they do. Thanks, Kevin.
🎥 Sam Basu joins the .NET Show to talk about MAUI. Not the island, the acryomn: Multi-platform App UI. If you want MAUI today, try out UNO Platform. Not a plug, just something that's already available... today.
📢 .NET 6 will have a priority queue, writes David Fowler. I guess interviewers will have to find a new data structure for people to try to recreate.
☑ The State of .NET Survey is going on right now. It's built to give Microsoft a sense of why more people aren't using .NET, and if you are using .NET, what parts you're using. It seems like Microsoft already has this information with their opt-out telemetry, but it's your chance to tell them how you feel nonetheless.
📘 The Introduction to Dapr for .NET Developers ebook has been released. Dapr stands for "Distributed Application Runtime", and it's not to be confused with Dapper, the Micro-ORM from the folks at Stack Overflow. Confusing, isn't it? Apparently people at Microsoft fell in love with the name and ignored complaints that it sounded like "Dapr". Anyway, the book is out.
Who's the book for? Well, that's the trickier part. It's for people who want to create Microservices from scratch; which, you probably shouldn't do.
Microsoft News
📰 Windows 10 version 21h1 will arrive with no hardware certification changes. The story never tells us why this is important, so let me hum a few bars: It means the hardware that has been certified to work on Windows 10 build 2004 will work for this version of Windows 10.
📰 Microsoft released their final update for the Solorigate Investigation. For a "final" update, it leaves a lot to be desired information-wise; and there's a lot we still don't know. These sorts of updates make it easy to think that there's more going on than is being reported. I guess we'll see.
Jobs
💰 Microsoft is looking for a Software Developer for their One Engineering System team. This role looks to be geared towards ensuring the security of Microsoft's software supply chain. A bit of a coincidence given recent events.
🎂 .NET Turned 19 on February 13th. Awwww. and I learned about it from AWS. Nice Shade.
🚨🚨🚨 Microsoft releases a whitepaper on mitigating risk when using Private package feeds This dovetails with the security researcher who wrote about how they hijack'd namespaces for private feeds; and Microsoft releases a whitepaper on this issue and how to mitigate this. This is up top because it's crucially important for teams that use private Nuget feeds. Thanks to Barry "I love Beans" Dorrans for sharing this on Twitter.
If you use Azure Artifacts to store your private packages, Microsoft has done you a solid and fixed that behavior as well.
Releases
🚨🚨🚨 Several CVEs have been fixed with new .NET Core updates, including CVE-2021-1721 (Denial of Service) and CVE-2021-24112 (Remote Code Execution).
🍾 Visual Studio 16.8.5 has been released with the two above CVEs fixed and antoher CVE, specifically CVE-2021-1639, which is a TypeScript Language Service Remote Code Execution Vulnerability. There are also a few bug fixes in this release as well.
🍾 Visual Studio Code v1.53 has been released. You can now wrap tabs instead of horizontally scrolling when you have a lot of tabs open. I feel seen.
🎂 Cake v1.0.0 has been released. It's been 112 releases to 1.0, and congrats to Cake for getting there. For those of you just hearing about Cake, it's a C# build engine in the style of Make, from where it gets its name.
🚨 .NET 5.0.3 has been released this fixes the aforementioned CVEs and bug fixes for ASP.NET Core, Entity Framework Core, the runtime, and even Winforms.
🚨 .NET Core 3.1.12 has been released with the same CVE fixes but far fewer bug fixes for the Runtime, the CoreCLR, Winforms, and ASP.NET Core.
🚨 .NET Core 2.1.25 has been released and you get the aforementioned CVE fixes but only one lone fix for ASP.NET Core.
🍾 C#/WinRT Nuget Package has been updated to 1.1.2-prerelease.210208.6 So if you want to target WinRT, check it out.
🍾 Entity Framework Core 6.0 preview 1 is coming soon and the team is currently working on compiled models, Temporal tables and investigating GraphQL. They never sleep. They can't.
🍾 Microsoft releases Windows UI Library 3 preview 4 which has a few feaures but even more bug fixes.
.NET Events
🎥 Scott Hunter, Director of Program Management for .NET, is giving a talk on the state of .NET 5 and what's coming in .NET 6. It's an MS Teams event but let's not hold that against Scott. .NET 6 has big shoes to fill: It's the first LTS release under the ".NET" moniker; and it's when MAUI is due. Special thanks to Ginny Caughey (@gcaughey on Twitter) for the link.
📆 The Event List for .NET Conf Focus on Windows has been released. Github actions, Native App development in .NET 6, Azure SignalR and Desktop apps, and running WPF/Windows forms on Arm devices all make an appearance. .NET Conf "Focus on Windows" is February 25, 2021, so sign up today.
.NET News
💍 There's a proposal to allow Emojis in C# and I was about to 😂 but that's apparently not cool any more so I'll 😭 instead.
🏫 Tess Ferrandez updates her .NET debugging deep dive Tess set up a lab to allow you to practice how to debug .NET application using tools like windbg and procdump. This is an insanely informative and clearly written set of labs on how to master runtime debugging for .NET.
📝 Do you write ASP.NET Core Middleware? Steve Collins breaks down the potential pitfalls when using dependencies and writing ASP.NET Core Middleware. This is one of those 'have it in your back pocket' blog posts for the next time you have to write middleware.
🚢 System.Speech has been shipped as part of the Windows Compatibility Pack for .NET Core. Still no cross-platform speech; but at least it's something.
🧙♂️ David Fowler talks about .NET APIs you probably didn't know existed, including StringBuilder.GetChunks which is not, I repeat, not, about cleaning up after a party.
📝 Jeremy Miller talks about Event Sourcing with Marten. This is relevant to the microservices and SOA Crowd.
📝 Speaking of the Microservices Crowd, Matt Ellis, Principal Software Engineer for the Azure SDK, talks about how you can create a custom event hubs event processor in .NET. This looks super confusing and I'm either too dumb to get what's going on or the people who wrote it are too smart.
📝 Andrew Lock talks about how to use source generators to find all routable components in a Blazor WebAssembly App and I've now exhausted all of the vocabulary I know about Blazor.
📝 Eric Sink laments that more languages aren't supported on the CLR. Me too, Eric. Me too. I want Perl for .NET. I know I will never get it, but I want it.
⚠ Don't write async validators in ASP.NET Core. The Pipeline validators run on is synchronous so you'll run into problems. That's an important safety tip. Thanks Jeremy.
📝 Richard Lander talks about how to stay safe with .NET Containers We don't have near enough the tooling to handle the dependency chains our applications run on; and that does present a problem when a few major companies are effectively responsible for the security of the entire internet. With that statement, I don't know if things have gotten better or worse.
Microsoft News
👎IF you use Azure and you start up an Ubuntu instance, Microsoft shares your contact information with Canonical, the publishers of Ubuntu. This is a hard pass for me. Don't do this sh*t, Microsoft.
☠ Microsoft is removing Edge legacy in April from Windows 10](https://www.kunal-chowdhury.com/2021/02/ms-edge-chromium-update.html) Let's pour one out for browser competition.
General Interest
☠ Skeletons in the IT Closet: Seven Common Microsoft Active Directory Misconfigurations that Adversaries Abuse This is more for the system adminstrator crowd but given that roles are getting blurred more and more, I thought I'd share.
🚩 There's a new RFC out that for Structured Header fields in HTTPS this is only about 25 years too late, but better late then never.
👶 The Rust Foundation is born Given that it's Rust, I had to tell you about it. Microsoft has also joined the Rust foundation, which means you'll be hearing about Rust more from me. Sorry?
🤯 Solarwinds, the hack that keeps on giving is going to get worse before it gets better If you work in enterprise security, I won't judge you for picking up drinking. This is a mess.
Jobs
💰 Microsoft is hiring a Principal Program Manager to help their business units develop open source best practices. This is an opportunity to help Microsoft better learn how to interact with Open Source Software, with all the challenges that entails.
And that's it for what happened last week in .NET. Patch your systems, and be prepared for the Solarwinds hack to get a lot worse.
P.S., I'm running a webinar on March 5th, 2021 going over how Test Driven Development (yes, that Test Driven Development) can help you and your .NET team make decisions. Sign up here if you're interested.
Last Week in .NET - February 6th, 2021
No releases of note this week; but several updates in the .NET area that are useful, especially around Windows UI. Let's get to it.
Microsoft News
👐 Microsoft Open sourced the storage engine that powers Exchange Server, Office 365, and parts of Windows. They open sourced the Extensible Storage Engine, or ESE for short, and it's been a foundational part of windows since Windows NT 3.51. This is cool and I'm still holding out hope for IIS to be open sourced so I can finally figure out this 10 year old IIS bug.
🛣 The Windows UI Library Roadmap has been updated. WinUI 3 looks like the model that unifies all the different ways of creating UIs on Windows, and I'm excited to see where it goes. Currently, it reminds me of the dnx project back in the earliest days of .NET Core. As this stuff solidifies, the picture will hopefully become clearer. As for the updates, UWP support is slated for post-may and Multi-window support has been delayed. Special thanks to @dotMorten for the info.
🔮 Brent Ozar talks about the future of SQL Server with Forrest Brazeal. According to Brent, DBAs are safe for at least the next 10 years at least.
📅 Microsoft Ignite is free and it's happening from March 2-4 2021. Did I mention it's free?
🏛 Microsoft's PAC is announcing it's suspending contributions for 2022 election cycle to all members of Congress who voted to object to the certification of electors. It's important to note that they aren't ending support, only delaying it, presumably until the furor over January 6th blows over.
.NET News
📚 Updated Documentation is out about gRPC pn .NET. gRPC is an alternative to plaintest JSON based APIs and is a staticly typed wire format. It could be for you if you write APIs and you want an effecient format.
📝 Rehan Saeed covers configuring OpenTelemetry. Open Telemetry helps with tracing and logging for your .NET Core Web applications.
📢 Azure Quantum is now in Public Preview at least it is... until someone observes it. All joking aside, Quantum Computing will either be the biggest snake-oil sale of our lifetime or will literally remake the world of technology as we know it. At this point though, you get a whole 11-qubits to play with. Not bytes, bits. 11 quantum bits. Don't spend it all in one place.
📝 Mark Seemann shares his lessons learned about trying to put ASP.NET Web API Controllers under test. Unit testing controllers is a bad idea, and Mark goes through how to use an HTTP Client to test them. It's a step up from unit tests; even if it is heavier weight.
🍾 Xamarin Community Toolkit now supports native popup controls.
🤫 The ASP.NET Core team is disabling the Github Discussions feature. It makes sense that if the team can't handle the size of the backlog, there's no way they can handle that plus the Discussions.
❓ There's a video out on the .NET Show about building 'real' applications with Orleans in .NET. Orleans is a framework for building distributed applications in .NET, and this video hopefully clears up why Orleans exists.
Jobs
🦆 DuckDuckGo is hiring .NET Windows Desktop Developers. If you know WPF and have a hankering for a remote job, this job is for you.
💰 Microsoft is hiring a Principal Software Engineer in their WDX (Windows, Developers, and Experiences) team. Apparently it's not a .NET role, rather it's a C++ / Java role.
Last Week in .NET - January 30th, 2021
We're getting our first snow here in the DC area for the first time in what feels like forever; and the .NET team is pondering the true meaning of the words "Backlog management". Let's get to it.
🌎 As previously alluded to, the .NET team is closing older issues in their Github repos, and this is a cause for alarm among the folks that write these issues. If you run an open source project, sooner or later you're going to run into this if you don't have the people-power to manage your backlog. I hope the .NET team takes the time to realize this hints at a much deeper problem, and that problem isn't "too many issues are opened on Github".
📝 Stack Overflow deep dives into their May 2019 security incident. The word 'incident' has the same energy that my two-year old does when she has a poopy pull-up and decides she'd rather not wear it any more. That aside, this is a fascinating look into what actually happened, and how Stack Overflow used what the attacker searched Stack Overflow for to figure out where they were going to hit next. Using Stack Overflow to hack Stack Overflow is a new one on me.
🤼 .NET Conf Focus on Windows Desktop Development is February 25th, 2021. No speakers, no schedule, just a save the date. Cutting it kinda close, aren't we, .NET?
📝 Tired of Console applications defaulting to .NET Core 3.1 when you create them in Visual Studio and you have a perfectly good .NET 5 installation?. Me too. Also Anthony Giretti has a fix for that.
🌎 Ben Watson wants your input on breaking changes being made to Microsoft.IO.RecyclableMemoryStream It's like database connection pooling, but for the large object heap.
📢 Microsoft has released LAMBDA for Excel You would be wrong if you thought that the word LAMBDA was an acronym for something. Rather, it's because the keyboard got stuck and Marketing thought that was edgy. Now that Excel is turing complete, I await Doom being created in Excel.
🎥 Rockin' The code world with DotNetDave - Special Guest: Kendra Havens is on February 6th, 2021. Kendra is a Program Manager for Visual Studio & .NET at Microsoft, and Rockin' the Code World is not to be confused with ".NET Rocks".
☑ Microsoft has put together a new experience for feedback and now there's a new way for them to ignore your feature request.
📢 There's a Nuget Package Explorer CLI tool that can validate nuget packages This is helpful to those of you that author nuget packages, if you don't, carry on.
🐛 Nuget Package Explorer is also tripping up Norton Antivirus so if you use that, watch out for the false positive.
🎥 Brigit Murtaugh has an 8 part series on Developer docker containers Part 1 is now, Parts 2-8 are on the right hand side of now.
📝 Curious how the pre-built .NET Docker Images are created? Elton Stoneman has the answer. This is a fascinating look into how Docker images are effectively turtles all the way down. Thanks to Dee Dee Walsh for the link (@ddskier on the twitters).
📝 Codemaze updated their blogpost on Blazor Web Assembly Authentication. It is unclear what the updates are, but if you do this a lot you probably know.
📢 Microsoft announces their support for Open Web Docs Remember when Mozilla laid off the MDN team? Remember how MDN is soooo much better than W3Schools? Yea. This has to do with that. Looks like the big tech companies are coming together to make documentation a funded thing.
🎥 Elegant API Versioning in ASP .NET Core Web API I have not vetted these claims, don't @ me.
💲 Microsoft released FY21 Q2 Results. The numbers went up and to the right, but the whole stock market has been doing that, sooo.
📰 One third of tech workers admit to only working 3 to 4 hours a day, according to Fast Company, and.. this part is even more important: the other two thirds lie about it.
📝 .NET 5 Source Generators Jump Start Source generators are socially acceptable code generation tools.
📝 Speaking of Source Generators, you can now use them to create that DSL your business wants and when in two years you're stuck maintaining this DSL that about 10 people on the entire planet understand, you can give it all up to use Excel's LAMBDA. I am not bitter at all.
🚨 Github Actions is removing support for .NET Core 3.0. Update to 3.1 or .NET 5, or build everything in a docker container.
📝 The Author of cURL asks the question: "What if Github is the devil?". This being a serious subject, I will not joke and say "too Late".
🐦 I don't think the Entity Framework team ever sleeps. They've created the branch for EF Core 6.0 Preview 1; and if living on the edge is your thing, go ahead and download it.
📝 Steve Cleary continues his series on Asynchronous Messaging with Part 4: Retreiving Results. This sort of thing reminds me that we don't yet have the tooling to support Microservices in a standard way.
🗣 The .NET Foundation has put together a speaker directory Lots of Good speakers on there, although they also let me on there, which is suspect.
🚨 30% of Solarwinds hacking victims did not actually have Solarwinds installed well that's frightening.
And that's it for what happened last week in .NET. I'm George Stocker, and I'm hosting a free webinar on TDD in .NET on March 5th. When I'm not doing that, I'm helping .NET teams double their productivity through Test Driven Development. Check out more at www.doubleyourproductivity.io.
Thanks, and I'll see you next week.
Last Week in .NET - January 23rd, 2021
Is it over yet? Maybe? Not sure. 2021 has certainly come in like a lion, here's hoping is goes out like a lamb. A new president here in the states, a renewed focus on science, and a bunch of things happened last week in .NET. Let's get to it.
Releases
📢Visual Studio 16.9 Preview 3 has been released We now have intellisense for PREPROCESSOR symbols (yea, that was a written pun). This is about 20 years overdue and I'm excited to see it. Not excited enough to actually inflict PREPROCESSOR symbols on anyone, mind you, but excited nonetheless.
📢Project Tye 0.6 is out If you "Microservices" solely written in .NET, you should give Tye some attention. It's 0.6, so give it the attention that versioning deserves.
📢Microsoft has automated intellisense tooling to help you write P/Invoke... invocations. If you deal with Win32 APIs, see if the Cs/Win32 nuget package helps you out. Special thanks to Claire Novotny for the link.
📢Refit v6.0-preview.84 has been released, which is a type-safe rest API library for .NET.
📢KDL Parser for .NET 1.0 has been released I didn't know about KDL Before now. Apparently it's like XML or JSON, it's a configuration language. If you use it, shoot me a note. I'm interested to know more.
.NET News and Sundries
🎥Jetbrains is hosting a webinar on the OSS project FluentValidation on January 27th Fluentvalidation is a library that provides... Fluent Validation. Ok. There's a webinar on this on Wednesday. Feels a bit like a webinar on how to use a hammer but I'm willing to be surprised.
📝Julie Lerman details the content she's released on Entity Framework Core 5 Julie is one of my favorite content creators; and I'm always happy to share her work.
🎥Konrad Kokosa has an 8-part video series coming out on the... .NET GC. In Part 1, Konrad introduces you to the internals. There's no way to really talk about the GC without wanting to fall asleep; and I applaud Konrad's effort to make it interesting. If you find yourself running into allocation/performance issues, then learning about the GC is a Good Idea, and Video is probably the least terrible way to learn about it.
📝Anthony Giretti introduces us to a ridiciously named and yet surprisingly helpful tool called "gRPCui" a visual way to see what is being sent and received through gRPC. It's like Postman but for gRPC services.
🎥Kevin Griffin is interviewed about what sort of Real world projects you can use SignalR for (including one that saves lives). Kevin also offers consulting on the world of SignalR, if that's interesting to you.
📆.NET Frontend Day is January 28th and there's still time to sign up to learn more about using .NET for the 'front end' of your application.
📝The EF Core 6.0 plan is out, and it seems like there will be no rest for the Entity Framework Team. They put together a pretty aggressive plan for features and performance improvement.
🎥David Fowler does a Part 2 to the ASP.NET Core Architecture Video These sorts of videos are fascinating to me just with the sheer number of tidbits you learn.
📝F# has a Stats library I have a fondness for F#, much like I do holiday chocolate; but I'm not going to spend all year eating chocolate.
🎥Akka.NET hosts its community standup Use Akka.NET? This is for you.
📝Dean Ward of Stack Overflow details how they (ab)use IConfiguration If you find yourself with environment and tenet configuration settings; check this post out.
🔊Jon Skeet talks about C# and Time on Adventures in .NET and yes, dealing with dates and time is an adventure in .NET.
📝Steve "Ardalis" Smith talks about how you should use the APIEndpoints project instead of MVC controllers because "MVC Controllers are Dinosaurs" What The Fck is this Sht. Seriously. I've got opinions about this. The "Clean Architecture" crowd isn't going to get my sympathy by saying this sort of bullshit. "Your architure isn't clean if you don't use this rube goldberg contraption of best practices we've put together". Thank you, next.
📝Microsoft released a deep dive into the stage 2 activation malware dubbed "SOLARIWARE" in the Solar winds Hack It's undeninably bad when your malware attack gets new codenames for each attack vector.
📆.NET Conf "Focus on Windows" is February 25th, 2021 and will focus (ahem) on Windows .NET Desktop applications. No word yet on Speakers or schedules; but I'll keep an eye out and when I know you'll know.
Other Tech News
📝Jennifer Riggins talks about why Tech is still toxic for women Our best days are ahead, but we're not going to get there if we're making it impossible for half the population to be a part of tech. Read this article. Internalize it.
☑Github's Security team wants to talk to you about securing your Open Source Project Open Source (and hosted) secrets management is definitely a 'need', and if you run an Open Source project, you should reach out to Github's team. Special thanks to Dee Dee Walsh (@ddskier on Twitter) for the link.
📝Jared White writes about why Tailwind CSS isn't for him Technologies go through the Gartner Hype Cycle, and Tailwind isn't any different. What is different is that techies get pretty religious about the libraries we use. Special thanks to @SaraSoueidan on twitter for the link.
🔊Scott Hanselman sits down to talk about event modeling with Adam Dymitruk Event Modeling is one of those phrases from Distributed Systems architecture and if you find yourself saying the words "Microservices" or "Kubernetes" in any serious conversation, you should proabably listen to this podcast.
🐦Microsoft says the quiet part of PAC contributions out loud. Microsoft has been chastised for not stopping its political contributions to members of congress that encouraged the insurrection on January 6th, and Microsoft says they need to continue to give money to politicians so they can "pick up the phone" and "get help".
Jobs
💰Microsoft is hiring in Boulder Colorado for their Commercial Software Engineering team, which is effectively a project team that writes software for their customers. A consultancy.
And that's it for what happened last week in .NET. I'm George Stocker, and I help teams double their productivity through Test Driven Development. If that sort of thing interests you, check out www.doubleyourproductivity.io. Thanks, and I'll see you next week.
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 📢
📢 .NET 5.0.2 has been released. This release fixes CVE-2021-1723 | ASP.NET Core Denial of Service Vulnerability attack. If you run .NET Core on Kestrel, you're vulnerable to this attack, so update immediately. There are several bug fixes for ASP.NET Core, the .NET runtime, and Entity Framework Core 5 included as well.
📢 In the same vein, .NET Core 3.1.11 has been released with the same CVE 2021-1723 fix, as well as some backported fixes from .NET 5.0.2 and other fixes specific to .NET Core 3.1.
📢 Not to be left out, .NET Core 2.1.24 has also been released and at this point you can probably guess what I'm going to say: They fixed the aforementioned CVE vulnerability, as well as several backported bug fixes and bug fixes specific to .NET Core 2.1.
☠ Speaking of .NET Core 2.1: Its End of Life is August 21, 2021 As stated in the blog post,
After that time, .NET Core 2.1 patch updates will no longer be provided. We recommend that you move any .NET Core 2.1 applications and environments to .NET Core 3.1 in first half of 2021. It’ll be an easy upgrade in most cases.Parenthetically, of course, I hope your upgrades go better than mine usually do. I seem to hit every upgrade problem that could exist.
📢 Windows 10 version 20H2 Build 19042.746 has been released to the beta channels and these are chock full of security fixes that probably don't matter to you and I, but matter greatly to enterprises.
📢 IdentityServer 5 has been released This is the first major release under the new company's banner, and here's to many more.
🍾 You can now write C# for embedded systems using NanoFramework THIS IS INCREDIBLE. I used C when writing the firmware for Jewelbots (Because let's be honest there were no alternatives), and I'm excited to see that .NET is now a viable option. Part of me wants to take a few weeks and rewrite the firmware in Nanoframework, just to see if it's possible, but the other part of me knows it'll have to take a backseat to my TDD courses and classes. I will add it to the list, however.
Other .NET News
🎂Nuget celebrates its 10th birthday Just three more years until it becomes a bratty teenager.
🎥The EF Core team releases a video discussing what's coming in EF Core 6 They used the survey to help guide their thoughts for EF Core 6; and while I have a personal disdain for survey-driven-development, I understand why they'd want to do it. There's also a github issue related to EF Core 6 in case watching videos to get information is not your jam.
✅There's a cheatsheet showing how to use C# 9 features from the team at Okta. Real world use cases for these features is a nice thing to show off, and I'm here for it. Special thanks to Heather Downing (https://twitter.com/quorralyne for the link.
💸Mobilize.NET can convert your VB and VB.NET Apps to.NET Core This seems like a neat little utility, and while there's a company behind it, if you have a VB or VB.NET application, this may be your ticket to making the migration to .NET Core (and .NET 5). Check it out and let me know how it performs for you. (special thanks to Dee Dee Walsh (@ddskier on twitter) for the link.
📝Mana Pichova shares networking improvements made in .NET 5 this is a great read but is definitely on the heavier side. If networking is your jam, give this post a read.
📝Jimmy Bogard talks about ActivitySource and Listener in .NET 5. These classes are replacements for DiagnosticSource and Listener, so if you use either of those, give this post a read.
🌟ZeroSharp - a way to compile C# to native code, has hit 1000 stars on Github this is a wonderful milestone, and while github stars don't pay the bills, it's nice to see a .NET library hit wide usage.
😲The analysis of the Solarwinds Hack digs deeper, this time into replacing MSBuild. SUNSPOT was another malware vector in the Solarwinds hack, and this article goes deep into how it was used to replace MSBuild. This thing gets scarier and scarier.
😲Speaking of scarier and scarier, nuget packages can run arbitrary code on your system, and now I'm going to lie in my bathtub and rock gently, and that fantasy of buying a mountain cabin and living off the grid grows a step closer to reality.
🤼Jetbrains is hosting an AMA on January 21st, 2021 on Reddit and you'll now have the opportunity to ask them how it feels to have Microsoft nipping at their heels for 21 years straight.
📝Khalid Abuhakmeh writes about what he's learned in his time in .NET and there are some good lessons in there. Give it a read.
💰There's a job opening for a REST API software engineer at Microsoft The only downside is it appears to be only for Redmond, Washington. In other words, not pandemic friendly.
💰There's another job opening for Microsoft in the Atlanta area, and this one appears to allow remote This is for the OXO team, which is not, to my chagrin, is not pronounced 'the hug and kiss and hug' team.
🎥Headspring is hosting a webinar on January 21st detailing how they migrated an application to .NET core, this will dive deep into the strategy and tactics behind the migration, and should be a good event to attend if you're thinking of doing the same.
📈The Azure team details its performance improvements from migrating from .NET Framework to .NET Core 3.1 It's always great to see these sorts of in-depth analyses, and this one is no different.
📝Are you thinking of moving to Microservices, or event driven Architectures? IF so then you'll want to read about Durable queues from Stephen Cleary. These primitives are necessary for an event-driven architecture, and it's always great to read Stephen's work.
Other News and Sundries
📝Microsoft is close to running all its own services on Azure. Not running your own services on your own cloud is generally a bad signal to send to the world when you want them to trust your cloud, and kudos to Microsoft to fixing this glaring issue.
🚂Bethesda, recently purchased by Microsoft, is making an Indiana Jones game YAAAAS. Sign me up.
😲The Parler 'hack' is a masterclass in bad ideas having bad outcomes If you haven't kept up: Parler relied on several external services for security; but when those services were yanked away (due to Parler hosting neo-nazi and insurrectionist content), their code took the absence of such services as a reason to approve whatever action the user was trying to take. It's the equivalent of your house security system letting everyone in if the phone-line goes down. There's so much more to the Parler hack, from the lack of rate-limiting to the ability for people to pull down 60-70TBs of information from Parler's AWS hosted storage, which --- to add insult to injury, results in a massive egress bill from AWS to Parler, on top of AWS no longer hosting Parler.
🤗In the Things to make you feel good department](https://khalidabuhakmeh.com/six-famous-artists-quotes-that-apply-to-programming) Khalid Abuhakmeh shares six quotes from artists that apply to programming. We could all use some good news right now.
🎙Scott Hanselman interviews Amanda Silver about an entire division going remote during the pandemic When we said "The future of work is remote", I'm not sure we were counting on a pandemic being the catalyst.
🤦♂️Github fired and then re-hired the person who made an internal team chat that said "Nazis are about" in the Capitol Insurrection This disgusted me when it happened: A Jewish github employee was fired for warning the company about literal nazis. The head of HR later fell on their sword for this egregious failure of leadership by the company, and it reinforces my question: Where the hell is the adult leadership at Github? Between the ICE contract and this, I'm not sure they realize what political sphere their company inhabits.
👨👩👧👦Techbash 2021 is going to tentatively be in person in the Pennsylvania Poconos. Is it just me or is this a little too soon? I mean, we're recording the highest number of deaths ever from COVID and our vaccination plans are woefully under implemented at best. There is a virtual option, at least, so that's good.
🐦Microsoft's twitter game is getting better with a gif to show you show to de-clutter your screen. Where has this knowledge been all my life?
🎣There's a phishing attempt at githubverification.com and it looks rather impressive. Be careful out there, folks. Special thanks to Tess Rinearson for the catch.
I'm hosting a webinar titled "Intro to TDD for .NET"), and if you've been wondering what TDD is, or at this point why you should care about it, this webinar is for you.
And that's it for what happened last week in .NET. I'm George Stocker, and I help teams double their productivity through Test Driven Development. As always you're a wonderful audience, and I will see you next week. Thanks.
Here in the States, we recorded the first invasion of the Capitol since the war of 1812 (in 1814), the first time a sitting president has incited an insurrection, and the last time any of us will hold out hope that it being a new year will mean things get better.
With that as our backdrop, let's get down to what happened last week in the world of .NET:
🗣.NET Frontend day is January 28th, 2020. This conference goes through the various technologies you can use to build front-end applications in .NET. Expect lots of blazor.
📰CODE Magazine released an article about Blazor Updates in .NET 5. CODE Magazine was my first foray into the world of .NET (this was back in 2000), and I remember reading through the articles fondly. I think I'm going to go subscribe to the print edition again.
🍾Reed Cospey writes a beginning of year message to the F# Foundation community 2020 decimated in-person conferences, and the expectations are that it'll be August before we can even think about resuming in-person conferences, with the more likely outcome that conferences will resume in 2022. If they resume.
📝Julie Lerman blogs about using C#9 records as Domain Driven Design immutable value objects in C# 9 I love Julie's writing, and I hope you'll enjoy it too.
📝How to build Microfront ends with Blazor WebAssembly Micro-frontends are complicated and we're not there yet, but I'm glad more people are blogging about the possibilities.
🚩Do you use Serverless.com? If so, your AWS credentials are being transmitted. In a "well, fuck" moment, Serverless uses your AWS credentials to do its work. An AWS engineer even chimed in on what Serverless.com should do.
📝Rick Strahl does a deep dive into a boring topic and makes it fascinating Using his Markdown Monster application as a setting, Rick dives into String formatting.
📝Jetbrains fights back over allegations that their "Team City" product contributed to the Solarwinds intrusion. The New-York times alleged that Jetbrains "Team City" was partially responsible for the Solarwinds hack, and this rightfully ruffled some feathers at JetBrains HQ. They dive into their findings as to why Team City isn't at fault.
📝Do you use Span? If so, there's a handy chart that helps you understand what you can cast and when, not to mention a really informative article on Span itself. h/t to @DaveAGlick for the share.
🐦There's a thread of a thread about "Project Reunion", aka "Make Windows UI development not suck again". These sorts of insights are why I use twitter. Before Twitter you would have hoped for a blog post or ten, or maybe a video post-mortem; but these sorts of insights were just not available due to the cost of publishing a blog post on the subject. With tweets, the barrier to entry is low. Yea, that can be a problem, but that's a whole other problem to deal with.
📽There's a video out detailing changes you'll see in .NET 6.. If you aren't already on the ".NET updates yearly, get ready" train, you should be. Minor versions happen every month or every few months, and major versions are released yearly. Yes, .NET 6 is 11 months away, and is going to be 'the release' for large enterprises to move to .NET (core).
📝If you want Cross platform .NET UI's right now, use UNO. In this PR, Uno now supports AOT Profile filtering. No, I don't know what this means, but you probably do.
📝Nick Randolph discusses Full Trust and Partial trust and how that relates to Windows app Container. Yes, this is more for the desktop crowd but still interesting to see where Microsoft is going for its UI strategy.
And that's what happened last week in the world of .NET. I'm putting together an intro to modern day TDD webinar:
Upcoming Events
FREE Intro to TDD for .NET live training - this 1 hour online webinar dives into what TDD is, why it's useful, and how to get started with it in .NET. Other services you may be interested in: (New Year, new prices!)
Between the SolarWinds hack, Microsoft releasing a working document detailing the problems with the .NET ecosystem, and a bouncy castle crypto vulnerability, it's been a busy week. Let's dive in and see what happened, shall we?
🤼 Immo Landwerth, PM for .NET, writes a document on the eco-system problems in .NET. This document is monumental in it being a candid take on the .NET OSS ecosystem problem; and while it says it softer than I will, it lays the blame for the state of the .NET Ecosystem on Microsoft. Building Trust with your community is the first step to solving any problem (and let's be clear: Building trust if-you-don't-already-have-it should always be the first step) and this document does just that. Microsoft is its own worst enemy when it comes to building a sustainable eco-system for .NET. Luckily they're at least aware of the problem. There's also a github issue devoted to feedback on The Document and you should chime in if you have passionate thoughts on the subject. I know I do.
⬆ .NET Core updates are coming to... Microsoft update (not Windows Update!). Well, not exactly. Client updates will happen through "Automatic Updates", server updates will happen via WSUS and Microsoft Update. Somewhere a sysadmin is crying.
🚨 the Bouncy Castle project has a vulnerability in its authentication module which allows attackers to very easily figure out the hashed passwords. The flaw? It checks that the characters exist in the string instead of checking that the characters are at the correct index. Hugops to the Bouncy Castle team.
👩💻 Not to be outdone by Apple, Microsoft is designing its own ARM Chips for its servers and Surface PCs. No amount of designing your own chips will get Microsoft out of the "We must support all of our software from the beginning of time" problem they've created for themselves, and that problem is central to why "just making ARM chips" won't make things better. Maybe this is the business person in me talking; but perhaps some of these 25 year old applications need to be re-written off of Win32?
📝 CodeMaze walks through using Authentication in ASP.NET Core with Angular. I got excited for a second when I thought they were going to cover authorization, but no. No one covers Authorization. Authorization is like married couple sex. You know people do it, but you never see it and they really don't talk about how they do it that much.
✅ You can win $250 US dollars by taking part in the .NET Foundation "State of .NET" survey. Yes, I have jokes, but I'll put those aside for a second to say: You should take this survey. The .NET Foundation needs to hear what you find important, and they need you to be as direct about it as possible. Also, how can Microsoft possibly figure out which open source project to torpedo next if you don't tell them what you're using?
🚨🚨🚨 The Solarwinds DLL used to hijack systems "Solarigate" was catalogued last week by the folks at Microsoft. In case you missed that fun, Nation state-level hackers found the deployment credentials for Solarwinds updates on Github; engineered an update with a malicious payload inside of it, got into a few dozen government agencies networks, used that payload to install backdoors and laterally move into other systems, and all the while kept it secret for 9 months. This post goes deep into an analysis of that DLL.
📝 Lesley Carhart writes up her own thoughts on the SolarWinds attack. No snark here, Lesley is one of the smartest infosec people I know, and her commentary is always helpful in these trying times (gestures broadly).
🎥 Remember when movie tie-ins were terrible video games? Now it's using the movie to tech people how to code, and we're all the better for it. Space Jam: a New Legacy is coming out, and why not use it to teach people how to code?
📝 Xamgirl shows you how to implement Multi-binding in Xamarin forms blog posts on Xamarin are the programmer's equivalent of a gym membership. I read them, and I really want to pick up Xamarin forms; but then I have Ionic sitting right there and I just don't do it. I can just read the blog posts and learn Xamarin vicariously through that; right?
📝 Telerik reminds you of 10 things you probably didn't know about Blazor Not covered on the list is that Blazor is the programming language for stoners; and it represents an underground attempt to make Mary Jane mainstream. Sign. I can't do it. I can't write satire about QAnon without it sounding completely nuts and completely plausible that someone thinks that all at the same time.
📝 So there's a blog post by David Pine that shows you how to make localization using machine generated translations using Azure Well that's pretty flipping neat.
🤼 The team working on System.Text.Json details what's next. Given that Newtonsoft.Json is functionally stable and doesn't seem to be getting many more updates, it doesn't make a whole lot of sense for teams looking for new Json serialization to use Newtonsoft.Json, and so we may as well embrace what Microsoft has created here.
🐦 David fowler shares his progress on improving Http.sys for teams migrating from .NET Framework to .NET core, and given the age of the code in question; this PR serves as a really good way to see how to make performance improvements to code that's almost 20 years old.
🎙 Dotnet Rocks interviews Laura Laban, CEO of InfiniteFlight on her product InfiniteFlight, which is a .NET and C# mobile flight simulator. Yes, a mobile flight sim written in C# and using .NET. That alone is amazing.
🐦 Nick Craver, Architecture Lead at Stack Overflow, deep dives into a mysterious bug the Stack Overflow team was running into and they found what was causing it it. Stack Overflow runs on .NET 5; and this twitter thread is about as close as you can come to "being along for the ride". Well worth your time to read.
💸 Microsoft Changes its certification programs and makes them free, but you have to renew them yearly This isn't so bad, especially given the rate of change these days. One reason why a "Last Week in .NET" wouldn't have worked before .NET core is that... well... release cycles were counted in years, not weeks.
🎥 Channel 9 deep dives into what is MSAL + Microsoft.Identity.Web to which I have the same question, and a follow up if you will: how is this different from IdentityServer?
And that's what happened last week in .NET. We're going to be feeling the effects of the Solarwind attack for years. The sheer patience involved in the attack coupled with the way that systems were compromised and how lateral movement occurred means that it could be quite a while before we know the full extent of the damage. And on that happy note, I'll see you next week; maybe. Depends on what sort of news comes out this week in the world of .NET. It being close to Christmas, probably not a whole lot.
Skip to content
Pull requests Issues
Marketplace Explore
gortok/ lwidn-newsletterPrivate
1
0
0
Code
Issues
Pull requests
Actions
Projects
Security
Insights
lwidn-newsletter/LwidnGenerator/input/20201212.md
gortok Update 20201212.md
This is Last Week in .NET for the week ending 12 December, 2020.
📢 .NET 5.0.1 has been released. Lots of Bug Fixes and Performance improvements in this one; with an focus on EFCore. If you use EF Core, take note.
🚨 There's a Remote Code Execution Vulnerability in MS Teams that was apparently patched in October 2020. This github repository includes commentary and videos on the RCE itself. The important point here (besides it being patched) is that according to Microsoft, it's not a very dangerous RCE, but from the outside looking in, a "zero-click, wormable, cross-platform remote code execution in Microsoft Teams" seems pretty dangerous. The problem with bug bounties and patching systems is that the incentive is to give out as little money as possible, and once the vendor is aware of the bug, the leverage is gone, couple that with the legal fragility of saying "I have a way to hack into your systems", and you have a recipe for disaster.
🎥 Microsoft's ASP.NET Community standup covers "Material Design with Blazor", which continues the tradition of tech parroting tech. Alternate Runtime that compiles to JavaScript? Check. Design library that mimics a flat design? Check. All we're missing is a realization that in 5 years, Material design made design worse, not better, as we all relegate flat design to the dustbin of bad decisions, where it belongs.
🎥 Did you know Microsoft has its own TV station devoted to .NET? The Zoomers are probably asking "What's a TV Station?" but for the rest of us, .NET live is effectively a TV station devoted to... .NET. This is precisely as exciting as it sounds, and that excitement you feel is why you subscribe to my newsletter.
🐦 Scott Hanselmen reminds us, If you're using .NET Core, you can generate a .gitignore file in one command dotnet new gitignore will generate a .gitignore file that is already set up for working in .NET. This is a pretty neat development and I'm here for it.
🎌 Jetbrains tells you how to make the most of init-only properties and records with Resharper 2020.3 and C#9. ReSharper remains one of the fastest ways to improve your productivity in Visual Studio. Even with VS 2019, which has come a long way in refactorings, ReSharper still beats Visual Studio's out of the box developer experience, hands down.
👩💻 There are cryptography improvements in .NET 5 for the 5 of you that care about this, you probably already know about it. So really the only thing I can say is "Don't roll your own crypto" and "don't trust some random blog post on Crypto", and let's all ignore for the second that this blog post filled the latter. In all seriousness though: If your code even comes within 50 feet of dealing with Cryptography, hire an "InfoSec" centered developer that knows what they're doing.
⏩ If you use blazor, there's a library that claims to have somewhere between "0-1000x faster API responses on server side with Fusion's caching and automatic dependency tracking abstractions.". Yes, 0-1000x. That's quite the range. This is one of those situations where I'm thinking "Ok, this could be bullshit", or "I'd love to interview the developer of this to get a better understanding of what's going on", so if you run the Stl.Fusion project, or you know who does, make me an introduction?
🤼 Github Universe took place last week and there are lots of on-demand sessions available for your perusal. Oh, and drop ICE as a contract, please. Best, Me.
🎁 CSLA 5.4.0 for .NET 5 has been released No I don't know what this does either; but according to the project page it's a way to "build a reusable, maintainable object-oriented business layer for your app. This framework reduces the cost of building and maintaining applications."
🎁 Infer# for .NET has been released this library does 'interprocedural memory safety analysis for C#', and if you know what that means you probably know whether this is good for you or not. It's a .NET version of the "Infer" Static Analyzer; and I have no clue how it differs from FxCop or other Static analysis tools for .NET. If you do, let me know on twitter @ gortok](https://twitter.com/gortok).
📝 There's a new site out that let's you know what blogs to follow, no matter your tech stack Now Rust Developers have yet another way to remind you that they use Rust. This site was built by @monicalent, and is pretty fricking awesome. H/t to Stephanie Morillio for the link.
📝 Claire Novotny shows you how to create Nuget packages that can use Source Link Source Link seems to be "Source symbols" for the 21st century. Instead of an esoteric way of downloading symbols (and the nightmare that ensued), you can now point your nuget packages to your public source repository, allowing developers to browse your source code without using that Godawful Visual Studio dialog to do so.
🎁 Microsoft Edge 89 has been released to the developer channel and I promise not to make any 'edge' jokes. I'm coming so close to doing it but I won't do it. It's really hard not to though.
🎁 Try-Convert 0.7.160902 Preview has been released this project "tries" to convert .NET Framework projects to .NET Core. This is also a Microsoft based project that for once has no support from Microsoft whatsoever. I consider this an especially good omen.
🌐 Dave A Brock talks about the "Route-To-Code" feature available in ASP.NET MVC Core on .NET 5. One day MVC will figure out what sort of framework it wants to be when it grows up. For my part; I'd be happy with as few files with code in them as possible. That's all I want out of an MVC framework, to make it dead-ass simple to produce a crud web-app. That's it. Maybe call it... C# on Rails?
📝 There's a blogpost from Microsoft detailing what's new in Windows Forms in .NET 5, and if you think about it, Windows Forms is lucky to be included in .NET 5. Don't get me wrong, I'm glad it is, but it could have just as easily received the WebForms treatment in .NET 5. It probably would have, too, if Microsoft's desktop application strategy wasn't so schizophrenic.
📝 .NET development on Apple's M1 Silicon is mostly there. With the exception of Docker working (which is a pretty big stumbling block to my own designs on picking up a new Macbook Pro) and some goofiness, it seems to... work, as long as you don't want Debugger support.
🤼 There's a working group assigned to address "eco-system growth for .NET" which means that they want to make the open source contributor eco-system for .NET Better. Claire Novotny mentions you too can participate but as of this release time, she hasn't gotten back to me on how people would participate in this working group, or what type of participation would be most helpful.
📢 Windows 10 Insider Preview Build 21277 is now available Included is the ability to emulate x64 applications on ARM based Windows devices, like the Surface, lots of new emojis, and fixes you probably wouldn't care about if they didn't include new emojis in this release. Napolean Bonaparte once said "Man will fight to the death for a colored bit of cloth" and I think that's a pretty good summation of our relationship to emojis in 2020.
🐦 Zac Bowden shows a screenshot purportedly to be of the new Microsoft Word UI it's rounder, less cluttered, and still includes Icons people never use in prime real-estate space.
And lastly,
🎁 ReSharper 2020.3 has been released and it includes profiling analysis of .NET 5 applications and lots of other features that look cool but I can't tell them apart by name, because naming is hard.
That's what happened last week in .NET, I'm George Stocker, and when I'm not helping teams migrate to distributed systems (a bad idea for most), I'm working with teams to double their productivity through test driven development. That is much less boring than it sounds, and allows teams to focus on features without getting bogged down in regression bugs. It's only boring until your boss realizes how much money it saves your company, and then it becomes cool. To learn more about how I can help your team save money and be cool again, reach out at https://www.doubleyourproductivity.io, and I'll see you next week.
Normally I'd start this out with some of the funnier things that happened; but before I dive into what happened last week, I want to talk about this week.
Warning: death and violence follow.
Yesterday was the 31st anniversary of the École Polytechnique massacre. If you're not familiar with this atrocity, let me quote Deb Chachra's chilling telling of the event:
On December 6, 1989, in late afternoon a man had walked into the École Polytechnique, the engineering school of the University of Montreal, carrying a hunting rifle, ammunition, and a knife. He entered a mechanical engineering class of about sixty students, separated out the nine women, and told them, "I am fighting feminism." One of the women, Nathalie Provost, responded, "Look, we are just women studying engineering, not necessarily feminists ready to march on the streets to shout we are against men, just students intent on leading a normal life." She reports that his response was, "You're women, you're going to be engineers. You're all a bunch of feminists. I hate feminists."He then opened fire on the women, killing six of them. Then he went from floor to floor in the building, targeting and shooting women.
Fourteen women were killed that day, twelve of them engineering students, one a nursing student, and one a university employee.
Here are their names: Anne St-Arneault, Geneviève Bergeron, Hélène Colgan, Nathalie Crotea, Barbara Daigneault, Anne-Marie Edward, Maud Haviernick, Barbara Klueznick, Maryse Laganière, Maryse Leclair, Anne-Marie Lemay, Sonia Pelletier, Michèle Richard, and Annie Turcotte. (Me: You can hear more about these women here.)
An additional thirteen people were injured. Nathalie Provost was shot four times, but survived. In the weeks, months, and years that followed, among other responses, Canada implemented stricter gun-control regulations, and began to observe December 6th as a National Day of Remembrance and Action on Violence Against Women. The event remains the worst mass murder in Canadian history.
Our industry has problems with sexism, whether latent or outright. While we hope never to have another atrocity like this one; we should strive for equality and justice in our industry. As a white dude in tech, I'll do everything I can; and I ask you to do the same. If you've never had to fear for your life just because you wanted to be an engineer, then you too need to stand up and help stop the sexism in our industry.
Now, on to what happened last week in the world of .NET.
😁 Christina Warren (@film_girl on twitter) submitted a feature request for Windows Terminal to include a "Stories" feature. It was closed far too quickly, in my option, and we all know how hard it is for Microsoft to design a terminal. This would be a nice way to include video tips about the terminal in the terminal itself. What could go wrong?
📝 If you're the type of developer that has a need to monitor the Garbage Collector, you should read about the newly updated in .NET 5 GC.GetGCMemoryInfo API from Maoni Stephens. We're all in the boat where we don't want to deal with the Garbage Collector until we need to deal with the garbage collector, so read this post, and save it for a rainy day.
📝 Code-Maze continues their blazor series with a post on one-way and two-way binding in blazor applications. I maintain that two-way binding is evil and should be avoided at all costs. Think I'm wrong? Yell at me on Twitter @gortok.
📝 How to Unit Test in Entity Framework Core 5 by Michal Bialecki. My preferred answer is: "Don't unit test persistence". Thank you for coming to my TED Talk.
🎥 The Visual Studio team livecasted a Remote office Hours talking about the future architectural changes being made to Visual Studio Visual Studio is older than most college seniors these days, and it's spectacular to see it still alive and kicking. It is probably the best in class IDE I've ever used, and probably the nicest product Microsoft has ever developed for a technical audience.
🆕 MVVM Toolkit Preview 3 has been released. Deeper dive into this is that Michael, the author of this blog post, deep dives into the API. I'm not quite sure what the MVVM Toolkit is for; it looks like some sort of platform-independent MVVM library. Special thanks to Dee Dee Walsh, @ddskier on twitter for the link.
👍 There's an open feature request to get IDE support for Preprocessor symbols. YES. PLEASE. That is far better than the current state of: "What did we name that IFDEF? I don't know. Guess I'll just guess and have a timebomb waiting to blow up in my face."
🔊 Paul Sheriff talks about what's new in .NET 5 on the Azure DevOps podcast. I checked, and they did start this podcast after TFS was renamed to Azure DevOps. I hope they're comfortable with change because the name "Azure DevOps" reminds me of 70s disco. It's cute but it's gonna get old fast.
📝 Kalid Abuhakmeh talks about Module Initialization in C# 9. If, like me, you have no idea what this is, you can probably skip it. But if your team bandies about "Secure coding" and "Threat Model" as terms of art, you may want to read this post. Basically it gives you a way of loading environment variables or code before your your code gets run.
🧪 Microsoft is testing Windows Feature Experiance Pack updates with Windows Insiders. The Windows Feature Experience Pack, so named because Microsoft's Marketing department has a minimum character limit quota; includes improvements to windows. In this case, an updated Snipping tool, text input panel, and a suggestion feature for the windows shell. According to this article, Microsoft wants to make future improvements to the.... Feature experience (Sorry not sorry) available through this... pack. If you are A Windows Insider, let me know how you like these updates.
📰 Microsoft Teams adds support for answering calls via Apple Carplay, transferring calls between mobile and desktop, and adding call recordings to onedrive. Oh for fucks sake. Instead of someone saying "You know what? Enough is enough. This "Work from anywhere while you're doing anything is nucking futz and we aren't going to do it any more. The eight-hour workday is hereby abolished for a four-hour workday that you'll actually be able to make it through and still get things done. I've never seen technology workers productive for an entire 8 hour day; and it's about time we stop pretending that they will be.
🎥 The .NET team hosts a community standup talking about LLBLGen. I have to be completely transparent here: I forgot LLBLGen existed. After Entity Framework came out, it sort of sucked the oxygen out of the room for ORMs in .NET. Which, I guess, was the point.
🎥 Abel Wang, the Principal Cloud Advocate and DevOps lead talks about the history of DevOps at Microsoft. You can tell it's Microsoft because of the heading: "Microsoft's Enterprise DevOps Transformation Story". It details how they went from a waterfall-esque organization to a waterfall organization on github. I'm kidding. They're agile and they do devops now, and I've reached my monthly quota for saying the word "DevOps".
💩 Garter named Microsoft a "Leader" in the 2020 Magic Quadrant for Cloud DBMS platforms. "Leader" here means "Behind Amazon in Vision and execution, and behind Google and Oricle in vision, but beating them on Execution". Or, they're #2 in the space for execution, and #5 in the space for Vision, behind... IBM.
📝 Jaana Dogan talks about things she wished more developers knew about Databases. Please tattoo these items to your architect's forehead in reverse so he can see them every time he proposes a new architecture in the mirror.
📝 Infoq details the performance improvements made in .NET 5 You've probably seen other writeups, but you haven't seen this one. Short and concise, it's worth your time.
📝 InfoQ details ASP.NET Core Improvements in .NET 5 I love the InfoQ concise format.
🐦 Zac Bowden claims that Microsoft is hoping to sign off on an "RTM" build of Windows 10X sometime [this] week. Windows 10X is the OS for hot-shit Developers. I'll be here all week. Try the veal.
🎥 The Xamarin team released a MAUI update. MAUI is the 'Multi-platform User-Interface' project meant to unify all of the different UI frameworks into a common framework. The tag line for MAUI is "the next generation of Xamarin.Forms to build Cross-platform mobile and desktop Apps", and I couldn't have said that better myself.
📝 Derek Comartin talks about Idempotent Consumers in distributed messaging architectures. One of the most crucial part about developing a messaging or event driven architecture is getting the consumption of messages right. Idempotent messages and enforcing idempotency in your system will make it much easier to reason about problems that will inevitably occur because you chose a distributed messaging architecture.
🎥 David Wengier is building a game in .NET and has videos to bring you along for the ride. I missed Episodes 1-57, but I'm going to add this to my binge list.
🐛 Don't put the word 'Android' in your Xamarin App Namespace Apparently that can lead your application not building and you generally having a very bad day. Thanks to James Montemagno for having that bad day and then blogging about it so we wouldn't.
💔 Kubernetes is removing Docker from version 1.20. TL;DR: Docker the program has several 'sensible' defaults that Kubernetes does not want or need; and while docker containers will continue to work just fine, Docker the program will not work with Kubernetes.
📝 How to use OpenAPI Auto-generated clients in ASP.NET Core Another one for the microservices crowds, but still pretty awesome. The tooling has come a long way since 2016, and at this rate by 2022 Microservices will be a viable development paradigm.
And finally,
📝 There's a recommended way to run EF Core Migrations in Azure DevOps and this blog post tells you how. Since I neither run Entity Framework Core nor Azure DevOps, I can't be held responsible if this is considered 'bad intel'.
And that's what happened last week. I'm george Stocker, and I help teams double their productivity through test driven development because TDD helps you focus on what you're doing, and not on the hellscape that is 2020. To find out more about how I can help you and your team, visit www.doubleyourproductivity.io, and I'll see you next week.
Welcome to Last week in .NET; and last week was a holiday week so things will be lighter than usual.
📝 Matthew Jones talks about Expressions, Lambda, and Delegates in simple terms. Lambdas were one of the hardest concepts for me to learn; and 12 years later, I'm glad I did.
I still don't use Func
🔎 Why does JavaScript use 0 as January and 11 to denote December? Good @&#ing question. Good news, is Hillel Wayne dove into old unix systems* to find the answer. If you don't follow Hillel's work, you should.
🎥 David Fowler Deep Dives into the ASP.NET Core architecture. This is an incredible deep (and I mean deep) dive into the reasons why the ASP.NET Core framework behaves the way it does; provides a nice history of where we came from, and reiterates that the MVC framework is a framework for frameworks.
🎁 Do you write nuget packages? If so, you should know about the NuGetPackageExplorer. Also apparently it can help you find incorrect configurations for your packages
📝 Want to use C# 9 for your Xamarin projects? James Montamagno tells you how. For most of us, we're still waiting for .NET 6 MAUI to unify the runtimes.
📝 Dave A Brock shows you how to isolate and test your service dependencies in Blazor. This addresses one of my chief concerns about blazor; and it's good that there are people minding the testing store.
📢 Visual Studio for Mac 8.8 now supports NuGet 5.8 The dirty secret about Visual Studio for Mac is that it's MonoDevelop reskinned; and it has a long way to go to match the power of Visual Studio for Windows; but I'm glad for Microsoft putting effort into a Mac client.
📝 Do you like VB.NET, Winforms, and .NET 5 I'm sorry, I'm sorry, and good! Kidding aside; Winforms is still the way to build a line of business desktop application; and chances are if your business is at least 20 years old you have a lot of internal applications written in at least one of the three. Anyway, this blog post goes into how you can use all three together in .NET 5.
🎁 Versioning your .NET code doesn't have to suck. How many times have you created a custom build script to versioning your releases? Do you use Git? Do you want to stop writing custom code to do this thing that should be available out of the box? Andrew Arnott has your back with NerdBank.GitVersioning.
🕵️♂️ Microsoft wants to make sure your employer knows when you're working and when you're slacking off. Microsoft has added a feature to allow you to calculate "productivity scores" for your 'team members' in Office 365, and there's no word whether or not it compensates for productivity loss caused by Microsoft's own terrible UI choices.
😂 Immo Landwerth (PM on the .NET Team), makes a funny about Microsoft naming: "People still complain about the .NET Core naming. Just keep in mind that it's named by Microsoft so it's a miracle we didn't call it ".NET Framework without AppDomains, Remoting, and most of WCF but for multiple operating systems as long as you promise to run your cloud on Azure". Yea, that about sums it up.
📝 How to implement CSS Isolation in .NET 5's Blazor You now get "CSS Isolation" in blazor. What that really means is that now in Blazor, you can have CSS scoped to a component, just like in Angular (and probably other SPAs). This is a fundamental feature for SPAs, and I'm surprised it wasn't in 1.0. 🤯 Do you have Assembly version conflicts? Trick question: We all do. Good news is that there's an in-depth blog post that will help you resolve these issues and restore your sanity.
📝 Andrew Lock has a preview from his new book about how to apply the MVC design pattern to Razor Pages. It's a bit of shoehorning, but let's go with it.
📝 There's an F# newsletter out with what's new there F# is a great language; but I don't spend a lot of time in it.
📝 Scott Hanselmen shows you how to create a Self-Contained Deployment with Single file Publish and Winforms on .NET 5 This is crucial for Desktop applications and far overdue. I hope this rekindles interest in desktop applications.
There's a breaking bug change with .NET 5 and VB.NET that will cause you problems if you run into it. Be careful if you use VB.NET .? OR GreaterThan, And AndAlso; and my apologies to you if you're listening to this instead of reading it.
😂 There's a comic about Debugging tactics and how often we use them For some reason "The Ballmer Peak" wasn't listed. I consider this an error.
And that's what happened last week in .NET. It was the American Thanksgiving Holiday, and I hope you and yours enjoyed it. I'll see you next week.
📢🐛Visual Studio 16.8 has been released; and it might have uninstalled the .NET Core 3.1 SDKs on your behalf.
🎲Random Street View shows you a place in the world randomly. Hopefully this gives you something fun to do during this holiday week while waiting for the clock to hit 5pm.
📢 Do you like the idea of using C# for scriptiong? dotnet-script provides that. Personally I'm of a mind that they should have modified C# for Scripting a long time ago and not invented Powershell, but we don't all get what we want.
🛑 Github reverses course and re-enables the youtube-dl repository. The RIAA had issued a takedown notice; since the youtube-dl repository allows for command line accesss to Youtube. Initially Github caved (because they thought they had to?) and removed the repository; but after the Electronic Frontier Foundation (EFF) stepped in with a supporting letter as to why the RIAA was mistaken in their claim, they re-enabled access to the repository.
💔 If you have a class with a private default constructor in .NET 5; SignalR can't deseralize it. The author of this blog post suffered so we wouldn't have to.
📝 AppVeyor has a helpful (short) blog post on Version pinning for .NET 5 and the .NET Core SDK.
📢 .NET Framework November 2020 Security and Quality Rollup Updates have been released. This is a release of the "Preview" I mentioned a few weeks ago; although the word 'security' is in the title, there aren't any security updates in this release.
🤦 Jimmy Bogard released a galaxy brain meme on how to see if a string is null in C# It's pretty extensive.
📝 You can see all the differences between the .NET Standard 2.1 and .NET Core 3.1 APIs vs .NET 5 here. It's pretty cool to see all the API differences in one place.
📝 Roadmap for WinUI 3 should be out in the first half of 2021. I've said this before and I'll say this again: I have no idea what WinUI is or how it's different from all the other UI strategies Microsoft has had; but maybe we'll get lucky and it'll finally unify everything.
📢 Along the same vein, WinUI 3 Preview 3 has been released.
📝 Julie Lerman shows you how to deploy containerized .NET 5 applications using AWS's fargate. Also maybe one day AWS will unify its containerization strategy.
🎥 Monsters weekly releases a video on how C# 9's Pattern Matching can make your job as a developer easier.
🎥 There's a new Git Experience in Visual Studio 2019 16.8. If you use the UI; let me know how much better it's gotten.
💡 Exception Filters allow you to pare down what you're catching, and as the old adage goes, if you can't handle it, don't catch it.
💡 Microsoft edge allows you to add 'notes' to a PDF document Keep this up, Edge and I may install you on my PC.
📝 Top 5 features of EF Core 5.0 from 4 Entity Framework Experts. While we're running the numbers, it turns out there were 240 enhancements, 380 bug fixes, and around 200 updates to documentation, and to give you an idea, EF Core 3.1 was released On 3 December 2019; so all those changes were made in the span of 11 months.
📝 The Roslyn team wrote a blog post detailing what's new in the .NET Productivity Realm If you use Visual Studio 2019, it's worth your time to check this out since you're likely to find something to help you out.
📝 Joseph Guadagno shows you how to add .NET 5 support to the Azure App Service I'm not sure why this is a thing we as developers have to do; but here we are.
📢 Microsoft Research released a fuzzing tool for HTTP and REST APIs. A fuzzer is a real life incarnation of the saying "Throwing spagetti at a wall and see what sticks".
📢 TypeScript 4.1 has been released. Here's my periodic reminder to you that TypeScript does not respect SemVer and therefore not pinning to the exact version of TypeScript you're using (major.minor.patch) is a good way to cause random build breakages whenever typescript releases a new version.
💡 Don't use the TFM without the SDK, says .NET team. Basically if your TFM is readable, you're not using the right thing. Include both the TFM and the SDK number so you're pinned to the exact right thing.
📢 Microsoft.Data.SqlClient 2.1 has been released with lots of bug fixes and performance improvements -- and they mean it this time.
📢 Microsoft's WebView 2 now uses Chromium Edge for when you need an integrated web browser in your .NET application The joke here is that we're stuck with Desktop UI toolchains but we'd all rather be using web toolchains.
And lastly,
📝 Explaining Chains, Funcs and Actions in C#. Honestly this all sounds a bit like a kink; but I assure you, it's all SFW.
📢 .NET 5 has been released. As a reminder, .NET Framework 4.8 is the last, and dare I say, legacy version of .NET. .NET 5 is .NET Core 3.1 renamed to .NET, so that going forward -- at least in name, .NET is unified. .NET 6 will actually unify all the different frameworks under the umbrella of .NET, but 5 is the aspirational name change.
As a minor note, ASP.NET Core on .NET 5 is the name for ASP.NET Core. It works, as long as you don't think about it too hard. Also "Core" is an overloaded term now. Enjoy!
🆕 With .NET 5, "Single File Applications" are now Generally Available. A single file application is not what it sounds like because naming is hard. 'File' here means 'output file', not source code file (that will become important in a minute). With .NET 5 you can now deploy a statically linked executable that contains the runtime and everything it needs in a single file. If you've created a Go application, this is that. Also note that it appears they've now changed the name from "Single file application" to "Single file Deployment", which is a good name change in my opinion.
🆕 Also with .NET 5, you can now have a... sigh.. single source code file application with what the .NET team calls "Top Level Statements". Instead of the ceremony with static void main; you can just start diving in to the code and it'll just work.
.NET 5 will not offer replacements for ASP.NET Webforms, WCF, Windows Workflow Foundation. If you want to adopt .NET 5, then you'd need to look at their alternatives; which are ASP.NET Core Blazor, gRPC, and Open-source CoreWF respectively. I feel bad for the half of you that will never be able to adopt .NET 5 because your business is running on Webforms and there is no upgrade path without a rewrite.
🆕 System.Text.Json Aka Microsoft's "Newtonsoft Json replacement" has got some new features. If you're adopting .NET 5, you're going to want to pay attention, as Newtonsoft.Json is no longer being developed. If you are just catching up, they hired JNK about a year ago and quickly put Newtonsoft.Json out to pasture. System.Text.Json is your new replacement.
🆕 C# 9 records are now generally available. A record is a way to effectively have an (almost) immutable DTO without all of the ceremony that DTOs used to take. If you have a property-based object with no behavior (methods), then you should strongly consider a record.
🆕 C# 9 also brings us "enhanced pattern matching" which is a fancy phrase for "one step closer to Perl". That's great for me since I love perl, but can you imagine trying to debug this?
public static bool IsLetterOrSeparator(this char c) => c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ','; 🆕 C# 9 also allows you to omit the declaration of the type when constructing a new object Was typing really that hard? In an ideal world where people wrote maintainable code by default this is a nice change; but here in the real world I can already imagine the stuff we're going to see five years from now with this change.
private List
There are more C# 9 changes; but those are the highlights.
🆕 The hipster's C# has also gotten updates -- F# 5 is now generally available. The blog post says there are several updates, but it appears like "Several" is doing a lot of heavy lifting in that sentence. That I can see there are two updates: String Interpolation and Typed Interpolation. Hooray?
📢 Visual Basic for .NET 5 has been released. There are no new updates (and no more language updates are planned), but VB.NET will support the project types that C# supports. Look at the flowers, VB.
📢 .NET 5 supports Web Assembly through Client-side Blazor, and Blazor has gotten several improvements. This is cool, but the target isn't people who are using JavaScript... It's... Webforms? Microsoft, among others, has tried several times to knock JavaScript off of its throne was the go-to language for Rich Internet Applications, and it hasn't worked yet -- but the Webforms folks need a new approach, and Blazor provides that.
📢 EF Core 5 for .NET 5 has been released I can't make it through the 81+ features they've added since 3.1 without worrying for the health of the EF team, but I'll at least try to hum a few bars: Many to Many relationships, EF Core CLI, ChangeTracker.Clear, Improved Code First Scaffolding, and more. Yes, and more.
📢 .NET Core 3.1.10 has been released. This is a bugfix release; centered mostly on EF Core 3.1 and ASP.NET Core.
📢 Microsoft.Data.Sqlite 5.0 has been released. Some nice goodies here if you use Sqlite; so enjoy.
📝 Ten ways your data project is going to fail to which I reply -- only 10? That's a much more manageable number than usual.
📝 Everything you wanted to know about Nuget Package versioning Look this stuff is not fun to read about; but sooner or later you or someone you love will spend a few days mired in package versioning hell, so bookmark this for that eventuality.
📝 Dave Brock shows you how to update the tag with Blazor. If you adopt blazor you now get to learn new ways of doing those things you already knew how to do in JavaScript. Weeeee.
📰 Mads Torgerson talks about why C# is popular and where it's going from here C# is popular with businesses and its leg up on JavaScript is that it's stable. If the JS folks ever figure that out, C# is in trouble, but we're not ready to have that discussion yet.
📝 .NET IoT Libraries documentation has been published. I like this as it makes low level programming approachable with C#. I wish this had been available for me a few years ago. Instead I was stuck in the hellscape that is embedded C with tens of people in the world using bespoke Q&A sites to figure out what's going wrong.
📢 DevExpress 20.2 has been released Every company I've been a part of was either using DevExpress or trying like hell to get away from it. Which are you?
📢 AWS Supports .NET 5 this is sort of a hand-wavy gesture because no part of me is checking the dozens of Amazon services to see if it works across all of them, but I'll take amazon's word for it.
📢 Powershell 7.1.0 has been released with support for .NET 5. There is a very small crowd that loves powershell, and I'm not about to cross them because they are zealous about their love for Powershell.
Guido Van Rossum, previous BDFL for Python, has joined Microsoft ("For Life" is a vague term). It's also vague what he will be doing, but apparently it will involve the intersection of Python and Microsoft. I'd be excited for a faster Python running on the .NET runtime.
🎥 Migrating 200 applications to .NET Core This .NETConf talk goes into the process of migrating applications to .NET Core; it's a wonderful talk and worth your time.
📝 Mathew McDonald ssks, does .NET 5 deliver on its promises? This is a longer read, but there are lots of good tidbits here, including one that I initially missed: Single file Applications only work on Linux. On MacOS and Windows, there is nothing 'single' about the Single File Application deployment.
📝 Ayende (of NHibernate and RavenDB fame) talks about the reasons why you should always profile set with his own performance regression stories. I love reading Ayende's stuff, I always learn something.
📅 .NET Conf was November 18-20; there's a list of the sesssions here (81 of them!), and there's something for everyone. Here's just a taste:
Blazor:
Entity Framework:
Xamarin:
.NET 5
📢 The .NET Foundation released their "State of the .NET Foundation" during .NET Conf 2020, highlights include 371 sponsored meetups, and 317,000 attendees. The foundation bosts 886 members.
✅ .NET Foundation has released a survey. Take it! (you don't have to be a member of the .NET foundation to take the survey).
And lastly,
🔎 .NET Foundation removed the "Contribution Model" and later reverted that change. No word yet on what's going on. This is an important change If you want to learn more about the .NET Foundation, I've posted a podcast episode on the subject. There are two ways to get your project into the .NET Foundation: 1) You assign the project copyright over to them -- they know own your project, or 2) you sign an agreement to use their contribution model. This change removed option #2, leaving only the option for you to sign over your project's copyright to the .NET foundation, effectively making them the owner. This is, as we say in the biz, "Bad". I'd love to understand the reasoning behind this change so that fear uncertainty and doubt don't take over, but so far no one's talking.
📝 Not about .NET, but relevant to our interests: Pintrest Engineering talks about they decreased their build times by 99% by changing one line in their build process. If you use Git and you use Hosted CI, you're going to want to pay attention to this. Hell, even if you don't use Hosted CI, taking a look at what tricks may speed up your build time is always a good idea. This post also re-inforces that good API naming is a must. If you're a git expert, you probably know this trick, but for the rest of us, this stuff comes down to discoverability, and I'm not exaggerating when I say the git API is... opaque at best.
🎁 You can now tell the HttpRepl where to find your OpenAPI files. If you use HttpRepl (Microsoft's command line version of cURL or Postman) you can now tell it where to find your swagger or other OpenAPI files. This is one of those "I really need to check out HttpRepl" moments. One of the problems with cURL and Postman have been the... well.. generic nature of the tool. Having a tool that is aware of the modern web application stack is helpful. Special thanks to Brady Gaster on Twitter (@bradygaster) for making me aware of this.
🎥 Progress Telerik is hosting a "The State of .NET" Webinar. This is clearly a cash grab for your email address to so that they have you on their sales lists, but regardless, it should be informative. Since I already have your email address, you can always wait for the podcast episode to drop where I cover everything that Microsoft released during .NET Conf.
📅 .NET Conf is November 10th - November 12th. If you're listening to the podcast version of this, that means it's tomorrow. I'll be live tweeting this from @gortok on twitter and I'll have a special wrapup afterwards on the podcast... like I just said above.
📝 Scott Hanselman talks about Path.DirectorySeparatorChar gotchas in .NET Core when moving from Windows to Linux This is an informative blog post on what can happen when you hardcode special characters in your application, and it is something that just about every production .NET Framework Application has hiding in it... somewhere. Stay Frosty.
🐞 Not content to ruin everyone's day with the String.IndexOf linguistic comparison problems in .NET Core we talked about last week, Jimmy Bogard found that a target framework moniker of NET50 and NET5.0 both work in Visual Studio. Both work due to Nuget parsing rules, and it's going to be interesting to see if this causes a problem come .NET 10.
🎥 Progress Telerik also hosted a "Future of Desktop" webinar on .NET last week, and while I missed the announcement before it happened, the video is available to watch. If you write .NET Desktop applications, check it out.
📝 Are Records in C# 9 immutable by default Dave Brock asks this question and deep dives into the answer in his blog post: Short answer is, it depends, and somewhere a software architect is basking in the glow of that answer.
🎁 TypeScript 4.1 RC1 is now available Because TypeScript doesn't support Semver, there are nearly always breaking changes in minor releases, and this one is no different. If you use TypeScript, it's healthy to be aware of these changes before they break your build because your package.json file wasn't pinned to the patch version for TypeScript.
And lastly,
🎁 The EF Core folks aren't sleeping at all if this release changelog is any indication. EF Core 5.0 RC2 is out; and the list of changes is too long to mention here. It's entirely evident that someone said "Look, EF Core is coming on November 10th, so it'd better be ready". If you know an EF Core team member, slide them a gift card and a socially distanced hug.
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.
📅 .NET Conf is November 10th-12th. I'll be livetweeting as much as possible on twitter @gortok, and if somehow your working situation allows you to partake, you should. This is when .NET 5 will be released, and there should be lots of goodies -- especially Blazor.
🐞 Last week I talked about a bug with regards to String.IndexOf Comparisons in .NET 5 and .NET Core 3.1; this turns out to be a major paradigm shift (not an actual 'bug'), and a lot of people (including me) were caught by surprise by it. If you do String.IndexOf comparisons for cross-platform data ingestion (for example, you ingest log files in Windows and log files on nix based systems and potentially have mixed \r\n (windows newlines) with \n (linux new lines)), you're gonna run into this. There are other situations where you'll run into it as well; but this would be the most common in an ascii context. The non-bug bug here is that the behavior is different on Windows vs. Linux* and the behavior itself has changed over the life of .NET Core on Windows; specifically when they decided to stop using NLS and start using ICU on Windows (Linux has always used ICU). There's a github thread with more detail, but bottom line: Be on the lookout for this when you ingest strings from external sources and are using String.IndexOf or String.Contains; and make sure you're using Ordinal Comparisons in these cases. Jimmy Bogard (the person who found this non-bug bug) also released a blog post about it; he breaks down what happens and why. Levi Broderick also opened a new github issue to game-plan the way forward so developers aren't caught by surprise with this change.
🐞 Simon Cropp found an issue on twitter where if you use Process.WaitForExit and the Process.OutputDataReceived events, and running multiple processes, you can get empty or partial output data (from redirected Standard Out (STDOUT)).
This bug is from 2018, but is getting increased attention now that .NET 5 is almost at the finish line. It's not fixed, but here's to being aware of it.
🎁 Have you heard of the Microsoft.dotnet-httprepl package? It's... well.. an HTTP REPL for .NET. It's brought to us by the folks at Microsoft and they had another release last week for 5.0.0-preview.20527.2 . It is in preview, but I'd expect it to be generally available when .NET 5 lands. If you want something like Postman for the command line, give this a try. I can hear the cURL folks screaming now.
🎥 There's an archived video stream that took place on 2 October 2020 that talked about performance improvements in .NET 5. This video clocks in at just under two hours, but if you're a performance wonk, this may be up your alley. Special thanks to Dee Dee Walsh on twitter (@ddskier) for making me aware of this.
🐦 On the subject of Twitter, David Fowler (@davidfowl) released screenshots on how in .NET 5 you can now break down where a network call took the most time in ASP.NET Core. This works for the HttpServer, HttpClient, DNS, and Sockets classes, and is pretty wild.
☠ RIP Flash. There's an update to Windows 10 that permanently removes Adobe Flash. Flash defined rich internet applications at one point in time, and while I'm sad to see it go; it was a relic of yesteryear. Though funny enough nothing has replaced it yet bit for bit. This update is KB4577586, and is 'optional', for now.
📢 The call for speakers for .NET OpenSource days 2020 is open. If you run or maintain an open source project on .NET, you should consider submitting a talk.
📢 .NET Framework October 2020 Cumulative Update Preview Update for Windows 10 version 2004 and Windows Server, version 2004 has been released. This release fixes an issue if you use Kazakh collation in SqlClient, and a regression issue with WPF where two HostVisual elements disconnect at the same time. A crash with WPF has been fixed, this having to do with typing into a textBox. Users tend to type a lot so I'm glad they fixed it.
⚔ In the category of API design ideas, there's a blog post out on a 'new' way to do REST API versioning, and I'll let you read it. I, for one, have been a part of enough holy wars over HTTP and "REST" API Versioning that I'm perfectly happy never getting into another one. Since twitter comments are typically better than blog comments, you can see how everyone else feels about this by checking out the twitter thread
And that's what happened Last Week in .NET. I'm George Stocker, and I'll see you next week.
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:
📢 Github now supports code navigation for C# repositories. If you've ever used OpenGrok, you may have wonder why services like Github never provided navigation between references. Well now they do. This is a phenomenol offering from Github; having the ability to click on a reference for an object and go to that class definition is... long overdue.
📰 Mads Torgerson, designer on the C# team, talks about where C# is going I love C#, and I love that it's touted as one of the most popular programming languages out there. But, let's be real here: It's popular days are still to come. For a long time it was "Windows only" and firmly sucking on the Microsoft Teat. It's still doing that, but now with a veneer of open source, and actual cross-platform compatibility. Let's not kid ourselves: C# was good for businesses, but now it's good for everyone. I just hope it isn't too late.
📝 Did you know you could add AssemblyInfo attributes dynamically using the AssemblyMetadataAttribute (whew!) ... attribute? This is from March 2018 so I'm sure the API has changed a little bit, but a tweet from James Newton-King alerted me to this feature in .NET Core. If you need to modify your AssemblyInfo.cs at build time, this provides a great way of doing that. At least until the Zoomers come and decide that version numbers are passe and we should just deal with CalVer instead. All hail the Zoomers. Also I'm watching way too much TikTok.
🐦 Speaking of TikTok, Microsoft is a little depressed that their acquisition of TikTok didn't pan out so they've been releasing "One Dev Question, One day" videos, and this week's ask "What is C#"? My go to answer of "A really fucking awesome programming language that is tainted by its association with Microsoft" was rejected, quite unfairly I might add.
📢 Microsoft Edge now supports Linux. In a "No really, we've changed" moment, Microsoft now supports Linux on Microsoft Edge. I don't have a snarky thing to say about this, except perhaps to question if their marketing department understands who their customer actually is. Hint: It's not people that use Linux on their desktop. I'd also like to add that the money they put towards the development of Edge on Linux, they could have very well paid off an Open Source author or two. You know, like the guy from Appget?
⛳ In what we will all undoubtedly regret in 5 years, there's a new course out on how to do full stack development with Blazor and WebAssembly. This is of course a terrible idea, but my support goes out to the gentlemen who are profiting off the popularity of Blazor. I don't have a dog in this metaphorical fight, but anyone who has worked with ASP.NET webforms knows how this works out: JavaScript does it easier and better, and you end up maintaining something the community has shifted away from.
☑ Nuget.org has released a survey asking the community for its thoughts on Nuget. This survey closes soon, so take it now (I have no idea when it closes, but given that this is a weekly newsletter, we can safely assume it's not long for this world). Microsoft has long ignored Nuget, so please take the survey so its issuers can keep their jobs.
🤚 There's a github issue open that addresses the "MyMeth" problem in .NET Docs In the .NET Docs, (bless their hearts) they had documentation that referred to a "method", and they called it "MyMeth" instead of "MyMethod". It was of course noted and brought up, and sadly for the Breaking Bad fans among us, is going to be fixed.
📝 Apparently OData is still alive In what I will consider a "Holy Shit" moment, apparently OData 8.0.0 preview has been released. If you haven't already jumped ship to GraphQL and still want a hella-insecure way to query your data, might I recommend OData?
📝 Choose a .NET Game Engine Microsoft is back on a "Tout C# for Game Development" kick and I am here for it. No, I do not forgive them for hurting XNA, but I'm going to give Microsoft their due Kudos: C# is viable to use for game programming, and they're doing their best to make sure everyone knows it. Special thanks to Abdullah Hamed for the tweet that made me aware of this series.
🌎 The .NET team has released a site that shows their roadmap, pulled directly from their Github issues This is a good look into the Microsoft machine surrounding .NET, and well worth your time if you're interested in the future of .NET.
📝 Attribute-Based Access Control With Blazor WebAssembly and IdentityServer 4 In what I can only characterize as a bad idea icecream topped with terrible idea sprinkles, there's a series out on Codemaze on how to develop ABAC with Blazor WebAssembly. Personally, I'd be delighted to know if this fits a usecase you have and whether you're going to implement it. Also, please send me a 'before' email so after your project's launched we can commiserate over the idea and lost youth.
📝 Rick Strahl takes you into the process of creating .NET Custom project types with the .NET CLI Project Templates (whew!) Long story short, if you create microservices or otherwise want to enforce defaults and standards when creating a new project, this blog post is for you.
🐛 Jimmy Bogard found a bug in the .NET Core runtime, where string indexOf comparison fails or breaks depending on which runtime you use. As it turns out, Microsoft switched to ICU instead of using NLS (what they were using previously), and this change has the side-effect of breaking string comparison code that doesn't specify a culture or StringComparison.Ordinal. Microsoft views this as the cost of doing business when they switched to ICU instead of NLS, which makes it not a bug, just a feature we didn't connect the dots on.
🔉 Layla Porter, newly elected .NET Foundation Board Member, talks on .NET Rocks about... The .NET Foundation, specifically, it's goals and how it needs to evolve.
📝 Jon Skeet takes us through the .NET Functions Framework If you're trying to develop .NET applications that work on 'serverless' architecture, this framework and blog post are for you. It's not for everyone and all usecases, but for some usecases, serverless functions are just what we need.
And that's what happened Last Week in .NET. I'm George Stocker, and I help .NET teams build better systems faster, without the crankiness that inevitably comes from just slapping code together. To learn more, visit [www.doubleyourproductivity.io]](https://www.doubleyourproductivity.io) and I'll see you next week.
This is Last Week in .NET for the week that ended 17 October 2020. Lots of releases and CVE fixes last week, so let's get to it.
📢 .NET 5 RC2 has been released. I mentioned last week that RC 1 was probably the last RC until GA, and I was wrong. I won't pundit on that any more, I have, in fact, learned my lesson. ClickOnce makes an appearance, and there are several smaller updates in this release.
📢 .NET Core 3.1.9 has been released. This release includes bugfixes across the runtime, framework, and ASP.NET Core as well as support for Fedora 33 and Ubuntu 20.10
📢 .NET Core 2.1.23 has been released Much like its hotter younger brother 3.1.9, 2.1.23 has bugfixes and updates for the runtime as well as the same aforementioned support for new releases of Fedora and Ubuntu.
📢 WinRT 0.8 has been released This has to do with using C# with WinRT, and at this point with the number of fluctuations to the Windows UI story, I'm not sure what the hell this does or who's it for.
🚨 https://www.bleepingcomputer.com/news/security/microsoft-october-2020-patch-tuesday-fixes-87-security-bugs/ That's a lot. So much so that the list of CVEs in this Patch Tuesday is itself too long to talk about.
The patches and CVE fixes cover the following software:
🚨 Microsoft also patched CVE-2020-16898, which allowed someone to use a malformed IPV6 ICMP Packet to... take over a system?!?!?!
✉️ .NET Foundation September/October 2020 update https://dotnetfoundation.org/blog/2020/10/14/blog/posts/net-foundation-september-october-2020-update
🎥 Microsoft releases .NET Live TV! (Not to be confused with Microsoft's "Live" product). The goal is to have "Netflix for .NET" There's a lot of production to put into a 'live' TV channel, and if anyone can do it, Microsoft can. I just wish they'd use that money to pay the OSS maintainers whose projects they copy.
🎥 Speaking of Microsoft Live TV. Channel 9 released another video in a series of Progressive Web Applications with Blazor 🐦 Part of the release for .NET 5 RC2 is the ability to use ClickOnce deployment with .NET 5. As the tweet says, "This is huge" and I'm only hoping it works out better this time. In the teams I've been a part of, there was always a reason why ClickOnce wouldn't work; but maybe that's all been fixed? 🎥 How does .NET 5 change my development? Immo Landwerth of the .NET team takes the time to answer that question in a whole minute and 25 seconds. Just a little more shaving and you can get it into a TikTok. Brb, starting a tiktok for .NET.
🎥 Immo Landwerth takes you through how .NET 5's compatibility analyzer works when trying to work with cross platform code. If you get "PlatformNotSupported" Exceptions, this video is for you.
🚨: Microsoft republished a fix for CVE-2020-1147 because it was breaking SQL CLR objects. They didn't find it sooner because there are about five people in the known universe that use SQL CLR Objects. Thoughts and Prayers.
💰: Octopus Deploy is now a corporate sponsor for the .NET Foundation. This is a big change from 8 months ago when Octopus Deploy cut ties with Microsoft, and both blog posts are by the same person, Paul Stovall, Founder of Octopus Deploy.
In the post, Paul details that they want to help change the trajectory of .NET Open Source by funding it, and for that I commend them. It seems like they want to try to 'change things from the inside', and maybe they'll be able to. Regardless, thank you, Paul, and thank you Octopus Deploy.
🐦 Kevin Jones (aka @vcsjones on Twitter) showed an open issue in .NET where misusing stackalloc for a dynamically bounded array could cause a Stack Overflow in .NET. This is fixed in the "master" branch for the .NET Repo (can we get a branch name change, Microsoft), and maybe we'll see a .NET 5 RC3 or maybe this will just be in the GA version.
📝 Karen Payne released a blog post on how to work with Delegates and Events in VB.NET. It's wonderful to see people blog about VB.NET, and we need more of that. It's a wonderful language in its own right. Thanks, Karen.
📅 .NET Conf (yes, the correctly spelled one) is November 10th-12th) Are you 'going'? If not, I'll be livetweeting it @gortok on twitter. You know where the mute button is.
It was a pretty busy week for the world of .NET. I'm George Stocker, and I help teams write .NET systems that are easy to maintain and improve. If you're interested in learning more, check out www.doubleyourproductivity.io.
This is Last Week in .NET for the week ending 10 October 2020.
No releases this week, but lots of goodies showing off .NET 5.
Starting out with some inside baseball, I'm working to improve the layout of the newsletter, and if there's someone's design you think I should shamelessly copy, let me know on twitter 🐦: @gortok.
🎥 Rich Lander and Jared Parsons of Microsoft talk C# 9 - C# 9 gives us records (light-weight approaches to DTOs and property-based data structures), top-level statements (the ability to remove all the ceremony from a single file C# script, like "static void main"), and init only properties (ability to init properties with a value without super long constructors).
In other words: C# will let you write less plumbing code. Watching Jared Parsons writing code during this video reminds me of two things: 1) Visual Studio should enable line numbers by default, 2) You can tell when someone writes for the Roslyn compiler for a living because of how they write C# code, and I'll never get to that level.
🎥 Stephen Toub talks through .NET 5 performance Improvements Things like:
and more!
📰 Microsoft will let employees work from home permanently .
156,439 are crying tears of both joy and sorrow. Joy at working from home, Sorrow at having to use Microsoft Teams full time. Hey, maybe this will be the push needed for Microsoft to improve Teams?
📝 Jon Hilton continues his series on Blazor and pre-rendering. If those words mean something to you, check out their blog post, otherwise drive on by.
📝 What's coming in Xamarin Forms? David takes us through incoming changes to Xamarin Forms with Radio button changes, shapes and brushes, and more.
🐞 Multiple Active Result Sets on the SqlClient for Linux is slower than on Windows If you use a linux container or .NET Core runtime, you're going to want to pay attention to this bug if you have MARS enabled.
📝 Debug Source Generators in C# 9 and Visual Studio Code Generation has a storied past. One of the C# 9 features is the ability to implement Source Generators in a 'standard' way. This blog post takes that one step further and tells you how to debug these new Source Generators. It does not, however, tell you what to do when the source generator takes your job.
📝 Diving into System.Threading.Channels.UnboundedChannel (Part 2) Can we not? I mean, if you find yourself needing this namespace, you should already either really love what you do or be suffering from Stockholm Syndrome. Either way, Steve Gordon has your back with this blog post. I'm still getting over my time with .NET Remoting, if I'm being transparent.
📅 NDC Sydney tickets close out in 6 hours you should buy them now if you want to 'go' (virtually). Or you can wait two weeks for them to show up on Youtube.
⛳ Steve Smith (not the American Football player) helps you design a rules engine in C# in this Pluralsight course. Ok, Rules Engines are on those list of things that are a terrible idea but someone has a hankering for them so you're gonna do it, and then you're going to maintain it and find out why it's a bad idea (hint: It's 5% code, 95% documentation, usecases, and examples). But if that doesn't bother you, then by all means, create a rules engine.
📅 .NET Conf (yes, the correctly spelled one) is November 10th-12th) Are you 'going'? If not, I'll be livetweeting it @gortok on twitter. Mute me now.
🐦 In a blast from the past, Immo Landwerth shows his powerpoint presentation from the days of convincing executives to open source .NET The Powerpoint (can be found here, on onedrive. With the Here's a [literal] Powerpoint on my OneDrive action going on, I can't shake this scene out of my head.
It makes me wonder if on Microsoft performance reviews whether they judge employees on how many Microsoft products they use: Surface book? Check OneDrive? Check Windows? Check Zune? Check Word? Check Powerpoint? Check Teams? Check Azure? No? They USE AMAZON WEB SERVICES?
PROMOTION DENIED.
📝 Do you want to deploy ASP.NET Core to Kubernetes? Please say no. But if you said yes, Andrew Lock has a blog post for you. He of course can't say "Don't use Kubernetes" since his blog post is based on you using Kubernetes, but I can. Don't use Kubernetes unless you want your next job to be managing Kubernetes.
📝 Microsoft is trying to reinvigorate the .NET Game development Community WE HAVEN'T FORGOTTEN WHAT YOU DID TO XNA, MICROSOFT.
Ok, sorry for shouting, I'm still a little sore about XNA.
📰 Labor Department is probing whether Microsoft trying to raise its black employee population is... racial discrimination As if this hellscape we call 2020 couldn't get any worse, we now have to deal with this. I have no kind words to say about the Labor department's move here, so I'll just say GFSF.
📅 The .NET Foundation "All Hands" is today at 11:30am EDT I'll hum the highlights if you miss it. On twitter, of course.
📝 There's got to be an easier way to build query parameters in C# Nothing against this blog post, but it being 2020, I would imagine adding Query Parameters should be as dead simple as possible by now. The API still feels... forced.
🐦 Want to see attributes on local functions? Me neither, but here you go Something something get off my lawn. Soon code will be one giant file with one giant method and 10 billion little local methods and we'll all chant "This is the way".
All in all, that's everything I found last week in .NET. No releases by Microsoft, I imagine they're pretty quiet trying to hunker down for the release of .NET 5. We shouldn't see any more Release Candidates unless something major happens.
This is Last Week in .NET for the week ending 3 October 2020. You know, Last week. There were no releases this week, but a crap-ton of goodies abound.
Blazor
🔗Ed Charbeneau talks about Blazor vs. MVC on his twitch stream One bad thing about twitch is the videos disappear after 14 days so you have another 4 days to watch this one.
🔗James Newton-King wrote a Blazor WebAssembly app that shows performance benefits of gRPC-Web over JSON. Tl;dr 70% less bandwidth, 10x faster deserialization; all without gzip.
🔗David Ramel focuses on how much faster Blazor is getting Microsoft already fooled me once with Silverlight, but I'm hoping this time will be different so I'll dump all of my attention onto blazor and cry when they inevitably abandon it.
🔗How to deploy ASP.NET Blazor WEbAssembly to Azure Static Web Apps (translation: using blazor on a static site hosted on Azure)
ASP.NET Core
🔗David Fowler shows the original design principles surrounding ASP.NET Core IT's frightening to think that at this point the idea of ASP.NET Core is 5 years old.
🔗Michael Shpilt talks about ASP.NET Middleware and stuff you should probably know but have avoided. If you're like me you're about 3 months away from completely abusing middleware because you need to hook into the request pipeline for a dangerous reason.
🔗TheDevTalkShow on Twitch talked with Shahed Chowduri about "ASP.NET Core from A to Z" on their twitch show.
🔗That .NET Foundation meetup about Microservices and Containerization happened and I haven't watched this yet and the reason you know I haven't is that I would have started this sentence with a curseword. I'm sure it's a good presentation but I have ethical issues with Microservices. Like developers should be bound by ethics not to use Microservices.
.NET 5
🔗Have you analyzed your .NET Framework project for .NET 5 portability? You may want to do that, and they may want to update that doc to reflect that it's now called ".NET 5" and "ASP.NET Core on .NET 5" instead of ".NET Core".
🔗Anthony Giretti Deep Dives into the System.NET.HTTP.JSON Namespace. If you're going to serialize JSON in .NET 5 (and you will, t least until the cool kids move to gRPC), you'll want to pay attention to this, especially since JSON.NET is 'mature'.
🔗Do you want to see all the new Visual Studio templates? Check that box. Also, go vote and check that box.
🔗netstandard2.0 is the most used Target Framework Moniker by far Immo Landwerth showed the stats of most used TFMs (Do you know how to Read TFMs?) and the most used TFM is netstandard2.0 followed by net45. More deeply, this means that while library authors are hoping to target both Framework 4.7+ and .NET Core 2+, they're not diving into the netcoreapp only features yet.
Broken Stuff You should probably Patch
🔗Microsoft Exchange Servers Still open to Actively Exploited Flaw. If you're using exchange I'm sorry and I recognize you already have problems in your life, but here's another one: An flaw has exploints in the wild. I can't help but notice that the exploit was patched on 11 February 2020, about a month before the US went into total lockdown mode. I wouldn't be surprised if that hurt adoption of this patch; but regardless.
Conferences
🔗dotnet Conf is 21 October 2020 and you can register here
this is not to be confused with
🔗.NET Conf is November 10th-12th, 2020 Which is totally different than dotnetconf, Also if you're listening to the podcast version for this I'm sorry. I will be live tweeting this @gortok on twitter. Mute now, just in case.
People
🔗The .NET team released the results of the survey that asked people about their experiences with the .NET repositories on Github. If you like data and skewed numbers due to sample size, you'll love this survey.
🔗PM Director of the .NET Team, Scott Hunter sits down on youtube to talk about his job. Clearly enforcing the standard that it's spelled .NET and not dotnet is not in the job description.
🔗Is it Too-pules or Ta-pules? Maira and Kendra from Channel 9 released a video on Tuples in C#
Speaking of Tuples, I scrupiously commissioned a twitter poll about how to pronounce it. It has also spawned a link to this english.stackexchange question on the subject.
Miscellanous stuff that's interesting
🔗Brian Armstrong, CEO of Coinbase, released a reprehensible blog post about Coinbase's mission and got thoroughly roasted for it Good. If you're going to put profits over people in 2020 you shouldn't expect much else.
And that's what happend last week in the world of .NET. No releases, but overall still a busy week.
Microsoft Ignite was the 22nd - 24th of September and the news is here
Lots of Azure, and lots of releases that large enterprises and governments would love.
Top Ten APIs in .NET 5.0
Good info here, and lots you may not have known about.
How to build a Database application in Blazor Part 3
Everything old is new again. Angular is the new Webforms, Blazor is the new Angular. Here we are, partying like it's 2009.
Visual Studio for Mac now supports iOS 14 and XCode 12
The magic phrase is redacted
Apparently if you make that text in the above tweet your password you can find out if anyone stores your password in plain text.
Microsoft talks about what's new with the Windows SubSystem for Linux in September 2020.
If we ever get to the year of Linux on the Desktop it will be through WSL.
Ginny Caughey talks about Project Reunion
I haven't quite figured out what they want it to do but as long as it's "Simplify the sheer number of ways you can develop for Windows", I'm in.
Microsoft releases Microsoft.Data.Sqlite 5.0 RC1 for Entity Framework Core.
Jetbrains Resharper 2020.3 EAP is out, with support for C# 9 features like top-level statements.
The Desktop community Standup happened on September 24th, and this hour long standup dives into winforms and OSS.
In case it isn't apparent, Microsoft uses the word 'standup' loosely.
Microsoft's Channel 9 goes into Microsoft Identity and how to get started with it in this 15 minute video.
Fifteen minutes. Around the time a standup should take. We see you, Channel 9.
Matthew Leibowitz writes a deep dive into System.CommandLine.
If you want to write a command line app in .NET, check out System.CommandLine. Finally there's a way to deal with parsing command line arguments that doesn't involve reinventing the wheel or using a go-clone library.
Nat Friedman, CEO of Github, unfollows everyone in an attempt to hear less about Github putting children in cages.
On September 24th, Nat tweeted "Github Stories 🤔" and his replies filled up with references to ICE putting kids in cages.
If you remember, Github has a contract with ICE, and come hell, highwater, or angry public sentiment, is going to continue to honor that contract. Maybe Nat doesn't want hearing about that in his feed any more and so he unfollowed everyone.
Some days twitter seems like high school, if the cliques in high school resulted in life and death decisions.
A paper entitled "How to build good software" dives through the common problems we run into developing software and how to fix them.
You can be forgiven for wanting to print this out and send it to every manager you ever had.
Hillel Wayne talks about the eternal debate: Is software craftsmanship?
(Spoiler: Maybe?)
He goes into the math problem of two people digging a hole and I don't think there's anything more closely aligned with programming than randomly digging holes.
Linux won't get any love in MAUI
MAUI is 'multi-platform', not 'cross-platform'. While this may seem like tomato and tomato, there are a few people out there who are mad that MAUI won't support... the linux desktop. Presumably the same number of people liked the ending of LOST.
If you are looking for 'true' cross-platform Desktop UI frameworks; give AvaloniaUI a try or give in and use electron like everyone else.
Microservices and Containerization Meetup tomorrow
The .NET Foundation is hosting the aforementioned meetup about Microservices and containerization tomorrow (September 29th) at 4pm UTC.
Remember: If someone touts microservices without diving into discussing communication among containers (past HTTP Request/Response), event-driven architecture, under what conditions your org structure would benefit from microservices, or whether or not your workload needs that sort of separation, run quickly.
.NET 5 RC1 is now available
It's great to see .NET 5 so close to release. The blog post announcing, however, has a whiplash moment I just need to note:
and the first of two RCs before the official release in November. RC1 is a “go live” release; you are supported using it in production. At this point, we’re looking for reports of any remaining critical bugs that should be fixed before the final release.So what I'm reading is that the target demographic for .NET 5 RC1 is people who want to use it in production and aren't afraid to encounter critical bugs.
Oh.
Big hits in .NET 5 include C# 9 Records, System.Text.Json (replacement for Newtonsoft.Json)
'Single File Applications' are making it into .NET 5
Ok, terminology pop quiz.
Does "Single File application" mean a single source control file or a single output file?
So to correct the lede, it's a "Self Contained Application", where a single output file is published that contains the runtime, references, and the application code.
There is also a push for "Single File" applications where you can literally write your entire program in one source control file without the ceremony you normally need. the .NET team calls this a "Top Level Statement".
Naming is hard and we as an industry are especially bad at it.
.NET standard is going the way of the dodo bird.
Long story short, target .NET-5.0 if you want cross-platform, and target .NET-5.0-windows if you want Windows specific features.
EFCore PowerTools have been updated for .NET 5 RC 1
https://github.com/ErikEJ/EFCorePowerTools/wiki/Release-notes#24212-september-17-2020
Jetbrains is hosting a webinar on Service Creation via .NET Core Templates
It's on Wednesday, October 14, 2020, at 10:00am EDT.
If you're interested in learning more about .NET API Templates, give this webinar a shot. I'm not really sure what they mean by "service" here, whether it's "Micro services" or some other usage, but that's really an us problem.
Let's retire the name service. That and eliminating timezones is my 2024 campaign platform.
Jerome Hardaway and Michael Brown talk about how hard it is to get developers to embrace .NET
Michael's thread is here
The elephant in this particular room is that the .NET community as a whole isn't seen as welcoming or as a place where new developers should invest their time.
Jerome runs vetswhocode.io and put .NET up for a vote as the next platform to teach, and it was struck down by a vote of 121-1.
Your programming framework is only as relevant as it has new blood. Having new developers unceremoniously dumping .NET says a lot about where people outside the community think we stand.
We can go two ways from here: We can listen, ask questions on how we can improve, and do so; or we can stick our heads in the sand and in 10 years hang out at the "Dumped platforms convention" with Cold Fusion and ActionScript.
.NET Core has re-invigorated the .NET community in a way I wouldn't have thought possible, but unless we act as the ambassadors .NET needs to thrive, we'll lose that momentum.
JetBrains Rider 2020.3 will include the Immediate Window
I'm surprised Rider has made it this long without the Immediate Window. I'm not sure if this is an argument for or against an MVP but it does emphasize a bonus of switching to CalVer: No one knows how old your software is. (For the record, JetBrains rider has been out for 3 years).
.NET Foundation will host an All Hands meeting on October 13-14th, 2020
The event will take place: Tuesday, October 13th, at 11:30-12:30 Eastern Daylight Time, and it's going to take place via Microsoft Teams. Microsoft is placing a lot of trust on Microsoft Teams, and we'll see how it goes.
Rick Strahl talks about the perils of misuing await in ASP.NET Core Middleware
This post is a good read if you are new to async in ASP.NET Core Middleware.
And that's it for what happened Last Week in .NET. I'm George Stocker, and I help .NET teams deliver better software faster. If your team feels like it's struggling against the wave of feature requests and roadmap changes, reach out at www.doubleyourproductivity.io.
.NET Core 3.1.8 and .NET Core 2.1.22 have been released
This release includes a fix for a rather nasty CVE and... Not much else. CVE-2020-1045 allows an attacker to craft a cookie that can bypass ASP.NET Core security. Whaaaaaaatt. Patch your systems now.
CVE-2020-1472 has been reproduced
But speaking of CVEs, looks like a security firm reproduced CVE-2020-1472.
CVE-2020-1472 allows an attacker to bypass domain authentication with a specially crafted request that allows them to escalate their privileges. This is, of course, only an issue if you're using Microsoft server. You're not, right? You've already moved to linux? No? Oh.
Blazor now has a graphql client
In the "Leave some innovation for the rest of us", Blazor now has a GraphQL Client. Though, if you're using blazor and graphql you've blown your innovation token quota for a few years. Be safe out there.
https://oceanware.wordpress.com/2020/09/08/blazor-wasm-graphql-client/
.NET Conf Call for Content closes today at 2:59pm EDT (-4 UTC).
Which means... You've got a few hours to put your proposal together. Not sure how I missed the CFP, but I'll do better next time.
The virtual conference itself takes place November 10th and 11th, 2020. Expected releases include .NET 5.
EF Core for .NET 5 is done
That's what's what they say (these aren't my words, I'm just the messenger).
Here's the list of things they finished just in Preview 8:
And that's just in Preview8. Great Job, EF Team!
I'm happy that EF Core will be ready for .NET 5; but my quiet voice says I can't wait for a less bloated ORM to take over.
Jetbrains dotUltimate / Resharper / Rider / et. al 2020.2 has been released
This fixes a really annoying bug I was facing in .NET 5 Preview 8 where my tests were listed as inconclusive and wouldn't run when I tried to debug them. There's also a lot more here, but squeaky wheel and all that.
NoVA (virtual) code camp is September 26th
If you have nothing to do that day (it's a saturday) and you want to learn some neat stuff, sign up novacodecamp.org.
Want to contribute to .NET but don't know where to start?
The .NET team has got you covered by listing what issues are up for grabs and their relative difficulty. Thanks to Tanner Gooding for the tweet.
Scott Hanselman compiled a .NET Team twitter list
Speaking of twitter, Scott Hanselman put together a list of all the members of the .NET team on twitter. If the intersection of twitter and .NET is your jam, two things:
And that's it for what happened last week in .NET. Overall a pretty light week. I’m George Stocker, and when I’m not following .NET, I’m helping teams double their productivity through adopting TDD practices that don’t suck.
I'll see you next week.
.NET 5 preview 8 has been released:
https://github.com/dotnet/core/releases/tag/v5.0.0-preview.8
If you want to use .NET 5 Preview 8 with Visual Studio, make sure you have the Visual Studio 2019 16.8 preview 2 release installed].
Speaking of Visual Studio 2019 16.8 Preview 2, it now supports editor config fileheaders and namespace settings. So if your company has a 1980s centric approach to file-headers, you can now offload that work to the editorconfig.
ASP.NET Core 5 Preview 8 has been released.
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-preview-8/
Lots of Blazor updates and improvements, as well as ASP.NET Core now supports Model binding and validation for C# 9 Record types.
Entity Framework Core 5 Preview 8 has been released:
They fixed a metric ton of bugs, and there are a lot of small features that may interest you.
F# 5 Preview 8 is out
https://devblogs.microsoft.com/dotnet/f-5-update-for-august/
F# 5 now includes String Interpolation; a la what C# has had for a few releases now. F# 5 now also includes complete nameof implementation support, and more.
Is it .NET 5? Is it ASP.NET Core 5? Is it ASP.NET 5?
Jon Galloway gives us the answer:
ASP.NET Core name stays - you'll either see "ASPNET Core running on .NET 5" (blog post link) or "ASPNET Core 5".
Npgsql update for EFCore 5 Preview 8 has been released:
https://github.com/npgsql/efcore.pg/releases/tag/v5.0.0-preview8
I'm really glad people are pinning to the version of .NET Core they support. It's hard to keep up otherwise.
Is Blazor the future of development?
https://ilikekillnerds.com/2020/08/is-blazor-the-future-of-development/
Short answer: No, it's not going to replace JavaScript, but it will give the "We're a Microsoft shop, we use what Microsoft supports" crowd an adoption path for their aging Webforms implementations.
.NET 5 RC1 is coming soon
Ok so technically this isn't "released" yet but David Fowler of the .NET team shared this photo in a tweet that shows two interesting tidbits, .NET 5 preview 7 is the last preview (AKA 'alpha') release and .NET 5 (Version 5.0.100) RC1 is coming soon. The other interesting tidbit is the 'master' branch (poor naming choice) is .NET 6.0.x, and at least as of this moment .NET 6 is slated for November 2021.
Microsoft Ignite is September 22-24th, 2020, and is Free.
Sign up here: https://www.microsoft.com/en-us/ignite
DevIntersection is hosting a 2-day series of workshops on .NET:
https://virtual.devintersection.com/#!/ is hosting a virtual 2-day series of workshop for the corporate friendly price of $199 on October 26th and October 27th 2020. Speakers include some pretty big names in the .NET space, including the Gu (sigh. Fine, "Scott Guthrie"), Kimberly Tripp, , Carl Franklin, Michelle Bustamente, and Scott Hunter.
Each workshop is $199 and for that you also get access to the free keynotes. I signed up for the keynotes, and understand that if you do, you can be entered to win an XBox or a free workshop
Microsoft's Ignite conference is September 22-24, 2020, and is free. The subtitle of the conference is "Empowering the technical community to help customers innovate and rebuild in a changing world" which roughly translates to "Build new &$@#, get paid". Registration opens September 3rd, 2020.
Looks like CSharpForMarkup is staying in Xamarin Forms 5
do you ever see those fight videos on youtube that start just a few seconds too late so you don't know what caused it and you're left reading the comments to figure out what the hell is going on? This is like that, but on Github.
Anyway, turns out after the team was going to take out CSharpFormarkup support out of Xamarin Forms 5 and move it to .NET 6 (MAUI), the loud voices on Github convinced them to keep it in.
C# for Markup allows a programmer to write C# markup instead of XAML for Xamarin forms. Looks neat. Incidentally, it was the author of C#ForMarkup that let me know about this on twitter.
EFCore updates -- Many to Many is in the daily builds
You know an ORM is nascent when Many-to-Many support is just landing. I remember when EFCore was billed as a lightweight alternative to EF6. There's no doubt that Entity Framework 6 was plagued by three different ways to do the same thing with teams ending up mixing and matching and driving each other crazy. The hope is the EFCore team keeps their eye on the ball and keeps a unified focus on what the API should look like for EFCore. Given that Microsoft's bread is buttered by large enterprises that hate change, I'm not holding my breath, however.
Emotions we have but don't can't explain
This is still messing me up.
Scott Hanselman releases a video explaining the .NET Ecosystem
If you're new to .NET (or even if you aren't) this video by Scott Hanselman explains the .NET ecosystem in all its 20 year sprawling majesty in a youtube video.
Tempted to make a TikTok. Let's GO!*.
The .NET Team releases a deep dive into how .NET is built and released
This is a follow-up to the public twitter statement that .NET daily builds aren't available when there are undisclosed security fixes; the .NET went through their entire build process. On a personal note, I made it through after a two-drink minimum. It also brings to sharp relief that .NET will always have Microsoft as its benevolent dictator for life.
Maoni Stephens releases a 3 part series on the .NET GC on Youtube
Maoni Stephens shares how the GC works in three parts. I love these sorts of videos. I had to learn about the GC from Jeffrey Richter's "CLR via C#" book (back when there was only 1 edition), and now we can learn this stuff on Youtube. There's a little bit of jealousy, but mostly I'm grateful for people who take the time to share this stuff.
Mads Torgerson addresses the viral "stuff I wish C# had but doesn't" tweet
Mads went to twitter to address the tweet that made it on the Orange Site that detailed some changes the author wishes C# had. Mads wrote:
This is a great list of useful features missing from C#. They aren't fundamental flaws and could all be addressed; many are already on the radar for future versions. E.g. primary constructors are planned for C# 10.0, and could then be a building block for object expressions.I'm not really one to ask about all these new features because I'd be perfectly happy with C# 5. Some of the newer features are rather nice; but I don't think fundamental tinkering with the syntax of a language is a great way to maintain language cohesiveness. Call me old fashioned.
Rick Brewster opines on what neat things you could do if we could get rid of the .Count property for certain collections:
https://threadreaderapp.com/thread/1295936199345844224.html
Did you know the ASP.NET community team holds a weekly Standup?
I'm not sure it's actually a standup but naming is hard. Anyway, you can check it weekly, here.
Proposal to allow Wildcard using statements
If you've used Python or TypeScript, you've seen this sort of approach when importing modules from a third-party library. Dave mentions it as a way to handle the fact that some types of utility methods (like extension methods) should really be at the top level, even though organizationally, Visual Studio loves it when your namespaces reflect your folder structure, and penalizes you with red squigglies when you don't. It's an interesting proposal, and I'm going to keep an eye on it.
System.Text.Json getting more love for .NET 5.
After Microsoft bought out Newtonsoft and its author, it immediately set to replacing NewtonSoft.Json with it's own System.Text.Json (incidentally, I'm not clear as to whether James Newton-King worked on System.Text.Json), and for .NET 5 it appears System.Text.Json is getting some much needed additions. It even has its own Kanban board.
David Fowler of the .NET team shows off more Top-level statements
I'm torn on top-level statements. One of my favorite parts of Perl was the ease at which I could create a one-liner or a single file program, and from a nostalgia perspective I'm happy C# is getting that, but on the other hand, it's this "there's ten billion ways to do the same thing" that ends up plaguing all programming language environments and making it hard for new people to figure out what the hell is going on. Yea, "You're only new once", but it's an eternal september out here, folks.
Anyway, David Fowler shows off what you can do with Top-level statements in this tweet.
What's coming with Blazor in .NET 5?
The .NET Team showed off blazor improvements during their .NET community standup, I missed this when it happened, but I absolutely refuse to rename this the "Last two weeks in .NET" newsletter.
Some of the touted improvements:
Blog post on C# 9 records has been released
C# 9 makes it easier to declare immutable data structures with the advent of Records.
Todo: Fix vulnerability
https://krebsonsecurity.com/2020/08/microsoft-put-off-fixing-zero-day-for-2-years/
Microsoft patched CVE-2020-1464 on August 11 during their normal Patch Tuesday release. This CVE dealt with how Windows validates digital signatures for programs. Developers among us call this 'code signing', and it allows for a company to have their software blessed as being 'from them' and just as importantly verify that nobody mucked with the executable itself. One of the more frightening parts of the internet is that before code signing (and even after it), we just blindly trust software we downlaod, and that was fine when it didn't underpin our way of life, but this being 2020, software is everywhere, used for everything.
This CVE exploited that process to effectively spoof the origin of a piece of software, or more nefariously, be able to modify an executable without triggering a warning upon install.
All of this is normal so far, as far as CVEs go. They happen, and they get patched. What makes this remarkable is that Microsoft waited two years to patch this CVE, even though there was evidence it was being exploited in the wild and that researchers told Microsoft of this fact repeatedly.
In case that isn't enough to raise the hairs on the back of your neck, one of the people who knew it was being exploited, Bernardo Quintero, released a blog post detailing how it was being exploited -- after all, his company, VirusTotal, detects malware as a service. As Brian Krebs quotes in his post:
“In short, an attacker can append a malicious JAR to a MSI file signed by a trusted software developer (like Microsoft Corporation, Google Inc. or any other well-known developer), and the resulting file can be renamed with the .jar extension and will have a valid signature according Microsoft Windows,” Quintero wrote. [...] “Microsoft has decided that it will not be fixing this issue in the current versions of Windows and agreed we are able to blog about this case and our findings publicly,” his blog post concluded.The exploit is called Glueball (Developers, take note, security researchers are better at naming than we are).
But the over all part of this that burns my backside is that Microsoft knew and publicly did nothing about the exploit for two years. In fact, when asked the very question of "Why the hell didn't you do something for two years?" The representative from Microsoft answered (with temerity, I'm sure) "Windows user who have applied the latest security updates are protected from this attack".
“A security update was released in August,” Microsoft said in a written statement sent to KrebsOnSecurity. “Customers who apply the update, or have automatic updates enabled, will be protected. We continue to encourage customers to turn on automatic updates to help ensure they are protected.”I'm opining here, but I can't believe Microsoft would let such a risky exploit go for two years unless they were forced to. I wouldn't be surprised if a nation-state actor was using that exploit and politely asked Microsoft not to patch it.
Yes, that's an opinion, but that is slightly more plausible than Microsoft saying "No big deal, let's wait two years to fix an already exploited security Vulnerability.
We've seen Microsoft jump into action immediately on Zero-days; but this behavior from Mirosoft is just too weird to ignore.
C# 9 Natively Sized Integers
Anthony Giretti blogs about forthcoming support for Natively Sized Integers in C# 9.
For the subset of programmers that code that needs to worry about such a thing (if you have no idea what this is, then you're not one of them), then this is good news, and one less reason to have to dive into Interop.
Raymond Chen talks about why you can't just hack off the GUID and use part of it for uniqueness
Don't lie, you've thought about doing this before.
The .NET team is busy adding nullable annotations to the BCL
Ok, this took some reading and I'm still not sure I fully undestand what's going on, but my simple response is starting in C# 8.0, you have the ability to tell the compiler that a certain reference is 'nullable', that is that it can be assigned null; through the ? operator: string? myVar = null;. This tells other programmers that yes, a string can have a null value; (Yes, No, FileNotFound, anyone?); and helps to clearly express the situations where null is a good idea, and the situations where it's bad. Billion dollar mistake bad.
To lighten our loads, the .NET team has taken to adding these nullable annotations to the .NET BCL. Presumably this will help static analysis tools not be such unsympathizing assholes all the time. Presumably.
My favorite sentence from a "That's interesting" perspective is: "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo" . With the flurry of patches for one CVE, I can only imagine someone at Microsoft is saying "Patch patch Patch patch patch patch Patch patch", to the same effect.
.NET Core 3.1.7 has been released
Release Notes
The big news here is another major CVE has been patched, this time against ASP.NET Core. CVE-2020-1597 which is a Denial of Service vulnerability that targets how ASP.NET handles unauthenticated web requests.
In typical CVE fashion there isn't a released proof of concept; so while it's unknown if there are any exploits in the wild, you should upgrade and patch your ASP.NET Core installations immediately.
Also released in .NET Core 3.1.7 is a change to how .NET Core applications are built; ASP.NET Core applications no longer generate a dylib on Mac, rather they generate a DLL; this is due to the new notarization requirements starting in Mac OS Catalina.
If you're running an Ubuntu image based on version 19.10; be advised that it has now fallen out of support for .NET Core. It's a brave new world folks where Microsoft takes a hatchet to OSes older than a year. Keep in mind Windows 7 just fell out of support, so you know what side their bread is buttered on.
Also included is a new .NET Core SDK update: 3.1.107
.NET Core 2.1.21 has been released
This is also a release that fixes the CVE for .NET Core 2.1; which is Microsoft's LTS supported version of .NET Core 2
Visual Studio 16.7.1 has been released;
Besides some IDE bugs fixed; the big news here is this also is listed as a product to update under CVE-2020-1597.
Visual Studio 2017 15.9.26 has been released:
Same for the CVE-2020-1597.
https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes
Also if anyone is wondering whether your release cycle is complicated, the Visual Studio team is supporting no less than three different versions of VS 2019 version 16.x in production. 16.0.17, 16.4.12, and 16.7.1.
Please reach out to someone at the Visual Studio team and ask them if they're feeling ok.
An overview of Statiq with Dave Glick
Cecil Phillip sat down with David Glick to talk about Statiq; a static site generation framework for .NET Core. I'm just getting into statiq (I want to use it to host the web version of these newsletters and make the generation process less... manual) and this is a great video to watch if you want to learn about Statiq.
https://www.youtube.com/watch?v=43oQTRZqK9g
Jetbrains announces release 2020.02 for Jetbrains resharper
The 2020.2 versions of JetBrains .NET tools and extensions are here
https://www.jetbrains.com/resharper/whatsnew
https://www.jetbrains.com/rider/whatsnew
and licensing changes:
https://blog.jetbrains.com/dotnet/2020/07/15/licensing-update-net-tools/?mkt_tok=eyJpIjoiT0RkbFltUmpaREF5TW1KaiIsInQiOiJGRTJMdEFFaDYybUNRWkVaeVpRY3lBTTQzczI3ODVCd1luNlpWSkxTR0xVeUZXaTNpMWpaTlpENEpEQkw2WEJuTjd1MDlRMjZ0YmRyWG5cLys0cFVUTmZVTkdXNGE0TnR1RWhpN1wvMzRHVlFiMEMzRG03RENDa0dYQWhKRCt2N2VGIn0%3D
There's another shoe to drop here somewhere, and I don't know what it is. I'm looking for it though, and when I find it I'll let you know. Between "Let's make things easy for our customers" and "licensing changes that increase revenue", I hope this action is at the center of that venn diagram.
NoVA Code Camp
NoVA does not stand for that fictional paramilitary unit in Short Circuit, although more's the pity. It stands for "Northern Virginia" which by all rights and politics should be its own state. Anyway, normally they have an in-person code camp; and that's not conducive due to the Virus That Shall Not Be Named, so here we have a virtual code camp. If you've got a talk you're working on, or you just want to hear some great talks; you should sign up for this event. It's free. I'm pitching a talk on Event Driven Systems, and I hope it's accepted (if the NoVA CodeCamp staff happen to read this; lemme know where to send the bribe).
https://sessionize.com/northern-va-codecamp-fall-2020/
Microsoft ranks #3 on OSS contributions:
https://twitter.com/gortok/status/1293566607986491394?s=20
I will give Microsoft credit here: 10 years ago they were nobody in the world of Open Source software. Literally not even on the radar.
That said, I've got some problems with this ranking. Yuu know the guy on youtube that sits in the forest and builds a house from first principles? It's pretty neat. Anyway, Microsoft is that guy, github is youtube, and we're the people who can watch but can't really force him to build a castle from first principles. Although there's a youtube channel for that too. Anyway, we're spectators. Microsoft pays the salaries of the .NET Maintainers (all of whom are Microsoft employees), and the .NET foundation's Executive director (And treasurer), are Microsoft employees. This isn't altruistic code contribution to OSS, this is "Watch us build our product on github and give us a cookie for doing that". You don't get a cookie for that. At least not a chocolate chip one. You can have an Oatmeal raisin cookie for that.
Microsoft is the benevolent dictator for .NET, at a time when benevolent dictatorship for Open Source is on its way out.
Microsoft releases site that touts its OSS
I guess they're just displaying their own set of cookies at this point?
Guidance for developing with Entity Framework in ASP.NET Core Blazor has been released:
If this sort of thing doesn't jazz you, I don't know what to say to you. I mean, using Blazor is still experimental, and EF Core is getting there; but if you enjoy being on the bleeding edge, at least now you have some great documentation to help you.
https://docs.microsoft.com/en-us/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-3.1
Transcript (To come, powered by Otter.ai)
George Stocker 0:00
Hi, I'm George Stocker, and this is last weekend dotnet for the week ending 15 August 2020 dotnet core 3.1 point seven has been released. The big news here is another CVE has been patched this time against ASP. NET Core CVE is CVE dash 2020 dash 1597, which is a denial of service vulnerability that targets how ASP net handles unauthenticated web requests. In typical CVE fashion, there isn't a released proof of concept. So while it's unknown if there are any exploits in the wild, you should upgrade and patch your ASP. NET Core installations immediately. also released in dotnet. Core 3.1 point seven is a change to how dotnet core applications are built on Mac OS. ASP. NET Core applications no longer generate a DI lib on Mac. Rather they generate a DLL This is due to the new notarisation requirements. Get Started in Mac OS Catalina if you're running an Ubuntu image based on version 1910 Be advised this now had fallen out of support for dotnet core. It's a brave new world folks where Microsoft takes a hatchet OSS older than a year. Keep in mind windows seven just fell out of support so you know what side their bread is buttered on. Also included in this update is a new dotnet core SDK update to 3.1 point 107 dotnet core 2.1 point two one has been released. This is this this also fixes the issue with CVE dash 2020 dash 1597 for dotnet core 2.1 which is Microsoft's LTS supported version of dotnet core two, also for the CVE Visual Studio 16 point 7.1 and 15 point 9.26 and 16.4 point 12 have been released. And all of these Deal with CVE dash 2020 dash 1597. I feel like I'm saying that too much. Now the big notice for me here was that the Visual Studio Team supports three versions of Visual Studio in production. Right now. They're supporting 16 dot o dot 1716 dot four dot 12 and 16 dot seven dot one. please reach out to someone at the Visual Studio Team and make sure they're okay. Dave Glick gave us an overview on YouTube of his static website framework called static with a que si so Philip sat down with him on YouTube. And they go over what static is, what it does, and how to use it. It's a good watch and I'm thinking of using it for this newsletter, the website version of this newsletter, and you should give it a look to JetBrains announces release 2020 dot zero to four JetBrains resharper and writer. They also the big thing here for them is they announced licensing changes. They say they've simplified the model for licensing There is another sheet of drop here somewhere. And I don't know what it is. I'm looking for it though. And when I find it, I'll let you know, between, let's make things easy for our customers and licensing changes that increase revenue. I really hope this action is at the center of that Venn diagram. Now for resharper, there's a number of changes they've made. The one that I find the most intriguing is they've changed their unit test runner, so that the same process works on Visual Studio for dotnet core and dotnet framework. Nova Code Camp is going to be on 26, September 2020. This is going to be a virtual event. Now Nova does not stand for that fictional paramilitary unit in short circuit, although more as a pity. It stands for Northern Virginia, which by all rights in politics should be its own state. Anyway, normally, it's an in person Code Camp, and that's not conducive due to the virus that shall not be named. So we're having a virtual Code Camp. If you got to talk you're working on or you just want to hear Some great talks, you should sign up for this event. It's free. I'm pitching a talk on event driven systems. And I hope it's accepted. By the way, if you work for the Nova Code Camp, and you happen to hear this, let me know where to send the bribe. Microsoft ranks number three on open source software contributions. Now, I will give Microsoft credit here 10 years ago, they were nobody in the world of open source software. They weren't even on the radar. Literally. That's it. I do have some problems with this ranking. There's a guy on YouTube that sits in the forest and builds a house from first principles. It's pretty neat to watch. Anyway, Microsoft is that guy in GitHub is YouTube. And we're the people who can watch but can't really force him to build a castle from first principles, although there's probably a YouTube virgin channel for that, too. Anyway, what I'm saying here is we're spectators. Microsoft pays the salaries of the dotnet maintainers, all of whom are Microsoft employees. And the dotnet Foundation's executive director and treasure are Microsoft employees. This isn't some altruistic code contribution to the open source software community. This is watch us build our product on GitHub and give us a cookie for doing that. By the way, they own GitHub. Now you don't get a cookie for that, at least not a chocolate chip one. You can have an oatmeal raisin cookie for that though. Microsoft is the benevolent dictator for dotnet. at a time, when benevolent dictatorship for open source software is on its way out. They also released a site touting their own OSS software, you can go to this site and see what Microsoft releases under an open source live license. I guess at this point, they're just displaying their own cookies. Guidance for developing with Entity Framework in ASP. NET Core has been released. Now if this sort of thing doesn't jazz you I don't know what to say. I mean, documentation for bleeding edge systems like blazer and like Entity Framework core is hard to come by. and Microsoft is doing a really good job here of producing documentation that's useful to those of us that want to use blazer and any framework core. Now given that blazer really is still active. Fair mental and Entity Framework core is getting there. I don't think there are people that are going to use it in production. But either way, it's really nice that Microsoft is paying attention to the documentation. And that's it for what happened last week in dotnet. I'm George Stocker, and I help teams double their productivity through test driven development. If your team wants to go home at 5pm not worried about late breaking bugs at night that wake you up and upset your customers. Reach out at www.doubleyourproductivitity.io.
Transcribed by https://otter.ai
Links:
Shahed Chowduri releases his ASP.NET Core 3.1 A-Z an ebook (twitter)
.NET Core fails to build from source:
https://github.com/dotnet/sdk/issues/11795
With commentary as to why (can't build nightlies when there are undisclosed security vulnerabilities?)
https://twitter.com/runfaster2000/status/1290363230322212866?s=20
.NET Conf "Focus on Microservices" Playlist now on youtube.
Microsoft let's employees sponsor open source projects at $10,00 a piece.
Microsoft's Ignite - September 22-24 2020
Just Finished a Not so awesome project here's what I learned
I about fainted at the "Was happy when I got people to stop deploying from Visual Studio .NET.".
PFCLofW
https://storyteller.github.io/ - It's a library that lets you write markdown to specify your tests; and then turns those into executable tests. I know, I know, customer written tests are snake-oil. They have been and always will be; Now if you could get your customer to specify your tests in excel? That might be the ticket. Still, this is a cool library to check out, purely from an engineering perspective.
Transcript (powered by Otter.ai)
George Stocker 0:00
I'm George Stocker, and this is last week in .NET for the week ending August 8 2020. If you try to build .NET core from source, you may get failures because of packages being removed from their internal feeds. Now, this is really important only if you find yourself needing to build .NET core from source, but be aware it can happen. There's an open issue on the .NET SDK repo. And for me, I didn't even realize you needed private Nuget feeds to build .NET core. Also, one of the people that works at Microsoft is quoted to have saying, We don't publish nightly builds that have undisclosed security fixes. And so if you get access denied for a nougat package source while you're trying to build .NET core, it could be because there's an undisclosed security fixed somewhere in that dependency chain. It's really good to know .NET comp focus on microservices just released the playlist from their two day long .NET Focus on microservices conference. Now I live tweeted this. If you want to check out the videos for yourselves, they are now on YouTube. Microsoft has a free and open source software fund called a FOSS fund. And what it does, it allows Microsoft employees to vote on what open source projects should get $10,000 sponsorships from Microsoft. So if you're an employee at Microsoft, you go to this site, you pick which open source project you'd like to sponsor, and if enough employees pick the same one, it gets $10,000. Now this is not nearly enough for a project like apt get where Microsoft decided to take its underpinnings and how it worked and copy it without paying the author or anything but if you work at Microsoft, do us all a favor and vote for apt get and maybe the owner will get at least a little something for their time. Shahed Chowduri released a ebook on ASP.NET Core 3.1. It's an A to Z book. So it covers a topic. Well, from A to Z. Now we're all lucky they didn't deprecate ASP .NET 3.1 before the book was released, but a special shout out to Shahed for his work, and it's a good ebook, you should check it out. Microsoft's ignite conference is scheduled to take place from September 22 through the 24th of 2020. And it's gonna be launched as a complimentary digital event experience this year. I have no idea what it means by digital event experience, but we're gonna find out. I will be attending and probably live tweeting it. So you can catch my twitter @gortok if you want to hear my take on it. But otherwise, you should sign up and at least so you can get updates from the event as well as any of the videos that they released. Jeremy Miller just released a blog post titled just finished a not really awesome project. Here's what I learned. Now it goes through a two year project. That was waterfall based .NET project for a client, it details everything that he went through on this project. Now this is a good read and if you have done consulting, especially for long projects, you will probably feel his pain. And you know it's gonna be a good read when one of the lines is that he's happy that they got people to stop deploying in Visual Studio.NET and start deploying in Azure DevOps. And that's it for what happened last week in dotnet. I'm George Stocker, and I help teams double their productivity through test driven development. If you want to go home at 5pm you don't want to stay up late at night worried about bugs, give me a call. You can reach out at www.doubleyourproductivity.io
Transcribed by https://otter.ai
VB.NET "Not along for the ride" in .NET Core and .NET 5. Eject Mailman, eject.
For those of you that were hoping for VB.NET to get some love in .NET 5, it doesn't look like it's going to happen. This is of course causing some consternation; but overall I get it. Visual Basic was written for a time when we really thought we could make a language look like english and not be laughed out of the room. Now we know better. VB.NET has done good things; and I know a few products even today that are still written in VB.NET; but look, it's time.
Just look at the flowers, VB.NET.
Visual Studio 2019 version 16.7 Preview 6 is now available
Most of us are probably on the Visual Studio stable channel, but if you like to get the previews (they're free), you can install them. Interesting to me is that this version adds support for XCode 11.6? I don't even know what this means but here we are and that sounds cool as $#&@.
Microsoft .NET team is hiring
You can apply to become a Program Manager II on the .NET team. I thought about applying, but realized "allowing everyone to be their authentic selves" probably doesn't mean "Making fun of Microsoft on a daily basis". Seriously though, if you can move to Redmond, you should think about applying. .NET is entering its best years; and Microsoft is one of the better companies to work for.
Microsoft's Roslyn team (the compiler for .NET) released a blogpost detailing productivity improvements:
The Roslyn team released a new blog post detailing tooling fixes that are in Visual Studio 2019 16.6 that you may have missed.
My favorites are the DateTime formatting changes. You no longer have to Google which combination of MMDDYYYY gets you what you want; they now provide that information in the intellisense when you use DateTime.ToString(). This is a long overdue feature and I'm glad they added it. Their code refactorings are getting better, though I still prefer Jetbrains Resharper.
.NET Foundation "State of the Foundation"
The .NET Foundation released its State of the Foundation report for 2020. They have 800 members, which is a growth of 100% from last year, and 5 corporate sponsors, as well as its plan for the coming year. I'm glad to see this sort of transparency; and while I have some reservations about the .NET Foundation; this is a step in the right direction.
They also released their budget; and this will get better, but they spent a grand total of $558 dollars on sponsorships this year. You'd hope to see that get much better, and that's the metric I'll be using to judge whether or not they're having the right impact on the .NET community.
Stack Overflow infographic:
Stack Overflow (the company) released its performance metrics for its collection of Q&A sites on stackexchange.com (What the company used to be named, but then realized that was a terrible name and changed to the same namesake as its flagship Q&A site). So anyway, if you want to know how 300+ Stack Exchanges perform, you'll want to see this.
The sheer speed of the Stack Exchange network got the Hacker News folks all in a tizzy. Any day we can tout how well .NET performs and piss off hacker news is a good day.
.NET Conf - "Focus on Microservices"
.NET Conf held an all day conference to talk microservices; and I live tweeted it. I've got some pretty nasty scars (And a few fond memories) of working with Microservices; and if that sort of thing interests you, check my live thread on it. If your architect is practicing Resume driven development or you work with really large software teams, you should watch the videos with interest; for the rest of us, the conference probably isn't worth your time unless you really want to learn about some frameworks that can help you build Microservices in .NET.
Pretty Fricking Cool Library of the Week (PFCLotW)
This week's cool library is Bogus, which allows you to generate fake data for your application. It's a pretty neat library; and you should check it out. I've used it on quite a few occasions, and it's worth your time.
In today's podcast episode; I'm diving deeper into what the .NET Foundation is, and whether it's "good for us" as a community in its current form. The episode should drop by Noon EDT (-4 UTC) today; so give it a listen if that's a subject that interests you.
Transcript (Powered by otter.ai)
George Stocker 0:00
Hi, I'm George Stocker, and welcome to last weekend dotnet. Vb dotnet is not along for the ride in dotnet core and dotnet five. Now for those of you who are hoping to get VB dotnet in dotnet, five, it doesn't look like it's going to happen. So of course, it's going to cause some consternation among VB dotnet developers, and I get it. Visual Basic was written for a time where we thought we could really make a language look like English and not be left out of the room. Now we know better. dB dotnet has done good things. And I know a few products today, they're still written in VB dotnet. But look, it's time Visual Studio 2019 version 16.7. Preview six is now available. Now this is pretty cool. You can actually get advanced versions of Visual Studio whatever the next minor version is, you can get advanced versions of it for free without a license, their preview and so they might have bugs in them, but you want to check out what's coming up in Visual Studio. It's always an interesting install. Now this one is interesting to me because it adds support for Xcode 11.6 I really don't know what this means. But I want to find out because this is really cool. Microsoft dotnet team is hiring, you can actually apply to become a program manager for the dotnet team at Microsoft, I thought about applying, but then realize that allowing everyone to be their authentic selves probably doesn't mean making fun of Microsoft on daily basis. Seriously, though, if you can move to Redmond, you should think about applying dotnet is is entering into its best years. And Microsoft really is one of the better large companies to work for Microsoft's rozlyn team. That's the team that produces the compiler for dotnet. They released a blog post about productivity improvements and their latest push for Roslyn. Now, this was in 16.6. So you may have missed it. It's been out for a few weeks. But what I just noticed is that they've added changes that allow you to see how your date time is going to be formatted when you say date, time to string You have all those options, they now give you IntelliSense for those options, and they tell you what they mean, that's wonderful. It's way long overdue. There are other code refactorings. For this, I still prefer JetBrains resharper. But again, something you should take a look at the dotnet foundation released its state of the foundation blog post for 2020. Now, they this year, they have 800 members, which is 100% growth from last year. And they now have five corporate sponsors. This state of the foundation also includes their upcoming plan. I'm pretty glad to see the sort of transparency, I do have some reservations about the dotnet foundation. I do believe that publishing this is a step in the right direction. They also release their budget, and this will get better but they spent a grand total of $558. In sponsorships this year. you'd hope to see that get much higher if it actually means what I think it means which is sponsoring open source projects. And that's a metric I'm going to be using to judge whether or not they're having the right impact on the dotnet community but you have to start somewhere, and they started at $558 worth of somewhere. StackOverflow released its performance metrics for its Stack Exchange sites on Stack Exchange calm now the company's called Stack Overflow used to be called Stack Exchange. The network is still called Stack Exchange. But the company changed its name back to its flagship site, which is Stack Overflow. Anyway, if you want to know how well the site's perform, you can check out the link at Stack Exchange comm slash performance and the sheer speed of the Stack Exchange network being hosted on dotnet. They got the Hacker News folks all upset and any day we can see how well dotnet performs and piss off Hacker News. That's a good day. dotnet con held their focus on microservices Virtual Conference on July 30. And I have a thread live tweeting it. Now I've got some pretty nasty scars and some fun memories from working with microservices and that sort of thing. interest you, you can check out my life thread on it. Now if your architect is practicing resume driven development, or you work with really large software teams, you should check out the videos from the conference. But for the rest of us, probably not worth your time, unless you want to learn about some of the frameworks that help you build microservices and dotnet. Now, this week's cool library is bogus. Now, it's a library that allows you to generate fake data for your application. It's pretty cool. And you should check it out if you need to generate fake data. One of the common usages that I use it for is if we need to mock data as if it were coming from production. For instance, we need a million rows of data, but we can't use production data. Use bogus, generate it that way. Job done. Alright, as part of today's episode, we're going to talk about the dotnet foundation. And that may seem a little boring, but I promise you it's not it's actually really important for you, for me and for everybody who is part of the dotnet community, the dotnet foundation was formed to advance the interests of the dotnet programming community, including enterprises partners, individual developers and open source communities by fostering open development and collaboration of open source technologies for dotnet programming and related technologies, and by serving as a forum for commercial and community developers to strengthen the future of the dotnet ecosystem, and wider developer community by promoting openness, community participation and rapid innovation. Now if that sounded, we'll can that's because it was that comes directly from the dotnet foundations bylaws, Article One, section three. Now the reason why we're talking about the dotnet foundation is that how its governed and how we interact with it determine how successful dotnet open source is, Will dotnet open source be successful because of the foundation or in spite of the foundation, and if you've been developing in dotnet for a long time, you understand that Microsoft is Really a late comer to the open source movement. Now the foundation was formed in 2014. And it was formed much the same way that the Apache foundation or the eclipse foundation were formed, they're around technology stack, in this case dotnet and to advance the interests of the dotnet community. Now when we say advanced the interest dotnet community got to put an Asterix there. I mean, Microsoft created the dotnet ecosystem. Microsoft's developer division has tons of tooling around dotnet they've put millions and millions of dollars into developing dotnet into what it is, and you can't expect them just to let that go and just to be governed by a foundation. And of course, it's it's not they, they're a founding member, and as such, they get certain rights in the foundation that no one else gets. For instance, in an article two, Section four under founding member, Microsoft Corporation is the founding member, the founding member, and 10s have the right to manage the affairs Foundation, be vested exclusively in the board as described in these bylaws to the maximum extent permitted by applicable law, the founding member and eligible members will elect the board as described in Section 3.3. That's article three, section three. Now the board will consist of one director appointed by the founding member and up to six directors elected by the membership. Now that's important, no matter what Microsoft gets one spot on the board, okay, the membership elects the other six, in fact, not the other six up to six. Now the other rights the founding member gets Microsoft in this case, the director who is appointed by them is going to serve until that person is replaced by Microsoft or otherwise vacates the position. The founding member Microsoft may replace its appointed director anytime as in its sole discretion. Elected directors will serve for the term established in the director election policy found Remember, they get to change their person out whenever they want. Now that's something we need to be aware of. Now the current executive director of the dotnet foundation is Claire Novotny. Claire is the dotnet foundation executive director. And she works at Microsoft as a program manager on the dotnet team. And this is very important. If the dotnet if the foundation is independent, then clearly any any actions taken by Microsoft would be seen as well. It's not an independent foundation. And so right now clear is the executive director. And as of yet, there's not been a non Microsoft executive director that I know of. Now Microsoft has other rights. For instance, under article three section nine meetings, subsection II limited special right for director appointed by my founding member. This is Microsoft remember, in connection with any vote to materially change the foundations of membership policy director election policy, project governance policy, or any intellectual property related agreements or policies, a no vote by the director appointed by the founding member will result in the disapproval of the proposed action, regardless of the number of votes for approval, and such director must be present as part of any quorum, ie if that directors not present, the board will not have a quorum for the matter, regardless of the number of other directors present. So this is important. Microsoft effectively controls how the dotnet foundation is set up and how it's run. You can't change policy if Microsoft doesn't agree to it. That's a very interesting way to set it up if you want it to be independent foundation. Now under Article nine amendments,
any amendment of the articles of incorporation or the bylaws must be approved by vote of two thirds of the directors then in office, any such amendment that materially alters risk? or eliminates the rights responsibilities and privileges of the founding member must be agreed to in writing by an authorized representative of the founding member who is not serving as the director of the foundation. Now, this is interesting. You've got this special person that the founding member appoints. And they can't even vote to make changes. Someone else from the founding member has to approve these changes like amendments. Now, why does all this matter? Like why is this political intrigue, even important? Now all of this is important because the dotnet Foundation was set up to help dotnet open source thrive. Now it only thrives if we do what's best for community. We do things that aren't best for the community, it's not going to do as well. dotnet foundation supposed to do that. It's supposed to take into account how the community feels and conduct itself in a way that helps the community thrive. For instance, they have a vision statement. vision statement proposed vision statement is that a diverse, healthy and active open source community, open source software community or project maintainers are well supported and contributors feel welcome, an ecosystem where dotnet open source software is adopted in the enterprise, education and personal projects, and ecosystem are the foundation its members in the world wide dotnet open source software ecosystem work together to identify challenges to the mission, and then collaborate on solutions. A community where those that benefit the most from dotnet open source software contribute back whether it be through resources, time or money in this community is easy for anyone who wishes to contribute to do so in whatever way they can. should be easy for companies to contribute financially to open source software, and easy for project maintainers to receive that support. That's the vision statement they're proposing to change right now. That's the proposed instead of the vision statement. Now the mission statement is the dotnet foundation is an independent A nonprofit organization whose mission is to support an innovative, diverse, commercial friendly, international open source ecosystem for the.net platform. That is their mission statement. Now with everything we've gone through so far, we've gone through their bylaws, we've gone through how they're set up, they have six, up to six directors plus someone appointed by Microsoft. But they also have one other part, which is an advisory council. This Advisory Council consists of six people that work at Microsoft and one that does not also people that run the foundation. They have a treasurer who works at Microsoft, Christopher house, who works at Microsoft, but doesn't have his stated title. And they have Claire, who is the executive director of the dotnet foundation. They have that they then have their board of directors of which it looks like none of their board of directors, except for one except for Beth Massi is a member of Microsoft. So extensively right It's pretty independent, except for the fact that Microsoft appoints the Microsoft appointed director, they will always be able to appoint a director, they can replace that director anytime at their discretion. And that director cannot make decisions that will materially hurt Microsoft. And Microsoft has effectively veto power over anything that changes how the dotnet foundation is run. And then they have an advisory council. It's made up largely of people from Microsoft. So even if someone wants to make a change, you're going to the Advisory Council is going to be there. And you know, this doesn't look so good for Microsoft, please don't do it. But the reason all of this came up is that I believe in the dotnet Foundation, I believe in the idea of making open source software work. I think that right now, open source software won't work. It can't work. It's not financially viable for maintainers. It leads to burn out. It leads to abandoned projects, and generally creates more churn in a system and when you create churn, especially in software, companies don't want to use that software. And I think that you know, creating a foundation whose job it is to help keep that churn down. I think that's, that's a good thing to do. However, open source software has to have the needs of its community at heart. And a foundation that represents open source software has to have the needs of its community at heart. Now recently in in, it was reported back in May, that Microsoft copied its new wind get window Pam, its new wind get package manager, architecturally from apt get, which was a dotnet, open source software package manager. They copied how it worked. They copied its ideas. And if that weren't bad enough,
it turns out they'd called Kevin and said, Hey, Kevin, can you come out interview with us? We like what you're doing with aapka they interviewed him, they ghosted him and then the night before build They call him up to say, hey, oh, by the way, we're not going with your app get project, we're going to go our own way. And yet it's being announced tomorrow and build. The next day they announced wind get. Now by itself, this behavior is bad. But this is Microsoft. Aren't they are big supporters of dotnet. Open Source, didn't they establish a foundation just for this? Well, I asked him that question to the foundation to its directors. And the response I received was not our deal. No one asked us for help. We're staying out of it. Is that behavior keeping your, your community's needs in mind? I don't think so. And so I dug some more digging, I was like, well, this, this can't This doesn't make sense. Like why would anyone stay silent. You've you've literally got a dotnet project that's popular, that is filling on a hole that Windows hasn't provided a system level package manager That's pretty dang well. And why is it nobody at the dotnet foundation is speaking out about this. There's some reports from some people, the dotnet Foundation, when I really pressed them that said, you know, hey, if they were a member, we might have stepped in. But since their project isn't on our list of projects, we don't, we don't deal with them. That's not a good enough answer. If your foundation is there, to improve dotnet open source software adoption, you're not just improving it for the projects that are part of your portfolio. You need to improve it for all of them. You're the interest group for dotnet open source software, that's what you do. So again, I was a little heated. And so I started doing more research into the dotnet foundation. That's when I found all the stuff I'm telling you about. I have also been telling people to Hey, you should become a member, you should join the foundation, and you should vote and i believe i believe all those things. And one of the questions I asked is that you know, what does commercially friendly commercial friendliness me back from the mission statement? And the answer I got was telling. And it's actually what led me to speak on this podcast about it today. And the answer I got is the intent is that businesses are able to use dotnet based open source software libraries without friction. Clean IP and licensing is is a key part of that, which is why the foundation has project signup contribution agreement, and a seal a bot for for future contributions that ensures that no one's going to come out of the woodwork, the copyright claim on the code. It also means the use of permissive license licenses, which is one reason that foundation does not support libraries with copyleft licenses. It currently does not say anything about a project's commercial viral viability, nor for sponsors that the foundation of which Microsoft is just one. And that was from clear. The Executive Director, Ben Adams, who is a paid director on the foundation said it's both if a project is not sustainable, then it's not commercial friendly and the dotnet foundation should help enable business to give back to projects they use in a commercial friendly way. As business purchasing can be a complicated internal system and a common barrier for all projects that the dotnet foundation should endeavor to ease. Also, the dotnet foundation does not support non permissive libraries for its license, excuse me, non permissive licenses for its libraries, as they are hard to build on are using a commercial friendly way. Now, this is important, basically dotnet Foundation, if you're producing open source library, dotnet foundation wants Greece's kids good businesses to use it. So if you produce, let's say, a library that does image compression, if you want to be a part of the dotnet Foundation, you can't use a copyleft license like GPL. If you want to be part of the foundation for them to care about you, you got to use permissive license like the Apache License or MIT license. Now if you're an application dotnet open source application, you're allowed, although I haven't seen verbiage to that you're allowed to use a non permissive license. Now, why is all this important? Well, if you're an open source project, and you're a library, I don't see how the foundation is going to make what you do commercially viable for you. We're gonna make it commercially viable for businesses by saying no, you may not use GPL or a GPL. But you may use MIT license and the Apache License, but for applications, they'll help you. They'll be okay with a non permissive license, at least as I understand what they've said here. It's a hell of a way to slice it. Alright, since the bylaws don't cover everything, we have jumped into
the project's policy. The project's policy allows you to determine what projects can be members of the dotnet Foundation, and do they meet the health criteria is important. So let's start with eligibility. Now they're eligible if they fit within the moral and ethical standards for the dotnet Foundation, it's good if the project is aligned with the philosophy and guidelines for collaborative development also good. And it's built on the dotnet platform, or it creates value within the dotnet ecosystem. It's eligible if it produces so source code for distribution to the public at no charge. That's interesting. The license is operated under a is offered under an open source license, which has been approved by the dotnet foundation. And libraries that are mandatory dependencies of the project are also under offered under a standard permissive open source library, which has been approved by the dotnet foundation. Now all of these are and there's more criteria, but those are the most interesting ones. If you decide you want to put your project under the dotnet Foundation, you have two choices. You can either a assign your project, to the dotnet foundation that's transferring the copyright of your project to the dotnet Foundation, or B. You can use the contribution model which is you retain, or the project retains ownership of the copyright, but they grant the dotnet foundation abroad license the project's code and enter in other IP. Now, why is all this important? Why do we need to care about such esoteric documents? And it's because if you ever want to know what a business cares about, look at what they write down. They put a lot of effort into these governing documents. Microsoft put a lot of effort in being sure they couldn't be kicked down. They also put a lot of effort into ensuring that they, their rights were always protected with effectively veto power over any decision that changes how dotnet foundation runs. The foundation itself is set up to ensure that companies can easily use open source projects, they can easily rely on them, but you're missing a leg. And we see that with what happened with Kevin and aapka. What about the project mean? Tanner's, where do they come in? Sure they get a seal a bot, that makes it easier for people to contribute changes their projects. Okay? That's a solved problem. And they get pixel space on the dotnet Foundation website, but only if they're members. Something like AppGet, something that was materially important to the dotnet community because it showed that you could use dotnet to create something as foundational system package manager, have it be popular, and they get nothing, because they weren't a member. And even if they were a member, it's not like Microsoft say, Oh, yeah, you're right. Gosh, we shouldn't have competed with open source project are bad. They didn't do that. Microsoft, you know, after an outcry finally gave keivan credit, but if they used his architectural work, his design work that's worth 7500 k from consulting, just by developer time alone, your developer team, you have them spend Two months figuring out the architecture of the system, what his design will be how its API's work, that's easily worth 75 or 100. k. What did Kevin get? Well, he got a footnote read me Two months later. And that's the sort of thing that I thought the dotnet Foundation was supposed to protect against. But as I find out, they're not, you know, they're there to grease the skids for companies, protecting projects is a distant second to that. Now, that, of course, may not be the desire that may not be what they're trying to do. But it's the impact. And it sure seems like the dotnet foundation is set up in such a way that it's there to enrich Microsoft, even if it hurts the community. And so let's look at their budget what they do this year. Now currently, they released their state of the foundation this week. They have five corporate sponsors. They have 800 members and their budget. They brought in 237,000 sent out expenses of 157,004 2020 ending July, or excuse me, ending June 2020. In their budget, they had sponsorships of $558. And outreach of $81,517 goal of outreach is to encourage new developers to build dotnet empower underrepresented segments of the coder community, become leaders and contributors and assist event organizers with evangelism and grow.
So for their budget, they spent 81,000 on outreach, only $558 on sponsorships. Now it's unclear how much of their money went to open source projects. I can't tell that just by looking at their balance sheet. There's no line, hey, this we're outlays that we actually contributed to projects with but remember, you know what people write down they care about where is the goals for give Many open source projects, I don't see it. And this means that they don't care about open source or that, you know, the dotnet foundation just exists to enrich Microsoft. But it does raise some interesting questions at this point. What we need for open source in the dotnet community is we need open source to not be plagued by burnout to not be plagued by companies stealing the work. You know, I don't even say that we have, we do have a list of problems and done and open source. And you know, how easy it is to get companies to adopt open source. It's even on my top five. You know, it's hard to get people to maintain projects, you know, authors, like even get their work stolen for no money, no credit. It took the community outcry to even get a footnote on the readme file. Microsoft continually competes with the community and maintainers don't have the backing up an interest group that can help us that's what the dotnet Foundation's there for There'd be the backing for the maintainers there to be the special interest group for people that make open source software with dotnet. Yes, they should grease, grease the skids for businesses to use open source software. Absolutely. But they should do it in such a way that enriches the community, not a project sponsor, not their founding member, the community. So here we are. We're at the start of a new fiscal year for the dotnet foundation. We're having new directors Come on. And I want to challenge the directors that join the foundation to figure out who are they therefore, are they there to enrich the founding member to make it easier for them? Or are they there to enrich the community? And if you aren't there to enrich the community? Then we got to start focusing on making dotnet open source software sustainable, and yes, that means putting money in the pocket of maintainers Open source software is a labor of love. You have to love what you're doing. But love doesn't pay the bills. Love doesn't put a roof over your head. These companies have plenty of capital. We need an interest group, like the dotnet foundation to put that capital to work for us. Now, how can we do it? One issue is that we should have dual licensing. And the dotnet foundation should look at dual licensing. If you're an open source project, you get one license, if you're commercial, you got to pay and you should pay. You're making money or you're using the software to make money in your business or to save you money. You should pay for that right if you're a business dinette foundation can help by putting together an invoicing system by saying, look, we have lawyers, you pay dues, those dues go to lawyers to figure out do licensing your dotnet project, they will figure out the license and you don't have to the next thing we'll do. So we'll set up an invoicing system to make it as easy as possible for open source projects under the dotnet foundation to have to generate invoice for business so the business can business's purchasing department can pay them. The next thing we will do as dotnet foundation is that we will fight tooth and nail for dotnet open source, there should be no one that questions whether dotnet foundation exists to enrich the community and seeks to defend the community from companies that would try to take and give back. And that means at some point, members of the dotnet Foundation and the directors of the dotnet foundation have to stand up to factions within Microsoft do just that. This is not the first time that I Microsoft team has taken something from open source. It's only the latest time and it's gonna happen again. That's almost a certainty. I want dotnet open source software to succeed I believe it needs to succeed. We're not in a closed source world anymore. But for it to succeed. It's got to be financially viable. For the maintainers, the people that put their hearts and their souls into creating these libraries and these frameworks that we use. And the only way that's going to happen is if the interest group we have the dotnet foundation puts all of its effort towards making that the goal. Now this incredibly depressing podcast, of course, is brought to you by myself, George Stocker. And I help teams double their productivity
through test driven development. You can reach out to me at www.doubleyourproductivity.io.
Transcribed by https://otter.ai
Last Week in .NET - Week Ending 25 July 2020
More on CVE-2020-1147
Do you deserialize XML to a DataSet? This is about CVE-2020-1147.
More details on CVE-2020-1147 -- that Remote Code Execution Vulnerability for .NET Core. Turns out it has to do with deserializing XML into a DataSet. If this is something you do; stop reading and go patch your application to .NET Core to 3.1.6, .NET Core 2.1.20; and .NET 5 Preview 7. Make sure to update the SDK running on your developer machines as well. There's a bit more information than I was able to get last week.
Special Thanks (again) to @vcsjones on twitter.
Microsoft talks about Windows 10X
Apparently in Windows 10X, Win32 applications will be virtualized and served "over the cloud". OK. This is both interesting, frightens the hell out of me, and makes me wonder at what point we lose control of our Operating Systems completely.
.NET 5 Preview 7 has been released
This includes changes to the runtime, SDK, ASP.NET Core, and Entity Framework Core.
For the Runtime, there's a lingering bug with Regex that you can fix by removing RegexCompiled, you know, what keeps regex's fast. Anyway, if you're running .NET 5 Preview 7 in production, that's something to be aware of.
For ASP.NET Core, there are cookie and blazor bugs fixed, and there's also a blog post out about Preview 7 that talks about the blazor improvements especially. Blazor is getting a lot of attention from Microsoft, and this is great, especially since there are thousands of applications that are in Web Forms that have no upgrade path at all to .NET 5. How does Blazor help here, you ask? Well, it at least gives political cover to the idea that it's possible, but if you read the documentation around converting an ASP.NET Webforms application to blazor, you'll notice it's currently... incomplete. Incomplete here means that there is currently no migration path for built in Webforms controls.
Without Microsoft providing some sort of conversion system for WebForms, organizations will be forced to rewrite their WebForms applications anyway; and Microsoft is hoping they'll choose Blazor.
I may have blown the spoiler; but Blazor is now a part of .NET 5. There's more work to do, but this is a great start.
There's a lot of fixes in Entity Framework Core 5.0.0 Preview 7., too numerous to list here. If you use EF Core, you may want to pay attention.
.NET Framework (Not Core, or 5) July 2020 Cumulative Update Preview is released
This preview fixes several bugs uncovered in .NET Framework 4.8 including a memory leak in HttpListener, and a bug in SqlBulkCopy that would cause writes to fail, there are fixes in WCF, WPF, and Windows Forms, and Accessibility Improvements in Windows Forms.
A 'replacement' for SecureString is being bandied about for .NET 6:
SecureString, the oft-maligned and probably most misused class in .NET, is getting its hair re-done as "ShroudedBuffer" as a part of .NET 6. The name change and API change is to help reiterate that this string isn't a "SecurityFeature", rather it's a signal that if you're trying to log stuff; YOU SHOULDN'T LOG THIS.
I'm not sold on the name; but naming is hard. My personal list contains candidates such as OpaqueString, or "Dont^%&DFingLogThisString" or "SensitiveBuffer", or ClassifiedBuffer, or ConfidentialString".
EFCore now supports Many-To-Many relationships
I didn't know it didn't; and I feel bad for everyone that now has to either 1) maintain the workarounds they used to get that support before, or 2) retrofit this approach into their code. You can read more about Many-to-Many support here. No word on when this lands in a release, but it'll either be in .NET 5 Preview 8 or .NET 5 RC 1.
Bug in .NET Core 3.1 causes SkipLast and TakeLast to return the wrong value:
What happens when you add highly performant code that has bugs? You get fast bugs. If you use SkipLast and TakeLast in .NET Core 3.1, there's a good chance you'll encounter this bug if your source collection you're operating on is a List; which of course is just about everyone.
.NET Foundation Elections Board happening Now
The .NET Foundation Board elections are happening right now. If you're a member of the .NET Foundation, GO VOTE. If you're not a member, you should be. Go join up, then go vote.
If you want to hear from the candidates themselves, the .NET Foundation held interviews with board candidates; they're worth your time.
Stack Overflow elections are over, two new moderators elected
Stack Overflow just wrapped up their moderator elections, and despite a dismal number of moderator candidates, there were two new moderators elected. Please welcome Makyen and Machavity
PFCLotW (Pretty Fricking Cool Library of the Week)
Do you write distributed applications? First off, I'm sorry. Second, have you thought about using Akka.NET? Distributed applications are hard, and without a framework to help you along, you're going to be spending a lot of time working around the fact that your application is, in fact, distributed. This is not a sponsored ad, and I hope to never make another distributed application; but if I did, I'd give Akka.NET a serious look.
And that's what happened Last Week in .NET.
I'm George Stocker, and I teach TDD to .NET teams. This isn't your grandfather's TDD, no. It's actually meant to be used in large applications without use of Mocks or stubs, and without the inherent pain that goes along with mock and stubs. But you don't care about that. You just want to go home at 5pm and sleep soundly knowing your application won't have any strange middle of the night bugs. If your team wants to go home at 5pm and not need pizza parties for releases, visit www.doubleyourproductivity.io and reach out.
We see you, Jilthub
Github, the eponymous source control collaboration system for Open Source Projects, owned by Microsoft, has been caught trying to sneakily continue its contracts with ICE -- you know, the government agency that puts kids in cages -- by getting a contract award from ICE through Dell Federal Systems.
Now all of this may be on the up-and-up; Dell sells Github enterprise to ICE as a reseller, Github gets plausible deniability, and ICE gets to use the cool kids source control system.
But it's still morally bankrupt for Github to take this contract -- for an amount, I might add, that totals $79,312.50, or roughly the same amount Microsoft should have paid Keivan for using his AppGet architectural work in their WinGet package manager solution.
We see you, Github. Special thanks to Dave Copeland for making me aware of this. Twitter is sometimes a beautiful thing.
Github 'offers' to let Non-US employees do the same job for half the pay.
Microsoft's github acquired NPM. They apprently "offered" to reduce non US employees compensation by up to 50%. to do the same job.
In the Year of our Lord 2020 it is very impressive that a company like Github, who are still reeling from their morally bankrupt decision to keep an ICE contract worth $79,000, would also stoop so low as to to get existing employees of NPM to quit by offering them half the money to do the same job.
When we call supporting ICE morally bankrupt, that is not meant to inspire you to be the villian, github. That's an insult, meant to shame you into doing the right thing.
Vulnerabilities reported this week
Microsoft reported and released a fix for CVE-2020-1147, a .NET Core Remote Code Execution Vulnerability. If you accept XML input, this advisory affects you. If any of your API endpoints accept XML, this advisory affects you. .NET Core 2.1.19, .NET 3.1.5, and .NET 5 Preview 6 are all vulnerable. This is fixed in the latest version of .NET Core 3.1.6, and will hopefully be fixed when .NET 5 Preview 7 is released.
If you are running Visual Studio 16.4, you need to update SDK to 3.1.106; if you're running Visual studio 2019 16.5 or later, update to SDK 3.1.302 and then curse version numbers loudly like I'm about to.
If you use Windows DNS Server, there's another RCE vulnerability that is apparently "wormable", but at least some infosec people seem to think it won't turn into a big problem. This being 2020, I'm not holding my breath.
.NET Core 2.1.20 has been released
Release Notes: https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1.20/2.1.20.md
Self Contained Applications
One of the more interesting parts of .NET Core has become the "Self Contained Application" -> effectively the runtime, the application and its dependencies in one package. This is great for datacenter style deployments or cross platform console applications, or even potentially in .NET 6 with MAUI: Desktop applications. That same advantage of self-contained applications is also a disadvantage, as foretold in this note in the Announcement:
Additionally, if you've deployed self-contained applications targeting any of the impacted versions, these applications are also vulnerable and must be recompiled and redeployed.
Long story short: Not only do you need an update story for your organization's release cadence, that cadence must also take into account vulnerabilities in the runtime.
Stack Overflow, the largest (that gets developer press and isn't Microsoft owned) site built on ASP.NET MVC (and soon .NET Core), gets a lot of attacks against it as a "top 50" (according to Wikipedia) site on the internet. Nick Craver, their architectural lead; goes deep into the sorts of attacks that happen. https://www.youtube.com/watch?v=K6NECAZhJG4 This is a good watch. Watch it.
This is the sort of thing I get jazzed about. The faster C# gets, the less we have to worry about using a language like Go or Rust for high performance situations. I don't use Rust, but anyone that does will tell you within seconds of meeting you. They're our Crossfitters.
Anyway, having an easy-to-use toolchain to write fast code is good for all of us; and really good for our economic prospects, if we're being honest. The .NET team gets jazzed about performance too, and they've released another blog post detailing speed improvements in the forthcoming (now in Preview) .NET 5. .NET 5, remember, is just .NET Core in a trench coat. Microsoft is going directly from .NET Core 3 to .NET 5; because awkwardly, they already have a .NET 4. I have lots of jokes to make about Microsoft Marketing, but I'd like to be clear about this: Microsoft has 20 years of inertia around the .NET Framework, and there were problem dozens of internal corporate teams that were hoping that .NET Core would fail because their bread and butter was built on .NET. Luckily it didn't fail, and luckily the group that said "Let's unify the two" won. Over time .NET Core has had to make concessions to stay in the game, like CSProj over project.json; but those concessions have ultimately scored large wins for both .NET Framework and .NET Core. This is a narrow line to walk, and for all the grief I give them, Microsoft's Marketing team is handling this with grace and aplomb.
BinaryFormatter will finally be tossed off a bridge
https://github.com/dotnet/designs/pull/141
Hashing data is now two lines of code
Special thanks to Kevin Jones @vcsjones for making me aware of this. In likely .NET 5 Preview 8, you'll have the ability to hash data in two lines of code!:
ReadOnlySpan<byte> someData;
byte[] hash = SHA256.HashData(somedata);
//or
Span<byte> hashBuffer = stackalloc byte[32];
int bytesWritten = SHA256.HashData(someData, hashBuffer);
This is pretty and awesome. It's pretty awesome. If you find yourself producing hashes of data; it can't get much faster or easier than this.
Windows Community Toolkit 8.0.0 Preview2 for WinUI 3 Preview 2 has been released
Microsoft continues to streamline how it versions its products by overusing the word Preview. Anyway, this release lets developers kick the tires on the new WinUI, which is better known as "How you write Desktop Applications in .NET 5". The only hope I have is since they've coalesced on ridiculous versioning schemes, they've also coalesced around one way to develop Desktop Applications in .NET 5. Developers who love XAML should love WinUI 3. https://github.com/windows-toolkit/WindowsCommunityToolkit/issues/3295
ImageSharp passed 6 million downloads; and an exposure angel got their wings.
The creator of ImageSharp laments getting six million downloads on an open source project that obstensibly does not pay the bills. At this point in OSS, you either go APGL or you get to the point where you wish you had.
On .NET MAUI
I had understood .NET MAUI to be a codename for .NET 6. It is not. Part of .NET 6 will be 'MAUI'. It's capitalized because it's an acroynmn. I should have known, of course, as we're programmers, and we love Acroymns. Anyway, MAUI stands for: Multi-platform App UI. Or for the rest of us: Cross Platform UIs!
YES. FINALLY. Something that will be faster than electron and have less users to boot! Seriously though, I'm pretty stoked that this is happening, though I hope Microsoft will take this time to realize that cross-platform UIs are probably best done in HTML, CSS, and JavaScript, and not XAML. Actually, scratch that, Cross platform UIs are terrible in HTML, CSS, and JavaScript, but it's ubitquitous, and that's what matters. It looks like there will be a few 'AppModels' supported:
MVVM, RxUI, MVU, Blazor. If you don't do Xamarin currently, RxUI and MVU will be new to you (and to the rest of us). RxUI is a "reactive" style of programming to support one-way updates from the model to the UI. and MVU is "Model View Update", which I hear is cool but apparently every framework needs to create a new rendering pattern, and MVU is Elm's gift to the rest of us. Programmers create their own blog engines, UI Frameworks write their own Rendering pattern.
PFCLotW (Pretty Fricking Cool Library of the Week)
If you're using .NET (Whether Framework or Core), and you want to benchmark your code, you should be using Benchmark.NET. It's called Benchmark because that's what it does, and they slapped the .NET moniker on the end because that's what library authors for .NET Do. Since this is .NET, their alternatives were NBenchmark, and BenchmarkSharp. I'm glad Benchmark.NET won.
Anyway, Benchmark.NET let's you set up runs against your code; specifically against doing the same operation multiple ways. It then accurately benchmarks how fast the code is, what sort of memory usage it has, and a few other neat sundries about it.
If you're using System.Timer(), don't. Use Benchmark.NET instead. (This is not a sponsored ad, but I do have a thing for Console Applications that are amazing)
.NET Foundation Updates
The .NET Foundation has an open pull request for changes to their bylaws to allow for a seven day comment period before a change would take effect (or be voted on?). You can view it here.
The .NET Foundation also has interviews up with all of the candidates for election to the board.
If you aren't already a member of the .NET Foundation and you're reading this. You should be. Decisions are made by those who show up, and those decisions affect all of us that use .NET. Become a member of the .NET Foundation here](https://dotnetfoundation.org/member/become-a-member).
Events.NET
On July 30th, there's a .NET Conf focused on Microservices. This conference is for people who want to add "Microservices" to their resume. Save the date here.
The .NET Conf is November 10th-12th, online only. It's the 10th year of this event. You can save the date here. If you're not a fan of sitting through three days of online events, I'll be live-tweeting it; In preparation, you can go ahead and block me now.
And that's what happened Last Week in .NET I'm George Stocker, and if your team is struggling with regression bugs, delivering software on time, and wants a workday where you actually get to leave at 5pm. You should visit www.doubleyourproductivity.io and reach out.
If you liked this Newsletter, please forward it to your friends and ask them to subscribe at www.lastweekin.net. If you hated it, please forward it to your enemies.
Show notes:
Transcript:
Last Week In .NET (for the week ending July 11th, 2020)
Microsoft released details about Maui -- their codename for .NET 6.- .NET 6 is when Mono and .NET 5 aka .NET "Core" come together into a unified toolchain and platform, and they're calling it Maui. That's a bit on the nose, don't you think? Maui is the character from Moana that started, failed, stopped, started, failed, stopped, and started again and finally succeeded.
Something that I'll end up writing a thousand times because naming is hard: .NET Core is now .NET 5; and .NET Framework and .NET 5 are different incompatible things. Somebody took the Java/JavaScript comparison a bit too far. In case you haven't heard that one, Java is to JavaScript like car is to carpet.
.NET finally succeeding in bringing together Mono and .NET will be a win for everyone. If you want cross-platform Mobile Applications using .NET, you're currently stuck with Xamarin Forms and Mono. And since .NET game developers rely on Unity, and unity relies on Mono, I'll be happy to see them finally be able to move to .NET 5; since .NET Core (now .NET 5) is a lot faster than the old Framework and Mono.
The big news here is Xamarin Forms will now be a first class citizen in .NET; and cross platform Forms will now be possible. This is huge, if I'm reading it right. XAML is back too. Shout out to everyone who learned XAML only to be crushed by the demise of Silverlight. Let's all pour one out for Silverlight.
Bill Wagner, a senior content developer for .NET at Microsoft -- wait, did they get rid of Developer Advocates? Isn't a Senior Content Developer just a Developer advocate? Is nothing safe from Microsoft's Marketing team? Anyway, Bill sat down and spoke on the
Speaking of .NET 5, .NET Core 5 Preview 6 has been released. I'm also incrementing the "please move to calendar versioning" counter. This release fixes a number of issues, especially in EFCore and the .NET 5 SDK.
F# updates
For the five people that use F#, Apparently F# 5 Preview 6 is out. I'd like to thank the marketing team at Microsoft for having at least one language on the same version number as the platform now. The two holdouts are, C# which is at Version 9, and VB.NET, which is sitting at Version 16 . (which also apparently supports .NET Core? I'll have to dive in and see what this is like).
This makes me happy because F# has always felt... well.. ignored by Microsoft. Seeing them get updates for NET 5 is great. Thank you Microsoft!
EFCore Updates
Entity Framework Core version 5.0 Preview 6 is out; and once again it feels like a few microsoft teams are all "Let's pin to the platform version", and others are like "screw that". #teamplatformversion .
Anyway, from the blog post: This release includes split queries for related collections, a new “index” attribute, improved exceptions related to query translations, IP address mapping, exposing transaction id for correlation, and more.
the interesting part to me is the 'index' attribute. This support has been in Entity Framework 6.2, and is now also in EFCore as of version 5.0. In Typical MSDN fashion the API's usage is an exercise for the reader.
In the "This is scary but could be useful" department, EF Core 5 Preview 6 also released "Split Queries" support which previously existed in Entity Framework 6. Split Queries will emit separate DataReaders to retrieve data using the .Include method. On the one hand it makes query optimization easier; on the other hand it introduces a lot of magic: When you see "SplitQueryable", you now need to understand that you're hitting the database with separate queries. If you use Split Queries, let me know how you feel about them, but the DBA in me is nervous about consistency.
.NET Foundation Board Member Elections
The .NET Foundation nominations have concluded; and elections for Board Members are going to be held on July 21st. There are 6 board seats open.
AND THE NOMINEES ARE (I've always wanted to say that):
You can read about the nominees here: https://dotnetfoundation.org/about/election/candidates and best of luck to everyone who doesn't know what they're getting into.
Stack Overflow Moderator Elections
Speaking of elections, Stack Overflow is holding elections for the first time after 37 moderators left the Stack Exchange Network with 4 Moderators leaving Stack Overflow during the great Moderator exodus of 2019. That is a sordid story best told on its own. Over wine. Lots of wine. If you want me to go deeper into that story in a future podcast, post a five star review on apple podcasts, or if you're reading this newsletter in its email form, reply with the question "how many times can a company shoot itself in the foot"?
Anyway,
Nominations close on 00:00 UTC on Monday, July 13th which translates to 8pm Eastern Daylight Time on July 12th. (I think. Date math is hard. Also I apologize to my past projects and teams for advocating for the display of UTC time to every user in the application. Save your user's sanity by storing dates in UTC, and displaying them in local time).
WinGet / AppGet Debacle continues
Do you remember the time when Microsoft loved Keivan's work on AppGet, invited him out to Microsoft for an interview, ghosted him, copied several architectural features of his project and then the night before Build called him to tell him that they were releasing a competitor to his .NET open source project they were calling "WinGet"?
No? Oh.
Anyway, Keivan sat down to talk on FossBytes about AppGet and more. That's spelled bytes, not bites. Again, naming is hard. https://fossbytes.com/appget-developer-keivan-beigi-interview/
I can appreciate the financial savvy exhibited here. Companies pay tens of thousands of dollars to someone who helped shave off months of development time. Microsoft got all that work for a steal. Typically this work pays well and is called consulting. But if you run an Open Source project, it's called "Thanks for the free work and $*#@ you".
Hang on, my fact checker is telling me Microsoft, apparently in exchange for the months of design direction Keivan helped them knock off and the hundreds of developer hours saved through his work, was credited in a Readme file on the WinGet project on June 3rd, 2020.
Way to go Microsoft.
Keivan, Show that readme file to your landlord for 0% off of next month's rent!
Pretty Fricking Cool Library Of the Week (PFCLotW)
Have you heard of Polly? No, not Jennifer Aniston's character in that early 2000s hit romantic comedy. I'm talking about the open source library. Polly is meant to be used whenever you would make a network call to another service (internal or external). If you cross a network boundary, you want to wrap that call in something like Polly. You could, of course, re-invent the Circuit breaker pattern, but then you'd have to maintain it. Save electricity. Save the Earth. Use Polly instead. (This is not a sponsored ad. I just really like Polly).
And that's what happened Last Week in .NET (technically the last 2 weeks, but July 4th was a holiday and nobody kept up with what happened the week before July 4th either). I'm George Stocker, and I help .NET Teams double their productivity. I won't tell you how though because you'll think I'm a member of the TDD Cult. I am not. But TDD can help your team save time, money, and result in a workday where you actually get to leave at 5pm. Visit www.doubleyourproductivity.io to learn more.
If you liked this Newsletter, please forward it to your friends and ask them to subscribe at www.lastweekin.net. If you hated it, please forward it to your enemies.