programmable device