[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Re: question on random numbers for browser XSLT


Subject: Re: [xsl] Re: question on random numbers for browser XSLT
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Fri, 24 Jul 2009 16:06:51 -0700

Hermann,

> Now these values look different for different browsers, and need to
> "somehow"
> be converted to a seed value for FXSLs random generator.
>
> Ideas?


You could try something simple as the following:

   sum(string-to-codepoints($pId))   mod   65536


and see that the results' variety is satisfactory.

--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play




On Fri, Jul 24, 2009 at 3:28 PM, Hermann
Stamm-Wilbrandt<STAMMW@xxxxxxxxxx> wrote:
> Dimitre,
>
>> > If you have decided to go with a service providing random numbers then
>> > xslt-ish way (set based) to do it would be a service receiving a number
> and
>> > returning an xml with a specified number of random numbers.
>> >
>>
>> Using a service to provide a random sequence is much more unreliable
>> and inefficient than just doing this in pure XSLT, as this has been
>> done by FXSL for many years:
>>
>>
>
http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXS
L-htm.htm
>
> first of all, FXSL is a cool library and the documentation at the link is
> informative.
>
> I tried fxsl-1.2 and installed these necessary files on my webserver:
> curry.xsl B iter.xsl B map.xsl B random.xsl B test-random.xsl
>
> First I realized that it did work on FF3 and not on FF2 (because of the
> missing
> support of exslt:node-set there). Then I tried it on IE6 and it did not
> work first.
> After applying below patch it worked under IE6, too.
> You may try it out here:
> http://www.stamm-wilbrandt.de/en/xsl-list/random/fxsl-1.2/test-random.xml
>
> The output is the same as generated by eg. "xsltproc test-random.xsl
> some.xml", but
> it is ALWAYS THE SAME output (try it repeatedly).
>
> I knew of the different techniques in generating pseudo random numbers but
> what
> is really needed is to be able to provide a changing seed (eg. initialize
> with
> the number of seconds since 1/1/1970, time(NULL) in C).
>
> Then I remembered the generate-id use of Scott, and after reading Michaels
> last
> post the following fragment seems to be an always changing value:
> http://www.stamm-wilbrandt.de/en/xsl-list/random/scott.xml
>
> B  B  B  B <xsl:variable name="seed"><a/></xsl:variable>
> B  B  B  B <xsl:value-of select="generate-id(exsl:node-set($seed))" />
>
> Now these values look different for different browsers, and need to
> "somehow"
> be converted to a seed value for FXSLs random generator.
>
> Ideas?
>
>
>
=============================================================================
> from "http://dpcarlisle.blogspot.com/2007/05/exslt-node-set-function.html"
> $ diff random.xsl.orig random.xsl
> 20c20,21
> < B exclude-result-prefixes="xsl ext randScale myRandNext
> mySingleRandDistFun x"
> ---
>> B xmlns:msxsl="urn:schemas-microsoft-com:xslt"
>> B exclude-result-prefixes="xsl ext msxsl randScale myRandNext
> mySingleRandDistFun x".
> 30a32,36
>> B  <msxsl:script language="JScript" implements-prefix="ext">
>> B  B  this['node-set'] = B function (x) {
>> B  B  B  return x;
>> B  B  }
>> B  </msxsl:script>
> $
>
>
>
> Mit besten GrC<Cen / Best wishes,
>
> Hermann Stamm-Wilbrandt
> Developer, XML Compiler
> WebSphere DataPower SOA Appliances
> ----------------------------------------------------------------------
> IBM Deutschland Research & Development GmbH
> Vorsitzender des Aufsichtsrats: Martin Jetter
> GeschC$ftsfC<hrung: Erich Baier
> Sitz der Gesellschaft: BC6blingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
>
>
>
> B  B  B  B  B  B  Dimitre Novatchev
> B  B  B  B  B  B  <dnovatchev@gmail
> B  B  B  B  B  B  .com> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B 
B  B  B  B  B  B  B  B  B  B To
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B 
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> B  B  B  B  B  B  07/24/2009 11:00 B  B  B  B  B  B  B  B  B  B  B  B  B  B 
B  B  B  B  B  B  B  cc
> B  B  B  B  B  B  PM
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B 
B  B  B  B  B  B  B  B  Subject
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  Re: [xsl] Re:
question on random
> B  B  B  B  B  B  Please respond to B  B  B  B  numbers for browser XSLT
> B  B  B  B  B  B  xsl-list@xxxxxxxx
> B  B  B  B  B  B  B lberrytech.com
>
>
>
>
>
>
>
>
>> If you have decided to go with a service providing random numbers then
>> xslt-ish way (set based) to do it would be a service receiving a number
> and
>> returning an xml with a specified number of random numbers.
>>
>
> Using a service to provide a random sequence is much more unreliable
> and inefficient than just doing this in pure XSLT, as this has been
> done by FXSL for many years:
>
>
>
http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXS
L-htm.htm
>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
>
>
>
> On Fri, Jul 24, 2009 at 1:48 PM, Vladimir
> Nesterovsky<vladimir@xxxxxxxxxxxxxxxxxxxx> wrote:
>> If you have decided to go with a service providing random numbers then
>> xslt-ish way (set based) to do it would be a service receiving a number
> and
>> returning an xml with a specified number of random numbers.
>> --
>> Vladimir Nesterovsky
>> http://www.nesterovsky-bros.com/
>>
>>
>>> To Ben:
>>> The cache-append idea was my first thought, but I couldn't think of a
>>
>> good
>>>
>>> way to pull together how to have each request be unique. It's possible
>>> using node-set(), though:
>>> ...
>>> ...
>>> B  B <xsl:choose>
>>> B  B  B <xsl:when test="function-available('exsl:node-set')">
>>> B  B  B  B <xsl:value-of select="document(concat('/cgi-bin/rand.pl?',
>>
>> $scale,
>>>
>>> '&amp;x=', generate-id(exsl:node-set($seed))))" />
>>> B  B  B </xsl:when>
>>> B  B  B <xsl:when test="function-available('msxsl:node-set')">
>>> B  B  B  B <xsl:value-of select="document(concat('/cgi-bin/rand.pl?',
>>
>> $scale,
>>>
>>> '&amp;x=', generate-id(msxsl:node-set($seed))))" />
>>> B  B  B </xsl:when>
>>> ...
>>
>> I tried your solution and after replacing '&amp;x=' with '+' it directly
>> worked on my local web server!
>> (I did not know that generate-id works in a browser)
>>
>> But as already posted it did not work after installed on my real
> webserver
>> because that does not have enough power to handle the six document opens.
>>
>> Btw, I really like the solution of David Carlisle to provide
> exslt:node-set
>> for IE browsers (and not having to deal with exslt/msxml):
>> http://dpcarlisle.blogspot.com/2007/05/exslt-node-set-function.html
>
>



--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play


Current Thread
Keywords