ruben: random in widgets

Beitrag lesen

Hallo Selfhtml-Gemeinde,

ich weiß nicht, ob euch allen das in Mac OS X Tiger implementierte Dashboard bekannt ist. Ist nix neues, gibt es auch für Windows unter dem Namen Konfabulator. Nunja unter OS X sind das also kleine DHTML-Programme die simple Aufgaben erledigen sollen.
Ein Problem, wenn man diese konstruiert ist allerdings das die Math.random-Funktion nicht wie erwartet funktioniert. Da sie anscheinend immer mit dem gleichen Wert geseeded wird, so bald das Dashboard aufgerufen wird, generiert man immer die gleiche Sequenz von Zahlen. Deswegen sind alle Widget-Schreiberlinge auf der Suche nach dem Zufall. Ich habe mich dem Club mal angeschlossen und habe folgende Funktion gebaut:
function rnd(max){
      var d = new Date()
      var f=  d.getMilliseconds()/(1000/max);
      var rand = Math.floor(f);
      return rand;
      }
Die ist besser als das meiste, was ich bisher hatte, habe sie allerdings noch nicht so ausgiebig getestet. Der Nachteil sind halt die Millisekunden. Eigentlich würde es nichts ausmachen, da man nicht weiß, welche Millisekunde grade ist, wenn man einen neuen Prozess auslöst. Da ich in meinem Zitat-Spucker allerdings so lange neue Zufallszahlen errechnen lasse, bis eine gefunden ist, die noch nicht dran war, ist es nicht so gut. (ich habe keine Ahnung, wie schnell mein Computer ist, aber er generiert bestimmt mehrere Zufallszahlen in der Millisekunde, oder? Also generiere ich unnötig viele, bis ich eine neue raus finde.

Hat jemand eine Ahnung, wie ich gute Zufallszahlen mit JS generieren kann, ohne auf die im Dashboard eben nicht funktionierende Math.random() Funktion zurückzugreifen? Ich hab nicht viel Ahnung von Widgets, aber ich weiß, dass man über bestimmte Funktionen auf die Systemfunktionen von Mac OS X zugreifen kann (und auf das Internet, aber ich will ein Offline-Widget). Ich hab aber keine Ahnung, wo ich in einem System den Zufall finde :-)

Kann mir jemand helfen? Am liebsten wäre mir, was JS basiertes, damit ich es verstehen kann :-/
Vielen Dank im Voraus,
Ruben