History recorder = new History(1, 10, 30).logTicks();
Random gen = RandomUtils.getRandom();
ChineseRestaurant topicSampler = new ChineseRestaurant(options.alpha);
Exponential interval = new Exponential(1, gen);
double t = 0;
long t0 = System.nanoTime();
long messageId = 0;
while (messageId < options.max) {
double rate = options.peak * Math.exp(-scale * (Math.cos(2 * Math.PI * t / options.period) + 1));
double dt = interval.nextDouble() / rate;
t += dt;
double now = (System.nanoTime() - t0) / 1e9;
if (t > now + 0.01) {
double millis = Math.floor((t - now) * 1000);
double nanos = Math.rint((t - now) * 1e9 - millis * 1e6);