Coding Blocks - Static Analysis w/ NDepends – How good is your code?

Episode Date: August 10, 2014

This week we’re discussing NDpend, a static analysis tool for .NET. Triage your biggest problems, Prioritize your refactoring, and CYA with real metrics and trend lines. We also discuss hidden nugge...ts, Pintrest-envy, and we pour another one out for google reader. News Check out our YouTube channel! Angular 2.0 is coming! Beginning XML in SQL […]

Transcript
Discussion (0)
Starting point is 00:00:00 You're listening to Coding Blocks, Episode 15. Subscribe to us and leave us a review on iTunes, Stitcher, and more using your favorite podcast app. And visit us at CodingBlocks.net where you can find show notes, examples, discussion, and much more. And send your feedback, queries, and rants to comments at CodingBlocks.net and follow us on Twitter at CodingBlocks. Or head to www.CodingBlocks.net and find our us on Twitter at CodingBlocks, or head to www.CodingBlocks.net and find our other social links at the top of the page. That would be LinkedIn, Facebook, Google+. Yeah, I think there's some Google Plus on there.
Starting point is 00:00:34 There's a few other ones, so yeah, just go over there. Facebook, maybe? Did you already say Facebook? I think I did. So, yeah, they're all there. Everything but Pinterest. Wait, wait, what? No Pinterest?
Starting point is 00:00:42 No Pinterest. I wish we had a Pinterest, actually. Really? I see all these cool infographics all the time. I got nowhere to put them. All I wish we had a Pinterest, actually. Really? I see all these cool infographics all the time, and I've got nowhere to put them. Alright, we're going to set up a Pinterest account for Joe. Alright. And with that, welcome to Coding Blocks. I'm Alan Underwood. I'm Joe Zack.
Starting point is 00:01:00 And I'm Mike Wattlaw. And today, let's go ahead and get started with a little bit of podcast news. And I'm Mike Wattlaw. They're coming out with a new version of that. But every other thousand JavaScript libraries on the web are being currently deprecated. Daily, it seems like. But no, it took me a little while. But between looking at the various different apps and actually going through a few tutorials and messing with the code, it finally started making sense. I will say, though, that at least angular you know having the google back it makes it feel a little bit more safe that it's uh going to be around uh but uh what is it gw uh gwt it died well okay that was google as soon as i bring up one good you have to go and bash it
Starting point is 00:01:59 yeah i'm gonna pour one out a Google reader right here right now. What about Google Wave? I liked it. Well, you were like one of the three people on the planet. I think they used it. It was great for my Dungeons & Dragons campaign. Awesome. But yeah, so hopefully here in the very near future, we might actually have a little bit of information on Angular.
Starting point is 00:02:21 I might come with some tips and whatnot. So yeah, we'll see. Yeah, I'd love to talk about Angular. I've always heard it's one that you can't sprinkle in there like you got to go full bore yeah that's absolutely true one of the things that i did learn this week that i'll throw out there that was kind of interesting is i wanted to do some server side authentication or no authorization on on portions of it that's not how that works like when you create your html template files those actually get compiled into javascript string templates that are then used in your app so it's not it's not doing any um ajax calls out to the server to get those templates so even though
Starting point is 00:02:55 you're creating html templates those get compiled down in javascript so that was one thing that i found really interesting so that's just you know did he just say an oxymoron? Compiled JavaScript? Okay, not compiled. I thought I heard that. It gets broken down into. But it's actually through a build because I'm using Grunt and Bower and all that stuff. So, yeah.
Starting point is 00:03:15 Anyways. All right, moving on. Interesting. Also, we just got done talking about SQL. It had to be two-parter there. But I actually just went to a meetup on beginning XML and SQL Server, and there was some stuff that I knew about. Like I knew that XML was kind of like a native type in SQL,
Starting point is 00:03:30 and that you could query and do some cool stuff with XPath. What I didn't realize, and this was the big takeaway for me personally, is that you can generate XML really easily and really complex XML. So you can actually do joins and do things and it'll group by and it'll come out well formed XML documents, which is great for integration type projects. So that was really awesome. And that title that was beginning XML and SQL server with Don Wirt and we'll
Starting point is 00:03:56 have a link to that. Cool. And yeah. And I also want to give a shout out and thanks to uh rye guy welch we got a five star review on itunes from him nice little write-up here says uh informative and entertaining bets best podcast for programmers maybe the only one of its kind discusses current trends issues and technologies and software development great quality and easy to listen to so thank you yeah and we got another one also from glenster 75 it was also a five-star review on itunes
Starting point is 00:04:31 and he writes best coding podcast i learned something new every episode that's excellent that's what we're here for so thanks again for taking the time to write that and click the uh the review in itunes yeah and and we really appreciate those reviews. We talk about it all the time, but one of the big reasons, I don't know if we ever talk about why we like them so much, is aside from letting us know how we're doing and if there's anything we can do better, it also bumps us up. And so a lot more people end up seeing us whenever we get a review.
Starting point is 00:04:57 So it really helps us get the word out there, and it's awesome. Yeah, and we're trying to make people better programmers, including ourselves. Not to mention that it's just motivation in and of to make people better programmers including ourselves i mean not to mention that it's just motivation in and of itself yeah it really is anytime we get that it's it's a super booster to us yep so that's awesome all right so what are we talking about speaking of super boosters today we're talking about a tool called independ and what it does for you so um first of all we should probably say that we actually got a free professional license
Starting point is 00:05:28 from Patrick's, I'm not going to be able to say it, Smatia. Close enough. Sorry, Patrick. We did write you an email to see how to say your name, but we sent it a little late, so sorry about that. I'm William Allen. Yeah. Very lame.
Starting point is 00:05:44 So take that into account when you think about it. So some of the stuff, you know, we're saying we did get free copies, but we're going to try to be brutally honest and say what we feel. So, you know, there you have it. Yep. And just before we get started, one of the roadblocks to us getting rolling with independent, at least I know myself and I think Outlaw also had some some issues as it seemed like we were having some pretty major instability
Starting point is 00:06:09 for for me well before you get into that though just in all fairness because i actually did have a little bit of a back and forth with patrick on this and and because he was saying that he i i did have some instability with it like it brought studio down to its knees for me and uh you know i had some back and forth with him and with patrick and he was saying that he didn't have any of the problems that i was having and he was using similar plugins like a web essentials or a resharper or dot cover or anything like that post sharp maybe and um you know even though we had similar plugins he wasn't experiencing it and we even compared you know like size of projects so yeah so with that what i found was causing
Starting point is 00:06:54 the problem for me is i had updated to visual studio 2013 and the project i was working on was basically hosted in a git repository and with visual studio 2013 there is a new git plugin that is on by default and what i found is that was eating up like 30 of my cpu on an i7 with 16 gigs of ram like it was just it was destroying my machine like i couldn't even type in visual studio i disabled that plug-in by going into the options and basically had no more problems so independent worked for me after that so if if anybody's seeing these kind of issues and you've got a fairly large project you're working on or a big solution i would recommend going in there and disabling that get plug-in well we've
Starting point is 00:07:43 actually talked about git plugins in the past um in a past episode shoot i think it was episode two but uh um yeah they really don't work very well yeah no like i i have i know that there are some people that just absolutely love them but for me i haven't had good luck with any of them. And this is an example of one. Sorry, it was episode three. This was episode three, source control etiquette. But I haven't had good luck with any of them. This is an example of one that was straight from Microsoft. Here's the horse's mouth.
Starting point is 00:08:16 And it still started causing problems where it was causing Studio to just churn away. Yeah, I mean, it was pretty ridiculous. My CPU sat at 30% constantly, and it was that Git plugin running. So I just wanted to preface that. That's one of the reasons why it took us a little bit of time to get around to finishing this kind of thing up, because we were trying to figure out exactly what was going on. And I want to say, too, it's actually been great for me.
Starting point is 00:08:46 And one thing that kind of didn't make sense when we're talking about the performance problems initially is that uh an end of it doesn't really seem like it's doing a whole lot when you're just kind of doing your day job like most things you kind of need to run something specific or pull up a dashboard and click around into it so i don't really know where that kind of thing would come from yeah that's a good point yeah i don't know. But I do want to point out there are a couple different versions available of independent. One of them specifically is a build server license that you get that would be perfect for your CI server.
Starting point is 00:09:19 However, we're not going to be focusing on that version in this episode. We're going to be talking about the features of the Visual Studio add-in. But I will say one thing about the build server that sounded pretty cool when you look at the feature set was if you have that integrated, it'll do your snapshots for you, build your reports for you on the fly. So it is a cool feature if you've a team working on you know doing multiple releases and whatnot being able to see how your code changes over time so absolutely um so let's get into some of the feature set of independent and this thing's uh it's a pretty big monster like there's a lot of functionality in here so we're not going to be going over them all in depth
Starting point is 00:10:02 because this would turn into hours and hours but we do want to hit on a lot of the key parts so one of the things i want to point out is when you install this thing into visual studio down in the bottom right corner of visual studio there is a little circle that shows up and it is kind of like a little quick type thing for independent so you can get to a lot of the functionality so that that's one way you can do it and the other is to hit the independent menu up at the top i didn't know about the circle that's awesome yeah so um yeah i made the mistake of turning that on for resharper mistake so in that thing you just mouse over and it kind of gives you a little pop-up menu with a lot of your top type things. So it's almost like a quick, I don't know, like a running dashboard for you there.
Starting point is 00:10:53 And speaking of the dashboard, that's actually my favorite feature. I think that's kind of the main thing. It's really the hub of Endepen. So it sets up a little menu here in between like SQL and tools, depending on the version of Visual Studio that you're running. And you just click Dashboards right at the top, and it brings up this beautiful dashboard with a bunch of numbers. And you can drill into these little lists and graphs and kind of see what's going on. But it gives you a great snapshot of your project. All right, so the next feature that I want to talk about are the rules. And this is what I found to be pretty amazing in NDPend was when you open this thing up,
Starting point is 00:11:31 you basically get a panel that shows you the type of thing. So you get critical rules violated, rules violated, syntax or execution errors, okay rules, queries, all this stuff. It's really amazing now when you open this up what you get is you get this list and if you click like on the critical rules and you say all right drill into it it gives you this summary window that at the top of it gives you the link query and yes i said link that basically queries the output of your code base. So it queries both the IL and your code to join this stuff together to generate these reports
Starting point is 00:12:14 to find out where either problems in your code or where your dependencies lie and all that. And what I really liked about that in this is at the bottom of the link query on most of them that he usually has a link at the bottom that you can click that will take you to describing what you're actually looking at because i mean you might get pretty overwhelmed when you're going through this stuff because there is a yeah i totally overwhelmed like when you first start getting into the rules years over well i guess I guess maybe the code that I was looking at weren't such great projects, but there were a whole slew of different rules.
Starting point is 00:12:52 It was like, oh, you're breaking this rule, you're breaking that rule, and I thought it was pretty good. Yeah, it's pretty in-depth. It can point out a lot of deficiencies in your code. Now, in all fairness, not every one of the rules is going to have that link so sometimes that can get a little confusing because you don't you might not know like well why isn't that one there right and so like one of the things
Starting point is 00:13:13 i'll point out is there was a uh there's a complexity report and for me that was a real eye-opener so the way that they define this if you click the link at the bottom of the link query, it would take you to the site. And they kind of give you just a real quick overview. And I'm talking about the ILCC. So it's the Interpreted Language Cyclomatic Complexity Score. And basically what it does, this one's good if you have Visual Basic Code versus just C Sharp. Because if you're looking at the other CC ranking, that's only for C Sharp.
Starting point is 00:13:48 If you look at the IELCC, then it's inspecting the IELCC code itself and does the rankings based off that. And so one of the keys they talk about is they calculate the score by doing a 1 is for an if. You add 2 if there's a for loop and so they basically said a general rule of thumb is anything over 20 you should probably think about refactoring anything over 40 turns into just a code mess in the way i've understood cycle mic um i haven't
Starting point is 00:14:21 read the description you have but the way i've kind of understood before i looked in like the enterprise version of visual studio is that it's the number of execution paths that run through that method so if you were to kind of go through by hand and you know test like every use case that that method handles then that's kind of where you're at so that means that there's 40 things that you need to test if your score is 40 if you're running through this by hand and that's a lot that's a lot of different things that's happening in that method, and that's probably something you should break up. Especially when the whole thing is to keep them simple, right? So here's a little anecdotal type thing that was rather humorous.
Starting point is 00:14:57 So I ran this on a code base that I've worked on, and so let's keep in mind, over 20 should refactor, over 40 is pretty horrible so one file that that was in here was a 775 a 775 and it actually made me laugh because i had to work in this file before and it took me three weeks to make some changes so i'm imagining like ifs within ifs, within loops, within switch statements. Cases, I mean, everything you could possibly think of, it was that. And when I saw it pop up, I was like, well, that explains it. And so circling back around, like this particular feature of independent, I found extremely
Starting point is 00:15:43 useful because if you, let's say that you were a project manager or something you got this report spit out to you you could look at this and say oh i have some people that need to work on these particular set of files and this thing is just a nested nightmare right this isn't going to be something that they're going to be able to knock out in a couple hours you know this is going to be something we're really going to have to slate some time aside for because this is going to take a little bit of work through because if there's that many you know code execution paths you're probably going to break something when you go in there and start messing with this yeah yeah well the thing that i found great about the the dashboard well there's also we should
Starting point is 00:16:22 mention too there's another report a version of that report from the dashboard that is an HTML version of it. But the thing that I found great about the report in general, though, was just like, if you were looking for a source of inspiration, like, you know, you had some free cycles, you're like, okay, what part of the code base should I go and fix, right? You have this kind of report available to you or to other developers on your team and you can say oh here's here's a class like your 700 one that maybe i should go back and uh you know clean up and refactor or you know break it apart it gives you like a priority list of things you need to fix and i also really like it from a cya perspective so i can go tell the boss like look here's why it took so long i'm not crazy it's supposed to be 20 or less and it's 775
Starting point is 00:17:09 so you owe me dinner right and and you probably want to have a before and after so that it wasn't you that created that 775 right that's right yeah those trend lines are really important yeah i brought it up from 20 to 775. Check it out, boss. Yep. So, yeah, that was, I found that entire section just incredibly helpful. What's really cool about that rule section is they have a ton of canned ones already, and then they let you modify them. And you can tell it what you think is critical or what's not, and you can write your own link queries to create your own custom reports, and you can use theirs as baselines to figure out what kind of report you actually want to write.
Starting point is 00:17:52 So that entire section was extremely powerful and, like I said, very eye-opening. Yeah, there's a whole slew of rules in there. Yeah, I was just thinking about a couple rules I might like to write, but they're all pretty much invalid because I was thinking about the actual source code, like variable names less than three or something like that. But I don't think that really applies here because independent acts on the DLLs. It's static analysis, so not so much the code but the actual generated files. The cool thing about that, though, is that you don't need the code to run this.
Starting point is 00:18:21 Right. Here's one thing. I'll go through just a couple of these they have so they they have rules for base class should not be used as derivatives um class shouldn't be deep in the inheritance tree no descendant should be sealed if possible overrides of methods should be call should call base dot method do not hide base class methods like i mean they have a dead code one potentially dead types potentially dead methods fields i mean the list of things that you can get out of your code base and things that you could improve or they're all there now whether or not you're going to be able to go through all these
Starting point is 00:18:56 man but but one that i'm not particularly a fan of instance fields should be prefixed with a m underscore i do not like that i've never liked that instance fields should be prefixed with a M underscore. I do not like that. I've never liked that. Yeah, ReSharper is okay with just the underscore and me too. So that's the rules section. Actually, while we're still there, we were going to talk about this a little later,
Starting point is 00:19:20 but it kind of makes sense to put it here. There's a couple of my favorite rules that I noticed when working on some of my stuff. And one of those is mutually exclusive namespaces. So that's when you've got one namespace that depends on another, and that other one depends on it. So A depends on B, B depends on A. While that's strictly not a problem,
Starting point is 00:19:38 and when you're talking about the namespace level, it is if you're talking about the DLL assembly level. But it's a good example of somewhere where you're crossing some boundaries and probably need to rethink some things. Also, another one that I really liked is methods that could have a lower visibility. You've got it marked as internal, or it could be
Starting point is 00:19:55 private, or maybe public that could be private. I like that sort of thing because it lets someone see visually when they're in the file the kind of things that are talking outside and who they should be talking to, which is really nice. And I love seeing very few public methods because that's really the footprint and the API of your application or assembly. Yeah, I mean, some of these rules, I mean, by themselves, they're great.
Starting point is 00:20:19 But I just imagine, like we mentioned, the build server version of it, and I just see like how much more powerful that could be there to be able to like send out alerts or you know for the entire team to be able to see uh you know that that report there yeah to me like that's the real value add of an independent it's over time so i want to be able to see that error going up or down for each metric well i mean like like, there's one of the rules that can report on third-party code usage. Yeah.
Starting point is 00:20:48 Like, assemblies used, namespaces used, types. Like, you know, if you had, if your manager needed to know, like, hey, what are some of the other libraries that we're using? Like, what's our exposure here on third-party, you know, utilities, right? Then it's rules like that that might be able to help them out. And they don't have to go digging into the code.
Starting point is 00:21:08 Yeah, and actually I've got a blog post cooking on this that we'll have a link to whenever I finish the draft. But I actually looked at a couple of high-profile open-source projects like Entity Framework and SignalR. And what I thought interesting is Entity Framework had 92,000 lines of code and SignalR had 18,000. So it's like 15%, 16%, 18%, something like that of the code size. But the actual third-party assemblies, Entity had 30, and SignalR had 42.
Starting point is 00:21:34 So it's touching a lot of different stuff. But even further than that, you can actually see the number of third-party method calls. So Entity Framework had 4,500, and Signal signal r had 500 so tons of assemblies but not really doing much with them so i thought that was really interesting yeah it is cool to analyze all this stuff i mean and that's what this does it makes it really easy to kind of break down your code base yep yeah so uh you another one of the features there let's get into it the dependency graph all right so uh you know using the dependency graph you've we've seen these type of graphs before right where uh it just graphs out all your code into little bubbles and then has lines
Starting point is 00:22:19 linking everything to everything that's related right Except this one kind of goes a bit above and beyond your normal bubble, right? So if you hover over any one particular bubble, as you're hovering over it, you'll get IL instruction counts, lines of code counts, comments, percentage of comments. You'll get data about each one of these as you just hover over them. And then if you're not happy with the way it draws the dependency graph, you can change that. You can say, hey, you know what? Change the box sizes. By default, it's going to size the boxes based on the number of lines of code. But you could change that and say, you know what, just make them constant. Or instead, let me base it on the IL complexity, right? Now, there's an interesting view of your code, right?
Starting point is 00:23:14 So you could see, like, the bigger ones are the ones that you might need to go focus some more time on, right? And I like it. If you ever ask the question of yourself, like, what is all this crap? And this is a great way to answer that question. Well, we don't call it crap, for starters. Sometimes I like it. If you ever ask the question of yourself, like, what is all this crap? And this is a great way to answer that question. Well, we don't call it crap for starters. Sometimes I call it crap. Oh, he must have seen the projects that I ran this on.
Starting point is 00:23:36 I've called my code much worse. But, you know, a couple of other things I like about it were there are ways to actually exclude some of the items in here. And another feature that I really like compared to the one that Visual Studio has baked in is this thing generated fast, even on a pretty large code base. The one in Visual Studio, the last time I tried to do it, like I basically had to walk away from my computer, come back, you know, 15 minutes later. This thing actually cranked this out pretty quick, and it's a pretty useful utility. Yeah, I thought it was going to take a while to do it for entity framework, but it popped right up. Yeah, I mean, whatever they've done behind the scenes is pretty efficient. Yeah, kudos.
Starting point is 00:24:17 Yeah. And actually, while we're talking about that graph, there's the tree map view, which is actually really cool, too. The thing I like about it is that it really lets you see how your code is split up it's similar to the dependency graph it's just kind of a different layout at least that's how i view it but it's a good way of saying like 75 of your code is this or 13 of your code is that and so it's a good way of kind of visualizing just how big the various pieces are wait did you say the tree map yeah the tree map metric view weren't the squares oh the the honeycomb thing so yeah this one i wasn't as crazy about this one um that's the code metrics view from the menu just so only because like i guess maybe i didn't understand it maybe that's where
Starting point is 00:25:01 i had more problems with this one yeah Yeah, it's not my favorite visualization. I like the abstractness versus instability one the most. But really what I like about this one is it shows me, I'm looking at a project right now, and I can see that the test namespace or one of the test namespaces is one of the biggest sections of my code, and that's because I do a lot of code generation there and does a lot of repetitive type stuff.
Starting point is 00:25:23 And so it's just a lot of boilerplate. But I can see that it's probably 15 know 15 of my projects just looking at it yeah which is kind of what the the you know the dependency graph the default version of the dependency graph where it was based based off the lines of code could do something similar to that for you um but yeah you this this view like for anyone who's familiar with, uh, this tool, um, I remember a while back there was a tool called space monger and you could point it to, you know, any drive or folder on your, on your hard drive or in your computer. And it would, uh, you know, lay out a representation of what folders were taking up, uh, you know, the most space. And it used this exact same type of, uh, visual representation for it. And so I guess like when
Starting point is 00:26:11 I saw this, so it was like, wait a minute, what am I looking at here? But, um, yeah, I'm actually, I'm looking at color mine right now, which does a, you know, it's one of my projects that does a lot of color comparisons. And one thing that's interesting is I can see that there's one of my open source projects that does a lot of color comparisons. And one thing that's interesting is I can see that there's one comparison method, CIDE2000, is probably half of all the comparison code. And all the other ones are small. It's because it's just a really big method. There's a lot of math going on. But what's also funny is if I look at the actual tree view of the tests,
Starting point is 00:26:41 because I generated these tests and because I do basically a bunch of conversions from this to that and verify it's right. And I do it all based off of T4 and XML files. It's all like pretty much even. So I've got a nice honeycomb as Alan said. So it's a, it's got a nice little pattern here because each section is about even. Yeah. This,
Starting point is 00:26:59 this view on large projects kind of just makes my eyes go. Oh yeah. Yeah. And that, that might've been maybe why i wasn't as crazy about this this wasn't this was of all the features this was not my favorite yeah i would agree this the it's a cool view into your code from just a graphical representation but i don't know how useful it is for me yeah i mean like for example the the project i'm looking at it it breaks it down into uh each line of code represents 472.2 pixels right yeah i mean it's it's uh i don't
Starting point is 00:27:36 know i think on a smaller code base this one might be a little bit more useful i'm trying to think like how we can describe this better for the listener like it's trying to create a a bubble to represent the size of each class of within your code you know and then it based on the overall number of classes in the size in the number of lines for each you know it tries to give a respective size bubble represented as a square really for each one of those classes and that way you can see based on the size of the squares and how they mix in and it arranges all of those squares by namespace and then assembly too and projects yeah well well that's if you have it chosen in a particular level so you can have it recreate this graph for methods, fields, types, namespaces, assemblies. And that's, I mean, again, I think this is one of those ones to where you'd really have to spend some time in it to find out where the value would be for you. like everything's so tiny and dots going down because there's so much code and the stuff that
Starting point is 00:28:47 I've examined that it just, I don't know, it doesn't seem as useful to me. Yeah. I'd really love to find somebody that maybe, maybe somebody who's listening in that does use this tool and uses this specific feature that has a great use case for it. I'd love to hear your feedback on it and then it'll give me a new perspective on, that's how i should be using that thing more effectively i mean i will say if you if you click on something it will actually take you to the code like if you double click if you can double click on that one pixel where that you know well you can zoom in well no double click it it will take you to the line of code. Yep, yep. It'll take you to, okay, so like the current level that I'm looking at was based on methods. And it'll take you into that method, but you can actually just zoom in.
Starting point is 00:29:33 So in your case where you're having problems fitting, because the default is to fit in the window. Right. Right, and so that's why you're seeing such small little squares. But you could actually just you know zoom in and then click on it yeah it's interesting it's a neat view again uh you know yep it's kind of interesting for me to see that like look at a dll and say this section of the dll this namespace is much bigger than the other ones so it's just kind of an interesting view of it i don't know that i would really act based upon it but it's cool so tying
Starting point is 00:30:06 into this uh well going back to our conversation about the dependency graph tying into that there's also a dependency matrix which i thought to be a pretty cool view of like uh a cross cut representation of like which namespace is dependent on other namespaces, you know, and, and, uh, you know, what that representation looked like.
Starting point is 00:30:28 And then for any one of those, you could dig into it. So, uh, you know, if you clicked on that, it would then take you into back to the dependency graph to where you could see what was actually happening there.
Starting point is 00:30:39 So I guess, you know, if you, for the listeners that, you know, to, to visualize what I mean by the dependency matrix, think of a set of rows on the left that are namespaces
Starting point is 00:30:51 and then columns that are the set of namespaces as well. And then there's interjection points where those namespaces interject or cross and how many references there are. Yeah, those are like logic puzzles, you know? Yep, that's exactly what i was thinking it's like sally's dog is not named jed and uh you know jed has a red collar and then you kind of like x this stuff out and you end up finding all the results but it basically looks something like that it reminded me of like a multiplication table when i was a kid
Starting point is 00:31:19 because i had one like that where you know numbers along the left and numbers across the top so going into this one a little bit more because this is also one of my favorite ones on here so talking about his cross-cutting type things where you know you have the same list of of assemblies on the left and the same list of assemblies going across the top where they intersect on that grid they have a number showing you the number of of dependencies and what's really cool is if you click that number it will actually open up your dependency graph and show you how these things cross relate right well it's the the number of the methods right yeah that are that are you know the number of times that those are used and it's beautiful because it'll actually the ones that are
Starting point is 00:32:00 used a lot it makes them bigger and the ones that aren't used as much it makes smaller like it's just really cool how they integrated this. I love this feature. And one thing we haven't actually mentioned is that Patrick and Dependent Company, whoever, has put a lot of detail all over the place. It's like hidden value. So I'm looking at one of the HTML reports right now, and there's this little question mark next to Dependency Matrix.
Starting point is 00:32:23 I click it, and it's got a wonderful description of it and more online documentation telling you all about this graph and what it means, what the number means, and what it's supposed to show you and what we can do with that. It's just these little hidden nuggets of value. You can actually even, like, within the dependency matrix, so where two namespaces cross, and there's, like, a number to say how many times one calls the other, right?
Starting point is 00:32:49 You could actually double click on that and zoom in on it. And then if you zoomed in again, it'll actually get into from the dependency matrix these specific calls of what's happening there. So you don't even have to go into the dependency graph to see that interaction you can stay within the matrix view if that happens to be your preferred uh way of viewing this oh they have a nice little animation yeah and even if you didn't want to do it that way too like if you uh um you know there's there's plus signs on both the top and bottom so you could expand it out uh you know the namespaces that you could see where these things were actually happening. So you didn't even have to do the double-click on it to zoom in.
Starting point is 00:33:31 So to Joe's point, as far as the hidden functionality, that's just another example where it's like there's multiple ways that you could get into this data. There's just like hidden little features where you know like maybe for some maybe for one person it would just be without even thinking about it they would just automatically start double clicking everything they see and then they get to the data or someone else might you notice the plus sign okay let me just expand this out i'll get to it that way yeah and just moving your mouse around they update little uh like info
Starting point is 00:34:05 windows all over the place so it's i mean it's a very interactive grid yeah we can talk about my favorite graph which one's that abstractness versus instability oh yeah that one was nice yep so it's a square one corner abstract one corner unstable. So the closer you are to the top left, more abstract. The more to the bottom right, unstable. But the other two sides of the square, the corners, are zone of pain and zone of uselessness. So this is great because I'm always worried about going too far towards the uselessness. And so it's kind of cool to see some of my projects and also some of the open source projects and see where they kind of line up.
Starting point is 00:34:48 So most of the ones I've seen have done a great job of staying in the green as far as being not too abstract, not too, I'm sorry, green being not too useless and not too painful. But most have been on the instable side, which I thought was interesting. Even my stuff, which I thought
Starting point is 00:35:04 I was kind of crazy with interfaces and whatnot. It's interesting to see that I wasn't as high on the abstract meter as I thought I would be. Yeah, I mean, that's what I found a lot, too, was that more often than not, I might have one or two, three namespaces that leaned more to the abstract side, but the bulk of everything was like oh crap that's in the stable but i loved this view though because this view was totally inspiring to be able to see like oh that that needs to be fixed you know it's funny to see here though is um like the test dlls are often very much to the instable sign and sometimes into the zone of pain so actual like the core
Starting point is 00:35:42 library logic is doing good but the tests are not so much they're fragile they depend on concrete types yada yada now this was an example though like i wasn't able to find this this graph in the online within the dashboard within the app i only saw this one within the html report yeah i noticed that too and one thing that i i didn't like about this report is that if you're doing something that has a lot of dependencies, like I think I was looking at SignalR, then a lot of them end up kind of crowding into one section sometimes. And you can't actually read the labels anymore because it's just text overlaying text. And it looks like a big black hairball. Right.
Starting point is 00:36:19 Yeah. I mean, it's got to be in there somewhere. I just haven't seen it. And I guess I'm assuming that the reason for this HTML report was just so that if you had it on a build server, maybe that you could just have people point to that, maybe management or whatever. They could be able to see that report without having access to Visual Studio per se.
Starting point is 00:36:44 But, I mean, that's just an assumption on my point. I'm not sure if that's how the build server portion works. Yeah, and what I can imagine doing is you can correlate with management and say, you know what, we've been having bugs in this area and we can see that this DLL is in this zone. So if we can improve this metric, then maybe we can improve the bug metric well i guess kind of jumping ahead a bit though but another one of the features that um independent provides is that as you're making changes in and you you're running you have
Starting point is 00:37:19 independent attached to your project it's tracking these over time so you see charted data as to like you know how did your lines of code did the line of code increase or decrease did your rule violations increase or decrease like you know you see all of these over time like how's happened so to your point about going back to management being able to point it out you know you maybe, a case might be that you could say, hey, look, we specifically implemented the feature XYZ went out. Here's where the complexity went up and coincidentally, so did our errors, right?
Starting point is 00:37:57 Right. And I actually attached a number to this crazy technical debt word. And also you can even, forgetting about the trend charts, which are awesome, the trend lines and the kind of up-down stuff you can get on like a build-to-build basis. You can also diff snapshots.
Starting point is 00:38:11 So if I've got, you know, release five, release six, I can take a look at those and see how it went. And I think that's really powerful. That to me is like the main thing, is being able to see how this stuff tracks over time. Yeah, I mean, again, from a management standpoint, I mean, as a coder, you like to see your code get tracks over time. Yeah, I mean, again, from a management standpoint, I mean, as a coder, you like to see your code get better over time,
Starting point is 00:38:30 but that's really for your own edification. But from a management perspective, these kind of reports could be really valuable because we all know as code gets more complex, not only do you get more errors, but it's harder to maintain. So the next time you've got to go back and touch it, it takes twice the amount of time or three times the amount of time it's hard to say well i think that's also a key differentiator between this and other products is the fact that you do get this reporting over time yeah that you can go back to you know your manager and be able to point it out
Starting point is 00:38:58 exactly like no here i can quantify it yeah there you go it's it's not just the developer saying no no no or you know we shouldn't do this right you can actually show it so um and in a way that they'll at least be able to to somewhat understand even if they don't understand what the aisle number is you can you can easily explain that they want numbers right exactly having a chart definitely helps your situation. Yep. Yeah, so, oh, you can also import the code coverage. And so, like, if you're using a tool like a dot cover, for example, you can import that and get it, you know, as part of your dashboard, you know, output there.
Starting point is 00:39:44 Yeah, and that's nice because a lot of times if you're using a code coverage tool, you're probably generating some sort of report already. You don't want to have two reports. That's just annoying, so why not bring that into the independent report? Yeah. Another feature and this is a little baffling. Well, hold on just to, I mean, I guess
Starting point is 00:39:59 I don't know if that was clear. I want to make sure that that was known for like, that's code coverage for tests so like you can actually see and quantify like, we have tests that are covering X percentage of our code base, right? And you can see that on a namespace level or a class level, right? And this is bringing that data in from some other tool
Starting point is 00:40:21 and including it into this report. So going back to the example that we gave about going back to your manager with specific numbers, now they could see, hey, we're doing pretty well. Look at our code coverage. I think we're doing pretty well on it. Or maybe you're not doing pretty well, in which case you might have to have it talking to you. Right.
Starting point is 00:40:41 So the next feature I want to talk about, and this is, I mean, it's a feature, but it seemed like all this already existed in the Visual Studio plugin, but they have this Visual Endepen standalone that you can actually launch from the tools submenu under Endepen. And what it seems to do is really just bring up their own interface that they created at one point that has all the same functionality, but it's laid out slightly differently so so the menus that were sub menus of independent are now main menus and it's i don't know maybe it's laid out a little bit more more coherently in that everything kind of has its own space uh which for me was nice because that was one of the things about independent in the Visual Studio thing is it seemed like the windows were just everywhere.
Starting point is 00:41:30 So this kind of lays it out a little bit better and you just get more direct access to everything. But it seems like it's all the same exact functionality that exists inside Visual Studio itself. So you just can't drill down so much. You know, you lose some of that kind of interactivity. But but for me i prefer the report because it gives me the high level information that i want yeah it's it's kind of interesting i that double click thing on the matrix is just awesome i didn't know that was there i'm still doing it you're still fascinated by the animation i like the animation i like the fact that it actually does something. It's the little things in life.
Starting point is 00:42:05 It really is. So thank you for the animation. Yeah, you know, maybe now we've talked a little bit about some of the features. We're going to talk about some of the good. But I want to go ahead and mention this before I forget. I think sound effects would be really cool for this plug-in. What do you guys think? Oh, God.
Starting point is 00:42:19 Like a toilet flushing when you went to the critical. That's right. Is that if your code was really bad like oh crap yeah like if you did good play a little happy song if you did bad and like i don't really want to oh man i hear like the price is right every time the price is right wrong horn should be played at some point wow wow yeah that's definitely a feature ask yeah that's hilarious. Yeah. So we've already talked about a lot of the features,
Starting point is 00:42:48 and while doing that, we've already crossed over some of the really good features of this. We've mentioned the rules about it. We've mentioned... What else have we mentioned? Well, about the rules, we mentioned that if you wanted to see exclusive namespaces, if you want to see dead types or methods or methods that have lower visibility.
Starting point is 00:43:11 Or too long. Yeah. We've talked about our love for the dependency graph and matrix. And my favorite, the report. Love the report. We've talked about the abstract and instability craft as you know these are all like great pros of this uh and and um you know specifically like i think did we did you already mention about like what how independ defined
Starting point is 00:43:38 that i know we covered the pain versus the um oh shoot what was it called again abstract first instability yeah yeah yeah but pain and zone of uselessness there you go the zone of uselessness in the zone of pain right which were fantastic names for that but you know specifically there was a section where uh in the independent html report where you know like if you clicked on that little question mark and went in and defined it and says that the abstractness versus instability diagram helps to detect which assemblies are potentially painful to maintain, i.e. concrete and stable, and which assemblies are potentially useless, i.e. abstract and stable. And then abstractness is if an assembly contains many abstract types, i.e. interfaces and abstract classes and few concrete types, it is considered as abstract versus
Starting point is 00:44:25 stability and assembly is considered stable if its types are used by a lot of types of tier assemblies in the in these yeah in this condition uh stable means painful to modify so you want to strike the balance which is yeah well i thought that's why I really liked that graph though is because there's this line that goes from the top left of the graph down to the bottom right of the graph. And ideally, you want to be on that line in this zone of green, but you really want to be somewhere towards the middle of that. You don't want to be towards all the way of that. You don't want to be towards, you know, all the way to the left or all the way to the right. Um, yeah,
Starting point is 00:45:09 it should be, this should almost be called the, how am I doing graph? If you just want to see one graph, so how am I doing? You know, and there was one other thing though, that I don't know that we mentioned that I thought was kind of interesting
Starting point is 00:45:20 though. Uh, at least from, because you like, there's plenty of tools out there that talk about your lines of code this one talks about also your percentage of comments oh yeah yeah that that was cool yeah and and not only so not only could you see that from the dashboard point of view but you could also go into there was another place where i have to remember where i found it where you could actually see the relationships based on on uh the comments uh that were in there speaking of which uh you
Starting point is 00:45:52 know we talked about uh i pulled some metrics off some some kind of top metric some top projects uh 36.72 percent of jason.net is lines is. So I didn't say that very elegantly. You got entity framework. Nope, sorry, this is all tech too. I got a bunch of reports here, sorry. But it's really cool to be able to see that percentage. And yeah, 18% of color mine is commented. I actually wasn't able to pull the comment percentages
Starting point is 00:46:19 for entity framework and SignalR, which is what I really wanted to tell you because apparently they exist in multiple languages, so that metric doesn't make sense. But at least the tool is good enough to tell me why it's not going to give me that number. Very cool. What else did we like about it?
Starting point is 00:46:36 Found some. The interactive dashboard. Yeah, I mean, the interactive dashboard was cool. Again, the rules, we love those. Yeah, also just a very helpful UI. So, you know, I just mentioned an example there. Another one I liked is I was clicking around in the UI in Visual Studio, and I came across a link that said generate a graph of something,
Starting point is 00:46:54 and I didn't really know what it meant, so I clicked it, and it actually brought up this little window with screenshots of how to do it and what it meant and links to more information. So through and through, this product is very well well documented and it's very much targeted for developers and what you want to be using it for so i thought that was really cool and really helpful yeah i mean this project is also like 10 years in the making too so yeah there's been a little bit of time to document a thing or two here or there yeah but i like i don't i didn't have to go googling anything really it's it's nice to think that like the information that I want is right where I want it to be.
Starting point is 00:47:26 So when I wonder, hmm, what does this button do? There's a little help tip that says, this is what that button does. Yeah, because, I mean, really, it's almost an overload of information, but they did a fantastic job of bringing that information to meaning very quickly without having to hunt around for it, which is, is excellent. Yeah. So, you know, we talked about a lot of, a lot of the pros of it. And before we go on, I just want to ask dear listener, leave us a review on iTunes or, you know, leave us a review on Stitcher. Just leave us a review. We love those reviews. Yeah.
Starting point is 00:48:07 As Joe mentioned earlier, they really do help other listeners, new listeners to find us. So we really appreciate it. And it provides a lot of motivation for us. And we like getting that feedback. So leave us a review. Share it with your friends. Share us with your enemies. You've got to keep those guys close.
Starting point is 00:48:30 That's right. Right? You don't want them knowing more than you know, so share it with everybody. As Alan mentioned, you can find links at the top of codingblocks.net for Twitter, linkedin google plus pinterest and uh oh wait no no no pinterest not yet sorry i want to keep my infographics sorted it's coming it's coming okay but the other ones are there yeah all right all right so now let's let's get into the part that nobody really likes but um but the know bad parts of the review the bad parts like so the things that we found a little bit frustrating so uh yeah and for me um should
Starting point is 00:49:12 we all talk sad now for the part right yeah we're not we're not happy about this but uh information overload information overload was the big thing for me so coming into it, there is a bit of learning curve. There's kind of a lot of stuff you need to know. And if you just kind of click to that dashboard after installing it, then there's just a lot of numbers in your face. And it's overwhelming. But the information is there for a reason. It's there to guide you. I get it.
Starting point is 00:49:39 But sometimes it's just a little bit overwhelming and a little bit confusing. It takes a while to really learn it and figure out, like, hey, man, what does this number mean? Why do I care about that? Yeah, and one of the things that we actually mentioned that we liked was about the rules and how it shows you exactly how it found that code. It's got a nice description. But the first time I clicked on a rule to see what the heck does this mean. Why is it showing me late code? I'm like, the heck this is is this is a bug what happened here so that was a little bit confusing so not a big deal but yeah it did it did take a moment to uh to get
Starting point is 00:50:15 to appreciate that yeah uh he also had here uh were you going to talk about the wish you had better separation yeah so some of the graphs will actually show you on an assembly level you know where the issues are it graphs it really nicely but some of the things it just kind of aggregates for the whole solution so i know for me a lot of my tests were just kind of the actual unit test code or functional test codes was kind of dirty stuff it was talking directly databases file system sometimes it was doing all sorts of weird wacky stuff particularly the functional tests or the integration tests. And that kind of stuff really brought the scores down, and I didn't like that it was kind of combined with my other stuff,
Starting point is 00:50:53 but I also didn't want to lose it. I could have just not selected that assembly, but then I want to see that stuff too. It's just I don't want it tarnishing my baby. Nobody talks bad about my baby yeah all right so some of the things that that i had on my list were one and and this one was big for me is i wish it honored the theme oh my god yes i use the dark theme inside visual studio and and Inside Visual Studio. And all the windows that came in for End of Pen were white. Are brights dark white?
Starting point is 00:51:28 Yeah. In my dark cubicle, I almost got blinded when I first saw this pop up on three monitors. It's actually, it's pretty funny because once you go to the dark theme, you just get in that relaxed state. Once you go dark, you don't come back. Is it like this to you? When that screen came at me, it was like it was screaming at me. I was like, why are you yelling at me? We talked about my love for the Visual Studio dark theme
Starting point is 00:51:54 back when we were talking about IntelliJ one time before. That theme is awesome. Once you go to the dark side, you're there. It's fantastic. I came back, man. Especially if you already work in a dark area. You don't want that bright white screen straining your eyes. So the dark screen is great.
Starting point is 00:52:15 Why don't they print books on black paper? It would be expensive. But the book isn't lighting up the room. You would have to ink the rest of the page. That would be expensive. But the book isn't lighting up the room, though. to ink the rest of the page that would be expensive but the book isn't lighting up the room though yeah that's a good point burning my eyeballs yeah yeah so uh that was one um i mean i got a suntan from the first time it opened up and there's so much uv it was just like now the the next thing that that killed me and i don't know how you solve this but dude there were pop-up windows all over the place
Starting point is 00:52:48 like if you click something you would see some extra additional pop-ups and they would just randomly it felt like show up somewhere in this goes back to like when joe was clicking on rules and like code was suddenly popping up like wait a minute did i just did i just break something did i just like hack this thing? What happened? Why is it suddenly showing me the code? I will say this. The counter to that is you can dock those windows, which is cool.
Starting point is 00:53:16 I ended up doing that, but that brings me to my next point of this. There's so much information on there that if you're using independ you need more than one monitor well hold on okay well wait before we go before we go off that window a moment though because like one thing that i did find frustrating is that um i'm probably in a small minority of people that because even microsoft doesn't seem to if they're listening test this feature properly that they've supported in their operating system for God knows how long. But I like to have the taskbar at the top.
Starting point is 00:53:50 Not everybody likes it in the default bottom of the monitor position. Are you talking about Windows taskbar? Yes. Why would you do that? Oh, man. No. Because. That's your fault.
Starting point is 00:53:59 You have to live with the consequences. No. It's just awesome. It's just, that's, I like that. That's how I like it. All right.
Starting point is 00:54:09 And even Microsoft has had this position and I've noticed that like sometimes with the independent Windows and I don't know if it's independent that's deciding
Starting point is 00:54:16 where to lay the window out or if it's just the, you know, Windows that's telling it where to lay the window out. But even with, but I'm trying i'm
Starting point is 00:54:25 saying that even with just basic windows applications i've seen this problem too where it doesn't it doesn't account for someone having the taskbar in any other position other than the bottom and so it's like oh well let's just go to zero zero right and it throws a window up there or somewhere where it's below the taskbar to where now when you want to move it, if it's an application, then maybe you could just alt space to bring up the context menu to get to the move option.
Starting point is 00:54:55 But in some of these dockable windows within Studio, I haven't found a way to get to those like that and you're like, oh my god, it's stuck. How do I move this window yeah i'm like well it's in my way i was willing to let the dark theme go but this is too much yeah i say you move that taskbar back
Starting point is 00:55:17 down to the bottom you know what i would gladly trade i'll take the dark theme over you know lay the windows wherever i don't care outlaw just likes to cause problems for other companies oh yeah thus his name so um so what was the other one i had on here oh this one drove me crazy and this is not just independent this is anybody who has a grid that they put in a window if you double click that little divider bar in the column header at the top it should expand that thing to fit the contents and i did that a couple of times because that's what i'm used to doing and it shrinks it down to nothing i i about lost my mind so i have never written where where did you run into that like you know if you're that's
Starting point is 00:56:04 weird i think you're like really nitpicking now. No, no, that's not nitpicking. We've gone beyond color. You know, like if... I want to double-click stuff and it get big. No, man. If you go to the expander of a column, typically if you double-click it... Oh, I know the use case shit you're describing.
Starting point is 00:56:23 I just didn't see that anywhere within... You didn't try it. I guess not. Go do it on any one of them. It shrinks down to nothing. And then you have to expand it a lot. I'll have to go looking to find one. So that killed me.
Starting point is 00:56:37 I want quick stuff mega big. Yes, that's right. That's exactly what I want. What was it? Oh, here was another one. I don't remember which report this was on, but on most of the things, as we mentioned earlier, the interface is really helpful.
Starting point is 00:56:53 As you mouse over things, it updates little information windows all over the place. It might update two or three. There was one that you could actually highlight a row. You could click a row, and I wanted it to lock in that information but if i tried to mouse away from the row if i accidentally moused over another row then it would update the information in those pop-up windows and that was kind of frustrating because i highlighted the row that i wanted the information for and if i moved the mouse and it would try and update them anyway oh you gotta mouse fast
Starting point is 00:57:24 that's what no you gotta mouse perfectly horizontal no no no you don't no you don't no you don't you just gotta you just got a mouse fast oh so i had to speed mouse across it no i mean it's not like when i say fast i mean like you can see uh okay so for example i'm looking at the dependency matrix right and if i highlight where i was if i if i highlight an intersection and you can see like if if you're you're the speed of your mouse is moving uh fast enough to where it continues showing you the highlights versus if you're not like so for example there's a show info window when once you get to an intersection and then at that intersection it'll show you uh things about that like what methods of the namespace uh are you are the reason for the intersection right and if you want to get to that if you just
Starting point is 00:58:11 mouse to it quick it doesn't have to be a perfect horizontal line to get to it you just don't take your time well my whole thing is it's not it's not an unreasonable speed that you got to do it no but but if you click a row wouldn't you say that generally speaking that's the row that you want the information for well okay i'm not yeah yeah okay all right so that that was a nitpick i mean again this is not a show this is not a deal breaker just you know some of the things that if they're listening that'd be awesome to check out so far we got a little bit of learning curve and some UI issues. Michael? Yeah, so I wasn't crazy about the way you had to install it, though.
Starting point is 00:58:50 I really wish it was a little bit more seamless because you have to download the zip file and then unpack it, find some place that you decide you want to put it, and then run an installer on top of that to add it in. I really wish that it was a little bit more seamless in the msi but i like that it doesn't stick stuff in the registry i'm not big on the
Starting point is 00:59:12 whole windows kind of install that part i'm fine with i'm fine i'm fine with that it didn't require like you know well uh i'm fine that the bulk of it was self-contained let's put it that way right um i i just wish that had been a little bit uh you know that the installer wasn't so manual such a manual process right right so yeah i mean that seems like easily done but i think maybe maybe my least favorite feature like the thing that I wish would change the most was that I didn't like that my solution file actually had to change in order to incorporate independent. So if I wanted to see the reports from this,
Starting point is 00:59:59 I had to attach it to the solution in order to see that. And as part of that, like it's actually making a change to the solution, which for your environment, that might not be such a big deal, but maybe... Okay, so as an example, Joe, you ran this on multiple open source projects, right? Right. You wouldn't want to commit that back up, right? Because then whoever's looking at that pull request might go, well, wait a minute.
Starting point is 01:00:26 I don't have independent. Why are you introducing some new tool that, like, who knows what plugins people are going to have? You can't assume that they're going to have a plugin. Right. It shouldn't break anything, but it is weird to be checking that sort of stuff in, or like a work situation or something, you know?
Starting point is 01:00:42 Right. And that's what I mean by is it is it it's not necessarily that i'm worried that it's going to break something just it felt weird that it was it was a required step and i just i'm sure that there's a good reason why it's doing that i don't know what that reason is but i i just wish that it could wish there was a way like if there was any one request that i would have for that team it would be figure out a way to make to make this thing not have to modify any of the project or solution well it's only modifying the solution but you know i would agree with that so um and uh there was one other gotcha though that I ran into and you guys didn't seem to
Starting point is 01:01:26 run into this one because you'd already, uh, I suppose you already had it, but like if you didn't want older versions of.net on your system, um, when I went to, um, go through this all,
Starting point is 01:01:39 or I actually had a pop up where, you know, a message where I had to install the older, uh, .net three,5 for backwards compatibility. It was required. I mean, you guys didn't run into that, but that was one thing I was like, well, that's a shame because what if I just don't want that?
Starting point is 01:01:57 Why should I be required to install a version of the framework that I don't want? And I wasn't sure if that was because maybe there's some, like I said, this is a 10 year old project. So I wasn't sure if maybe there's some parts of the project that, you know, we're still built on that or something. I don't know.
Starting point is 01:02:15 I think cause I have 20 different versions of visual studio that covered it. One of those took care of it. Yeah. I'm pretty certain. Yeah. So, so some of those things that I mentioned, you know, I mean, yeah, they're in the bad,
Starting point is 01:02:30 but they're also, like, features I'd like to see changed or added. Yeah, so just to recap real quick, so as far as good type stuff, we really like the graphs, we really like the interactivity, we really like some of the rules and the ability to use this stuff over time. Stuff we're not so crazy about is the learning curve and kind of information overload, some of the UI issues, and just like the install, actual integration with the projects we're not crazy about.
Starting point is 01:03:01 But also in the light, we really like what it gives you right absolutely what it does for you in terms of your project and your code base i mean it above and beyond all the features what it actually drives you to doing is pretty awesome so uh you know along the topic going along the lines of you know features we'd like to see in it. One feature that I thought would be nice that I'd like to see is if, let's run through this scenario where I'm a developer in a team and maybe I have my own copy of Indipend. I would like for those reports to be in a more shareable format. Right now, yeah, I could run the dashboard inside of Visual Studio and I could see that. But the closest thing that I have to something that I could share
Starting point is 01:03:47 with my manager would be if I take the zip, if I zip up the HTML files and say, yeah, here you go and look at that. And hopefully he'll understand what needs to be done and be able to see that correctly. But I wish that there was
Starting point is 01:04:03 a more easily shareable version of that report. a pdf that'd be one option sure a series of tweets um that might not be the option i was thinking of maybe maybe some like you know instagrams of like hey here's the picture of this report here's a picture no i'm just kidding yeah although that would be an option for you or maybe a Pinterest for all your... I almost wonder if that build version of this wouldn't solve some of that, you know, because it builds those HTML files for you. But again, the scenario that I'm describing, though, is like,
Starting point is 01:04:35 let's picture that you are in a team of, you know, you're bringing your own tools with you. So, like, maybe you have your own copy of Independent. Maybe you have your own copy of ReSharper. And these are tools that you've grown to depend on, no pun intended that, that, uh, you want to continue to use, right. Even, even, uh, you know, when you are at work. So, you know, you're the only person on your team that has that. And you want to be able to create this report so that you can give to your manager and say like here's things that we should look into and i can back it up with fact and here's the reason right so fair enough that's something i'd like to see change uh oh and another thing that i thought
Starting point is 01:05:15 would be nice to see was that um and you know this might be one grasping for you know more but uh if you had the ability to do analysis on more than just your.NET code, so maybe if you were in a web-based project, if it could do analysis on your HTML and JavaScript, maybe your CSS. Who cares about CSS, really, though? Okay, fine. Fine. CSS, too.
Starting point is 01:05:37 I was trying to bring in some sort of JSLint or CSSLint information and incorporate that somehow. It'd be nice. Yeah. I mean, however it got done. Yeah. Also, kind of in the same vein as you're talking about reports being more shareable, I thought it would be really cool to have some sort of GitHub integration. I know there's all sorts of GitHub plugins now,
Starting point is 01:05:57 so you can go to a project and see latest build, code coverage, build status green, that sort of stuff. I thought it would be cool to show some of my stats if I could, even if it was just a little plug-in that read an XML file or something that I had inside the project. I don't really know how that works, but I thought it would be cool to kind of show, like, you know, one of those graphs on my actual GitHub page.
Starting point is 01:06:17 I thought that would be really neat. And also, I actually emailed Patrick about this. I read a white paper from Google. I've been thinking a lot about, lot about metrics-based refactoring, and this is the perfect kind of tool for that. But one thing I read from there is they're talking about how you can find the worst parts of your code, the parts that need the most refactoring,
Starting point is 01:06:38 by looking at source code history of bug fixes. And so if you see the top 10% of your bug fix files, then that's where your biggest problems are and so i thought it'd be cool to see something like that if if this product could integrate with source code i know that's a whole lot of work and there's a bunch of different source control vendors and i don't really know how well that would work but i thought it'd be cool to see something like that so that was my idea cool so the big question who would you recommend this to so go ahead well for me i i see the most value in the sort of trends over time so if you have got
Starting point is 01:07:17 those kind of craftsman type people if you've got a big messy project that you're having problems with or you just like to keep your stuff clean then i see this as a definite win so especially the build build but i'll see that stuff over time and see am i getting better am i getting worse and i think it's just really valuable so if you're that kind of person who's got that kind of itch and who really wants to see those numbers getting better then this is a great tool for you yeah i, personally, I think that there's a couple places where I could see this. If you're working on either a large code base, whether it's legacy or new or whatever it is, if you're working on that and you want to get it to a point
Starting point is 01:07:56 to where it's maintainable and you can make edits to it without spending weeks and months trying to do that kind of thing, I think this could be an invaluable tool because as you go, you make make your improvements it's snapshotting you see your trends of how things are improving and hopefully in the future things would go a little bit easier also i i would see this tool um fairly much for a management type position maybe the build one if you can integrate it into a CI pipeline for having a manager be able to start basing his estimates off the kind of stuff going on. If you know that your developers
Starting point is 01:08:31 are going to go into a certain section of the code and it is notoriously nasty reported on in there, then you can kind of know that, you know, these time estimates are going to take a little bit longer. And then the last one I would say is if you are somebody that likes working on open source projects and you really want to show that you're a stud, this might not be a bad way to get your foot in the door doing some cool stuff. I mean, this is kind of thinking outside the box, but you get a hold of some open source projects that have some glaring deficiencies
Starting point is 01:09:02 and you go in there and you clean them up because you kind of have, you know, a little, just don't check in the modified solution. Don't check in the modified solution, but you have a bit of an advantage, right? Cause you see these things a little bit easier than somebody else would. So you could go in and really help out a project by doing something like that. So I can definitely see this tool being useful in more than a few situations. And as somebody who just wants to be a code craftsman, this can really help you out. I definitely see it in that same light, too. If you're the type that does care about trying to improve your own craft, this can definitely help you there. And find places of inspiration that, oh, here's something that I should go and update.
Starting point is 01:09:47 This is too complex or this is too big or whatever the reason might be, whatever the rule that it's violating might be, then this can definitely help you find that and then go and clean that up. But as you mentioned, you stole my thunder because the one that I was really thinking about, but this is pure conjecture on my part because I haven't seen how the build server version works, but that's the one are being generated in that HTML that we mentioned was automatically being shared on some public server where, you know, developers and QA and managers and like could, could see that and be able to easily comment on it and discuss it. Then you, I see that as a huge value for the team, not only, but that,
Starting point is 01:10:42 but, you know, as well as being able to view all the trending across that as well. That would be huge in terms of collaboration, that being able to be a discussion point among your team. But I say that, though, because keep in mind, at the price per developer seat, you're talking about like 400 bones. Yeah, it's not cheap. I mean, it's an investment. And I don't know what the upgrade path is for it. I didn't see that anywhere.
Starting point is 01:11:19 But... You know, I was just thinking what would make me most likely to buy this if I didn't already have it, if I had to go buy it right now. And I was thinking if I was working with a crappy team or maybe a few crappy people that I don't really know how to say it, it's like, hey, you know what? Maybe I can go get this tool, hook it up to the build server or just kind of run it on my own and be able to say in some sort of meeting like,
Starting point is 01:11:41 hey, guys, check it out. We're making this piece of crap even worse. Maybe we could take a look at some of these specific rules and talk about it again next week and just kind of use that as a nice way of kind of improving the quality of your and everyone else's life. Yeah, I mean, I kind of see this as one of those tools and I think we can all agree that we'd recommend this, right? I mean, I don't know that it works for every situation,
Starting point is 01:12:06 but from the functionality we've seen, it's a very nice set of features. The only thing I can say is, like, typically when you're looking at this kind of price of tools, it's generally used more in large businesses where they're maintaining large code bases right so i i would think as a manager if this is if you are if you care about technical debt then this is probably something you should look into yeah well if you think about how many hours like how many developer hours does it take to hit 500 bucks you know it's not that much so if you can save a couple days every year then you're doing great right well are you talking about like on a per developer seat or are you talking about there for the build
Starting point is 01:12:50 server i'm still thinking build that's probably how i think about it maybe that's wrong but so so if for one build server we're talking about 603 dollars at the moment based on current yeah uh so if you've got a team of 10 developers euro to us dollar yeah you save a half hour each over a course of a year then you've you know you've more than made your money back i'm sure you're going to save much more than that yeah and even at the developer seat i mean you could probably argue that having the developers have instant access to that through a developer tool set visual studio might save you more than the cost of it. Oh, yeah. I'm not arguing that. I'm just saying that you'd have
Starting point is 01:13:28 to weigh it based on the size of your team, size of your project. Which one do you think is going to be the better spent money for you per developer seat or per build machine? Again, it's not cheap, but most tools aren't.
Starting point is 01:13:44 But I love the fact that there was the option for that, though. Yeah, it is nice. So I thought that was a great feature. Oh, hold up. I was completely wrong. So check it out. Updates with a version are free as a support context. No, there's...
Starting point is 01:13:59 Within a version. I'm sorry. It doesn't have the upgrade. Yeah, there's totally an upgrade. So, like, you know, if you wanted to upgrade the license, you can get a quote for it, but it's going to be based on whatever you previously had. Right. And then see how that goes.
Starting point is 01:14:11 Yeah. So that's all that part. That pretty much wraps that up, but let's get into the resources we like. So as Joe mentioned, one of the major drawbacks was there is a lot, a lot of information to take in that you can easily be overwhelmed with. And here comes Pluralsight to the rescue once again. Believe it or not, there is a Pluralsight training course on Indepen. You know, it's almost like these are just the tools of the trade like if you're going to be a dot-end developer you got to have resharper you got to have plural site
Starting point is 01:14:49 and um you know maybe independent is good for you too yeah i i when when i found that and there i was like oh my god plural site are you kidding me if you've thought about it you've got everything plural site it's like you knew what I wanted, and boom, there it is. You're like the Google of learning. That's awesome. And also, I want to mention, I'm going to have a blog post coming up here. I actually went and I mentioned this a few times. I went and compared some high-profile open-source projects like Entity Framework and SignalR.
Starting point is 01:15:22 And so I've got a spreadsheet that you can see in tables. I'm going to talk about some of the differences. Of course, you can't really compare projects. It doesn't make sense. It really makes more sense to track yours over time, but it's still cool to see. Hold on now. The last time somebody pre-discussed their blog entry,
Starting point is 01:15:37 Pascal Coder had some words. You've got to be careful about that. The link one is still in the word. I'm typing a word a week. I'm just saying. I'm just saying. I already got this as a draft. It's cocked and ready.
Starting point is 01:15:53 Yeah, right. Okay. Me too. Okay. All right. So let's get into the tips of the week. All right. And I'm first up here. So there's a bookmark that I used years ago, and I recently have been working on a big HTML form and need it again.
Starting point is 01:16:08 And it's wonderful. It's called form auto-fill, and there's a couple of them, but this is the one I think is easy to see. Just drag it from the page to your bookmarklet bar in, like, Chrome or whatever. Then if you're on a big form, you click it, and it fills text areas in with random stuff phone numbers get phone numbery type stuff emails get email look oh wait a minute so i thought i thought you were talking about like a chrome autofill type feature this is a garbage autofill this is like lipsum oram greeking but it's like real words i think it like takes a paragraph and kind of like puts
Starting point is 01:16:42 one word in each form field so it's nice about about that. So it doesn't do the Steve Ballmer, Ipsen... No, I don't know where it gets the text. It might get it from somewhere funny. I don't really know, but that would be pretty funny. But what I like about it is that because it does these real human-readable words, I can kind of go back to the form, hit refresh, and make sure that things kind of show up in the right order, and I didn't have to fill out these 17 fields by hand, so that's really nice. That is nice. I kind of feel like we we got to mention this for a moment real quick before we continue on the tips of the week since since i kind of i don't think we've discussed
Starting point is 01:17:12 this before but you know we've all heard about you we've all used various greeking uh type generators before you've seen it before the ipsum lorem blah blah blah blah you can't read it doesn't mean anything type generators where if you just want to block a text right so if you haven't already found it we'll include a link to this the bomber ipsum.com which is the steve bomber ipsum generator and it's fantastic because you could just generate some random text and it'll say stuff like linux is not in the public domain windows innovation windows phone microsoft word winning I've got my kids brainwashed. Woo! Google is not a real company. Programming being developers, developers, developers, developers, developers, developers, just like that 50 more times. It's hilarious. So I highly recommend that for your next project
Starting point is 01:18:02 where you just want some random text in there. Beautiful. in that for your next uh your next project where you just want some random text in there beautiful all right so uh i actually had one tip of the week and it grew so uh real quick again disable get in visual studio 2013 if you see that it's killing you the one that i was initially going to do and i'll still do is called con emu and i believe it stands for console emulator and it's like a replacement for your dos command so it's not windows powershell but allows you to maximize your window and do like tabbed consoles which i find very useful for doing like you know various different command prompt type stuff so that's one i'll have a link in the show notes. And then the other one, and this only came up because Joe talked about his meetup with SQL and XML.
Starting point is 01:18:49 And have you ever run into a situation where you had a text field coming from a database query, and it would cut off the characters because it'll only return so much in the grid? Or even if you try to do it to text, it'll still cut off the characters. And so then you're like well how am i going to get all this out of here i just want to run this query and get the data back out so i can see what's in there right a way that you can cheat it in sql server management studio is you can cast that field as xml it'll turn it into a clickable field in the grid and then it'll open it up and you'll get all the text so i love that i i so love that feature i just used it the other day so yeah if you ever need to get all the contents out of a
Starting point is 01:19:34 data field and it keeps truncating it cast it as an xml you can't just like make your column wider to the right that's what i do i just click the line. Yeah, just double-click it, and then it all expands. And it cuts off after so many hundreds of characters. Then you can see it all. Yeah, and I've even tried to go into the options in SQL Server Management Studio and max out that. It won't do it. So cast it as XML, you're good to go.
Starting point is 01:19:57 You can click that cell, and it'll open up in a new window, and you can get all the content. So maybe this is another one where Microsoft 2 isn't honoring when you double-click it, it's not getting big enough. No, theirs does. Theirs does. It works properly. Well, apparently it doesn't get all the content. So maybe this is another one where Microsoft 2 isn't honoring when you double click it, it's not getting big enough. No, theirs does. It works properly. Well, apparently it doesn't get too big enough. It's limited. They truncate the cell though. Right, so
Starting point is 01:20:13 I was just saying, maybe they need to fix that. But their double click cell column thing works the way it should. Did you already mention, we talked about it about our disdain for the Git plugins you already mentioned that one too yeah i did yeah um sorry i was in my uh steve ballmer ipsum generator appreciate that well you know developers developers developers so uh here here was an awesome little
Starting point is 01:20:36 tip i didn't even know this existed and i just you know happily stumbled upon it But did you know in Chrome, if you are like me, you have multiple tabs open, you can pick multiple tabs in a single time and move them. So if you wanted to rearrange the order of your tabs, or maybe you want to take five tabs and move them into their own separate window, here's what you do. You hold shift, you click on the tabs that you want to move, and you'll see them start to line light up. And then you can move those tabs and you can either move them into their own separate window or you can move them into rearrange them in the tabs. But the tabs that you haven't selected are going to be kind of grayed out. And these other ones are going to be brought to the forefront. They're going to be highlighted and you can move multiple tabs at one time to add to your tip you can use control as well so if you
Starting point is 01:21:30 don't want if you don't want things that are right next to each other you can choose you can control click and get them if they're separated and then if you move them it slides them together oh yeah true sorry that's beautiful That's beautiful. Yeah. Beautiful. I didn't even realize that was there and I just happened to accidentally stumble across that when I pressed the button and I'm like, what just happened? How did I move those two tabs at the same time? Yeah, that's
Starting point is 01:21:56 awesome. Black voodoo magic. Beautiful. Alright. So with that, we'll be putting the links and the show notes up on codingblocks.net slash episode 15. Subscribe to us on iTunes, Stitcher, or more using your favorite podcast app. And please be sure to give us a review on iTunes and Stitcher. And visit us at codingblocks.net where you can find the show notes, examples, discussions, and more.
Starting point is 01:22:22 And visit us at codingblobox.net where you can find us. Somebody wasn't paying attention. We just had to nudge him to wake him up. How do you guys listen to us? I don't know. So send us your feedback, your questions, and your
Starting point is 01:22:39 answer comments to comments at cuttingbox.net and follow us on Twitter because I'm starting to get a complex about it at Codingbox. I don't know, he really is. Like, we get retweeted, we get all this stuff, but nobody follows us. It's really crazy. It's like 60
Starting point is 01:22:55 If somebody's living alone. Complex has been initiated. Alright, that's it guys we'll be back soon with episode 15 well this was episode 15 or 16 or 17 that might get cut
Starting point is 01:23:14 who's not paying attention now I was awake it's 11 it's 11 10 almost

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.