> On 24 Mar 2019, at 14:47, Gilles Sadowski <gillese...@gmail.com> wrote: > > Hi Abhishek. > > Overall it looks good to me (but I'm not used to laying out GSoC proposals > so it might be good to have additional comments). > > I've added a few remarks in the text (see below). > > Le dim. 24 mars 2019 à 13:09, Abhishek Dhadwal <dhadwal1...@gmail.com > <mailto:dhadwal1...@gmail.com>> a écrit : >> >> Dear Sir, >> >> I’ve added skeletal draft of my GSOC proposal (as per the Apache >> foundation’s guidelines) below : >> >> GSOC-19 Application :- RNG-32: Implement More Generators >> >> Background >> >> The Commons RNG is focused on the utilization of Java-only implementations >> of various standard generators, with focus being placed on fast generators >> with strong uniformity and predictability. > > You should probably insert the words "random numbers" somewhere. > Perhaps add this link > https://en.wikipedia.org/wiki/Pseudorandom_number_generator > <https://en.wikipedia.org/wiki/Pseudorandom_number_generator> > as general information about the topic. > >> >> Design / description of work >> >> - Implementation of Linear Congruential Generators >> >> - Implementation of Lagged Fibonacci Generators >> >> - Implementation of PCGs > > Perhaps add web links (e.g. to the corresponding Wikipedia pages). > >> >> Results for the Apache community >> >> The implementation of PRNGs will allow for the occurrence of speed and >> regularity for sequences of pseudo random numbers, easing the creation of >> applications involving data encryption, games and gambling. > > I'd be wary mentioning "data encryption"; it's probably a long way from > the deterministic RNG implementations, that are the scope of this > component, to a reliable cryptographic appplication. > > "Simulations" is probably worth mentioning among the potential uses. > You could also mention actual applications that use RNGs (and maybe > issues that they could encounter with using a "bad" generator). > >> Deliverables >> >> Java Implementations for the following PRNGs shall be provided: >> >> 1. Linear Congruential Generators : One of the oldest and best known PRNG >> algorithms, LCGs create pseudo random sequences of numbers using >> discontinuous piecewise linear equations. >> >> 2. Lagged Fibonacci Generators : An improvement over Linear Congruential >> Generators , these PRNGs take their inspiration from the Fibonacci series, >> and utilise the following generalised formula : >> Sn = Sn-k * Sn-j (mod m) , where ‘*’ is a binary operation. (NOTE: k and j >> may not be selected randomly) >> >> 3. PCGs : Permuted Congruential Generators are RNGs which are modern, light >> and reliable in nature, and are more efficient than LCGs while utilising a >> power of 2 modulus, leading to unbiased output bits. > > Reading one of the above links, I've just found out another generator that > looks quite easy to implement: > https://issues.apache.org/jira/browse/RNG-85 > <https://issues.apache.org/jira/browse/RNG-85> > >> >> Scheduling >> >> May 27- Beginning of coding and testing for Linear Congruential Generators >> >> June 17 - Testing for LCG commenced along with potential bug fixing >> >> June 24 18:00 UTC - Testing phase 1 - complete. Mentor evaluation of LCGs >> begin / Evaluation 1 >> >> June 28 18:00 UTC - Phase 1 Evaluation deadline >> >> June 29 - Beginning of implementation for Lagged Fibonacci Generators >> >> July 15 - Student testing of implemented LFGs begins along with bug fixing >> >> July 22 18:00 UTC - Testing Phase 2 – Complete. Mentor evaluation of LFGs >> begin / Evaluation 2 >> >> July 26 18:00 UTC - Phase 2 Evaluation deadline >> >> July 27 -Design and Coding for Java Implementation of PCGs begin >> >> August 12 - Student testing of PCGs begins along with the implementation of >> final fixes to code >> >> August 19 - 26 18:00 UTC - Final phase of Student Testing Complete. Mentor >> evaluation of overall code begins / Final evaluation >> >> August 26 - Sept 2 18:00 UTC - Mentors submit final student evaluations >> >> September 3- Final results of Google Summer of Code 2019 announced > > Honestly, I've no idea about whether this schedule is realistic. > I mean: Assuming full-time commitment, it could probably be > finished much faster. ;-) > At this point, it looks to me that the longest part will be getting > acquainted with the framework of "Commons RNG" (and even > this will probably look fairly easy once you get the hang of it). > Then the coding of the algorithm(s) will be pretty straightforward: > It seems (sometimes much) less than 20 lines of code each. > Most time will probably be spent porting from C (with its caveat > of data type adaptation), ensuring full coverage and reproducibility > of the reference implementation's output. > > That is to say that we should perhaps add additional task(s)... > An obvious one would be to mention: > - Look for more RNG algorithms, and implement them, if > time permits. > >> Other commitments >> None during the period of May 27th-July 27th . College begins from July >> 27th, but shall not affect the deadlines proposed. >> >> Community engagement >> Interacted with Gilles sir in the JIRA forum, along with subscription and >> interaction with members of the developer’s mailing list. Project importing >> and building using Maven also performed. >> >> -- END OF PROPOSAL— >> >> NOTE: I had created a table for the scheduling part, which got removed when >> I copied my draft proposal from the word document to mail, along with >> various cosmetic changes which I had applied to the text. > > Depending on what kind of document, you might write it in "Google Docs" > (seems appropriate for GSoC...) and share the link. > >> Should I add my previous experience with Java and other qualifications, >> along with sources of information? > > Sure. > >> What other changes should I make to my current proposal ? > > See above. > And perhaps Alex, and others, have something to add too…
This all looks good. I would reemphasise that you should find a reference implementation of any new generator so that you can run it to produce numbers given a known seed. This can be used to test the Java version you create produces exactly the same sequence. If you look at the unit tests for each generator in commons-rng-core you will see the type of testing process to implement. > >> Feedback would be highly appreciated. >> >> PS :- Apologies for not replying earlier, I’ve been under the weather for >> the past few days. I shall undertake the changes you and Alex sir have >> advised, and reply as soon as possible. The changes I suggested for building on Java 11 are now in master. Just update and try again: > git pull > mvn clean package site Let me know if you still get an error. Alex