David T. Lewis
lewis at mail.msen.com
Thu Apr 7 00:35:44 UTC 2011
I made the update in Squeak trunk similar to the Etoys image, but used
the existing seed generator in Random>>initialize on the theory that if
the generator is good enough for a new Random, it should be good enough
for an existing one too ;)
Michael, thanks for spotting the problem.
On Tue, Apr 05, 2011 at 01:16:31PM +0200, 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
> RandomForPicking seed: Time totalSeconds hash asFloat.
> IMHO we should adopt something like this for trunk (maybe with your "more" random approach below).
> - 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
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
More information about the Beginners