code: func (c *Conn) Computers() ([]*Computer, error) {
  	println("COMPUTERS")
  	// Each backup is a top-level directory with a computerinfo file in it.
  	list, err := c.list("", "/", 0)
  	if err != nil {
  		println("FAIL", err.Error())
  		return nil, err
  	}
  	var out []*Computer
  	for _, p := range list.CommonPrefixes {
  		println("HAVE", p)
  		data, err := c.bget(p + "computerinfo")
  		if err != nil {
  			continue
  		}
  		var info computerInfo
  		println("PLIST", string(data))
  		if err := plist.Unmarshal(data, &info); err != nil {
  			return nil, err
  		}
  
  		comp := &Computer{
  			Name:  info.ComputerName,
  			User:  info.UserName,
  			UUID:  p[:len(p)-1],
  			conn:  c,
  			index: map[score]ientry{},
  		}
  
  		salt, err := c.cget(p + "salt")
  		if err != nil {
  			return nil, err
  		}
  		comp.crypto.salt = salt
  
  		out = append(out, comp)
  	}
  	return out, nil
  }
docs: // Computers returns a list of the computers with backups available on the S3 server.