Simon, I've started one of my own just to kill time in class

.
About every fish movement's randomized within min/max parameters. And I'm having success with sine-wave-like vertex displacement, especially for fin edge fluttering. I think it might work for whole body movement too, but I need a larger mesh count for that first.
Have you seen the dolphin DX sample app? If not, that might be worth looking into for rendering those body bending turns Jim's fish have. NVidia has some cool sample apps too that might help out.