Practical fault-tolerant quantum computing