code: func processURL(ts timestamp, shard uint64, ns string, loop bool) string {
  	v := strings.NewReplacer(
  		":shard_id", fmt.Sprint(shard),
  		":timestamp", strconv.FormatInt(int64(ts), 10),
  	).Replace(processShardPattern)
  
  	// Append our namespace query parameter. This is cosmetic, and the default
  	// namespace will have this query parameter omitted.
  	query := url.Values{}
  	if ns != "" {
  		query.Set("ns", ns)
  	}
  	if !loop {
  		query.Set("single", "1")
  	}
  	if len(query) > 0 {
  		v += "?" + query.Encode()
  	}
  	return v
  }
docs: // processURL creates a new url for a process shard taskqueue task, including
  // the given timestamp and shard number.