Tuesday, May 19, 2009

Indy Code Camp Notes, Part 2

This is part of a four part series of notes I took at Indy Code Camp on May 16, 2009. This year’s Code Camp consisted of five tracks each with five sessions. Track topics were SharePoint, SilverLight and WPF, Data Access, MIX highlights, and best practices. These notes are from the sessions I attended.

These notes are in no way intended to replace attending one of these talks if you have the chance.

Improving Our Craft: A Discussion on Software Estimation

Presented By: Michael Eaton - Validus Solutions

Michael started his talk by tossing out some statistics about project success rates and defining some terms. He then moved on to discussing why we're so bad at giving good estimates and wrapped up with some ideas for how to improve the estimates we do give. Unfortunately I wasn't able to capture the exact stats but they were eye-opening to say the least in that in 2006, only 32% of projects were considered to be successful.

Terms

  • Estimate
    • Tentative evaluation or rough calculation
    • Preliminary calculation of cost
    • Initial judgement
  • Target
    • Statement of desirable objective
  • Commitment
    • A promise to deliver

Understanding Estimates

  • The challenge is to determine whether we are supposed to be estimating or projecting to hit a target. If we're projecting to hit a target do we produce what was expected?
  • Estimates will by their nature, be wrong. We're providing estimates not exactimates.
  • A good estimate is one that provides a clear enough view of the project reality to allow the project leadership to make good decisions regarding targets.

Why Are We So Bad?

  • Unknown problem domain
  • Vague, missing, or large requirements
  • We forget stuff
  • Overconfidence
  • Insufficient education or practice making estimates
  • Never given a chance to succeed (set-up for failure)

The Cone of Uncertainty

The Cone of Uncertainty states that the actual duration of a project can take up to four times as long or 1/4 as long as expected.

What Can We Do?

  • Stop giving off-the-cuff estimates
  • Communicate
  • Incorporate Agile practices
    • Iterations
    • Daily Stand-ups
  • Decompose the problem into smaller chunks and estimate the chunks
  • Let developers estimate their own tasks rather than having a manager or lead developer provide estimates for the team
  • Estimate end-to-end tasks
  • Learn from your mistakes
  • Keep a log of estimates and periodically review it

Monday, May 18, 2009

Indy Code Camp Notes, Part 1

This is part of a four part series of notes I took at Indy Code Camp on May 16, 2009. This year’s Code Camp consisted of five tracks each with five sessions. Track topics were SharePoint, SilverLight and WPF, Data Access, MIX highlights, and best practices. These notes are from the sessions I attended.

These notes are in no way intended to replace attending one of these talks if you have the chance.

Care About Your Craft: Adventures in the Art of Software Development

Presented by: Tim Wingfield – Quick Solutions

Tim’s talk focused on how to get better results out of each phase of the SDLC. Included here are key points from each section.

Design

  • TDD should not be thought of only as Test Driven Development but also as Test Driven Design
  • Design with the SOLID Principles in mind
    • Single Responsibility Principle
    • Open/Closed Principle
    • Liskov Substitution Principle
    • Interface Segregation Principle
    • Dependency Inversion Principle
  • Design by Contract – TDD can actually force us to do this
  • Avoid programming by coincidence - Understand how and why something works
  • Don’t be a plumber - Chances are good that someone else has had to save the same technical problem so there might already be a framework that can be used and let you focus on the actual business problem at hand
  • Justify technology use – Don’t use a technology just because it’s new, use it because it better solves the problem
  • You Ain’t Gonna Need It (YAGNI)
    • Don’t waste time building features that might be used

Development

  • Quality is not an accident – build it into everything starting with requirements
  • Don’t Repeat Yourself (DRY)
    • Reuse code and avoid copy/paste programming
  • Automate where ever possible
    • Build servers are a great for automation
    • Use code generators to speed up development by automating common coding tasks such as creating properties, creating method stubs, and refactoring.
  • Avoid finger pointing by taking collective ownership – We’re all in it together
    • OUR build broke
    • OUR defect
  • Don’t live with broken windows
    • Bad code begets bad code
    • Fix problems when they’re found (time permitting) rather than letting them propagate
  • Know when enough is enough
    • Perfect is nice but software has to ship sometime

Debugging

  • Someone (QA or a customer) will find a defect
  • When a defect is found, don’t panic
  • Think about the solution before rushing to action
  • Avoid placing the blame and work toward the best solution

Continuous Improvement

  • Always keep learning
  • Maintain a positive attitude
  • Be a mentor
  • Create a culture geared toward continuous improvement
    • Schedule lunch 'n' learns
    • Have book reviews

Saturday, October 18, 2008

Adobe Camera RAW vs Nikon Capture NX2

I've been using Adobe Camera RAW (ACR) ever since I started shooting RAW with my D40 in mid-2007.  I've always been pretty happy with the results, particularly after bouncing into Photoshop CS3 and doing some additional adjustments such as some changes in LAB mode but recently I've been wondering what other software is available for manipulating the NEFs that come off of the D300.  Without too much effort I found a ton of sites talking about how Capture NX2 from Nikon is the best editor for NEFs hands down.  Nikon even has a 60-day free trial of the software so I decided to give it a shot.

I've spent a few hours each night for the past few days experimenting with NX2 and found myself seriously disappointed with the software each time.  The problem isn't the quality of the output.  After seeing the results of the various adjustments such as white balance, noise reduction, Active D-Lighting, and a ton of other features I dare not question the capabilities of the software.  It really is great at adjusting NEFs.  Where it really gets me is that it extends my workflow, it results in more used disk space, and it's REALLY SLOW!

With few exceptions I always load the processed NEFs into Photoshop so at a minimum I can add a copyright watermark and a border treatment.  In order for me to fit NX2 into my workflow I'd need to do the processing in NX2, save the image as a TIFF, and open the TIFF in Photoshop, do the appropriate processing, save the PSD, and then export the JPEG that will end up on flickr or a CD/DVD.  With my current workflow I just open ACR via Adobe Bridge, do my processing, let ACR generate a 5-10K xmp sidecar file, and proceed into Photoshop.  Generally speaking, the results with this process are (IMHO) fantastic and I don't have a 70+MB TIFF sitting along side a 90+MB PSD.  Granted I could delete the TIFF when I'm done with it but that would be adding yet another step into the process.  The real deal breaker for me though is how insanely slow NX2 really is!

I've seen some posts that discuss how NX2's UI is a bit cumbersome.  I really didn't think the UI was the problem.  After a bit of poking around I found most of the basic adjustments to be fairly intuitive.  The UI wasn't what slowed me down.  What really slowed me down was how long it took NX2 to complete ANY operation.  Changing white balance?  Wait a few minutes.  Setting the black point?  Wait a few minutes.  Zooming in?  Wait a few minutes.  Applying noise reduction?  Go watch TV.

Maybe the slowness of this application would be more tolerable to me if I wasn't already used to the speed of ACR.  I'll admit that my laptop is a few years old but these same adjustments in ACR are nearly instantaneous!  I obviously don't know what's going on under the hood of these two apps but if Adobe's generic RAW editor can be as good as it is I would think that Nikon could create a specialized NEF editor that would be much better.

My experience this past week with Capture NX2 has left me thinking that Nikon needs to release the full details of the NEF format, get out of the desktop software market, and let the companies like Adobe that have proven their ability handle making the desktop utilities.  It was bad enough when I opened the box for my D300 and pulled out the software suite CD.  I paid $1700 for a D300 and all Nikon is going to give me are View NX and Kodak EasyShare?  How am I supposed to do anything with 14-bit NEFs with those???  And then they want $180 for software that would eat more of my time and storage space?  W...T...F???

In the mean time, I think I'm going to download the trial version of Adobe Lightroom 2.0.  I've seen demos for Lightroom 1 and have liked everything I've seen.  I'm thinking it could streamline my workflow a bit.  That, and I hate Bridge too...but that's another topic for another time.

Friday, July 11, 2008

T-Bird Tail Light

Today was another good day for my photography.  One of my photos won the June 2008 Assignment: Indiana contest!  The topic for June was Vintage Vehicles and I snapped a shot of the tail light of a 1956 Ford Thunderbird while Esther and I were at the 1st annual Carmel Artomobilia event in Carmel's Arts and Design District.

Thanks to everyone that voted for this shot in June.  I'm looking forward to the July contest.

T-Bird Tail Light

This shot was taken at f/8 for 1/160.  Only the usual color adjustments were applied in Photoshop.

Tuesday, July 08, 2008

Streaks in the Sky

For the first time in a long time I tried my hand at capturing some lightning.  I've tried very unsuccessfully in the past to get a lightning shot that I could be proud of but tonight was another story.

We had yet another not so insignificant storm pass through the area tonight.  At first I tried shooting through one of the west windows in our sunroom but by the time I got my camera set up most of the lightning had moved to the other side of the house.  I moved my gear to an east facing dining room window but the screen and trees were causing other troubles.  I was about to put everything away when I decided to move into the garage (also east facing).

At first I wasn't having much luck.  I had been trying to limit my scope to one of the houses across the street (and the sky above it obviously) since I had been seeing a fair amount of activity in that general direction.  After several unsuccessful attempts I changed my approach and zoomed back out to 18mm and widened my field to nearly the entire cul-de-sac.  Immediately after repositioning and opening the shutter I was presented with a perfect flash that I knew was right across the top third of my frame.  I left the shutter open for a few more seconds before closing it.  When the review came up I took one look at it and said to myself "this is the shot I've been waiting for," packed up my gear, and headed inside satisfied that I FINALLY got the lightning shot I've wanted since I got my D40.

Streaks in the Sky

For anyone interested in the technical information about this shot, this was taken at f/8 for 23. seconds.