Most active commenters
  • dolmen(3)

←back to thread

170 points ksdme9 | 12 comments | | HN request time: 0.83s | source | bottom

Hey HN,

I find myself reaching for tools like it-tools.tech or other random sites every now and then during development or debugging. So, I built a toolkit with a sane and simple CLI interface for most of those tools.

For the curious and lazy, at the moment, ut has tools for,

- Encoding: base64 (encode, decode), url (encode, decode)

- Hashing: md5, sha1, sha224, sha256, sha384, sha512

- Data Generation: uuid (v1, v3, v4, v5), token, lorem, random

- Text Processing: case (lower, upper, camel, title, constant, header, sentence, snake), pretty-print, diff

- Development Tools: calc, json (builder), regex, datetime

- Web & Network: http (status), serve, qr

- Color & Design: color (convert)

- Reference: unicode

For full disclosure, parts of the toolkit were built with Claude Code (I wanted to use this as an opportunity to play with it more). Feel free to open feature requests and/or contribute.

1. rohan_ ◴[] No.45484532[source]
is this stuff not pretty easy to do with python?

``` python -c "import base64; print(base64.b64encode('$INPUT_STRING'.encode('utf-8')).decode('utf-8'))" ```

replies(6): >>45484542 #>>45484630 #>>45484868 #>>45486206 #>>45494609 #>>45494634 #
2. landr0id ◴[] No.45484542[source]
I love typing python commands that are 10x longer than a shorthand.

Yes it's easy to set up an alias or shell command or whatever, but that's besides the point :p

3. ksdme9 ◴[] No.45484630[source]
You don't even have to go that far, `base64` is a coreutil (https://github.com/coreutils/coreutils/blob/ebfd80083b4fe4ae...).

The point of ut is not to replace or invent new tooling. It is meant to be a set of tools that are simple, self exploratory and work out of the box with sane defaults. So, essentially, something that you don't have to remember syntax for or go through help/man pages everytime you want to use it.

replies(1): >>45484783 #
4. westurner ◴[] No.45484783[source]
uutils/coreutils has a `base64` in Rust which just gained better performance due to the base64-simd crate for SIMD: https://github.com/uutils/coreutils/pull/8578
replies(1): >>45485652 #
5. baq ◴[] No.45484868[source]
You can send a heredoc into as in a single line of shell, too.
6. collinfunk ◴[] No.45485652{3}[source]
Note that uutils does not work if the file does not fit into memory.

With GNU coreutils:

   $ base64 /dev/zero | head -c 1 | wc -c
   1
With uutils doing the same would exhaust your systems memory until either it freezes or oomd kills the process.
replies(1): >>45487864 #
7. klardotsh ◴[] No.45486206[source]
If you can remember all of that off the top of your head and find it ergonomic to type out, then sure. But much like how I prefer someone else to do my content syncing as an ergonomic appliance rather than using FTP + curlftpfs + a VCS [1], I quite like this idea of a focused toolbox (written in a language that compiles to native code) and welcome it rather than having to store these massive snippets in my head (or write shell wrappers for them).

[1] https://news.ycombinator.com/item?id=9224

replies(1): >>45494674 #
8. conradludgate ◴[] No.45487864{4}[source]
For now. There's no reason this won't/can't be worked on in the future.
replies(1): >>45497437 #
9. dolmen ◴[] No.45494609[source]
Also with Go:

  $ go run github.com/dolmen-go/goeval@master 'fmt.Println(base64.StdEncoding.EncodeToString([]byte(os.Args[1])))' foobar
  Zm9vYmFy
10. dolmen ◴[] No.45494634[source]
Many of this utilities are bundled with the "openssl" tool:

  $ echo -n foobar | openssl base64 -e
  Zm9vYmFy
11. dolmen ◴[] No.45494674[source]
The "openssl" tool already has many of those tools and that tool is probably already available on your system.

https://docs.openssl.org/master/man1/openssl/#command-summar...

12. westurner ◴[] No.45497437{5}[source]
Which BusyBox, toybox, and coreutils commands fail with data larger than RAM? Has that been part of the spec yet?

Just realized `LC_COLLATE=C sort` must be specified if you don't want it to ignore leading underscores in sorting due to LC_COLLATE=en_US.utf8 being the default these days.