unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Stephen J. Turnbull" <stephen@xemacs.org>
To: Ivan Kanis <ivan.kanis@googlemail.com>
Cc: emacs devel <emacs-devel@gnu.org>
Subject: random doesn't feel very random
Date: Fri, 24 Aug 2012 16:03:41 +0900	[thread overview]
Message-ID: <87ipc8vkj6.fsf@uwakimon.sk.tsukuba.ac.jp> (raw)
In-Reply-To: <876288yh72.fsf@kanis.fr>

Ivan Kanis writes:

 > I am using random for generating music play list. I have found that it
 > is not random enough. It keeps playing the same tracks.

What do you mean by that?  I have two somewhat different situations
where there are plausible hypotheses besides "random is broken".

What seems most likely is that it always plays *the same tracks in
the same order*.  You may have made a programming error or it may be
that the pseudo-random number generator always starts from the same
seed (this is useful so that a uniformly distributed sequence can be
replicated if necessary -- obviously this is bad if you are using
randomness as a security measure, though).  This is the case for GNU
random(3), which always uses the seed 1.

To avoid this behavior, use `(random t)' for the first call to
`random'.  This uses time and some other environmental information to
set the seed.  It's not cryptographically strong, so a sufficiently
smart cracker can probably predict what you're listening to.  I hope
your life doesn't depend on the secrecy of your playlist, though. :-)

If it always plays tracks from the same subset of your collection, but
in different orders, you may have made a programming error.

 > Yes I am just talking about "feeling" here. I don't know how to prove
 > that random does not work. Is it even possible?

Sure.  Analyze the code.  You won't find it in Emacs, though, on most
systems it uses the system random number generator, usually random(3)
it looks like.  On a GNU system this is a nonlinear additive feedback
PRNG.

If you want to prove it without knowing the algorithm, that's a lot
more difficult.  The basic techniques are in D. Knuth's The Art of
Computer Programming, Vol. 2: Seminumerical Algorithms.  The state of
the art has advanced since then, but if you can detect non-randomness
with your flesh-and-blood ears, Knuth's tests will be enough.

 > On a side note are we using /dev/random?

No, and that shouldn't be done for a system RNG.  Period.  It's (a)
expensive (system call), (b) can block (since it depends on the
dynamic environment), and (c) dangerous (it depletes your entropy pool
which can slow or cripple security applications that really need it).

Even using /dev/urandom to generate the seed would be overkill in
almost all applications, and I wouldn't trust anybody in Emacs to
write code for an application that needs that level of randomness.
(That doesn't mean there are no such experts among Emacs developers,
it just means I haven't seen anybody display appropriate credentials
on emacs-devel.  It's a *very* specialized field.)



  parent reply	other threads:[~2012-08-24  7:03 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-24  5:47 random doesn't feel very random Ivan Kanis
2012-08-24  6:22 ` Tassilo Horn
2012-08-24 17:19   ` random doesn't feel very random, random doesn't feel very random, " Ivan Kanis
2012-08-24 18:50     ` Stephen J. Turnbull
2012-08-25  7:46       ` Ivan Kanis
2012-08-24  6:30 ` Leo
2012-08-24 22:48   ` Richard Stallman
2012-08-24 22:57     ` Andreas Schwab
2012-08-25 20:55       ` Richard Stallman
2012-08-25 23:25         ` Leo
2012-08-26 13:12           ` Richard Stallman
2012-08-26 14:24             ` Achim Gratz
2012-08-26 23:22               ` Leo
2012-08-27  0:50               ` Stefan Monnier
2012-08-27  6:31                 ` Simon Leinen
2012-08-27  3:41               ` Richard Stallman
2012-08-27  4:48                 ` Stefan Monnier
2012-08-31  9:41                   ` Eli Zaretskii
2012-08-31 15:06                     ` Stefan Monnier
2012-08-31 15:23                       ` chad
2012-08-31 17:50                       ` Eli Zaretskii
2012-08-31 19:43                         ` Stefan Monnier
2012-09-01  1:18                           ` Paul Eggert
2012-09-01  7:19                             ` Achim Gratz
2012-09-01 13:19                               ` Paul Eggert
2012-09-04 19:19                                 ` Nix
2012-09-04 20:07                                   ` Paul Eggert
2012-09-04 20:11                                     ` Nix
2012-09-02 12:27                               ` Jason Rumney
2012-09-02 13:08                                 ` Stefan Monnier
2012-09-01  7:22                             ` Ivan Kanis
2012-09-01 11:13                             ` joakim
2012-08-31 23:04                       ` Leo
2012-08-27  5:17                 ` Achim Gratz
2012-08-31  9:42                   ` Eli Zaretskii
2012-08-31 15:07                     ` Stefan Monnier
2012-08-31 17:50                       ` Eli Zaretskii
2012-08-26  9:06         ` Ivan Kanis
2012-08-24  7:03 ` Stephen J. Turnbull [this message]
2012-08-24  9:10   ` Paul Eggert
2012-08-24 17:45     ` Stephen J. Turnbull
2012-08-24 12:45 ` OT: appropriateness of "random" for playlist generation (was: random doesn't feel very random) Jeremiah Dodds
2012-08-24 14:37 ` random doesn't feel very random Drew Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ipc8vkj6.fsf@uwakimon.sk.tsukuba.ac.jp \
    --to=stephen@xemacs.org \
    --cc=emacs-devel@gnu.org \
    --cc=ivan.kanis@googlemail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).