adding advanced notes on generics and protocols