]> Untitled Git - lemmy.git/commitdiff
Fixing ranking algorithm.
authorDessalines <tyhou13@gmx.com>
Sun, 21 Apr 2019 17:15:40 +0000 (10:15 -0700)
committerDessalines <tyhou13@gmx.com>
Sun, 21 Apr 2019 17:15:40 +0000 (10:15 -0700)
README.md
docs/ranking.md
server/migrations/2019-03-30-212058_create_post_view/up.sql
ui/src/utils.ts

index 64dd9146ccf217055ce8f6d7ca2028812af2d22f..7b44f743f32a10bacdce265d27b310a19f98af82 100644 (file)
--- a/README.md
+++ b/README.md
@@ -30,6 +30,9 @@ This is a **very early beta version**, and a lot of features are currently broke
   - Server is written in rust.
   - Front end is `~80kB` gzipped.
 
+## About
+Lemmy is similar to sites like Reddit, lobste.rs, Raddle, or Hacker News. Behind the scenes, it is very different; It allows anyone to run a server (instance), and all instances are federated, and similar to Mastodon, connected to the same universe. For a link aggregator, this means a user registered on one server can subscribe to forums on any other Lemmy instance, and can have discussions with users registered on any number of instances.
+
 ## Why's it called Lemmy?
 - Lead singer from [motorhead](https://invidio.us/watch?v=pWB5JZRGl0U).
 - The old school [video game](https://en.wikipedia.org/wiki/Lemmings_(video_game)).
index 34348c30f62ea4724885f6b4cdb9a751d0c454b5..608b548482b23e35080a566816a16d73d55078a5 100644 (file)
@@ -12,14 +12,15 @@ The [Hacker New's ranking algorithm](https://medium.com/hacking-and-gonzo/how-ha
 
 ## My Algorithm
 ```
-Rank = ScaleFactor * sign(3 + Score) * log(abs(3 + Score)) / (Time + 2)^Gravity
+Rank = ScaleFactor * log(Max(1, 3 + Score)) / (Time + 2)^Gravity
 
 Score = Upvotes - Downvotes
 Time = time since submission (in hours)
 Gravity = Decay gravity, 1.8 is default
 ```
 
-- Add 3 to the score, so that even minimally downvoted comments will be affected by time decay. Otherwise all new comments would stay at zero, near the bottom.
+- Use Max(1, score) to make sure all comments are affected by time decay.
+- Add 3 to the score, so that everything that has less than 3 downvotes will seem new. Otherwise all new comments would stay at zero, near the bottom.
 - The sign and abs of the score are necessary for dealing with the log of negative scores.
 - A scale factor of 10k gets the rank in integer form.
 
index 3a509e29d0a82d397b69376f68ff732182346ceb..17dc8604a7667896636e29243cd39156b5084cbb 100644 (file)
@@ -5,7 +5,7 @@ create or replace function hot_rank(
 returns integer as $$
 begin
   -- hours_diff:=EXTRACT(EPOCH FROM (timezone('utc',now()) - published))/3600
-  return floor(10000*sign(3+score)*log(abs(3+score)) / power(((EXTRACT(EPOCH FROM (timezone('utc',now()) - published))/3600) + 2), 1.8))::integer;
+  return floor(10000*log(greatest(1,score+3)) / power(((EXTRACT(EPOCH FROM (timezone('utc',now()) - published))/3600) + 2), 1.8))::integer;
 end; $$
 LANGUAGE plpgsql;
 
index 70b6e84611eadd153429964f3579b02cadb263f7..3a8e25760d6188cc480e32b2d6c91dd2c60f35a0 100644 (file)
@@ -21,7 +21,7 @@ export function hotRank(comment: Comment): number {
   let now: Date = new Date();
   let hoursElapsed: number = (now.getTime() - date.getTime()) / 36e5;
 
-  let rank = (10000 * Math.sign(3+comment.score) * Math.log10(Math.abs(3+comment.score))) / Math.pow(hoursElapsed + 2, 1.8);
+  let rank = (10000 *  Math.log10(Math.max(1, 3 + comment.score))) / Math.pow(hoursElapsed + 2, 1.8);
 
   // console.log(`Comment: ${comment.content}\nRank: ${rank}\nScore: ${comment.score}\nHours: ${hoursElapsed}`);