func WriteN(w io.Writer, buf []byte, length int) error {
    size := 0
    for size < length {
        write, err := w.Write(buf[size:])
        size += write