code: function shuffle_in_place(sample, randomSource) {
  
          // a custom random number source can be provided if you want to use
          // a fixed seed or another random number generator, like
          // [random-js](https://www.npmjs.org/package/random-js)
          randomSource = randomSource || Math.random;
  
          // store the current length of the sample to determine
          // when no elements remain to shuffle.
          var length = sample.length;
  
          // temporary is used to hold an item when it is being
          // swapped between indices.
          var temporary;
  
          // The index to swap at each stage.
          var index;
  
          // While there are still items to shuffle
          while (length > 0) {
              // chose a random index within the subset of the array
              // that is not yet shuffled
              index = Math.floor(randomSource() * length--);
  
              // store the value that we'll move temporarily
              temporary = sample[length];
  
              // swap the value at `sample[length]` with `sample[index]`
              sample[length] = sample[index];
              sample[index] = temporary;
          }
  
          return sample;
      }
docs: # shuffle_in_place  A [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) in-place - which means that it will change the order of the original array by reference.