Subject: Re: [xsl] Re: question on random numbers for browser XSLT From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx> Date: Sat, 25 Jul 2009 11:05:17 +0200 |
> Or, for XSLT 1.0 one could write the following (knowing that the > values contain only uppercase latin characters or digits): You cannot assume that in general. Here is what IDs get generated for different browser/OS when clicking on this link: http://www.stamm-wilbrandt.de/en/xsl-list/random/scott.xml Linux: id0x098f7528 Firefox 3.0.10 o770813095 Opera 9.64 IDACI52B Internet Explorer 6.0.2800 (ies4linux) Windows: id0x0b563640 Firefox 3.0.12 IDACAYFC Internet Explorer 6.0.2900 o5002021 Opera 9.63 id2010145 Safari 4.0.2 id205096 Chrome 2.0.172 $ cat scott.xml <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="scott.xsl"?>) <tag/> $ cat scott.xsl <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="exsl msxsl" > <xsl:output method="html" encoding="UTF-8" /> <msxsl:script language="JScript" implements-prefix="exsl"> this['node-set'] = function (x) { return x; } </msxsl:script> <xsl:template match="/"> <html> <body> <xsl:variable name="seed"><a/></xsl:variable> <xsl:value-of select="generate-id(exsl:node-set($seed))" /> </body> </html> </xsl:template> </xsl:stylesheet> Mit besten Gr|_en / Best wishes, Hermann Stamm-Wilbrandt Developer, XML Compiler WebSphere DataPower SOA Appliances ---------------------------------------------------------------------- IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martin Jetter Geschdftsf|hrung: Erich Baier Sitz der Gesellschaft: Bvblingen Registergericht: Amtsgericht Stuttgart, HRB 243294 Dimitre Novatchev <dnovatchev@gmail .com> To xsl-list@xxxxxxxxxxxxxxxxxxxxxx 07/25/2009 01:51 cc AM Subject Re: [xsl] Re: question on random Please respond to numbers for browser XSLT xsl-list@xxxxxxxx lberrytech.com Or, for XSLT 1.0 one could write the following (knowing that the values contain only uppercase latin characters or digits): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:testmap="testmap" exclude-result-prefixes="xsl testmap" > <xsl:import href="str-dvc-map.xsl"/> <!-- to be applied on any xml source --> <testmap:testmap/> <xsl:output method="text"/> <xsl:variable name="vChars" select= "'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> <xsl:template match="/"> <xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/> <xsl:variable name="vNumericVal"> <xsl:call-template name="str-map"> <xsl:with-param name="pFun" select="$vTestMap"/> <xsl:with-param name="pStr" select="'IDACQ0LB'"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="$vNumericVal mod 65536"/> </xsl:template> <xsl:template name="double" match="testmap:*"> <xsl:param name="arg1"/> <xsl:value-of select="string-length(substring-before ($vChars,$arg1))"/> </xsl:template> </xsl:stylesheet> -- 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 4:06 PM, Dimitre Novatchev<dnovatchev@xxxxxxxxx> wrote: > 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 iter.xsl map.xsl random.xsl 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 >> >> <xsl:variable name="seed"><a/></xsl:variable> >> <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 >> < exclude-result-prefixes="xsl ext randScale myRandNext >> mySingleRandDistFun x" >> --- >>> xmlns:msxsl="urn:schemas-microsoft-com:xslt" >>> exclude-result-prefixes="xsl ext msxsl randScale myRandNext >> mySingleRandDistFun x". >> 30a32,36 >>> <msxsl:script language="JScript" implements-prefix="ext"> >>> this['node-set'] = function (x) { >>> return x; >>> } >>> </msxsl:script> >> $ >> >> >> >> Mit besten Gr|_en / Best wishes, >> >> Hermann Stamm-Wilbrandt >> Developer, XML Compiler >> WebSphere DataPower SOA Appliances >> ---------------------------------------------------------------------- >> IBM Deutschland Research & Development GmbH >> Vorsitzender des Aufsichtsrats: Martin Jetter >> Geschdftsf|hrung: Erich Baier >> Sitz der Gesellschaft: Bvblingen >> Registergericht: Amtsgericht Stuttgart, HRB 243294 >> >> >> >> Dimitre Novatchev >> <dnovatchev@gmail >> .com> To >> xsl-list@xxxxxxxxxxxxxxxxxxxxxx >> 07/24/2009 11:00 cc >> PM >> Subject >> Re: [xsl] Re: question on random >> Please respond to numbers for browser XSLT >> xsl-list@xxxxxxxx >> 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: >>>> ... >>>> ... >>>> <xsl:choose> >>>> <xsl:when test="function-available('exsl:node-set')"> >>>> <xsl:value-of select="document(concat('/cgi-bin/rand.pl?', >>> >>> $scale, >>>> >>>> '&x=', generate-id(exsl:node-set($seed))))" /> >>>> </xsl:when> >>>> <xsl:when test="function-available('msxsl:node-set')"> >>>> <xsl:value-of select="document(concat('/cgi-bin/rand.pl?', >>> >>> $scale, >>>> >>>> '&x=', generate-id(msxsl:node-set($seed))))" /> >>>> </xsl:when> >>>> ... >>> >>> I tried your solution and after replacing '&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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: question on random nu, Dimitre Novatchev | Thread | Re: [xsl] Re: question on random nu, Dimitre Novatchev |
Re: [xsl] Re: question on random nu, Dimitre Novatchev | Date | Re: [xsl] question on random number, Martin Honnen |
Month |