六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)
生活随笔
收集整理的這篇文章主要介紹了
六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
序
歡迎各位朋友對六度拓撲的喜愛,六度拓撲應該算是我互聯網實驗中第一個稱得上成熟的作品。
無論從構思,還是到創作的過程,直到最后的產品,我都是很滿意的。
當然,最先要感謝還是豆瓣網能放出這個通過ID來查找朋友的API,沒有這個API就沒有這個作品。
那么大的一個網站,用自己服務器和帶寬把API開放出來供大家使用,這種奉獻的精神本身就很值得稱道,所以,我覺得放出自己的源代碼是很應該的事,而且,其中也一定會有很多的好處。
我在大學時代讀過Linus Torvalds 自傳<樂者為王>,我不敢奢談自己的編程水平有多高,但我和Linus Torvalds 一樣,都對編程活動充滿熱情。對我而言,程序設計最大的樂趣就在于創作,這和歌手寫歌,作家寫文章從某種程度上是具有一致性,最終的作品是否能得到大家的認可,將是我最大的頎慰。
我喜歡李宗盛大哥的一句話:“一把琴,在它交在一個音樂人手中之前,基本上是個廢物,它一定要落在一個做音樂的人手中,它才有了生命。”-----與所有喜歡創作的朋友共勉。
-------------------------------------------------------------------
好,書歸正傳,讓我們說說代碼吧:
1.首先要說的是關于程序編譯環境,程序是用flash cs3編譯的,雖然里面有一此看上去和flex有關的文件,但那只是我用flex作為編輯器所產生的"副產品",我采用開發方式是flash作為編譯器和界面設計工具,而flex作為代碼編輯器。
flash cs3 下載地址
至于flash所采用的開發語言------ActionScript 3,如果你學過像JAVA,C++這樣的OOP語言,從語法能很輕松的理解。
2.程序之核心
2.1
程序最重要的一個部分就是"軌道",參UIEntity.Orbit類
軌道圖示
從圖中,可以看出,結點是被一個吸引到軌道上去的。
而軌道的吸引是分階段,第一階是RANDOM_ATTRACT,第二階段是ARRANGE。
RANDOM_ATTRACT :由于在二度及以上的朋友中,無法在搜索完成某度的所有朋友前,獲知其朋友的數目,因此,為了讓頭像可以盡可能的均勻排列,需要根據當前已搜索的某度朋友的數目來進行,這個階段稱為RANDOM_ATTRACT。
ARRANGE:這個階段就很清楚了,某個朋友的某度朋友全部完成時,讓其朋友盡可能的均勻排列。
軌道的實現用的是DFA(有限自動機),其實我這里的實現是很簡單的,就是在一個可以被反復執行的函數,如foo中,加swith(status)這樣的語句,GOT IT?
DFA是我在交互應用中非常喜歡用的東西,我對它喜歡的不得了,他真是個既簡單,又有效的思想。
如果我說程序的核心就這點的話,肯定有人要扔蕃茄了,但事實就是這樣,這個就是程序之核心,當然,實現這個核心的某些細節還是很值得討論下的。
2.2Orbit吸引之實現
Orbit自己只負責完成吸引的動作,但由誰負責把結點push進某個orbit呢?這就需要由另一個自動機來做,參看DouBanFriendTopology類(主類)中的
enterFrameFun(evt:Event):void函數的實現
它的基本思想是這樣的,將當前中心點的一度用戶裝入一個隊列中,
然后,每隔50ms左右(出于性能考慮),從隊列(參AS3STL.EQueue)Q的頭部取出一個用戶F->
查看用戶F的朋友是否已全部獲取(由于豆瓣朋友的XML一次只能請求50個,所以當朋友大于50時,要多次請求)。
YES 全部獲取 : 把用戶F用隊列Q里取出,查看它的所有朋友結點。
IF 朋友結點i未被使用
加入隊列Q的尾部
ELSE 直接丟棄此結點,這里為了 避免重復結點,
如a-b是好友,b-c是好友,而c-a又是好友
NO 未全部獲取: 等待
這是一個很簡單但很有效的算法,不是嗎?
因為這里,只要不停止抓取,用戶的朋友,朋友的朋友...是會一直獲取(抓取的過程參 DouBanFriendTopology類中的ClawMainFun(event:TimerEvent):void )下去的,也就是說,隊列是無限延伸(除非把N度朋友全抓完或到某度時所有人都沒有朋友了),對于這樣一種動態的數據的情況,本來是很麻煩的,但這里用一個 "查看用戶F的朋友是否已全部獲取"就優雅的處理了這一情況,個人對此頗為滿意。
3OK,關鍵的部分就先介紹到這里了,先講講程序的組織:
Douban_Fri_Topology.fla 程序主文件,編輯它即可觀看6度拓撲。
DouBanFriendTopology.as 程序的主類。
OriginalGraph.fla 程序的原型圖所在文件,用于先期設計。
about.swf 點擊About后播放的flash文件,里面用到了我最喜歡的美國選秀結目<學徒>的背景音 樂。(第一幀被設為暫停了,要通 過程序控制播放)
------------------------------------------------------------------
包
AS3STL
自寫的AS3 STL包,目前僅有一個隊列(以前有一個較全的 AS2STL,有stack,tree,graph啥的,過一陣改寫)。
ComuEntity
通訊實體類,用來請求XML,并返回相應結果,
Fetch_Friend.as是用來獲取朋友數據的。
而Fetch_People.as則是在搜索時用來獲取個人信息(ID)的,主要用在如http://www.6dtop.com/search.asp?id=ahbei上。
EventCenter
CEventCenter, 這是一種形之有效的自寫消息的機制,當你從一個“深處”,比方說obj1.obj2.obj3.xxx發出一個消息給obj100,通過這樣一種直接管理 -派發的機制,有效的解決了這個問題,無論語言是否帶什么dispatch之類的自定義消息機制,都可以用這種基于函數實現的消息來做。
CGData
用來存放一些全局數據,UserList是一個全局的異質(就是不會有重復的)用戶列表。
Model
用來定義一些僅和數據相關的模型,如這里的UserModel.
UIEffect
效果包,DragEffectVM是我非常頎常的一個自寫鼠標拖動管理類,他帶來了非常高的便捷性和靈活性。
UIEntity
UI 實體包,其中的Orbit(軌道)和UserNode(用戶結點)最為重要,而ToolBar中包括了ScaleToolBar(左側形變工具), Upline(上部工具),ButtomLine(下部工具),這里用到了在flash制作的一些元件,在FLEX里由于無法識別,會報錯(由于沒有編譯 成.swc),不用理會,因為這里是用flash進行編譯的。
Utils
實用類包,ArrayUtil,數組輔助方法。
WebService
WebService包,SWebService,包含了請求的地址等。
------------------------------------------------------------------
about_swf文件夾,包含了about flash的源文件。
由于about.swf第一幀被設為了暫停,所以,可以使用loader.swf
------------------------------------------------------------------
說了大半天,終于來點實惠的了,6DTOP 源碼1.0版本,跟大家分享了
http://www.6dtop.com/open/v1.0/6dtop.source.1.0.rar
好貼要記得頂噢;)
歡迎各位朋友對六度拓撲的喜愛,六度拓撲應該算是我互聯網實驗中第一個稱得上成熟的作品。
無論從構思,還是到創作的過程,直到最后的產品,我都是很滿意的。
當然,最先要感謝還是豆瓣網能放出這個通過ID來查找朋友的API,沒有這個API就沒有這個作品。
那么大的一個網站,用自己服務器和帶寬把API開放出來供大家使用,這種奉獻的精神本身就很值得稱道,所以,我覺得放出自己的源代碼是很應該的事,而且,其中也一定會有很多的好處。
我在大學時代讀過Linus Torvalds 自傳<樂者為王>,我不敢奢談自己的編程水平有多高,但我和Linus Torvalds 一樣,都對編程活動充滿熱情。對我而言,程序設計最大的樂趣就在于創作,這和歌手寫歌,作家寫文章從某種程度上是具有一致性,最終的作品是否能得到大家的認可,將是我最大的頎慰。
我喜歡李宗盛大哥的一句話:“一把琴,在它交在一個音樂人手中之前,基本上是個廢物,它一定要落在一個做音樂的人手中,它才有了生命。”-----與所有喜歡創作的朋友共勉。
-------------------------------------------------------------------
好,書歸正傳,讓我們說說代碼吧:
1.首先要說的是關于程序編譯環境,程序是用flash cs3編譯的,雖然里面有一此看上去和flex有關的文件,但那只是我用flex作為編輯器所產生的"副產品",我采用開發方式是flash作為編譯器和界面設計工具,而flex作為代碼編輯器。
flash cs3 下載地址
至于flash所采用的開發語言------ActionScript 3,如果你學過像JAVA,C++這樣的OOP語言,從語法能很輕松的理解。
2.程序之核心
2.1
程序最重要的一個部分就是"軌道",參UIEntity.Orbit類
軌道圖示
從圖中,可以看出,結點是被一個吸引到軌道上去的。
而軌道的吸引是分階段,第一階是RANDOM_ATTRACT,第二階段是ARRANGE。
RANDOM_ATTRACT :由于在二度及以上的朋友中,無法在搜索完成某度的所有朋友前,獲知其朋友的數目,因此,為了讓頭像可以盡可能的均勻排列,需要根據當前已搜索的某度朋友的數目來進行,這個階段稱為RANDOM_ATTRACT。
ARRANGE:這個階段就很清楚了,某個朋友的某度朋友全部完成時,讓其朋友盡可能的均勻排列。
軌道的實現用的是DFA(有限自動機),其實我這里的實現是很簡單的,就是在一個可以被反復執行的函數,如foo中,加swith(status)這樣的語句,GOT IT?
DFA是我在交互應用中非常喜歡用的東西,我對它喜歡的不得了,他真是個既簡單,又有效的思想。
如果我說程序的核心就這點的話,肯定有人要扔蕃茄了,但事實就是這樣,這個就是程序之核心,當然,實現這個核心的某些細節還是很值得討論下的。
2.2Orbit吸引之實現
Orbit自己只負責完成吸引的動作,但由誰負責把結點push進某個orbit呢?這就需要由另一個自動機來做,參看DouBanFriendTopology類(主類)中的
enterFrameFun(evt:Event):void函數的實現
它的基本思想是這樣的,將當前中心點的一度用戶裝入一個隊列中,
然后,每隔50ms左右(出于性能考慮),從隊列(參AS3STL.EQueue)Q的頭部取出一個用戶F->
查看用戶F的朋友是否已全部獲取(由于豆瓣朋友的XML一次只能請求50個,所以當朋友大于50時,要多次請求)。
YES 全部獲取 : 把用戶F用隊列Q里取出,查看它的所有朋友結點。
IF 朋友結點i未被使用
加入隊列Q的尾部
ELSE 直接丟棄此結點,這里為了 避免重復結點,
如a-b是好友,b-c是好友,而c-a又是好友
NO 未全部獲取: 等待
這是一個很簡單但很有效的算法,不是嗎?
因為這里,只要不停止抓取,用戶的朋友,朋友的朋友...是會一直獲取(抓取的過程參 DouBanFriendTopology類中的ClawMainFun(event:TimerEvent):void )下去的,也就是說,隊列是無限延伸(除非把N度朋友全抓完或到某度時所有人都沒有朋友了),對于這樣一種動態的數據的情況,本來是很麻煩的,但這里用一個 "查看用戶F的朋友是否已全部獲取"就優雅的處理了這一情況,個人對此頗為滿意。
3OK,關鍵的部分就先介紹到這里了,先講講程序的組織:
Douban_Fri_Topology.fla 程序主文件,編輯它即可觀看6度拓撲。
DouBanFriendTopology.as 程序的主類。
OriginalGraph.fla 程序的原型圖所在文件,用于先期設計。
about.swf 點擊About后播放的flash文件,里面用到了我最喜歡的美國選秀結目<學徒>的背景音 樂。(第一幀被設為暫停了,要通 過程序控制播放)
------------------------------------------------------------------
包
AS3STL
自寫的AS3 STL包,目前僅有一個隊列(以前有一個較全的 AS2STL,有stack,tree,graph啥的,過一陣改寫)。
ComuEntity
通訊實體類,用來請求XML,并返回相應結果,
Fetch_Friend.as是用來獲取朋友數據的。
而Fetch_People.as則是在搜索時用來獲取個人信息(ID)的,主要用在如http://www.6dtop.com/search.asp?id=ahbei上。
EventCenter
CEventCenter, 這是一種形之有效的自寫消息的機制,當你從一個“深處”,比方說obj1.obj2.obj3.xxx發出一個消息給obj100,通過這樣一種直接管理 -派發的機制,有效的解決了這個問題,無論語言是否帶什么dispatch之類的自定義消息機制,都可以用這種基于函數實現的消息來做。
CGData
用來存放一些全局數據,UserList是一個全局的異質(就是不會有重復的)用戶列表。
Model
用來定義一些僅和數據相關的模型,如這里的UserModel.
UIEffect
效果包,DragEffectVM是我非常頎常的一個自寫鼠標拖動管理類,他帶來了非常高的便捷性和靈活性。
UIEntity
UI 實體包,其中的Orbit(軌道)和UserNode(用戶結點)最為重要,而ToolBar中包括了ScaleToolBar(左側形變工具), Upline(上部工具),ButtomLine(下部工具),這里用到了在flash制作的一些元件,在FLEX里由于無法識別,會報錯(由于沒有編譯 成.swc),不用理會,因為這里是用flash進行編譯的。
Utils
實用類包,ArrayUtil,數組輔助方法。
WebService
WebService包,SWebService,包含了請求的地址等。
------------------------------------------------------------------
about_swf文件夾,包含了about flash的源文件。
由于about.swf第一幀被設為了暫停,所以,可以使用loader.swf
------------------------------------------------------------------
說了大半天,終于來點實惠的了,6DTOP 源碼1.0版本,跟大家分享了
http://www.6dtop.com/open/v1.0/6dtop.source.1.0.rar
好貼要記得頂噢;)
總結
以上是生活随笔為你收集整理的六度拓扑(www.6dtop.com)正式开源啦~~~(V1.0)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat输出框乱码(鏈嶅姟鍣ㄥ湪[4
- 下一篇: 六一儿童节 | TcaplusDB祝大小