欢迎各位朋友对六度拓扑的喜爱,六度拓扑应该算是我互联网实验中第一个称得上成熟的作品。

无论从构思,还是到创作的过程,直到最后的产品,我都是很满意的。

当然,最先要感谢还是豆瓣网能放出这个通过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)相关推荐

  1. (原创)六度拓扑(www.6dtop.com)---超乎想像的人际关系网络

    前一阵看到豆瓣的API里有一个可以根据ID查询他所有朋友的功能,这个API让我颀喜不已,因为我早就想做一个有点创意的牛B作品的-----这个创意就是根据六度理论的原理,把某人的朋友,朋友的朋友的,朋友 ...

  2. .NET ORM FreeSql 第一个正式版本发布 v1.0.0

    一.简介 FreeSql 是 .NET 平台下的对象关系映射技术(O/RM),支持 .NetCore 2.1+ 或 .NetFramework 4.0+ 或 Xamarin. 从 0.0.1 发布到今 ...

  3. java 开源sns_JEESNS V1.0发布,JAVA 开源 SNS 社交系统

    JEESNS V1.0 发布了,本次更新内容: 增加后台管理员授权与取消功能 增加私信模块 解决在微博页面,左侧微博点赞过后,左侧展示列表小手会变黑,但是右侧热门出小手依然是白色 修复后台添加栏目.文 ...

  4. android go预览版下载地址,Android 11 Go正式版-Android 11 Go安卓正式版预约 v1.0.0-友情手机站...

    Android 11 Go正式版是谷歌最新发布的安卓系统,性能各方面都是有提升,给予每位用户最佳的使用体验,体验最佳的操作,安卓手机与苹果手机一样备受所有用户的喜欢,各种功能都有改进,提供给用户最强的 ...

  5. 有史以来准备最充分的主网 - IOST Olympus v1.0正式上线

    我们很高兴向IOST社区宣布,IOST主网Olympus v1.0已正式上线! IOST一直在致力打造一个支持高并发且去中心化的优秀开源公链项目.在过去的一年里,IOST在GitHub的代码更新长期名 ...

  6. mac webpack 版本_晓前端周刊 第48期:EMP面向未来微前端方案正式开源了!玩转 webpack,使你的打包速度提升 90%;...

    业界动态 苹果最大杀招:iPhone App 已能在电脑运行 近日网友反馈,苹果 App Store 中大量应用在兼容性一栏中显示:已支持运行 macOS 11(及以上版本)的 Mac 电脑.这意味着 ...

  7. 又被 AI 抢饭碗?2457 亿参数规模,全球最大中文人工智能巨量模型 “源1.0”正式开源...

    作者 | 伍杏玲 出品 | AI科技大本营(ID:rgznai100) 输入: 昔我往矣,杨柳依依. 今我来思,雨雪霏霏. 行道迟迟,载渴载饥. 我心伤悲,莫知我哀! (以战争为题写一首诗) 回复: ...

  8. GEMM性能提升200倍,AutoKernel算子优化工具正式开源

    作者 | OPEN AI LAB 研究员 吕春莹 出品 | AI科技大本营 头图 | CSDN下载自视觉中国 随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应 ...

  9. 腾讯 JDK 11 正式开源,高性能、太牛逼啦!

    点击关注公众号,Java干货及时送达 大家好,我是基基. 今天,基基,跟大家分享一下,腾讯2021年开源的 JDK11 ,腾讯大数据JVM团队在Kona JDK11开源项目中,坚持了一贯的兼容性.可靠 ...

最新文章

  1. LeetCode简单题之检查单词是否为句中其他单词的前缀
  2. 资源帖:CV代码库搜集
  3. 激光光凝手术的副作用和必要性
  4. JAVA面向对象-----instanceof 关键字
  5. 快学Scala习题解答—第一章 基础
  6. 苹果CMS10|粉色视频站模版|YMYS007|魅力社
  7. Flutter AppBar 简述
  8. 计算机硬件基础与linux发展史
  9. c语言次幂如何表达_如何确保分布式场景下的并发幂等性?
  10. linux提示qq不是最终版本,Deepin中QQ出现当前版本存在安全风险,将于2019年10月30日停止使用的解决...
  11. web前端开发培训培训,JavaScript运算符
  12. 微信小程序-001-抽签功能-002-新建抽签
  13. 一个40岁程序员的经历
  14. 为什么相机模型假设成像平面位于焦平面?
  15. 踢球游戏-运用list切片
  16. 华为路由hilink_友猫:华为路由器的 Hi 按键功能(HiLink 智联和WPS)
  17. 安装RAC小记(Oracle11gR2)
  18. 中心极限定理与大数定理理解
  19. 基于Maven+SpringMVC+Spring+MyBatis+Layui整合框架,超详细的SSM整合❤️
  20. 专业放心的python入门视频_手把手教你掌握学习Python方法,让你不再从入门到放弃...

热门文章

  1. win32 打印机任务管理的 node 模块 (3)详解Win32 Spooler API 获取打印机列表及状态
  2. long(Long)与int(Integer)之间的转换
  3. 解决IE浏览器打印iframe页面时字体等样式缩小的问题
  4. 能耗在线监测系统在酒店节能管理中的应用
  5. python语音验证码识别_Python验证码识别
  6. 好用的浏览器,与Google Chrome同内核
  7. 浏览器(2):自制Chromium内核浏览器,自动统计CSDN社区打卡记录
  8. 主视图和左视图算体积最大最小值
  9. vivo电池损耗指令代码_「值得收藏」手机上的神奇代码,除了*#*#6485#*#*,还有这些...
  10. 问题:微信小程序开发之 --- app.js文件介绍