有一說一

党凡的網誌

C++程序移植到Java的一點體會

這兩天在做高級數據結構(ADS)課程的大作業,內容是做一個推薦系統。我們選取的是C. Wang and D. Blei. Collaborative topic modeling for recommending scientific articles.一文中描述的模型。文章的作者C. Wang在個人主頁上發佈了論文中使用系統的部分代碼,代碼使用C++語言完成的。而我們的系統是用Java搭建的,因此我們需要將C++代碼移植到Java中。

本以爲這是一個簡單的工作,只需要簡單的改寫即可,但沒想到第一次移植的版本跑出來的結果的準確率只有作者程序的1/10。於是我意識到程序改錯了。經過漫長的人工靜態debug,終於把程序改對了。


千尋中數據庫的一點經驗

通過半個多學期的實踐,我發現,想用好數據庫真的是沒那麼容易。

之前有兩篇文章來敘述千尋的數據庫設計,但在實踐中,千尋並沒有按照之前設計的方式來使用數據庫。最主要的原因是,數據在MongoDB和redis中重複出現,這個冗餘帶來的一致性問題比較難以解決,雖然在寫代碼的時候已經通過code review來儘量避免數據的不一致,但一致性的bug還是難以避免。


node.js中文件上傳的一種方法

使用node.js處理上傳文件,容易想到的做法是使用express來處理post數據,然後將數據存在文件系統中。但在千尋中,這種方法看起來並不夠理想。千尋中,我們一直在使用socket.io作爲通訊的媒介。因此,在這裏,我們需要考慮使用一種能直接利用socket.io完成通訊的做法。


千尋的架構設計(二)

上一篇文章概括地描述了千尋使用的通訊方式和數據庫,本篇文章我們將重點探討一下千尋的數據庫該如何設計。

在設計數據庫前,我將千尋涉及到的主要功能列在下面。當然實際上,在明確功能點和需求上,更好的手段是編寫用戶故事。


千尋的架構設計(一)

千尋(https://github.com/dangfan/Chihiro)是本學期軟件工程課大作業的項目名稱,這是一個Kik類的通訊工具,此外,還加入了基於地理位置信息的元素。