This is nice to have, thank you! uuid v5 generation seems to be something I 
reimplement over and over, but which is never big enough for a library. I 
would like to stop doing that and just include your library in the future.

However, I think your v3/v5 implementations need much more control over 
canonicalization to guarantee consistent uuid generation on different 
machines. Right now you just turn a string into bytes with 
String.getBytes() and feed that to a hash algorithm. The bytes generated 
are going to depend on the platform charset, and there's no way to just 
feed plain bytes in to get around this issue because these functions demand 
a string.

I think you should add a UuidNameBytes protocol and implement a sensible 
default encoding for strings (say UTF-8), and some implementations for at 
least byte arrays and uuids. Then your v3/v5 functions can accept anything 
"byte-able" as a name argument. I've done something like this before and 
would be happy to submit a pull request if you are interested.

Finally, this is just a style point, but you use :use a fair amount in your 
namespaces. :use is an anti-pattern in Clojure and avoided because it 
obscures where the functions come from. (I had a lot of trouble reading 
your digest namespace because of it!)

On Monday, February 16, 2015 at 7:25:17 PM UTC-6, danl...@gmail.com wrote:
>
> Hello Clojurians,
>
> I've just been polishing my modest library, clj-uuid <
> http://danlentz.github.io/clj-uuid/> and would like to invite everyone to 
> have a look if such a thing might be of interest. 
>
> What is it?
>
> clj-uuid is a Clojure library for generation and utilization of UUIDs 
> (Universally Unique Identifiers) as described by RFC-4122. This library 
> extends the standard Java UUID class to provide true v1 (time based) and 
> v3/v5 (namespace based) identifier generation. Additionally, a number of 
> useful supporting utilities are provided to support serialization and 
> manipulation of these UUIDs in a simple, efficient manner.
>
> Why is it useful?
>
> The JVM UUID class only provides a constructor for random (v4) and 
> (non-namespaced) pseudo-v3 UUID's. Where appropriate, this library does use 
> the internal JVM UUID implementation. The benefit with this library is that 
> clj-uuid provides an easy way to get v1 and true namespaced v3 and v5 
> UUIDs.  v1 UUIDs are really useful because they can be generated faster 
> than v4's as they don't need to call a cryptographic random number 
> generator.  v5 UUID's are necessary because many of the interesting 
> things that you can do with UUID's require namespaced identifiers.
> http://danlentz.github.io/clj-uuid/
> http://github.com/danlentz/clj-uuid/
>
>
> Best,
> Dan Lentz
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to