/* Problem: random() is not always apparently random enough. Solution: Use timing vagaries of computer processing to generate a more random appearing seed for random(). This version works on my HP laptop. But faster or slower processors may need adjustment in the for i loop. Also, remove the print step when you have it working. */ macro "Test Seeding [q]" { for (c=0; c<10; c++) seedByUserPromptWaitTime(); selectWindow("Log"); } //*************************************************************************************************************** function seedByNewImageIteration() { getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondStart, msecStart); newImage("Untitled", "8-bit random", 64, 64, 64); run("32-bit"); for(i=0; i<100*(8*random()); i++) { run("Square", "stack"); run("Square Root", "stack"); } close(); getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondEnd, msecEnd); secs = secondEnd - secondStart; ms = msecEnd - msecStart; random("seed", (secs*1000) + ms); print((secs*1000) + ms, random()); } //*************************************************************************************************************** function seedByNetworkAccessTime() { getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondStart, msecStart); open("http://imagej.nih.gov/ij/images/clown.gif"); close(); // open("http://imagej.nih.gov/ij/images/blobs.gif"); // close(); getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondEnd, msecEnd); secs = secondEnd - secondStart; ms = msecEnd - msecStart; random("seed", (secs*1000) + ms); print((secs*1000) + ms, "\t"+ random()); } //****************************** function seedByUserPromptWaitTime() { getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondStart, msecStart); waitForUser("Take a breath and then continue."); getDateAndTime(year, month, dayOfWeek, dayOfMonth, hour, minute, secondEnd, msecEnd); secs = secondEnd - secondStart; ms = msecEnd - msecStart; //random("seed", (secs*1000) + ms); random("seed", secs + ms); print((secs*1000) + ms, "\t"+ random()); }