I always take cash from an ATM, and failing that pay on credit card. Currency exchanges are always a rip off unless you are going somewhere that doesn't like foreign cards.
A friend has a new product/card called Revolut. Supposedly a cash card that allows withdrawals at interbank rates. I am considering getting one.