The way I do it is points divided by age in hours
(plus two) to the 1.25th power. This is probably not optimal, but it's simple.
(= gravity* 1.25 timebase* 120)
(def hotness (s (o gravity gravity*))
(/ (- (realscore s) 1)
(expt (/ (+ (story-age s) timebase*) 60) gravity)))
I avoid reranking all the stories by keeping them in
sorted order, and whenever I generate a frontpage for
someone logged in, reinserting one randomly
chosen story near the top (where all the change is).
I also reinsert any story that gets voted on.