protocol for ruby programmer