Dear Mark,
Your work is really very very very good, congratulations!!
I'm a Linux enthusiastic, running Debian Etch and I'm used to PHP programming, but I'm really a total beginner in JAVA and It is a subject so large and complex and full of details... that I didn't know where to start from.
Luckily I found Eclipse for Linux and your tutorial. I think I had the best start that I could ever have. You are really a god teacher, and also I think it was very nice the subtitles in English. Although you speak very clearly, but sometimes I had to read, because the ideas go fast with the sound, so it helped a lot to be able to stop and read the subtitles and also all the other graphic aids you put in your tutorial, to think and get what was happening.
Well I still think that OOP is strange way to go, but as you said, as we practice things start to become more understandable.

Now I'm heading to the Persistence tutorial!

And all I can say is that you are a great guy!!

Ademilson G. Oliveira
from São Paulo - Brazil

PS.  Please, I have two comments (forgive me if I missed something):

1. As I could follow we didn't create a setAuthor() method, so in my main method (lesson16) I used b1.author instead of b1.setAuthor().

2. Although it worked correctly, I have a doubt about why you used '<'   when I was specting '=<' in the if clause to check the
MaximumBooks ( see bellow, I put some comments to show what I didn't understand)

--------------------------------------------------------
setup();
p1.setMaximumBooks(1);
addItems();
assertTrue("First book did not check out",ml.checkOut(b2, p1));

     //... at this point the person has 1 book

assertFalse("Second book should not have checked out",ml.checkOut(b1, p1));

//  And It works!! but I didnt understand why because in the the if clause in the checkOut method
//  there's a < sign    ( I was willing to see a " =< " )
//  because at that point booksOut = 1 and  p1.getMaximumBooks() = 1