UUIDs that are byte-ordered lamport clocks (timestamp, worker_id). Much simpler than type-1 UUID’s crappy, weirdo layout.
This won’t work on 32bit platforms. Fuck 32bit platforms.
sudo gem install lexical_uuid
ree-1.8.7-2010.02 > LexicalUUID.new => #<LexicalUUID:0x1019400f0 @worker_id=2842420286492008582, @timestamp=1281991807929511>
r ee-1.8.7-2010.02 > LexicalUUID.new.to_guid
=> "00048df6-faef-2bb5-2772-4e30d6b86086"
r ee-1.8.7-2010.02 > LexicalUUID.new.to_bytes
=> "\000\004\215\366\373\"\022\352'rN0\326\270206"
r ee-1.8.7-2010.02 > LexicalUUID.new(LexicalUUID.new.to_guid)
=> #<LexicalUUID:0x101936118 @worker_id=2842420286492008582, @timestamp=1281991837642798>
r ee-1.8.7-2010.02 > LexicalUUID.new(LexicalUUID.new.to_bytes)
=> #<LexicalUUID:0x101931690 @worker_id=2842420286492008582, @timestamp=1281991842330188>
r ee-1.8.7-2010.02 > LexicalUUID.new(Time.now)
=> #<LexicalUUID:0x10192df18 @worker_id=2842420286492008582, @timestamp=1281991847641387>
-
The idea was basically stolen from Coda Hale (@coda).
-
I borrowed some code from simple_uuid by @evan, @rk, etc.
Copyright © 2010 James Golick. See LICENSE for details.