Give the gift of giving – Givealittle.co.nz
4 December 2008 in Business, Mindscape | Comments (1)

Last night we finally pushed the big red button – the release button – on Givealittle.co.nz. It’s been a huge effort with many players involved in the creation of a website dedicated to making it easier for people to donate to causes they feel passionately about.

Givealittle.co.nz

One of the nice things about Givealittle is that it really helps raise the transparency about where your donations are going. You can elect, for example, to only donate to projects where they have to meet their goal (for example – “we want to build a shed” might need 10,000 – what happens if they never reach their target? In this case your donation can be returned to you and you can be comfortable in the knowledge your donation wasn’t squandered). There are heaps of features and capabilities like this to help make giving more central and accountable to you. If you’re a company by the way, you can get Givealittle gift vochers – good timing for end of year Christmas gifts :-)

I’d love to hear any feedback – either on my blog here or on the site.

You can check out my Givealittle profile here: John-Daniel Trask’s Givealittle Profile.

We still have plenty more things to add and will continue to do so going forward – join today so you can be kept in the loop. Better yet, try it out and help a worthy cause :-)

On the technical front

As this is primarily a technical blog, it’s worth sharing how we created the site.

The site is built from the ground up using the ASP.NET MVC Framework – we’ve been evolving it from about drop 2 of the framework and it’s been great to see the new bits and pieces getting added the framework throughout development.

The entire code base uses .NET 3.5 so that we could access all the great stuff there (including, but not limited to, the fact that ASP.NET MVC requires .NET 3.5). The Views use Andrew’s excellent NHaml View Engine.

Data access and domain modeling was handled by Mindscape LightSpeed – you can be sure that we’re dog fooding our own products here. This made things like entity validation, site search and data binding work very easily and saved a heap of development time.

The site runs on Windows 2008 + SQL Server 2008. The JavaScript library of choice was of course jQuery.

A call to action

There are plenty of great causes already listed on Givealittle – and many more to come. This is an opportunity for all of us to help improve the lives of others by giving to causes you feel passionately about.

Join today: http://www.givealittle.co.nz

Thanks.

LINQ-to-SQL – Goneburger
4 November 2008 in General | Comments (0)

It appears, as it has always been expected, that LINQ-to-SQL is being put out to pasture and that Microsoft is now pushing LINQ-to-Entities as the database abstraction engine of choice. This is a great shame given that Entities, as it currently stands, is a long way off being a viable solution for many projects (for a good number of reasons you can find all over the internet).

Some of you will connect that dots and know that I’m a co-founder of Mindscape, developers of a .NET object relational mapping framework, LightSpeed and think that it’s only because of this that I would write something effectively touting the alternatives to Microsoft’s O/R Mapping offerings. The truth is, we have only seen a surge in sales from the release of Microsoft tools. Primarily I believe this is because developers tend to listen to what Microsoft tells them to use and then they start to explore other offerings in that domain – especially when they need more than Microsoft is providing.

Many choose Microsoft’s offering over ours is simply because of the reliability they have in Microsoft continuing to enhance their product line. Clearly this is not the case with LINQ-to-SQL and those people would have been better off working with a company that not only continues to enhance their products, but enhances them more regularly and offers much more in that product. I can completely understand Microsoft wanting to focus on just one framework – it does seem odd to develop competing products – but I feel it is premature to do this with LINQ-to-SQL given the situation with the EF and the desire for something nice and easy to use that just gets the job done.

Due to LINQ-to-SQL being part of the .NET framework, Microsoft are going to have to keep it on life-support for years to come. This doesn’t mean you should expect much more than bug fixes being added and, reading between the lines, DamienG’s blog (member of the LINQ-to-SQL team) appears to state that future feature enhancements will likely be provided by the community. The community has created some nice enhancements for LINQ-to-SQL to be sure, but this feels like those situations where you find a site by some guy who still thinks OS/2 is going to catch on any-day-now and continues trying to extend it himself to keep up with where the entire rest of the planet is going.

Coming back to LINQ-to-Entities, I have to add that while the current version has been widely panned by those who have used it, I do believe that future versions can only be an improvement. Microsoft has a long history of just continuing to improve a product no matter how poorly it starts its life until it gets to a state where it is fantastically successful. I also personally know a couple of people working on the future versions of the EF and have a world of respect for their understanding in this domain. I would simply implore Microsoft to cease making politically motivated decisions in this space and start doing what’s best for the developers and end users.

To read more about LINQ-to-SQL being put to sleep:

  • David Hayden – good summary of managing the market (I’d suggest LightSpeed though David!)
  • Ayende – Microsoft Kills LINQ-to-SQL

So where next? Well, you could continue to invest time and effort into LINQ-to-SQL until EF v2 is released and hope the issues with EF are resolved or you could roll over to the Mindscape site, check out our feature comparison, get the free version of LightSpeed and start experiencing the difference :)

FREE: November unplugged events
3 November 2008 in Events, Microsoft, Mindscape | Comments (6)

That’s right – free! Not only that – but prizes too!

Kicking off next week, myself and Kirk Jackson will be Christchurch, Wellington and Auckland for the Microsoft UNPLUGGED event. This is a great opportunity to get your development team out to hear about developing next generation user experiences using WPF as well as finding out how to be more productive with Visual Studio 2008.

The speaking time is around one and a half hours so we will be able to cover a reasonable amount of content. Because of this I would like to hear what things you would like to learn about Windows Presentation Foundation – leave a comment. I’m explicitly trying to ensure that the talk is as real-world as I can make it so that after the event you will better equipped to critically evaluate building your next project with WPF.

Numbers are limited so you’ll need to register as soon as possible at the site: http://www.microsoft.com/nz/events/unplugged/msdn-nov08.mspx

Oh, and the prizes I mentioned are:

  • 3 x XBOX 360
  • 3 x Samsung 22? LCD Monitors
  • 3 x Office Professional 2007
  • 3 x Windows Vista Ultimate NFR
  • 6 x Microsoft Explorer Mice

So – leave a comment of what you would like to learn, register for the event and hopefully I’ll see you soon :-)

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

Things you didn’t need to know
16 July 2008 in General | Comments (1)

I’ve been tagged by both Andrew and Jo so let’s knock off this programming meme…

How old were you when you started programming?

9.

How did you get started in programming?

I was working out what I wanted to do when I was older (at a rather early age it would seem) and basically looked at who the richest person in the world was and what they did. I can’t remember if Bill Gates was the richest or just very close but decided that industry was for me. I also enjoyed building things with Lego/Technics etc and programming seemed like an environment where the only limits were self imposed.

What was your first language?

QBasic, which came free with DOS at the time. 64K limit for the file size was always frustrating so I moved to C/C++ and eventually Visual Basic 3 in the first couple of years of programming.

What was the first real program you wrote?

I’m not sure what constitutes real – first program I ever wrote was a number guessing game. The first program I ever sold was one that cleared internet history/recently used files automatically on Windows 95 – this product seemed somewhat popular with the class mates at my all boys high school.

What languages have you used since you started programming?

Delphi (Pascal), C, C++, Java, Haskell, Visual Basic, C#, JavaScript, MASM.

What was your first professional programming gig?

I built several software systems for people while at high school but my first proper office job was with Intergen in Wellington (they have a great graduate program).

If you knew then what you know now, would you have started programming?

Yes.

If there is one thing you learned along the way that you would tell new developers, what would it be?

Explore outside your domain – every area of computing and every faction has their own unique ideas and innovations, borrow and learn from all of them. This is something that doesn’t come naturally but if you’re persistent you’ll benefit from it.

What’s the most fun you’ve ever had… programming?

Optimising a media management system for better performance – I love seeing just how much performance I can get out of a computer and absolutely hate slow programs. Wringing out even an extra 50ms may lead you down the path of diminishing returns but you learn so much about performance optimisation going through the process that it’s entirely beneficial to the developer soul.

While not strictly programming, making a release of a software product is probably one of the best feelings you can have in the software product space.

I’ll tag:

Ivan Towlson

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

Announcing FlightCheck.co.nz and KnowledgeCue
23 June 2008 in Business, Events | Comments (2)

Things have been progressing at a rapid clip lately and while it has been fun it has resulted in more than a few blog posts where I just announce new things I’ve been involved with. I’m going to work on changing that – not by doing less, but by ensuring I post more about general technology and business.

FlightCheck.co.nz logo

First I’d like to announce FlightCheck. FlightCheck is a YouTXT initiative to provide flight information for travelers either online or via text message.

Check out FlightCheck here: flightcheck.co.nz

Currently you can browse for any delays for flights to any NZ airport. You can also text your flight number (e.g. NZ898) to 8808 and get texted back the departure and arrival time (including changes if there are delays). We’re working on adding other helpful information to this service as well so I appreciate any feedback.

KnowledgeCue logo

Second, while not a business connected to me, I’d like to give a shout out to KnowledgeCue.

KnowledgeCue has been setup by local SharePoint MVP, Chan. Chan has spent considerable time working with SharePoint and has worked with top organisations in Wellington as a SharePoint expert.

You can find out more about KnowledgeCue here: knowledgecue.co.nz

Without a doubt, SharePoint is proving to be a highly successful product for Microsoft but it can be a bit of a tricky beast from an installation/configuration angle and therefore using the services of organisations who have a deep understanding of SharePoint is going to save a lot of headaches for your business.

Now, let’s get back to sharing some coding or business discussion :-)

John-Daniel

Velocity project – memcached by Microsoft?
9 June 2008 in Microsoft, Tools | Comments (8)

Reading over the last week shows that there is some strong interest in Microsoft’s new “Velocity” project. What is Velocity? It’s a distributed caching framework to aid in scaling out applications over many servers – for example, an ASP.Net website.

That’s cool.

But, wait a minute, doesn’t this sound exactly the same as what memcached does? Almost the defacto standard for distributed caching and developed many moons ago, memchached powers sites like YouTube, Slashdot, Facebook, NYTimes.com to name a few.

I’m a big fan of what Microsoft creates, in fact I’m building a business that sits on top of what Microsoft builds. I appreciated that the initial blog post even referred to memcached and hints at some of what Microsoft might want to add to their caching system to create some differentiation.

What concerns me here is seeing posts popping up about how cool this framework is from various Microsoft geeks from the “ooo – distributed caching!” perspective. Do they not ever look outside the Microsoft world? Do they not realise this is not new? I think it’s an important discipline for developers to keep looking outside their comfort zone to learn new things. This is by no means something I’m perfect at – it’s a struggle when you’re comfortable with what’s already in front of you but, as the saying goes, you don’t know what you don’t know.

I look forward to the future of the Velocity project and I really hope it’s not just a me too project from Microsoft. You can keep an eye on it by subscribing to their blog.

As a mild plug, our LightSpeed object/relational mapping product has included a memcached provider if you’re building suitably large solutions since version 1.0 :-)

John-Daniel

kick it on DotNetKicks.com