盛大創新院開源平臺 SNDACode 介紹
一、SNDACode和它的發展
SNDACode是盛大創新院旗下的一個開源平臺,主要用于展示盛大集團開放的源代碼及API,也有盛大員工個人開發代碼的展示。覆蓋的項目包含語音,云計算,開發框架,SDK等領域。開發者可以從SNDACode可以看到盛大最新的開源項目,也可以在上面提交issues,進行交流。除了特別聲明的軟件外,SNDACode上面的所有軟件都遵循GPLv2協議開源。下面是簡要介紹一下其中的幾個項目。
二、SNDACode上的項目介紹

哼唱檢索是一種基于音樂旋律內容的音樂檢索方式,使得用戶可以通過哼唱歌曲旋律的一個片段作為輸入檢索源從歌曲旋律庫中檢索音樂。相對于傳統基于文本關鍵字的音樂檢索,哼唱檢索給用戶提供了更便捷、更友好的查詢方式,不僅作為傳統文本檢索的一種有益補充,而且能給用戶帶來更佳的搜索體驗。

使用C++作為開發語言的Snda Humming,利用MIDI文件中包含的旋律信息構建旋律庫。IDI (Musical Instrument Digital Interface)文件記錄了歌曲樂譜音高,時長,力度等旋律信息。此外,為了支持用戶可以從一首歌的任何位置開始唱起這一功能,系統采用樂句切分方法,定位搜索入口點。
與同類型軟件相比,SNDA Humming采用了一種對用戶哼唱不加任何限制的語音輸入方式,用戶可以自然的輸入哼唱旋律,如可以唱出歌曲的歌詞,或者唱出樂譜,甚至可以用鼻音、無意義的音節哼出歌曲的曲調。
在算法的采用上面,歐氏距離(Euclidean Distance)和動態時間彎曲距離(Dynamic Time Warping Distance)的結合使用,讓SNDAHumming能更加精確地計算出旋律相似度。
本軟件的前身在2008年的國際音樂檢索評測中獲得第一名,識別準確率高,響應速度快。具有良好的擴展性,用戶可根據需求制作自己的音樂旋律庫。可以為對音頻信息處理領域感興趣的開發者提供了完整的學習案例和試驗平臺。

采用PHP5+MYSQL做為技術基礎進行開發,遵循OOP(面向對象)方式進行基礎運行框架搭建。以模塊化做為功能開發的形式,使得框架結構更為清晰,代碼更易于維護。也讓擴展性得到保證。
另外PHPCMS在開源CMS中率先引入站群系統,多發布點,數據表分離等功能。
所謂站群是指建立在統一標準、統一技術構架基礎之上,分級管理,分級維護,信息可以實現基于特定權限共享呈送的網站集合。并不是把很多個網站集中在一起就可以稱得上是站群了。PHPCMS實現了技術標準統一,站點間互聯互通,比如單點登錄等。
通過發布點對應的FTP配置信息,可以將多個站點分別部署到不同服務器上,分站域名指向站點內容所屬目錄或服務器,輕松實現多域名訪問和服務器集群布置。
PHPCMS在系統構架中,為每個數據表分別建立不同的數據模型文件,此文件中配置了該表所屬數據庫服務器IP,表前綴、表名等相關信息。系統程序運行中通過加載相關表的配置文件,來建立該表的數據模型類,進而操作該表。讓用戶將數據表分離到不同的數據服務器上,實現強大的負載均衡。


SNDACode上的很多項目是員工個人開發的,tcdatabase就是其中之一。以TC(Tokyo Cabinet)的B+Tree 數據引擎為基礎開發的數據庫。利用TokyoTyrant中的 skeleton功能實現擴展。可以使用以下代碼啟動:
ttserver -skel tcdatabase.so -port 3900 db_filename.tcb
TC(Tokyo Cabinet)是日本人平林幹雄開發的一款 Key-Value 鍵值數據庫。TT(Tokyo Tyrant )是由同一作者開發的 Tokyo Cabinet 數據庫網絡接口。它擁有自己的協議,并支持Memcached兼容協議,也可以通過HTTP協議進行數據交換。TCTDB的讀寫性能很強,又支持MySQL單表的一些功能,但任然有許多的不足。
TCDatabase就是在這個的基礎上進行改進。在TCDatabase中支持多個table從一個端口訪問,實現了Table Database支持多個表。原有TCTDB功能增強,讀寫性能損失過大的問題也在其中得到了解決。數據文件改用采用TCBDB(B+Tree Database)進行存儲,數據量上億后性能也不會明顯下降。
在性能優化的基礎上,TCDatabase能夠區分value的類型,建立數值索引。同時支持列讀寫,可以單獨獲取更新value中的某一字段。另外還能夠限制查詢的時間實現慢查詢。TCDatabase強大的功能使之有可能成為云數據庫的數據引擎。
Jscex是JavaScript Computation EXpressions的縮寫,它為JavaScript語言提供了一個monadic擴展。Jscex項目完全使用JavaScript編寫,能夠在任意支持ECMAScript 3的執行引擎里使用。小巧而強大,JIT編譯器能在運行時將JavaScript代碼編譯成Monad形式,無需額外編譯步驟,并內置異步編程類庫,可以大大簡化JavaScript下的異步編程體驗。
三、盛大目前開源狀況以及開放的API
除了上面介紹的項目之外,盛大Bambook,everbox的SDK也在SNDACode上公開了源代碼。Bambook是盛大旗下經典的電子閱讀器平臺,everbox則是大容量網盤。開發者可以利用其開放的API編寫豐富的應用。
另外還有其他一些有趣的項目,比如說用于消息隊列管理的DOMQ,java/jsp的敏捷開發框架xiaojie's framework等等。感興趣的同學可以訪問SNDACode.com了解更多的項目。也希望這個平臺能夠促進開發者之間的交流,為國內的開源事業發展盡一份綿薄之力。另外SNDACode下的一個開源程序比賽的平臺也正在籌劃過程中,更多的實時信息也可以關注SNDACode的新浪微博SNDACode。
來自: InfoQ
