I can do the integration too, but I need some people to say go ahead.
I vote for replacing everything, there is no need for a plugin.

> On 09 Feb 2016, at 09:25, Guille Polito <guillermopol...@gmail.com> wrote:
> 
> Sven, just to answer your last question. The UUID generation right now 
> generates the UUID fields like this:
> 
> UUIDGenerator>>generateFieldsVersion4
> 
>    timeLow := self generateRandomBitsOfLength: 32.
>    timeMid := self generateRandomBitsOfLength: 16.
>    timeHiAndVersion := 16r4000 bitOr: (self generateRandomBitsOfLength: 12).
>    clockSeqHiAndReserved := 16r80 bitOr: (self generateRandomBitsOfLength: 6).
>    clockSeqLow := self generateRandomBitsOfLength: 8.
>    node := self generateRandomBitsOfLength: 48.
> 
> So... It's basically completely random. There is no part of the UUID that is 
> actually based on the node, the clock or the time. It is actually a random 
> string of bits that are generated using a number from /dev/urandom as seed 
> (in linux).
> 
> Does the mac VM include the plugin? (I do not have a mac any more to test 
> fast ^^)
> 
> I'll work on the integration of NeoUUID now, I hope this is the kind of 
> issues that got integrated in code-freeze :)
> 
> Guille
> 
> On 02/08/2016 08:39 PM, Sven Van Caekenberghe wrote:
>> Here is a new version, in preparation of possible integration in the main 
>> image:
>> 
>> ===
>> Name: Neo-UUID-SvenVanCaekenberghe.2
>> Author: SvenVanCaekenberghe
>> Time: 8 February 2016, 8:33:04.141334 pm
>> UUID: a909453e-35dd-4c25-8273-62a9b2bd982e
>> Ancestors: Neo-UUID-SvenVanCaekenberghe.1
>> 
>> Streamline UUID generation
>> 
>> Add a current, shared instance
>> 
>> Added better class and method comments
>> 
>> Add more tests
>> 
>> As suggested by Henrik Johansen, change to a version 0 UUID to indicate that 
>> we follow a custom approach
>> ===
>> 
>> The class comments now reads as follows:
>> 
>> ===
>> I am NeoUUIDGenerator, I generate UUIDs.
>> 
>> An RFC4122 Universally Unique Identifier (UUID) is an opaque 128-bit number 
>> that can be used for identification purposes. Concretely, a UUID is a 16 
>> element byte array.
>> 
>> The intent of UUIDs is to enable distributed systems to uniquely identify 
>> information without significant central coordination. In this context the 
>> word unique should be taken to mean "practically unique" rather than 
>> "guaranteed unique".
>>  I generate UUIDs similar, in spirit, to those defined in RFC4122, though I 
>> use version 0 to indicate that I follow none of the defined versions. This 
>> does not matter much, if at all, in practice.
>> 
>> I try to conform to the following aspects:
>>  - each 'node' (machine, image, instance) should generate unique UUIDs
>>  - even when generating UUIDs at a very fast rate, they should remain unique
>> - be fast and efficient
>> 
>> To achieve this goal, I
>> - take several aspects into account to generate a unique node ID
>> - combine a clock, a counter and some random bits
>> - hold a state, protected for multi user access
>> 
>> I can generate about 500K UUIDs per second.
>> 
>> Implementation:
>> 
>> Although a UUID should be seen as totally opaque, here is the concrete way I 
>> generate one:
>> - the first 8 bytes are the millisecond clock value with the smallest 
>> quantity first; this means that the later of these 8 bytes will be identical 
>> when generated with small(er) timespans; within the same millisecond, the 
>> full first 8 bytes will be identical
>> - the next 2 bytes represent a counter with safe overflow, held as protected 
>> state inside me; after 2*16 this value will repeat; the counter initalizes 
>> with a random value
>> - the next 2 bytes are simply random, based on the system PRNG, Random
>> - the final 4 bytes represent the node ID; the node ID is unique per 
>> instance of me, across OS environments where the image might run; the node 
>> ID is the MD5 hash of a string that is the concatenation of several elements 
>> (see #computeNodeIdentifier)
>>  Some bits are set to some predefined value, to indicate the variant and 
>> version (see #setVariantAndVersion:)
>> 
>> Usage:
>> 
>>   NeoUUIDGenerator next.
>>   NeoUUIDGenerator current next.
>>   NeoUUIDGenerator new next.
>> 
>> Sharing an instance is more efficient and correct.
>> Instances should be reset whenever the image comes up.
>> 
>> See also:
>> 
>>   http://en.wikipedia.org/wiki/UUID
>>   https://tools.ietf.org/html/rfc4122
>> ===
>> 
>> If we integrate this, I think we should replace the old generator and the 
>> use of the primitive/plugin. But that requires at least some support apart 
>> from me.
>> 
>> And although I think that we should integrate this generator and get rid of 
>> the plugin, I think there is probably an underlying problem here (why did 
>> the generator fail ?) that could be important to find.
>> 
>> Sven
>> 
>>> On 08 Feb 2016, at 10:38, Henrik Johansen <henrik.s.johan...@veloxit.no> 
>>> wrote:
>>> 
>>>> On 08 Feb 2016, at 10:29 , Sven Van Caekenberghe <s...@stfx.eu> wrote:
>>>> 
>>>>> 2) Misrepresenting the way the UUID was generated (a combination of node 
>>>>> identifier + timestamp + random value, similar to type 3, but with 
>>>>> differently sized/ordered fields) by marking it as being of type 4, which 
>>>>> is defined to be UUID consisting of random bytes.
>>>>> IOW, I think it should be marked as type 0 instead of 4, so for the 1 
>>>>> person in each country who might be found to assume something about the 
>>>>> implementation based on the type field, won't later feel he's been duped 
>>>>> when checking the generator.
>>>> OK, I certainly want to change the type. Thing is, I cannot find a 
>>>> reference to type 0 anywhere that I am looking (I mostly used 
>>>> https://en.wikipedia.org/wiki/Universally_unique_identifier). Where did 
>>>> you find a definition of type 0 ? Or would that be a way to say 'no 
>>>> specific type' then ?
>>> My rationale was that it is currently unassigned, and the least likely 
>>> number to be chosen as identifier by new versions of the standard.
>>> IOW, for those who care, it might raise a "hmm, this is strange, better 
>>> check the source", upon which they will discover it is generated in a 
>>> non-standard fashion (but can verify for themselves it is generated in a 
>>> way still pretty much guaranteed to be unique), and the rest... well, they 
>>> can (most probably) keep on living happily without ever seeing a collision.
>>> 
>>> Cheers,
>>> Henry
>> 
> 


Reply via email to