[squeak-dev] Re: Randomness

Bert Freudenberg bert at freudenbergs.de
Tue Apr 5 13:49:57 UTC 2011


(moving thread from beginners list to squeak-dev)

On 05.04.2011, at 15:34, Levente Uzonyi wrote:

> On Tue, 5 Apr 2011, Bert Freudenberg wrote:
> 
>> 
>> On 05.04.2011, at 02:32, Levente Uzonyi wrote:
>> 
>>> On Mon, 4 Apr 2011, michael rice wrote:
>>> 
>>>> I forgot to mention, I'm using the random number tile and scripting. Does that make it more difficult?
>>> 
>>> Not really, RandomNumberTile uses the global random number generator of Collection. I don't know how/why is it serialized/restored
>> 
>> It is not stored in the project. But in trunk, the seed does not get re-initialized when starting up. In the Etoys image, Collection class has a startUp method
> 
> So it doesn't give the same random numbers after project loading, but after image startup in Squeak?

That's my guess, Michael would need to confirm.

>> startUp
>> 	RandomForPicking seed: Time totalSeconds hash asFloat.
>> 
>> IMHO we should adopt something like this for trunk (maybe with your "more" random approach below).
> 
> It can be even better, I just copied (and slightly modified) the code from UUIDGenerator. Maybe it's the best to move the reseeding code to Random.
> 
> Levente

Sounds good :)

- Bert -

>>> 
>>> but here's a method which should help:
>>> 
>>> RandomNumberTile >> #comeFullyUpOnReload: smartRefStream
>>> 
>>> 	| seed |
>>> 	[
>>> 		seed := (Time millisecondClockValue bitAnd: 16r3FFFFFFF) bitXor: self hash.
>>> 		seed := seed bitXor: (Time totalSeconds bitAnd: 16r3FFFFFFF).
>>> 		seed := seed bitXor: 16r3FFFFFFF atRandom.
>>> 		seed = 0 ] whileTrue. "Try again if ever get a seed = 0"
>>> 	Collection mutexForPicking critical: [
>>> 		Collection randomForPicking seed: seed ].
>>> 	^super comeFullyUpOnReload: smartRefStream
>>> 
>>> It's drawback is that it will reseed the rng for every RandomNumberTile. The best solution would be if Etoys would use a custom Random instance or a subclass where this is done by default.
>>> 
>>> 
>>> Levente
>>> 
>>>> 
>>>> Michael
>>>> 
>>>> --- On Mon, 4/4/11, Levente Uzonyi <leves at elte.hu> wrote:
>>>> 
>>>> From: Levente Uzonyi <leves at elte.hu>
>>>> Subject: Re: [Newbies] Randomness
>>>> To: "A friendly place to get answers to even the most basic questions about Squeak." <beginners at lists.squeakfoundation.org>
>>>> Date: Monday, April 4, 2011, 8:08 PM
>>>> 
>>>> On Mon, 4 Apr 2011, michael rice wrote:
>>>> 
>>>>> I just noticed that when I load a morphic project I get the same stream of random numbers each time. Is there a simple way to install a new different random seed each time the project is loaded?
>>>> 
>>>> If you serialize the Random object, then it will have the same state when it's restored. I guess you should create a subclass of Random, which implements #comeFullyUpOnReload:. That method can reinitialize the seed of the random number generator. You may want to check UUIDGenerator >> #makeSeed if you don't know how to get a good seed for your rng.
>>>> 
>>>> 
>>>> Levente




More information about the Squeak-dev mailing list