←back to thread

170 points ksdme9 | 5 comments | | HN request time: 1.189s | source

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.

Show context
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 #
1. 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 #
2. 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 #
3. collinfunk ◴[] No.45485652[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 #
4. conradludgate ◴[] No.45487864{3}[source]
For now. There's no reason this won't/can't be worked on in the future.
replies(1): >>45497437 #
5. westurner ◴[] No.45497437{4}[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.