On Wednesday, 11 June 2014 at 06:41:34 UTC, Joseph Rushton Wakeling wrote:
That would be very cool. Can you point me at your code examples?

It's written in Nimrod (in a way that someone who learned Nimrod the day before would write them, because I learned Nimrod the day before and worked on it for something like 17 hours straight to produce everything):

https://github.com/Zshazz/Ramrod/blob/master/util.nim

I'd like to make this concept a range in D. Not sure what exactly to call it but it's an "adaptor." Honestly, I wouldn't be surprised if something like this didn't already exist in D in some form, but it didn't seem like Nimrod had anything like it.

The paranoiac in me feels that anything that involves getting random data via HTTPS is probably insecure crypto-wise :-)

Paranoia is good in this case. I appreciate the caution.

However, I think sourcing random.org is a perfect case for an entry in hap.random.device. I think the best thing to do would probably be to offer a RandomOrgClient (which offers a very thin API around the random.org HTTP API) and then to wrap that in a range type that uses the client internally to generate random numbers with particular properties.

This sounds like it would be beautiful. As a note, if we expose this via a part of the standard library, we would have to make certain that we follow the guidelines outlined on random.org (in particular, I'm concerned about having an internal locking mechanism to prevent multiple threads from asking for bits at the same time because that will cause clients to be banned ... global state, impurity, and all the nasty things will likely have to be a natural part of such a thing).

Also a very interesting suggestion. Is there a standard name for this kind of procedure?

I'm not really aware if there is. I remember hearing about the concept when talking with my cryptography professor awhile back (it may have even been in a lecture). IIRC, the description used was "mixing" in entropy, so my first thought is to call it a mix/remix function.

Just for clarity, here's how I see things rolling out for the future:

* First goal is to ensure the existing codebase "plays nice" with people's programs and that it works OK with dub, rdmd, etc. and doesn't have any serious architectural or other bugs. The 1.0.0 release will not have any new functionality compared to what is
    in place now.

* Once it seems to be reasonably stable then work can begin on a
    1.x release series that brings in successive pieces of new
    functionality.

I like this procedure. Definitely confidence inspiring.

Reply via email to