28
Oct
09

Learning ASP.NET MVC through NerdDinner.

Nerd Dinner LogoI’ve been trying to get up to speed on ASP.NET MVC.  Very cool so far.  I started with the free ASP.NET NerdDinner tutorial, and moved on from there.  I love the tutorial, it’s very detailed, and yet short.  Also, it’s been subject to intense scrutiny and review that has provided a great wealth of learning, beginning with Ayende’s review on NerdDinner.

Jimmy Bogard has some criticisms about the ‘poor man’s dependency injection’ in the application in his How not to do Dependency Injection post.

This led me to the Matt Hinze post on AutoMapper in NerdDinnner (I finally get what AutoMapper is all about).

Which of course led me to ASP.NET MVC View-Model Patterns .

Finally discovered a post titled ASP.NET MVC Best Practices.

I haven’t checked it out yet, but while I’m generally not a fan of screencasts, I plan on watching Roy Osherove’s video review of the tests in the NerdDinner source.

30
Sep
09

Speaking at the University of Calgary this Friday

I’ve been invited to present a speech at the University of Calgary as part of their Biomedical Engineering Distinguished Speakers Series. I’m going to present a speech titled “Image Metrology in Orthopedic Imaging”.   The lecture, aimed at undergraduate Biomedical Engineers, is going to touch on the issues on getting measurement from 2D x-rays, 3D planning, and surgical navigation all related to orthopedics.

The lecture starts at noon in the ICT Building.

01
Jun
09

So you think HTML is hard? Try DICOM!

I’ve recently been reading about the hard to understand HTML and the ‘fine line’ there is to producing HTML output that all (enough?) web browsers understand.  To all web developers I say quit you’re whining, try following the DICOM standard.  Although I haven’t read enough standards to say that DICOM is the worst standard ever, I can say that it can be a tad confusing at times.

Some problems:

  • The standard is long.  The PDF version of HTML4 is nice and light at a single 389 page document, the 2008 DICOM standard has 18 parts, part 3 alone is 1097 pages. ( OK, this is a bit of comparing apples to oranges since DICOM covers communication protocols in addition to the syntax…)
  • The standard is old.  The ARC/NEMA standard dates back to the mid-eighties.  There’s nothing wrong with this per say, but it does carry around a lot of baggage (like transfer protocols that so far as I can tell, no one uses anymore).  Life would be so much easier if implicit little endian would just go away *sigh*.
  • The standard is ambiguous.  There’s lots that’s unclear or unspecified.  What’s the correct window/level (brightness/contrast if you’re not familiar with DICOM). You’d better look outside the standard to figure it out.
  • The standard is confusing.  What’s the pixel spacing in an x-ray image?  Try reading figuring out what this means.
  • Major vendors don’t comply to the standard.  It’s not enough to comply with the standard, like web browsers you’ve got to be bug compatible with common vendor formats.  Unlike Web browsers, there’s not just a handful, there’s dozens of them, and you may not have their data.  This is what David Clunie calls the “we know what the standard says but we are going to ignore it and do what we have been doing for almost a decade regardless” CR vendor bug.

That said, at least there is a standard.  When I first started working a Merge (formerly Cedara Software) there was a SIF (Scanner InterFace) team who’s job it was to read the proprietary formats from older scanner and read them in.  We still sell boxes that connect to old ultrasound machines to allow them to produce DICOM outputs.  Despite being old, the standard is still extensible (though it’s going a little too far IMHO).  Finally, DICOM also has a pretty good domain model for radiology.  I don’t know what came first, the domain model or DICOM, but structuring your application around the DICOM model has worked very well for me.

30
Apr
09

Toronto Code Camp 2009 – Speaker Reviews

I had the pleasure to attend the fourth annual Toronto Code Camp over the weekend.  It was my first code camp and I found it hit and miss.  The quality of the presentations varied greatly.

Here’s a review of the sessions I attended:

Get Setup with WiX, Colin Bowern

Having used WIX in a couple of projects, I was hoping to get something good out of this presentation.  Colin was an excellent speaker and covered the basics very well.  However, his coverage of patches was worth the price of admission alone – and would have been invaluable last week.  The session was an end to end coverage of Wix from the first installer, to patching, to upgrading.  Definitely focusing on breadth rather than depth.

Using Data Services with ADO.NET 3.5, Kristina Mandekic

Having seen a presentation by Scott Hanselman on Data Services, I’m not sure what I was expecting to get out of this one.  I’m facinated by the technology, but have no practical use for it right now.  This stuff seems to sink in more the second time around, although I think I’ll really have to code it to ‘get it’.  Krista admitted she was a first time speaker and although she was clearly pretty nervous, I thought she did pretty well.  I’m still confused about the security story surrounding ADO.NET data services, but otherwise the technology looks very cool.

How to improve testability with a modular architecture, Mario Cardinal

This was the best presentation of the day.  At the beginning of this one, I was thinking crap, he’s just going to say use layers and unit testing, but he really focused on designing what he called the ‘velcro’ between layers in an architecture.  He’s from Montreal and has a podcast in French.  Being a big podcast listener I’ve already checked it out and it sounds great!  These Quebecquois get going a little fast for my Ottawa bred and France trained ears but the content’s great.

How LINQ Works: A Deep Dive on Visual Basic 2008 , Jonathan Aneja

Another excellend presentation.  Again, LINQ is something that I’ve been following for a while.  I’ve used it in one project, but I really haven’t gotten the chance to really dig deep.  Jonathan did a great job providing info on how it works, touching on pretty much all the areas.

WPF and the Model-View-ViewModel Pattern, Elias Puurunen

I was looking forward to this one.  I’ve been looking at Prism and MVP patterns as a way to solve some of the isses I had in WPF in my last project.  What amazed me is that this guy was a second year university student presenting to a bunch of professional developers.  The kids got more balls than I do now.  I think he’s going places, but his presentation a little more suited to a classroom environment that conference, but I’m sure he’ll improve quickly.  I left early to get home and see my kids so I never got to see the meat of this presentation, but the pacing was off, and there was too much PowerPoint.

Next time I’ll choose sessions based more on their speakers rather than the topics.  I’m undeciced if I’ll attend again, the day was the most beautiful day of the year and I spent it sitting listening to programming talks with a bunch of nerds (especially that guy over there, wait, that’s a mirror).

21
Apr
09

Just a one line change

I was thinking about Eric Lippert’s blog post How many Microsoft employees does it take to change a lightbulb?

So, our customer found a bug in the last released version of our software.  For various reason’s it’s only reproducible on one of their customer’s sites (we’re an OEM).  It’s an important customer, and our customer couldn’t wait until the next release for the fix (due in a month or so). scream2

It took two of us three days to track down the cause of the bug and the fix resulted in a one line change.

The one line change was in one of the top level assemblies in our shared base library.  The change had to be back-ported.  We had to create a new branch in our source control system, back port the change, and get a new build of our platform library that is shared between multiple products.  We (er, I) decided that we would just drop the DLL into the release build of our software and edit the assembly redirection in our App.config file and provide them with instructions to manually copy the two files (a DLL and the App.config file) into the installation directory of their software.

So, when I got the build, I installed our old version and dropped in the new assembly into the install directory and tried to run the software.  As expected it crashed on start-up.  So I edited the App.config to point the old version of the assembly to the new version.  Start again.. crash … scratch head for few minutes.  Since the new assembly references all it’s dependent assemblies, they also need redirection.  Twelve (yes twelve) assemblies.

Next write the instructions, send them to Tech Comm for the formal Service Note write up.

Send the instructions to the testers so they can test the patch.  Our customer is in Japan, we need to test on a Japanese OS.  They’ve also done the localization themselves.  We need to test with our test satellite assemblies.  They’ve also re-branded our software. We need to test a re-branded, localized version on a Japanese OS.

Next, we need to make sure everything is in change control, get Quality Assurance and Regulatory Affairs to review our docs, prepare the release request, release notes, review the service note prepared by Tech Comm, get Customer Support to execute the Mini Acceptance Test Plan on the release CD, have the release meeting collect signatures, dot the i’s, cross the t’s, and finally send the CD to manufacturing so they can label it, post it to the ftp site and send an email to our external customer.

Maintenance is the most expensive phase of software, ’cause this whole process was cause by a one line change.

29
May
08

Why Implementation Details?

I’ve been writing a blog for a while over at blogspot, but I’ve written rather intermittently.  I love reading blogs, and have often had great intentions on maintaining a good one.  A while ago I thought of what I thought was a really great name: Implementation Details.  Too bad for me, someone at blogspot already took it a few months ago so over to WordPress I go.

In any case, WordPress is crackin’ good.  It seems way more flexible than blogspot.

One thing I’ve noticed since I was a grad student, is the huge dependency that a given solution has on the minutia, the implementation details.

Since my background and work deals a lot with image processing, let’s take the Canny Edge detector.  Given one image, and the same set of parameters in the algorithm, you will come up with as many different results as you have implementations.  How do you represent your images in memory, how do you implement your Gaussian filter, what is the form of your gradient operator, what assumptions and simplifications do you make?  Despite the fact that the algorithm is generally acknowledged to be robust and well understood, many small decisions have to be made in the implementation that make the results not wrong, but different.

I’ve decided not to move my posts from blogspot, there’s nothing worthwhile to move.




Pages

 

February 2010
S M T W T F S
« Oct    
 123456
78910111213
14151617181920
21222324252627
28