code: func New(columns [][]Column, out io.Writer) Progress {
  	p := &progress{
  		start:    time.Now().UTC(),
  		columns:  make([][]Column, len(columns)),
  		interval: time.Second,
  		EOL:      "\n",
  		out:      out,
  	}
  	if common.IsTerminal(out) {
  		p.interval = 50 * time.Millisecond
  		p.EOL = "\r"
  	}
  	for i, c := range columns {
  		p.columns[i] = make([]Column, len(c))
  		for j, d := range c {
  			p.columns[i][j] = d
  			if p.columns[i][j].Formatter == nil {
  				p.columns[i][j].Formatter = formatInt
  			}
  		}
  	}
  	if out != nil {
  		go p.printLoop()
  	}
  	return p
  }
docs: // New returns an initialized thread-safe Progress implementation.
  //
  // columns is the number of stages each item must go through, then with a set
  // of numbers for each state, which will be displayed as a number in each box.
  //
  // For:
  //   columns = [][]Column{{Name:"found"}, {"hashed", Name:"to hash"}}
  // It'll print:
  //   [found] [hashed/to hash]