Tools To Get Rid Of Your Code Smells - .NET 137

Diyaz Yakubov comes on the show this week to talk about a few tools he's using to make his life easier at work. We talk about NDepend - a code analyser that you can use on your IDE or CI/CD pipeline to give you recommendations on your code structure and then we move onto C4Model - a new graphical notation language and SharpLab - a neat little online code playground that can convert your code to IL or ASM.

Special Guests: Diyaz Yakubov

Show Notes

Diyaz Yakubov comes on the show this week to talk about a few tools he's using to make his life easier at work. We talk about NDepend - a code analyser that you can use on your IDE or CI/CD pipeline to give you recommendations on your code structure and then we move onto C4Model - a new graphical notation language and SharpLab - a neat little online code playground that can convert your code to IL or ASM.

Sponsors


Links


Picks


Transcript


Shawn_Clabough:
Hello and welcome to another episode of Adventures in.NET. I'm Sean Cleber, your host, and we meet today, Weilu. Hey, Wey.
 
Wai_Liu:
Hey Sean, what's going on?
 
Shawn_Clabough:
Winter has started here. We've been getting snow and rain and wind. And so just the other day I woke up and we had two inches of snow on my deck. It's kind of weird because
 
Wai_Liu:
Alright.
 
Shawn_Clabough:
like a week and a half ago, it was like 70 degrees. So strange
 
Wai_Liu:
Yeah,
 
Shawn_Clabough:
weather.
 
Wai_Liu:
we're getting, we're getting tons of rain here. Um, we had, they had Halloween is like a big thing in Australia now, but this year it was like just all rained out. So it's a shame.
 
Shawn_Clabough:
Is
 
Wai_Liu:
No,
 
Shawn_Clabough:
Halloween
 
Wai_Liu:
hello.
 
Shawn_Clabough:
a new thing for Australia?
 
Wai_Liu:
I think in the last five years it's probably not as big as the States, but it's kind of started being pretty big now. Or maybe I've just noticed because I've now got trick or treat
 
Shawn_Clabough:
Kids.
 
Wai_Liu:
age, yeah.
 
Shawn_Clabough:
Yeah.
 
Wai_Liu:
But yeah, it's good. I like Halloween and it's a shame that we couldn't do trick or treating this year.
 
Shawn_Clabough:
Yeah, okay. Let's introduce our guest. Let's welcome Diaz Yakubova. Yakuba, say your last name Diaz. I can't say it.
 
Diyaz_Yakubov:
There's Jacobov.
 
Shawn_Clabough:
Okay. Okay. That's good. So let's start off. Why don't you tell us a little bit about yourself, you know, how you got into development and how you got into using.NET.
 
Diyaz_Yakubov:
Oh yeah, so basically my career started 10 plus years ago at university. I was doing one of the university projects which basically was.NET, ISP.NET application. And since then my main programming languages are like C sharp and.NET and JavaScript. So I started working in Kazakhstan, then I moved to Saint Petersburg, Russia, where I spent two years. And currently I have been working in Finland for almost three years.
 
Shawn_Clabough:
Okay, cool. So I think what we're going to talk about is an article that you wrote on Medium about.NET tools that you find useful and like to use. So where should we start on that list of tools? Which is your favorite tool?
 
Diyaz_Yakubov:
Yeah, so I can give some context to our listeners. So yes, the recent four or five years were very productive in terms of quality of my work. And I also noticed that some developers may struggle. to step out of the code and do some high level design. And moreover, it could be even challenging to do both sides of things, like doing the coding and doing the diagramming and designing. So at some point ago, I realized that I just need to have a set of tools that I would master. and so that those tools would accomplish the routines that make our, that makes our jobs less fun. So and of course, it had released a lot of time which I could employ or waste. So hence, I... came up with the idea of sharing my experience with others. Sorry. So I guess the most powerful tool that I have been using for almost two years is Endepent. So basically, it's a tool that helps you to go through all the things that you need to do. layers of.NET application. You can observe it. You can check its dependencies and have a better visualization than, for example, in-built Visual Studio or Rider can give. Yeah, so basically with Ndpan has its standalone application that you can install and use. And it also has a Visual Studio extension that you can install into your Visual Studio and use it along with other Visual Studio tools extensions. So basically... When you start using Ndepend, you may notice that there are a lot of things to learn and a lot of things to adjust and tweak. One of them is it's like reporting tool where you can adjust the special quality dates and checkers that may run. like may run on a daily base, and you can also automate it. And the pen produces a very good report where you can observe the quality of your code. Like there are several. Like. As I mentioned previously, it has those quality gates and checkers that you can adjust. And there are a lot of different quality checkers. For example, you can use cyclomatic complexity checker and you can put a number that the complexity of your class should not... should not be more than 15 points, for example. And independent will constantly check your project for that number. There are other checkers or quality gays that you can leverage and use. Besides that, you can also use your own custom quality checker if you want to do that. So for example. Let's assume that we are using or we adhere some naming convention in our project or we want to, yeah, naming convention. Let's assume that scenario. And we decided that the length of the class name should not exist. 20 characters. So a very simple checker that could be run many, many, many times and do this simple
 
Shawn_Clabough:
So, independent is really focused on checking code quality, making sure that you're adhering to standards that either your organization or yourself has put in place to make sure that things are more maintainable than things like that, is that right?
 
Diyaz_Yakubov:
Yeah, it's, yeah, this exactly what I want to say.
 
Wai_Liu:
Thanks for
 
Diyaz_Yakubov:
And
 
Wai_Liu:
watching!
 
Diyaz_Yakubov:
it also gives some possibility to observe the project. As I said, it has its like. visualization tool that can visualize the dependency graph. And the good thing of that, that it also shows like different dependencies. Like it even shows indirect calls like between classes and It also may cluster some components or projects to make one abstraction, one level of abstraction, to simplify the visualized graph.
 
Wai_Liu:
There's a code analyzer, kind of like JSLint. That's like a linter for C sharp, I guess. Yeah,
 
Diyaz_Yakubov:
Yeah.
 
Wai_Liu:
and it's got all the, and some visualization tools.
 
Diyaz_Yakubov:
Yeah, but like linter works simultaneously when you're coding, but independent works when you run it.
 
Wai_Liu:
when you compile,
 
Diyaz_Yakubov:
So
 
Wai_Liu:
yeah.
 
Diyaz_Yakubov:
yeah, you can also configure this part. So another thing that it also has like headless version that you can install on your CI-CD pipeline and leverage the reporting and quality gates checking there.
 
Wai_Liu:
Yep, so you can put it into a DevOps pipeline or GitHub
 
Diyaz_Yakubov:
Yeah,
 
Wai_Liu:
actions
 
Diyaz_Yakubov:
exactly.
 
Wai_Liu:
thing, and then have it check it every four, you go into another environment.
 
Diyaz_Yakubov:
Another environment. Yeah.
 
Wai_Liu:
Cool, yeah. And is this an open source tool?
 
Diyaz_Yakubov:
And fortunately, it's not open source tool.
 
Wai_Liu:
Oh,
 
Diyaz_Yakubov:
So.
 
Wai_Liu:
is it free or is it paid?
 
Diyaz_Yakubov:
It's a paid so yeah,
 
Wai_Liu:
Oh, okay.
 
Diyaz_Yakubov:
yeah, and it's not cheap to be honest and Like But it gives a very good quality checker tool that you can use and customize. And it's pricey, but I think that it costs its money. So.
 
Wai_Liu:
Well, my eye I think we've...
 
Shawn_Clabough:
Yeah, it looks like it's about $500 US for a one year license. If you want to get three years, it'd be like double that. So there is renewal discounts and things like that. So yeah, it's a little pricey for most developers, especially if they're going to pay for it on their own. But they might have some discount programs, things like that, available.
 
Wai_Liu:
I'm guessing it's the target audience is more for corporations and things like that, especially since we're talking about putting into a CIC pipeline. So for big corporation, you know, $500 a year per developer is okay because you pay a developer a lot more than $500 a year, right? And if you can increase their productivity by that much, it's fine. So yeah, I can see people buying it if it's useful. Yeah, is that something that you've bought yourself or is it free of the company that you work for then? Just out of curiosity.
 
Diyaz_Yakubov:
Yeah, it was free. I didn't buy
 
Wai_Liu:
Oh
 
Diyaz_Yakubov:
it.
 
Wai_Liu:
nice okay fair enough.
 
Diyaz_Yakubov:
But like I left the company and now I'm considering to buy. because.
 
Shawn_Clabough:
So what's the benefit of being able to see all the different dependencies that are, that it's, that's in your project? I mean, you know, as you're developing, you kind of know which, which relationships you put between your different projects and any external packages that you developed. So you kind of already know that, but what does this tool add to just that basic understanding?
 
Diyaz_Yakubov:
Yeah, like it's very helpful when like... like several teams, let's say, let's put it like this, when several teams working, may work on the same project. And like, and it could be a monorepository with like several projects. And the big projects that has like tons of different projects could be a bit tricky to observe and... control all of those changes that may be introduced by other developers. So by these two, you can detect some changes which you don't want to see in the code base. And it also may give some feeling of... not controlling, but let's say it just ensures that the code is good and there are not bad smelling dependencies between different projects. Because in development, when we do the projects, we usually adhere some principles like DDD or like... onion layered architecture and so on. And like certain types of projects, like repositories or patterns, they use like defined dependencies, right? So, and by like checking on the graph dependencies, these kind of different types of calls. you can prevent the bad smelling cold before it contaminates other parts of the project.
 
Shawn_Clabough:
Does does NDPen have like its own little query language? I think I read that in your article. So.
 
Diyaz_Yakubov:
Yeah, exactly. So it has this CQLink query language, which allows you querying the production code with C sharp and link you like syntax. So it has its own like some special, let's say language constructions that you can use. The approach is very simple. So every.NET developer may just take it and use it because it's the same C sharp and link you. So.
 
Shawn_Clabough:
So what kind of things would you query about your code? This kind of sounds interesting. What am I gonna ask the system to give me a report on my code?
 
Diyaz_Yakubov:
Yeah, so let's I can give an example. So it's also this example in my it's mentioned in my article that. We like we use the DDD approach in one project and there is an aggregate term for certain types of classes. And the. The problem with aggregates that the new developers tend to make them superclasses or too big, too complex, and so on. And to prevent that, we put a special small checker that checks the cyclomatic complexity of all classes that contains the act. agg suffix, which we used to like, to mark that this object is aggregate. So this is just a simple like example, but it gives like so much control over the code and and other like scenarios could be even built. more in a more complex way. So we also with CQLink we also check the that certain types of classes has right attributes to do some work. certain types of classes has this attribute.
 
Shawn_Clabough:
I imagine you could query something like, you know, show me any methods that have, you know, a number of lines exceeding some amounts. You can say, hey, that's probably too much. You should probably break it out and refactor it.
 
Diyaz_Yakubov:
Yeah, exactly. And you can also count the number of arguments of the method. If it's too big, then probably it smells and you have to like refactor it. Yeah. And so on and so on and so forth. There might be a lot of cases where like the good thing that like you can write the small C Q link query, which could be very simple, but it helps a lot during the development and daily routines.
 
Wai_Liu:
And is it
 
Shawn_Clabough:
Okay.
 
Wai_Liu:
only for a Visual Studio or is it for a Visual Studio code or other ideas?
 
Diyaz_Yakubov:
Uh, uh, it like the, yeah, the, uh, they just, uh, released the new version of independent. I have not used it yet, but the announcement, uh, says that, uh, now you can use it in visual studio code as well. Previously, it was not possible. And, um, like, and the across environment development was a kind of bottleneck of independent. It was Windows only, Windows only tool, let's say. But this headless independent, I was able to run it in like Linux and Mac OS environment. But the application itself or the extension was available only for... Windows machine. But recently, I guess it has been changed. So I'm looking
 
Wai_Liu:
Yeah.
 
Diyaz_Yakubov:
forward to check this.
 
Wai_Liu:
I think it's a really interesting space, this whole intelligent coding thing. I've kind of noticed that even IntelliSense is starting to get smarter and smarter. The recommendations it can give you and things like that, whenever you highlight over code and things like that to try to make your code better. So it's really interesting how we're starting to use AI and things like that to make our code smarter.
 
Diyaz_Yakubov:
Exactly. So I guess the smart thing starts with small things. So and CQ link is about that. Just little by little you can build a very impressive quality like gates for your product.
 
Shawn_Clabough:
Okay, so what's the next tool that you find useful that you...
 
Diyaz_Yakubov:
Yeah, so the next one is the, like, it's not the tool, but it's more about the way of visualizing the software architecture. And its name is the C4 model. And yeah, it's developed by Simon Brown. So is an author of this type of visualizing software, visualizing, sorry, technique. So and the, like, the idea is very simple. There are, like, four levels of obstructions and each level represents its own, like, semantic payload and what could be drawn here. The problem with how I came up with these two, so I used to draw a lot of diagrams and my previous workplaces. And one thing I noticed that not every diagram may convey the idea. tell the story. So like usually you may not like you may not understand the diagram just by yourself by like looking at it and like understand what is going on there. So basically you need like a person who know who who designed that diagram and he may like accomplish the story and tell you the story and go through the diagram with you. And then I found this C4 model that gives you the possibility to diagram the the software architecture that will tell the story and you don't really need like An after all this diagram to to share it with someone so you can just send it and it's very readable understandable and it It's just Standardized way of presenting the information so There are four levels, as I said. And the first level is the context level. And basically, it just tells it to present the system as a black box in the center of the diagram. And around, you can see only the external systems and actors that are in the background. in some way uses this software system. So basically, it's a system and it's surrounding world or external world. And these diagrams, this type of diagram shows the kind of big picture. And it just tells you that this system works like that and interacts with. those external systems. That's it. And one you can drill down one level. And the next level is the containers. And it represents the system in internals in a container wise. So basically, Basically, what is the container? Container is a deployable unit. So please don't confuse with the Docker container. So it's not about the Docker. But the thing that it should be deployable, for example, database, it's deployable thing. So you can call it container. Then the application, the front end also. because you can deploy it into the browser. And it's like deployable and runnable. So, and there you can, like on that level, you can show like how different deployable parts of your system interacts with each other. And each box has a brief description, what is the container about. For example, if it's a frontend container, then you can, if it's like web client container, let's say, then you can put some details about the tech that like maybe it could be like React-based application. And then you can put some brief description that this application is an admin panel and and so on and so forth. So in the next level, if you drill down, so basically you, for example, select any of the containers and you drill down to the components level. On a components level, you may observe different components within this particular container slash application. And those components are basically abstractions of your system, of the application. So they shouldn't represent your real code base like classes and so on. Rather than that, it just gives you like understanding what are the internals of this application. So for example, if we are talking about basic application. Usually it has several types of different services that you can use. For example, you have an integration with GitHub and with something else. So you can put GitHub integration as a component. But it might be that the... like GitHub integration code has several other, has many, many other classes and interfaces and so on, but it really doesn't matter. You just want to tell the story that it has a GitHub integration and there is a dedicated component for that. And the last one is the code level, which is basically the dependency graphs on a code level. So there is nothing new. So basically Visual Studio code may generate it automatically so you don't have, you don't really need to draw them. And I would say that like in most of my projects... I used only first two diagrams, so context diagram and the containers diagram. And the components diagram was kind of optional, so I used them for several projects, but I used them because I used the components diagram because some some parts of the system was too complex. And for that, I made the components diagram and I've never, like never ever used to draw the code diagram. So I guess it's just like Visual Studio may do that. Yeah, so... Basically, yeah, that's it. So about the C4 model, so it
 
Wai_Liu:
Thanks
 
Diyaz_Yakubov:
just
 
Wai_Liu:
for
 
Diyaz_Yakubov:
gives
 
Wai_Liu:
watching!
 
Diyaz_Yakubov:
the clarity and the good level of abstractions over the complex software.
 
Wai_Liu:
So I was just gonna ask, what tool are you using for this? Cause this is a language, right? Is there like a tool that you can actually use to...
 
Diyaz_Yakubov:
Yeah, so, yeah, so you are right. So it's a language. And but there are like several ways of. several ways of drawing these diagrams. So the first one and the most basic one is just using some tools for diagramming like drawio or Miro or some other tools. And my preferred one is Plantumel. So it's Visual Studio Code. By the way, it's also a text-based diagramming tool. It's a language. So you can, as a YAML file, you can define what components you have, what it does, and so on. make the relationship between those components in a text-based way. Then the plant.uml will automatically draw this thing. There is a Structurizer modeling tool which is found by the author of C-Form model. And it's expensive. You have to pay for that. But the good thing that it has one free workspace, basically, if you want to try it out. So you can register there and have one free workspace where you can. draw these diagrams and the good part of Structurizer is that you can... the diagrams are interactive so you can drag and drop them and drill into particular parts of the components.
 
Shawn_Clabough:
Okay, so your article, you know, goes through lots of different tools in there. We probably only have time for one more tool. So what's the next tool that you want to let people to know about?
 
Diyaz_Yakubov:
All right, so I guess the... Yeah, my favorite one is SharpLab by Andrej Shchokin, I guess I pronounced it correctly. So it's a website where you can try out the new C Sharp syntaxes. And you can observe how.NET works under the hood. For example, you can measure different performance parts, and you can also learn how the memory in.NET works, the memory management part. I like it because it really helps to understand the.NET internals. I highly recommend checking It's a great website that can visualize the difficult.NET memory management part.
 
Shawn_Clabough:
Do you know how this compares to like try.net or do you know?
 
Diyaz_Yakubov:
Try.net. I
 
Shawn_Clabough:
Yeah,
 
Diyaz_Yakubov:
have not used it.
 
Shawn_Clabough:
try.dot.net. Basically it's just a way to run your C Sharp code in the browser. So it sounds like the Sharp lab is probably a little more. in depth, you know, if you're learning how the internals are working and things like that from SharpLab. So that's probably more than what the try.net website is. So try.net is basically just kind of like a playground for testing out different.net development stuff.
 
Diyaz_Yakubov:
Okay.
 
Wai_Liu:
So what you paste your code onto the SharpLab website of it and it just gives you a bit more information and tell you what it's supposed to do.
 
Diyaz_Yakubov:
For example, yeah, so it has different constructions and my favorite one is the inspect method that where you can draw out the memory graph, for example. So and like it... The memory management stuff is like in.NET is kind of the most difficult part and the most sophisticated one. And it's just interesting to see how.NET allocates and manages the memory. And when the new feature of C Sharp is released, it's also good to check out how it works in in memory wise. So you can paste it and then you can see on a left side there is a code editor. And on the right side, the SharpLab may visualize how it allocates the object into the memory. So it has, it represents like two sections, the stack and heap, and you can see how, for example, objects are, where they are located and how the links or routes goes from where.
 
Wai_Liu:
Yeah, it actually does sound pretty interesting. I'm just on the site now, just playing around with it. So, you can compile it into IL and just machine code and things like that. So, yeah.
 
Shawn_Clabough:
Okay.
 
Diyaz_Yakubov:
And yeah, as I said, it's like very good way of checking the like new features of C sharp. Yeah. So it
 
Shawn_Clabough:
So
 
Diyaz_Yakubov:
it
 
Shawn_Clabough:
does this actually run your code, or is it just going to show you what it kind of compiles down to?
 
Diyaz_Yakubov:
I guess it runs it inside because how it may show all those things.
 
Shawn_Clabough:
Well, I could just use the compiler to take your code and then show what the inner, the IL language would end up being or something along those lines, you know,
 
Diyaz_Yakubov:
Yeah, that's
 
Shawn_Clabough:
where
 
Diyaz_Yakubov:
also.
 
Shawn_Clabough:
try.net is pretty much just geared towards running some code, not
 
Diyaz_Yakubov:
Cut
 
Shawn_Clabough:
showing
 
Diyaz_Yakubov:
that.
 
Shawn_Clabough:
you what it compiles down to.
 
Diyaz_Yakubov:
Yeah, it runs it. I do believe that it runs it because there are modes that you can select, like debug, and there is also a run button. So I'm not really sure how it works, like behind the scene, but it's a good thing. resource of like learning and trying out new things.
 
Wai_Liu:
I think it's only for one file as well, right? It's not like you can just kind of push the whole, I don't know, C-sharp project on there and it does it there.
 
Diyaz_Yakubov:
Nah, nah, I get it. It's like a geeky tool. It's
 
Wai_Liu:
Yeah.
 
Diyaz_Yakubov:
just for like, if you're curious about something you can observe it there.
 
Wai_Liu:
Yeah, I can see myself kind of pacing a few lines of code to see what it does on some times.
 
Diyaz_Yakubov:
Thank you.
 
Shawn_Clabough:
Okay, well great, thanks, DS. If people have questions and they wanna get in touch with you, what's the best way to do that?
 
Diyaz_Yakubov:
Um, yeah, so, uh, I guess the link on my article would be in like in this podcast, right? So,
 
Shawn_Clabough:
Yeah, we'll put
 
Diyaz_Yakubov:
uh,
 
Shawn_Clabough:
the link to the article in the show notes. Yep.
 
Diyaz_Yakubov:
Yeah, so on the medium, they may ask all related questions to that topic.
 
Shawn_Clabough:
Okay, okay. If our listeners want to reach out to the show, we'd love to hear from you. They can get in touch with me. I am on Twitter. I am at dot net superhero. And with that, I guess we'll move on to picks. Why, do you want to let us know what your pick is this week?
 
Diyaz_Yakubov:
Oh yeah.
 
Wai_Liu:
Yep. You go first, if you want to.
 
Diyaz_Yakubov:
No, no, you're going first. Yeah, I just interrupted you. Go, go, go.
 
Wai_Liu:
Okay, okay. No, that's okay. Uh, so my pick this week is a new show on Netflix. It's called Blockbuster and it's about the last Blockbuster store. I think it just came out this week. So it's kind of like a sitcom, I guess. And it's, I guess it's kind of ironic that it's on. It's on Netflix. Um, given that Netflix ran Blockbuster out of business. So.
 
Shawn_Clabough:
So is it the real last blockbuster that's on it or is it just a series show that's based around the last blockbuster?
 
Wai_Liu:
I think it's just a fictional show. It's not like a,
 
Shawn_Clabough:
Okay.
 
Wai_Liu:
yeah, it's not like a documentary of, I don't know,
 
Shawn_Clabough:
Yeah,
 
Wai_Liu:
is it still,
 
Shawn_Clabough:
I think I've seen a documentary on the last one.
 
Wai_Liu:
yeah.
 
Shawn_Clabough:
So
 
Wai_Liu:
Oh, is
 
Shawn_Clabough:
yeah, the last one. Yeah,
 
Wai_Liu:
it?
 
Shawn_Clabough:
yeah, I
 
Wai_Liu:
Is
 
Shawn_Clabough:
think
 
Wai_Liu:
it,
 
Shawn_Clabough:
it was
 
Wai_Liu:
are
 
Shawn_Clabough:
in
 
Wai_Liu:
they
 
Shawn_Clabough:
Oregon.
 
Wai_Liu:
still around? Is that one still
 
Shawn_Clabough:
It
 
Wai_Liu:
around?
 
Shawn_Clabough:
was in Oregon. I don't know if they still are going or not. There was there were two left. I think one was Alaska and one was Oregon. And then I think Alaska shut down if I'm right. And
 
Wai_Liu:
Ha ha
 
Shawn_Clabough:
but
 
Wai_Liu:
ha.
 
Shawn_Clabough:
I don't know the current status of the one in Oregon.
 
Wai_Liu:
Okay, yeah. No, it's definitely not about the one in, but it's not a fictional thing, it's just a comedy.
 
Shawn_Clabough:
Yeah. Oh, okay. Cool. Alright, yes. Do you have a pick for us?
 
Diyaz_Yakubov:
Yeah, so yeah, like my pick is kind of more professional. So yeah, I highly recommend reading the CLR via C Sharp by Jeffrey Richter. So this book is so called that that Bible and it helped me a lot to boost my not net knowledge and career. Or you can just put it on your table to impress your co-workers. No need to read. That's my pick.
 
Shawn_Clabough:
Okay? And my my pick this week, I think is going to be a website that I just found an article on when I was reading through different things. And it's a website called Disk Master. And this website, what they're trying to do is find and archive every possible CD-ROM and floppy disk that they could find. you know, anywhere in all of history. So they're trying to really become an internet archive of discs. of things that you know find in the past. So you can find all sorts of weird stuff out there. You can also find probably stuff that's probably dangerous and probably some viruses and things like that because they're just they're trying to archive everything. So I know when I try to go to it first in my browser it says warning warning there's stuff here that could you know potentially be harmful to your machine and things like that. So I'll put the link to the article that I found in the show notes. But yeah, if you just search for Disc Master Archive, it should probably come up for you.
 
Wai_Liu:
So it sounds like one of those like abandoned where websites where you can download, you know, old console games and things like that, but for city romp.
 
Shawn_Clabough:
Yeah, I'm sure how they're getting around all the copyright stuff that they're probably putting out there and things like that. But
 
Wai_Liu:
Well, all the companies are probably out of business.
 
Shawn_Clabough:
yeah,
 
Diyaz_Yakubov:
Is
 
Shawn_Clabough:
some
 
Diyaz_Yakubov:
it
 
Shawn_Clabough:
of
 
Diyaz_Yakubov:
a dark
 
Shawn_Clabough:
it. But
 
Diyaz_Yakubov:
net?
 
Shawn_Clabough:
yeah, they're trying to do, you know, you know, lots of graphics videos. You know, if you're looking for a specific driver that was, you know, 10. 15 years ago that's not on the manufacturer's website. You might be able to find it out here. So it's interesting, but yeah, definitely be cautious and don't blame me if anything goes wrong. So my disclaimer, you use it at your own risk. Alright, thanks, Diaz. Thanks, Wei. Yep.
 
Diyaz_Yakubov:
Thank you for hearing me.
 
Shawn_Clabough:
Yep.
 
Wai_Liu:
Thanks for coming.
 
Shawn_Clabough:
Great. Thank you. And we'll catch everybody else on the next episode of adventures in.net. Bye.
 
Wai_Liu:
Bye.
 
Diyaz_Yakubov:
Bye.
Album Art
Tools To Get Rid Of Your Code Smells - .NET 137
0:00
39:38
Playback Speed: