- Видео 15
- Просмотров 31 023
Hubert Mijalski
Добавлен 8 ноя 2022
Why Microsoft Naming Sucks
In this video I explore the weird names that Microsoft assigns to their products and how it affects .NET and C# ecosystem. I believe this issue is hindering the .NET popularity which has come very far and is providing one of the best Developer experiences out there, but is not reaching the praise it deserves. Shout out to anyone working on .NET though, you guys are rockstars!
I really do hope you appreciate the video, I'm trying to get back into video making :)
00:00 Intro
00:16 Windows naming
01:01 Xbox naming
01:37 Visual Studio naming
02:31 .NET naming
04:51 Blazor naming
I really do hope you appreciate the video, I'm trying to get back into video making :)
00:00 Intro
00:16 Windows naming
01:01 Xbox naming
01:37 Visual Studio naming
02:31 .NET naming
04:51 Blazor naming
Просмотров: 4 083
Видео
How To Write .NET Core Middleware with Minimal APIs?
Просмотров 1,2 тыс.Год назад
In this video let's explain how middleware works in .NET Core and how to write one. We'll build the simplest middleware and also explore more advanced scenarios, with Attribute filtering (adjusted for Minimal API approach). We'll also talk about some of the important rules for writing middleware. Chapters: 00:00 What is middleware in .NET and how it works? 02:27 Writing basic middleware 06:04 A...
C# Structs demystified - guidelines on when to use
Просмотров 555Год назад
In this video we explore the use cases for structs and their advantages and disadvantages. We also focus on their quirks, and any issues arising from their incorrect usage. We also explore a code demo with the showcase of how they work internally. Chapters: 00:00 Intro 01:05 When to consider struct usage 04:20 Struct constraints 04:44 Characteristics of struct 05:32 Code sample 05:50 Don't rely...
Dependency Injection advanced topics: forwarding, scanning, named services
Просмотров 528Год назад
In this video let's explore some more advanced Dependency Injection concepts in .NET. Let's push the built-in DI container to the limit and also let's see how we can expand it with additional features without loosing previous container setup. Chapters: 00:00 Intro 01:02 Fowarding in .NET built-in container 04:27 Named services in .NET built-in container 08:40 Scanning for services with Scrutor
Basics of Dependency Injection
Просмотров 318Год назад
In this video let's talk about Dependency Injection in .NET and in general. Why is Dependency Inversion Principle important? Why do we use Dependency Injection? What exactly is dependency? Basics of Dependency Injection in .NET. Chapters: 00:00 Intro 00:24 What is Dependency Inversion Principle 01:15 Solving DIP 01:45 Dependency Injection Containers 02:45 Injection types 03:53 Dependency lifecy...
C# Heap vs Stack explained
Просмотров 3 тыс.Год назад
Explaining Heap and Stack differences in C#. Reference Types vs Value Types - where variable lives affect how code behaves. Exploring real-life examples of variable type differences. Explaining ref and out keywords. Chapters: 00:00 Intro 00:33 How does C# manage memory 02:02 Value Type vs Reference Type 02:24 Code Demo I 04:13 Passing different variables to methods 05:00 Code Demo II 06:06 Ref ...
Overloading Operators in C# - How & when?
Просмотров 431Год назад
In this video I wanted to show you which operators you can overload & how to do so. I also explore how overloading operators can help you avoid primitive obsession. Want to know the difference between is and or Type x = y; vs var x = (Type)y; Twitter: kyrcooler Chapters: 00:00 Intro 00:20 Operators we can overload 01:00 Assignment operator differences (Explicit vs Implicit) 01:40 Ex...
Intro to PowerShell Core - params, switches, pipelines, select, where
Просмотров 232Год назад
In this video, I want to showcase what PowerShell Core is. Why it's good and the way for your scripting needs? I showcase how to use pwsh command line tool (how history & tooltips work) After that, I explore a demo code where we see how parameters, and switches work. At the end I showcase pipe | operator that uses allow to manipulate collections in a neat way. Powershell Core download link: git...
How to prevent your code from becoming legacy?
Просмотров 469Год назад
This video aims to explain what is Cyclomatic Complexity and how it helps prevent your code from becoming legacy code. Measuring this metric can help you easily detect logic complexity that so often leads to legacy code. It also shows a demo of refactorings done to C# code based on complexity measurement. It also adds some tips for applying them in practice in much more advanced scenarios, but ...
How does EF Core keeps track of changes?
Просмотров 4,9 тыс.Год назад
In this video I showcase how Entity Framework Core knows what to save to database on SaveChanges. I want to explain how Entity States works and what exactly is ChangeTracker. After that I showcase common tips regarding Change Tracker - optimizations & common issues. Let's debunk the magic behind EF Core! Twitter: kyrcooler Repo: github.com/Mijalski/MinimalApiTutorial/tree/feature/bo...
How to use .NET Channels in practice?
Просмотров 2,1 тыс.Год назад
What are Channels in .NET, what problem do they solve? How do they work and how to use them? Showcase of ChannelReader in Background Services thus offloading your API endpoints that are replaced with ChannelWriters. With a demo of practical guide on optimizing your endpoints using Channels. Good to see before: What are background services: ruclips.net/video/eXoEF59NDqk/видео.html Minimal API: r...
How to Work with Background Services in .NET
Просмотров 1,6 тыс.Год назад
Have you wanted to implement background service in .NET? Do you need to perform some logic when your application starts and want to do it in a non-blocking way? Are you trying to remove Hangfire dependency from your project? In this video, I aim to show you what is a BackgroundService and IHostedService in .NET and how to work with them. Twitter: kyrcooler Chapters: 00:00 What are b...
Async optimization in C# (ValueTask, Async Eliding, Task.CompletedTask)
Просмотров 1,4 тыс.Год назад
How to optimize async code? Are ValueTasks always better than Tasks? What is async eliding and what are the benefits and drawbacks? In this video I wanted to answer all the questions listed above. Sources: devblogs.microsoft.com/dotnet/understanding-the-whys-whats-and-whens-of-valuetask/ blog.stephencleary.com/2016/12/eliding-async-await.html Twitter: kyrcooler 00:00 ValueTask vs Ta...
How Async and Await work under the hood in C#
Просмотров 9 тыс.Год назад
You use async/await keywords everyday when working with C#, but do you know how they work under the hood? Do you know what exactly is Task and how it should be used? Twitter: kyrcooler 00:00 Intro 00:11 What is a Task 02:14 What async and await keywords mean 03:45 How async improves synchronous code 05:59 DOs and DONTs of async
How to design & create .NET API in 2022
Просмотров 1,1 тыс.2 года назад
Exploring the Vertical Slice architecture in practice by taking advantage of .NET Minimal APIs. Organizing your code into modules that are fully self-contained can be extremely beneficial and allow you to deliver product quickly, without closing the door to microservices later down the road. Repo link: github.com/Mijalski/MinimalApiTutorial Inspired by: timdeschryver.dev/blog/maybe-its-time-to-...
thank you for video, clear explaination.
This is exactly what I was looking for. It's surprisingly hard to find good information on structs because people always just say not to use them and start talking about premature optimization. However, sometimes performance is important and if you understand why and when to use them there's nothing premature about it; it's simply optimization.
The advise on using Task ctor is flawed. There are many scenarios to create not started tasks.... If you don't have any specific requirements to create a task, you don't need to use factory, just use the Task ctor.
vscode and vs2022 and vs2019 it is really not that hard.
Its because 7 eight 9
I really dislike the visual studio and vistual studio code naming, it makes it really annoying to search
C# is just 1 languege in .NET ecosystem with other 20 langueges sharing same features and libraries. all those langueges are compiled to MSIL (bytecode) which can be launched as JIT ("just in time" like Java) or AOT ("ahead of time" like C++) you can have 1 program with parts writen in different langueges .NET framework is old framework with lot of bloat from old versions (backward compatible) and work only on windows .NET Core is crossplatform written from cratch
Cool
C# is not .NET, it's a part of .NET like Java the language is part of the JVM ecosystem
exactly, but Java never brands itself as JVM, but C# often times uses .NET keyword to describe itself (wrongly) in job postings, tutorials etc.
@@hubertmijalski because C# share libraries with other .NET languages
0:47 its because of it that before windows 10 would be the last windows operating system, so they used 10 cuz its round and complete when 9 it suggesting that will be another windows os.
On Visual Studio note, there's a third one. It's called Blend for Visual Studio.
They unified blazor server and wasm with .NET 8, so this is a single product now
They likely skipped 9 because a lot of existing code looked for 9 to detetmine if os was 9x (i.e. 95, or 98).
java > c#
nope 😅
@@hubertmijalski it’s better
@@jimmlmao i'm sorry, but you're just wrong. Java is just a worse version of C# atm - it's slower, has less features, is more verbose and is falling off steadily for some time now :)
it took them so long to add string interpolation what a fucking joke ugh
Also C# naming conventions with interfaces is bad all interfaces start with I for some reason
Microsoft is not the only one guilty of that, Google and Apple also come to mind, out of all tech companies, probably, only Sony is consistent in their naming practices. With them you know that the bigger the number, the newer the model. Even Sony Ericsson followed that practice. They fumbled it a little with their headphones though, like what in the world is WH-CH720N
Good examples of MS namings: Microsoft Message Queue (compare to Kafka). Notepad (compare to gazzilions of nonsense). Internet Information Service (compare to Apache httpd). Internet Explorer is the perfect nane (RIP)
“Visual Studio, the blue one” and “Visual Studio, the purple one” is how I explain it to people 😂
Because Microsoft sucks
...And here I was annoyed about the _all Pascal-case_ naming. LOL.
Another thing is the C# convention of prefixing interface names with “I”. I feel like it’s very redundant and unnecessary. In my opinion, Go is a perfect example of interfaces done right. They typically contain a single function and the interface names end in -“er” (e.g. Logger, Reader, Writer, etc).
The prefix makes it easier to tell apart classes and interfaces at a glance, even without knowing the entire codebase
You are just more used to go The last thing I can complain about .net is interfaces prefix
I prefix for interface is concider as best practice for most languages with interface and most interfaces have more than just 1 method😀how would you even call class implementing logger without -er?
@@davr1 you shouldn’t be able to tell the difference between the two, interfaces are an abstraction and c# is treating them more like a template
So... is .NET just C#? Or is it a superset of C#? Or is it a framework on top of C#? Is C# automatically .NET? I'm confused
.NET is a platform. You can write in multiple languages on .NET (i.e. C#, F#, VBS).
Ngl I never had problem googling VS and VScode because most of the time, seemingly no one has the same problem and the search result is completely irrelevant.
microsoft be microsofting
they skipped 9 to avoid confusion, a lot of old programs refer to win 95 & 98 as windows 9.
Im a win32 app developer and i can confirm. Nope!
the best example i've seen is the .NET bindings to the macOS libraries. (formerly called Xamarin.Mac) The framework version is net8.0-macos, the library you reference is Microsoft.MacOS, the docs call it ".NET for macOS" (or if you're unlucky, just .NET) The GitHub repo is still called xamarin/xamarin-macios even though Xamarin is dead. Good luck googling for any of that and getting relevant results
I didn't even know. .net is the new name for..net core. That's going to get people who are just starting out in a bit of hot water when they follow an old.net solution.
stealing terms for their own use, windows, dos, C, net, surface, the number one.
C# and dotnet is different though??? It's like comparing java with jvm. Kotlin exists. So do f# and vb
"DotNet" and "CSharp" work in Google.
Let's not forget that Razor Component files are named .cshtml and Blazor component files are named .razor /)_-
That's beautiful.
Thats incorrect, cshtml files are called "razor pages". While .razor files are called "razor components", which people of course call "blazor components" as that would have made way more sense as name and extension.
>using dotnot found the core issue
Wow! Great comments feel the same can be said about car models 😂
Not to mention that Windows Powershell is different from Powershell.
"PowerShell" is PowerShell Core, right?
Wait what
There is an old Powershell (Powershell 5 that is using .NET Framework) and new Powershell (Powershell 7 that is using .NET 8) "Blue" is old while "black" is new.
i love this video
Windows 9 was skipped to avoid bugs with versioning in spme older tools, which effectively only look for first character in version string.
it was actually skipped because 7 ate 9
Do you have any source on that? Tbh I'm not sure how it would work? Are the programs written for95 that run on 10?
Nop, it's just that 9 feels like a non finish products. Customer will wait the version 10 and skip the 9 one
@@avarise5607 yeah... Not so sure about this one. Windows 8 for instance is technically speaking Windows v6 or something. Besides, even if they some code relied on the marketing name, Microsoft people going out of their way for such a specific and theoretical case hardly seems believable...
Adding to the blazer part: and it is done in .razor files, which doesn’t have basically anything to do with the thing called razor xd
jeez, how on earth could Windows Forms, Windows Presentation Foundation, Universal Windows Platform, WinUI 2, WinUI 3, MAUI, Windows App SDK, or any of the other UI framework names ever confuse anyone??? /s
thank you for the tone indicator, twitter man.
That's a good example. It's hard.
@@freedomgoddess /s has nothing to do with twitter my guy
@freedomgoddess tbh never used twitter
@@freedomgoddess what's wrong with tone indicators?
most naming shenanigans happen for historic reasons, everybody thinks the previous guy got it wrong, and a couple decades later it's a mess
.net is not just c#, there are also f#, powershell, visual basic and some third party ones
batch
@@Win_7❌
@@Win_7 batch is not a .NET language afaik
@@thezipcreator is powershell then?
@@Win_7 yes; you can use .NET classes in powershell
microsoft people coming up with codenames: cools stuff like chicago, longhorn, scarlet microsoft people coming up with actual names:
also shout out that the remote desktop app for mac is now called 'windows app'
@@pinkorcyanbutlong5651 I saw that too and I'm refusing to update. wtf
Microsoft doesn't know how to name variable 😭🙏
Very good video, it is the in depth explanation I was looking for, thanks!
in the Eliding examples you show the eliding method in the first example only executes at the await which is where you would need to put the try catch. Then in the next example the eliding method executes and throws the exception before it ever hits await. So what is the difference between the two. I wish you would have left the GetSomethingInternalAsync methods the same so we would be comparing apples to apples but as it is, it is confusing. Is Task.FromResult making the difference? Because in the second example all you say when discussing that line is "it will perform anything after the the first await here as well" which makes no sense because no await has been called yet unless you are talking about the await from the previous GetSomethingAsync method called earlier.
Good introduction. I also liked the use of IServiceScopeFactory<T>. Slightly more slick than my usual approach. 💪
Regarding Asyn suffix. Its advisable to add this suffix 1) when you have synchorios version of the same method in the same class 2) if this method is async void then IDE might not help 3) just to increase readability.
Thank you for the great explanations.
Fine case yet so far. But about that DI container. We can actually register an interface multiple times without overwriting. Just give it an alias and bam you're done.
can you explain please what do you mean about "register an interface multiple times without overwriting"?
Thanks so much for this clarification
Excellent explanation, thank you so much
Great video on a difficult topic. Thanks!