func HumanUint32(num uint32) string {
	switch {
	case num >= 1000000000:
		return fmt.Sprintf("%v B", num/1000000000)
	case num >= 1000000:
		return fmt.Sprintf("%v M", num/1000000)
	case num >= 1000:
		return fmt.Sprintf("%v K", num/1000)
	}
	return fmt.Sprintf("%v", num)
}
HumanUint32 returns the number in a human readable format
package cmdlog
import (
	"fmt"
	"os"
	"runtime"
	"strings"
	"time"
	"github.com/jwalton/gchalk"
)
type Logger struct {
	emojis    bool
	indention int
}
func (l *Logger) println(a string) {
	fmt.Println(strings.Repeat(" ", l.indention) + a)
}
func (l *Logger) printEmoji(e string) {
	if l.emojis {
		fmt.Print(e + " ")
	}
}
func (l *Logger) sprintEmoji(e string) string {
	if l.emojis {
		return e
	}
	return ""
}
func (l *Logger) Headline(s string) {
	fmt.Println(gchalk.WithCyan().Bold(s))
}
func (l *Logger) Info(s string) {
	l.println(s)
}
func (l *Logger) Log(s string) {
	fmt.Println(gchalk.Gray(s))
}
func (l *Logger) Warn(s string) {
	l.printEmoji("⚠️ ")
	fmt.Println(gchalk.WithYellow().Bold(s))
}
func (l *Logger) Fail(s string) {
	l.printEmoji("💣")
	fmt.Print(gchalk.WithRed().Bold("Error: "))
	fmt.Println(gchalk.WithWhite().Bold(s))
	os.Exit(1)
}
func (l *Logger) NewTask(end int) *Task {
	logger := *l
	task := Task{&logger, 0, end, time.Now()}
	return &task
}
func New() *Logger {
	emojis := runtime.GOOS != "windows"
	if os.Getenv("CI") != "" {
		emojis = false
	}
	return &Logger{emojis: emojis}
}
type Task struct {
	*Logger
	current   int
	end       int
	startTime time.Time
}
func (l *Task) Step(e string, s string) {
	if l.current > 0 {
		elapsed := time.Since(l.startTime)
		fmt.Printf(" took %s\n", elapsed)
	}
	l.current++
	text := fmt.Sprintf(
		"[%d / %d] %s %s",
		l.current,
		l.end,
		l.sprintEmoji(e),
		s,
	)
	fmt.Println(gchalk.Cyan(text))
}