.Net

We did it! LightSpeed 3.0 is done!
15 December 2009 in .Net & Code & Mindscape & Tools | Comments (2)

Mindscape LightSpeed Logo

I am stoked – we finally got LightSpeed 3.0 out the door! For a company the size of Mindscape, we took on a mamoth amount of work and took almost all of 2009 to deliver what we think is an extremely solid 3.0 product.

If you’re interested in the features, you can read the official blog post with highlights or check out the more detailed change log (which incidentally is the same size as all our previous change logs combined).

What I’m really excited about is the integration of migrations into LightSpeed 3.0. Personally I have always hated the pain of having to script out my database changes as I was working away. Even in Rails I’ve not overly enjoyed creating migrations even though they have a nice simple abstraction for them. LightSpeed 3.0 allows you to have the designer track changes and automatically generate the migrations for you. This means you do not have to write a single line of code to have migrations created for you as you tool around updating your model. To me, this is a huge win – we are taking even more work away from the developer so they can focus on solving the actual business problems. I can’t wait to see what feedback we get around this feature :-)

The other exciting aspect of the migrations tracking is that it moves LightSpeed up the value chain – we’re no longer “just an ORM”. With LightSpeed 2.0 we delivered a cool designer will full schema round tripping for heaps of different databases. That was an awesome performance boost for developers and really helped folks working with their models. The migrations capability moves us even further up that value chain by helping manage the life-cycle of the database for developers.

There is of course far more to LightSpeed 3.0, but I wanted to share my thoughts on one feature that I think will really boost my productivity going forward :-)

Download the free express edition and let me know what you think!

We shipped WPF Flow Diagrams
25 February 2009 in .Net & Mindscape | Comments (1)

WPF Flow Diagram

Yesterday we shipped our WPF Flow Diagrams product – a really nice component for creating beautiful flow diagrams in your applications. They can be interactive, read-only, exporting to PNG/JPEG/BMP, serialized, deserialized, customised with new node types, and a whole heap more.

WPF Flow Diagram in use screenshot

When we release a product I always like to put up screenshots (something that was hard with LightSpeed 1.0 since it was just an assembly at the time!). We also try to show some corporate personality is put up one or two fairly absurd but fun screenshots. Ivan has taken the cake this time with his flow diagram highlighting the mating rituals and life cycle of Penguins. Not to mention his awesome over the top use of WPF 3D to show a diagram tilted and with spotlights flashing (unfortunately the flashing isn’t visible in a static image, but it looks great when you do see it – especially since you can edit and work with the flow diagram while all that’s going on!).

If you’re developing a modern application and need a sexy WPF Flow Diagram, check it out :-) I appreciate any feedback.

– JD

Tech Ed NZ 08 is a wrap
11 September 2008 in .Net & Events & Microsoft & Mindscape | Comments (2)

Thanks to every one who came to my Tech Ed sessions this year – it was a real blast to sync up with folks I hadn’t seen in a wee while as well as get that surge of adrenaline that comes with public speaking.

I was prompted to post this today as the evaluation data was fed back to the speakers and I spied a couple of amusing comments. The first two were in relation to the session that Jeremy and I did on C# 3.0 tips and tricks.

“JB and JD best for buck, in a coding respect (not dodgy)”

This just made me chuckle, that’s my sort of humor right there.

“Nice use of examples and Commander Keen”

In one of my demo’s where I generated ASCII Art using an extension method that I borrowed from Jeremy, I generated a Dopefish image (from Commander Keen 4, in the water level). When I asked the audience who recognised it as the Dopefish from Commander Keen only a handful of hands went up. To those people who’s hands went up – you rock, long live the Dopefish! To those who didn’t, you can read up on some gaming history about the Dopefish here.

The last one was feedback on my ASP.NET MVC Architectural Concerns session:

No “GOOD TIMES” this year – very disappointed!

This is in relation to my saying “Good Times” about 200 times in a presentation last year when I was extremely nervous with my first audience size in the several hundreds. “Good Times” became my catch phrase for the better part of a year and has sadly started dying out (I liked that it was a positive statement).

Overall I was pleased with the ratings that were provided but there is always room for improvement. I picked up some good hints and tips from Scott Hanselman which were handy – thanks Scott.

Hopefully I’ll see you all at various user group meetings or at the very least, next years Tech Ed.

– JD

NDepend – deep code metrics
23 June 2008 in .Net & Tools | Comments (4)

Generating code metrics is becoming more and more common with development tools these days – we’ve seen Visual Studio 2008 start to add some basic metrics such as cyclomatic complexity and “maintainability index”. This is all driven by an increased awareness of the difficulties of creating maintainable and reliable software as our software solutions become larger and more complex.

At Mindscape we even published some metrics about an earlier version of LightSpeed. I completely agree with Andrew’s comment that it would be beneficial for commercial software vendors to be more transparent about their code quality – especially when those vendors are providing developer tools. We’ll update our LightSpeed metrics on the Mindscape blog soon.

NDepend logo

When it comes to deep code metrics I think you’d be hard pressed to find a more comprehensive tool than NDepend. NDepend is dedicated to code metrics and because of that dedication you’ll find you can spend days exploring everything this tool can do – I tell you this because this blog post will just scrap the surface of what can be done so I recommend you explore the tool yourself to find what parts you get the most value from.

Getting started

NDepend ships with command line tools and CI integration tools but I’d recommend starting out by playing with the VisualNDepend tool. Here you can easily create a new NDepend project and add assemblies that you want to analyse.

NDepend initial screen with LightSpeed setup

Lets get some analysis done

So how do we start digging into the really meaty analysis? Hit F5, it’s go time!

This generated html file includes data about almost everything you could think of measuring. Basic information such as lines of code are presented first but aren’t off a huge amount of value.

Let’s have a look at a graph of abstractness vs. instability. This helps you quickly identify if your application is in the “Zone of pain” or the “Zone of uselessness”. Ideally you don’t want to be in either and want to ride the fine line between the two. Here’s the break down for LightSpeed and the LightSpeed LINQ provider:

LightSpeed abstract vs stability graph

I’m pretty comfortable with that – we’re in the green zone!

What does this mean?

  • Stability means that there are a lot of dependencies on an assembly.
  • Abstract means that the assembly is very extensible.

So we would end up in the zone of pain if we have a very stable assembly but it’s not extensible. You can imagine working with such a project – any changes have a huge ripple effect and if you’re working with the a project depending on it, you have very little ability to actual alter the behavior of that dependency.

Conversely, we end up in the zone of uselessness when an assembly is very extensible but nobody is actually using it (no dependencies upon it).

LightSpeed assemblies seem not to be depended on by other assemblies (I excluded the 10+ Unit Test libraries for this) and aren’t overly abstract. This is by design – we do have a rich API but you don’t really want to be fiddling in the absolute core of the product so we’ve tucked away some parts to keep the public API simple and easy to use.

The power of CQL

You tend to know that a product is sophisticated when it includes its own query language and NDepend doesn’t let us down here. CQL allows us to write queries for measuring metrics – for example, we might want to display a warning when a method has too many lines of code, or where cyclomatic complexity exceeds certain levels.

NDepend ships with several of these rules already enabled and some of them have been tripped in our LightSpeed analysis. For example, we have several methods with more than 30 lines of code. That can be useful for identifying areas of our code base that might be worth refactoring.

// <Name>Methods too big (NbLinesOfCode)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbLinesOfCode > 30 ORDER BY NbLinesOfCode DESC

I’d recommend having a play with CQL to write your own queries especially if you’re using CI (you are using Continuous Integration right?) as you can hook NDepend to report warnings.

Visual dependency graph

One area that I’ve found useful with NDepend is the ability to more visually see a dependency hierarchy and better see how your projects fit into the software ecosystem in which they have been developed.

Here’s the output for LightSpeed + LightSpeed.Linq

LightSpeed dependency graph

We can see here the usual suspects – System, System.Data etc but we can also identify other assemblies that might not be obvious. For example, LightSpeed provides support for talking to SQL Server, MySQL, PostgreSQL, SQLite, VistaDB and Oracle and the caching can leverage Memcached or the caching provider in System.Web.

I could certainly see this feature being of use to developers picking up an existing project as it would certainly aid understanding the structure more quickly and efficiently.

What else?

There is considerably more information provided by NDepend and I’ve only covered a few areas that I found most interesting in this review. There is a free version for trial/academic/open source users and a professional version also available. I highly recommend grabbing a trial and exploring your projects – you might be a surprise.

The key with any metrics is knowing how to interpret them and understanding the action that you can take to improve them. My suggestion would be to download the trial, run the analyzer over your code and identify some areas of concern, fix them and then recheck. Continue this cycle for the duration of your trial and I’m sure you’ll find you’re producing better code because of it – something we should all be endeavoring to do.

Go and grab NDepend and start improving your code.

John-Daniel

kick it on DotNetKicks.com

We shipped LightSpeed 1.2
6 February 2008 in .Net & Mindscape | Comments (0)

Earlier this week Mindscape shipped version 1.2 of LightSpeed, our domain modeling and O/R Mapper. I always love the feeling of making a new release, the feedback and knowing that people are able to work more efficiently because of it is great.

This is a significant release and so far all feedback has been really positive about the changes:

  • More elegant property code to reduce the code you have to write
  • More lazy-load options
  • Finer grained mapping options for those who want it
  • Debug visualizer to see what SQL a LightSpeed query object will generate right in the IDE
  • Many more small feature additions – see here for more

You can download the free trial from Mindscape here.

You can find out more, including some of the features we’re thinking about adding for LightSpeed 2.0 in the official blog post. We’re also asking for feedback about what developers would like to see in LightSpeed? If you’re not using it, what is stopping you from using it today? Leave a comment :)

– JD

The rise of WPF vs. Winforms
6 February 2008 in .Net | Comments (7)

WPF has been around for a couple of years now and it’s great to see that it is starting to get some solid traction in the market. Obviously we believe this however it’s always useful to use a tool like Google Trends to identify where things are heading.

Here’s a graph of WPF vs. Windows Forms vs. Winforms

WPF vs Winforms in terms of popularity

Some thoughts and notes:

  • WPF is likely bolstered somewhat by Silverlight as it used to be called WPF/e
  • It is interesting to see the general slow decline of winforms over the years. I believe this is because web development has grown more popular for replacing client applications
  • I can’t think of a nice term to measure the rise web development in a pure developer sense.
  • WPF will continue to take market share from winforms as end user machines become more powerful and capable of running some of the awesome effects of WPF more smoothly
  • Microsoft seems to generate most queries for almost any technology they have created (or at least lots of people in Redmond, Washington are interested :) )
  • India was generating, by far, most of the real queries, a real sign of just how large the outsourcing machine is over there.
  • Web frameworks are considerably larger, even SilverLight at this stage is about two times as popular as a search query than WPF

– JD

kick it on DotNetKicks.com

ASP.Net MVC Framework presentation
30 January 2008 in .Net & Code & Microsoft & Tools | Comments (0)

A big thanks to everyone who came along to the dot net user group meeting this evening for my presentation on the new ASP.Net MVC Framework. I’ve attached the files below to have your own play with the sample and to check out the presentation file as well.

You will need to install the ASP.Net MVC Framework but everything else (like the MVC Toolkit) is included in the download. If you would like more help with LightSpeed then I’d suggest you download the Express edition which includes a huge number of samples and one of the best developer guides you’ll find.

I would also take this moment to mention that this is a first CTP, you shouldn’t be using it to create production quality solutions yet and the chance for the API to change is very very high. Just have an explore, taste test the framework and get your head around some of the concepts at this stage :-)

Download the slides and sample application here.

I hope those of you that attended enjoyed the presentation and, as always, I appreciate any feedback.

Cheers,

– JD

Mindscape ships the WPF Property Grid
23 January 2008 in .Net & Mindscape & Windows | Comments (0)

Mindscape WPF PropertyGrid

Nothing better than starting off a new year by releasing a new product to help developers create better software. We announced on the Mindscape blog that the WPF Property Grid is now available to download, trial and purchase. The trial includes many samples that go into detail on creating new styles for the grid which is important as one of the benefits of being based on WPF is the ability to create any style that you can think of.

Ivan has posted a a blog article about using custom editors with the Mindscape WPF Property Grid – I’d urge anyone interested in it to download the trial and then check out his article. Pass your eye over the help documentation as well as it’s much more than just a boring API reference!

Check it out at: http://www.WPFPropertyGrid.com

I would love to hear any feedback about WPF Property Grid from any developers leveraging WPF (even if you’re not, what would you love to see in WPF?).

– JD