2012-02-03 198 views
1

我期待構建一個利用Reddit(開源)算法的Web應用程序。如何將此Python代碼轉換爲ColdFusion代碼?

我打算隨着時間的推移對它進行調整,但現在我認爲使用他們的排名系統是一個很好的開始。

我讀了一篇關於這個算法的博客文章,這個例子是用Python編寫的。我如何將它轉換爲用於ColdFusion?如果更容易,在CFC中使用額外獎勵積分?

代碼:

#Rewritten code from /r2/r2/lib/db/_sorts.pyx 

from datetime import datetime, timedelta 
from math import log 

epoch = datetime(1970, 1, 1) 

def epoch_seconds(date): 
    """Returns the number of seconds from the epoch to date.""" 
    td = date - epoch 
    return td.days * 86400 + td.seconds + (float(td.microseconds)/1000000) 

def score(ups, downs): 
    return ups - downs 

def hot(ups, downs, date): 
    """The hot formula. Should match the equivalent function in postgres.""" 
    s = score(ups, downs) 
    order = log(max(abs(s), 1), 10) 
    sign = 1 if s > 0 else -1 if s < 0 else 0 
    seconds = epoch_seconds(date) - 1134028003 
    return round(order + sign * seconds/45000, 7) 

的博客貼子,討論這個代碼: http://amix.dk/blog/post/19588

期待聽到一些思路和範例。

非常感謝! Michael。

此外,作爲一個額外的問題;在之後的ColdFusion 中,是否可以通過SQL查詢或某種類型的排序更好地執行此代碼?數據集已被收集?我選擇的數據庫將是MySQL。

更新: 剛剛在這裏發現了另一個問題,涉及到我問的問題......我認爲它有幫助。 How are Reddit and Hacker News ranking algorithms used?

回答

6

該代碼的絕大部分是從任何編程語言

例如獲得秒某個日期只是標準的代碼是在ColdFusion中很容易

<cfset seconds = dateDiff('s', now(), createDate(1970, 1, 1)) /> 

不知道該位的卡與,但它的所有保險簡單。我看到的每個函數都有一個ColdFusion版本,並且不想讓某人爲你重寫,我建議你嘗試去做,並詢問你是否陷入了困境。

+0

我只想問一下;這是最好在SQL中完成的東西,還是在已經收集數據集之後在CF中排序纔是最好的選擇?感謝您的意見 - 真的很有幫助。 – 2012-02-03 13:32:39

+0

這將取決於該排序是否會在其他地方使用。如果是這樣的話,那麼可能在SQL中使用CF函數會更好。 – jamesTheProgrammer 2012-02-03 16:15:16

+0

這個問題可以轉移到程序員.stackexchange.com – jamesTheProgrammer 2012-02-03 16:22:16