[Squeakfoundation]Two fixes I would like!

John M McIntosh squeakfoundation@lists.squeakfoundation.org
Tue, 3 Dec 2002 14:39:28 -0800


Hi, I've been distracted by chasing void is void, not int, and I'll  
throw this out for comment.

I applied some serious thought here.

First doing the
UUIDGenerator class >>startUp
	Default := nil

is correct only if you can ensure that a UUID isn't needed somewhere in  
the the startup process, the real issue is the Random number
generator.

One of the issues is that on the mac the millisecond clock starts from  
zero at application start time, so this code

	" Set a reasonable Park-Miller starting seed "
	[seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self  
hash.
	seed = 0] whileTrue: ["Try again if ever get a seed = 0"].

is iffy because the probability that Time millisecondClockValue and  
self hash would be the same is quite good, maybe it should be

	" Set a reasonable Park-Miller starting seed "
	[seed := ((Time totalSeconds + Time millisecondClockValue) bitAnd:  
16r3FFFFFFF) bitXor: self hash.
	seed = 0] whileTrue: ["Try again if ever get a seed = 0"].

Well that does do large integer math at some point but maybe we can  
ignore that issue.

I'd also suggest saving the seed value in a instance variable and then  
in setupRandom check it against the old value and if we have
a match which then of course means duplication and some type of  
recovery is needed. Mmm I'm not sure what tho, every 100,000 iterations  
we have an opportunity to reuse a previous seed, so does keeping one  
previous generation really help? But maybe it solves some issue at  
image restart?

I might also suggest a RandomFromHostingOS class where one generates  
the random number?  If you are going to the hassle of getting 4 random  
bytes, why not pull lots of them as needed from something that someone  
is worrying about being random and has certainly applied way more  
thought than us. Or would having a real UUID generator for linux is  
harder?

Say ask RandomFromHostingOS isOk  if true then use that instance versus  
Random. That way we could have that class work the details of bothering  
the hosting os for a good random number. Somehow that seems a more  
workable solution.

PS You'll all should have noted the 100,000 Random instance  
regeneration I've in the code to avoid the issue that the sequence of  
random numbers from Random does repeat at some point...  Which still  
has the flaw that we could repeat a sequence of 100,000 UUID.


On Tuesday, December 3, 2002, at 11:52  AM, goran.hultgren@bluefish.se  
wrote:

--
======================================================================== 
===
John M. McIntosh <johnmci@smalltalkconsulting.com> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
======================================================================== 
===