window.makeSlides = function(){ var slides = [ { xKey: 'grid', circleDelayFn: d => axii.ageScale(d.age), showFlipRect: 0, populationTarget: 144, headsProbTarget: .5, }, { xKey: 'age', showAgeAxis: 1, }, { xKey: 'ageState', showStateAxis: 1, }, { showUniqueBox: 1 }, { xKey: 'ageStateSeason', showUniqueBox: 1, showUniqueSeasonBox: 1, showSeasonAxis: 1, }, { xKey: 'heads', showUniqueBox: 0, showUniqueSeasonBox: 0, showSeasonAxis: 0, showAgeAxis: 0, showStateAxis: 0, showHeadAxis: 1, }, { showFlipCircle: 1, showHeadCaptionAxis: 1, }, // Flip coin { xKey: 'plagerizedShifted', showHeadAxis: 0, showHeadCaptionAxis: 0, showHistogramAxis: 1, }, // Exactly how far off can these estimates be after adding noise? Flip more coins to see the distribution. { enterHistogram: 1, showHistogram: 1, // showPlagerizedAxis: 0, showEstimate: 1, }, // Reducing the random noise increases our point estimate, but risks leaking information about students. { animateHeadsProbSlider: 1, animatePopulationSlider: 1, enterHistogram: 0, name: 'noise', headsProbTarget: .35, }, // If we collect information from lots of people, we can have high accuracy and protect everyone's privacy. { showEstimate: 0, showAllStudents: 1, name: 'population', animateHeadsProbSlider: -1, animatePopulationSlider: 1, populationTarget: 400, }, ] var keys = [] slides.forEach((d, i) => { keys = keys.concat(d3.keys(d)) d.index = i }) _.uniq(keys).forEach(str => { var prev = null slides.forEach(d => { if (typeof(d[str]) === 'undefined'){ d[str] = prev } prev = d[str] }) }) return slides } if (window.init) window.init()