Try not to physically hurt your puppy (i.e. knee in the chest, stepping on paws...etc). Pushing your dog away and shouting `No!' gives him exactly what he wants - attention. They don't differentiate between good and bad attention - it's all attention to them.
Practising with a couple of friends who don't mind jumping is an outstanding idea. If your dog jumps, he is ignored. If he doesn't jump, he is praised and rewarded. He'll soon learn.
Positive reinforcement is much, much better for a dog's psyche (and they learn faster and more thoroughly this way). Clicker-training is also great for this.
Whatever you do, the key is IGNORE. ANY kind of attention - a push, a shove, a shout, a word ANYTHING - is attention to your dog and therefore he gets what he wanted to start with.