Thursday, August 16, 2012

Agile 2012!!

Some of my many imaginary readers will be aware that I've been in Grapevine, Texas attending Agile 2012 for the past week.  It's been a fantastic conference, and I thought it would be good to document some of what I learned before it all leaks out of my head.  So here it is:


Monday:
We started the day by registering, getting our swag bags, and sitting near a “if it’s your first time” presentation.  Nothing terribly useful there.  Then at 9:30, we all went to Simple Design Applied: Spend More Time Creating Valuable Code.  The main focus here was on writing code using simple design.  By simple design, we don’t just mean design that is simple.  Instead, they defined simple design as the following four rules:
1.       All tests must pass
2.       No code is duplicated
3.       Code is self-explanatory
4.       No superfluous parts exist
 In the name of simplicity, the presenters then whittled these four rules down to do, taking the others kind of as a given:
·         Remove duplication
·         Fix bad names

It was a great reminder of how to think about the code we create.

Next, we went to Better Code, Littler Classes: Refactoring to Separate Concerns.  In this class, we started with a fairly simple wiki project that was on flash drives at each table.  We worked together through several different refactorings to make the code easier to understand, having smaller methods and classes.

Tuesday:
Tuesday morning started slowly, with Bob Martin’s Clean Code presentation.  This is an always-useful rehash of what Uncle Bob’s been preaching for years.  If we’re professional programmers, our code should be well written, which means something a whole lot different than “it works”.  I’m sure I would benefit from seeing this talk every year, possibly less.  Uncle Bob’s energy is refreshing and contagious.   He also talked about laser pointers, and the $12 ultraviolet one he got on Amazon.

Next I attended Testing System Qualities.  This was a thought-provoking session about what aspects of quality we should be testing, and when.  The answers tend towards all and earlier, respectively.  One major takeaway for me is that we should be doing availability/load testing on much more than we are, and a way to do so came to me during the session (see previous email).

Wednesday:
I started the day Wednesday with Does Pair Programming Have to Suck.  This was a great discussion about some do’s and don’ts in helping people want to pair.  It contributed to one of the loudest messages that I got from this conference, and that is that you can’t force agile principles on people.  You can make a personal commitment to follow them yourself and you can work hard to help others see the benefit, but as soon as you take away someone’s choice, you’re likely to create a bias and waste all the benefits of agile methodologies.  The main message that was intended from this session is that pairs need to be willing to be vulnerable for pairing to be most successful.  Trust is vital.

Next we had another chance to see Bob Martin in Craftsmanship or ‘The only way to go fast is to go well’.  This was a fantastic new session type where they have a couch, a chair and a coffee table on a platform in the front of the room, and, after a brief opening statement from Uncle Bob (for those who don’t already know, Uncle Bob is Bob Martin), anyone who would like to can go sit on the couch and have a comfortable chat with Bob about whatever they feel like.  Like most people, I was hoping to find a magic bullet that I could use to force people to enjoy the benefits of pairing.  Another person asked my question about this, and Uncle Bob reiterated a previous message that you can’t force it.  So I decided to take the question to the next step and asked about how to overcome biases against clean code in an organization.  After some playful “Hi Bob, I’m Bob.” “Oh nice to meet you Bob.  How’s it going, Bob”, he suggested that a key to making the organization progress is requiring the results of professionalism, rather than the mechanisms.  For instance, if a team or person doesn’t want to pair/test drive/[insert agile practice here], don’t make them.  Simply require the results that would come if they did.  At some point, they are bound to notice that other teams/programmers are able to attain these results, and will want to find out how they can too.

We ended Wednesday in a fantastic pairing exercise called Hands on Keyboards! Coding with Corey Haines.  It was here that I learned that a gentleman we had been speaking with casually somewhat frequently was the Corey Haines.  Now Corey is no Bob Martin, but he’s in the same class.  A name that I’ve heard in many conversations about how to write code and nerdy stuff like that.  Matt and Parker were very entertained when I looked that them and said “That’s Corey Haines!  We’ve been speaking with Corey Haines!”  In the session, we worked to create a Conway’s Game of Life simulation using pairing and TDD, but with some very uncomfortable restraints: no method may have more than 4 lines; no method may return anything other than void or this; method calls cannot accept primitive types or collections; constructors and private methods may take primitive types.  This was probably the most fun session from the whole conference.

Thursday:

I started with an excellent session called Deliberate Practice – becoming a better programmer.  In this session, I participated in a FizzBuzz randoori in Java about good names and removing duplication.  Then we talked about how to enable developers to improve themselves through practices like this randoori.  A significant takeaway from this session is that we can and should be doing weekly randoori sessions at 1-800-Contacts.  There are certainly enough developers that would be interested to make this successful.  After this session, I had a lengthy chat with Bill Hanlon of Microsoft.  He said that measuring and reporting on bug lifetimes (the time from bug submission to bug closure) has been his most useful metric for getting teams to improve overall quality.

The last session that I saw was again Bob Martin, presenting Demanding Technical Excellence and Professionalism.  This was mostly a rehash of what he’d said in the previous two sessions that he did, but was again energizing.

I think the main thing I’ve learned over and over at this conference is that you can’t force agile on people – you can constantly improve yourself and you can employ metrics that clearly demonstrate the benefits of agile practices.  Those around you that are interested in improvement will catch on and join you, if they’re not forced.

Thanks to all the organizers and presenters, and thanks to 1-800-Contacts for sending me!

Sunday, January 22, 2012

DVD Archiving

I was recently asked about what a good setup for ripping and watching DVDs without having to handle the DVDs.  I'll cover how I do it, and some of the other options for how it could be done.

So, starting at the "top", you need something to watch on, eh?  For simplicity's sake, a TV that has HDMI inputs is best.  Of course you can make it work lots of different ways, but HDMI is the easiest by a ways.  We got a Proscan 47" LCD 1080p 240Hz HDTV (47LC55S240V87) a year and a half ago and we've been thrilled with it.  The company that makes it appears to have gone out of business, but for getting video from the receiver to a display, it does an excellent job.

Next, you may or may not choose to have an A/V Receiver.  If you intend to listen to surround sound, you'll need one.  We have an aging Harman/Kardon AVR-254.  This provides on of the features that I believe my wife likes best - having as few cables as possible going to the TV.  We can connect our Wii, our VCR and our home theater PC (and several more components if we had them) to it, and run one simple HDMI cable from it to the TV.  It is also capable of decoding the fancy new HD audio that comes on Blu-ray disks.

The next component one needs to consider for this setup is something that can play the ripped disks.  There are lots of different boxes that will do this, but I prefer to stick to what I know: home theater PCs (HTPCs). Right now I'm using a Zotac Zbox (http://www.zotacusa.com/zbox-ad02.html) that I put 8GB of RAM and a 60GB SSD.  It runs Windows 7 Ultimate, which comes with Windows Media Center (WMC).  We rather like the WMC front-end.

Next you need a place to store the ripped DVDs.  Depending on your choice of HTPC, you might just store them there.  You also can use an external hard drive.  We decided to go with a server in our basement.  It's fairly old hardware, but it doesn't take much to store files.

Finally, you need a way to rip the DVDs.  This too can be done on your HTPC if you have an optical drive on it (I don't), but can be done on any PC that has access to where you store your ripped DVDs.  There are several tools out there to do this, and some are even free.  A great free one that I've used is DVDFab DVD/HD Decrypter (http://www.dvdfab.com/hd-decrypter.htm).  Currently I'm doing a trial of AnyDVD HD (http://www.slysoft.com/en/anydvdhd.html).

Having used this setup for quite some time now, I'm pretty happy with it.  The one thing I would change is that I'd put an optical drive in the HTPC.  Every time we rent a move, or borrow one from a friend, we end up having to rip it in order to watch it.

There are additional considerations you need to make if you'd like to rip Blu-rays as well as DVDs.  The space required for a blu-ray (12-50GB) is considerably larger than a DVD (4-8GB), so your storage won't go nearly as far.  Software that rips DVDs doesn't always also rip blu-rays.  Finally, you need additional software on the HTPC in order to play blu-rays.  I use Arcsoft TotalMedia Theatre 5 (http://www.arcsoft.com/totalmedia-theatre/).  If you buy a blu-ray drive, usually it comes with software you can use for this.

This setup comes after about 10 years of messing around, so I know it's what works best for me and my family.  I'm sure every home is different.  The cost of the whole system is significant, but it's stuff we've acquired over years.  Some might find the prospect of a running a file server intimidating.

I'd love to hear in the comments what works for you.