AI和大数据如何落地智能城市?京东城市这6篇论文必读 | KDD 2019
Efficient and Effective Express via Contextual Cooperative Reinforcement Learning作者:Yexin Li , Yu Zheng , Qiang Yang近年来,物流快递服务覆盖了越来越多的城市,不仅推动了线上购物的普及,也给城市生活带来了极大的便利。当对物流的需求呈逐步增长的时候,运营者通常通过增加快递员的数量来完成日益增长的配送件任务,但这种方式由于对快递员的管理调度比较欠缺,从而造成劳动力的浪费,并且不能从根本上解决送取件效率低下的问题。因此我们提出了一个基于强化学习的优化模型,来实现快递员的动态调度管理,从而达到只利用一部分现有快递员来高效完成每天的大量送取件任务的目的。在一个物流系统中,通常包含两类任务:一是配送到达配送站的各个包裹到指定地点;二是前往客户实时下单地点收取包裹。即我们平时所说的送件和收件。基于此,我们本次所研究的优化模型包括两个步骤:一是到达配送站的包裹如何分配给每个快递员;二是从配送站出发的快递员,该如何实时规划他们的工作路径。要优化上面的两个步骤,使得快递员每天能完成尽可能多的任务,并不是一个容易的问题,需要解决的挑战难点有三个:第一个难点是,物流快递系统非常大,并且是随时间不断动态变化的。要同时管理调度大量的快递员来完成每天大量的送取件任务非常困难。第二个难点是,在完成第一个步骤时,即如何在配送站分配包裹给每个快递员,我们需要基于实际情况考虑多个因素:分配给同一个快递员的包裹有相近的目的地;分配包裹时需要考虑将来可能产生的取件任务;各个快递员最好有大致相同的任务量,以免造成劳动力的浪费或工作过量的情况。第三个难点是,对于第二个步骤,即如何实时规划每个快递员的作业路线,由于物流系统的动态性质,以及快递员作业时的一些随机因素,再加上我们的目标是使得在长时间内完成的总送取件任务数最大,这些都使得传统的最优化模型并不能很好的解决这个问题。解决方案针对以上难点,本文提出了一个基于强化学习的优化模型。针对第一个难点,我们先将城市划分成了多个独立的片区,然后分别管理每个片区内的快递员。这样做的原因有两个:第一,可以很大程度上降低问题的复杂度;第二, 位于城市中距离较远的两个片区中的快递员并不会有协同合作,所以同时考虑整个城市并没有实际操作上的必要性。城市片区的划分是基于已有的Connected Component Detection方法来完成的,最后得到的各个片区满足相互独立的性质。如图所示,其中每个颜色表示一个独立的片区,每个片区有一些快递员在片区内作业来完成送取件任务。

UrbanFM: Inferring Fine-Grained Urban Flows
作者:Yuxuan Liang, Kun Ouyang, Lin Jing, Sijie Ruan, Ye Liu, Junbo Zhang,David S. Rosenblum,Yu Zheng近年来,城市人流量监控系统在智慧城市当中扮演着重要的角色。然而,细粒度的监控系统需要部署大规模的设备和传感器,这意味着系统维护需要大量的资金支持。于是,京东城市联合西安电子科技大学和新加坡国立大学提出了一种基于深度神经网络的模型UrbanFM (Urban Flow Magnifier),能够利用粗粒度城市人流量数据准确地还原细粒度人流量数据,从而减少设备维护成本。细粒度的城市流量监控系统是现代智慧城市信息系统中的一个关键组件,为城市的长期规划,实时交通管理等决策提供了基础的信息支撑。这些流量监控系统的传感部分从路沿的监控摄像头到埋在地下的磁感线圈,再到各大运营商的信号基站,都在无时无刻为智慧城市的大脑服务。它们就好像是城市的眼睛,将整个城市的实时流量传输到控制中心,为大脑中央的管理人员提供一个管理城市的蓝图。

为了减少维护成本,一个简单的想法是减少传感器的数量,但是这样也会降低监控系统的粒度进而降低可用性。于是我们提出一个新的想法:“能不能减少监控系统中传感器的数量,但是却不改变系统所能获取到的信息粒度和精度?”根据以上想法,我们先将整个城市进行栅格化划分,每个格子代表城市中的一个区域。很明显,根据不同的划分方式我们能得到不同粒度的城市人流量数据。例如,图1.2(b)展示了原有的细粒度某一时刻北京的城市流量图,而图1.2(a)是传感器减少后对应时刻的粗粒度城市流量图。图中的每一个格子的颜色(热度值)代表某一时刻该点的流量。我们的目标就是通过粗粒度的城市人流量数据来推断细粒度的人流量数据。即给定一个特定的放大倍数和粗粒度人流量图,来推断该时刻对应的细粒度人流量图。


解决方案
从本质来看,推断细粒度的城市人流量是一个以低信息熵的输入推导并恢复高信息熵的输出的问题,这和图像超分辨率是很相似的。然而,图像超分辨率相关算法并不能考虑到以上提及的难点与挑战。借鉴了图像复原(包括超分辨率、去噪等)的核心思想,即空间特征提取-高层特征抽象-根据高层信息重建的范式,我们提出了一个基于深度神经网络的模型UrbanFM。该模型能同时考虑到空间结构性以及外部因素的影响,基于粗粒度的城市流量数据来实时推断细粒度的城市人流量。该模型的框架如图1.4所示,此时放大倍数。拆解来看,主要分为推断网络(Inference Network)和外部因素融合网络(External Factor Fusion)两个部分。

推断网络是模型的主网络。首先,它将粗粒度流量图作为输入,使用残差网络(ResNet)进行特征提取,同时能考虑到区域之间的空间关联性。之后,将提取出的高阶特征进行分配上采样(distributional upsampling)来得到每个粗粒度大区域对应的细粒度小区域的分布矩阵。最后,将原始粗粒度流量图和分布矩阵进行按位相乘即可得到细粒度流量图。其中,分配上采样是核心模块,能够很好的考虑到粗粒度和细粒度人流量图之间的空间层次性关系。具体来说,分配上采样模块先使用Subpixel块对原始粗粒度图提取的高阶信息进行上采样,将特征图的尺寸放大倍得到细粒度的特征图;再使用一个卷积层和提出的N2归一化层将放大后的特征图转化为分布矩阵。这里的N2归一化层相比于直接使用损失函数约束空间层次性有几大优势。它是一个无参数层,没有给网络带来额外开销,并且易于实现(如图1.5所示)。在实验中,我们也发现使用N2归一化层比使用损失函数约束空间层次性的效果要好很多。






城市交通预测是城市计算领域中一个非常重要的研究课题,准确的交通预测可以帮助我们更好地理解城市交通,给交通系统的改进提供思路,同时也能对民众提供及时的城市交通预警。然而,准确的城市交通预测需解决以下两个挑战:1) 交通数据间复杂的时空相关性,即一个地点的交通状况会影响其未来一段时间内的交通,也会影响其周围区域的交通。如图2.1(a)所示,当地点S3发生交通事故时,可能导致它相邻的地点S1,S2,S4堵车;当地点S4有重大事件发生时(例如,演唱会),将有大量的人群涌向S4,从而影响S4未来一段时间的交通状态。2) 不同地点间,数据的时空相关性是多样的,并且这样的相关性取决于地理信息,如地点周围的兴趣点,路网结构等。如图2.1(b)区域R1、R2和R3拥有不同的POI分布和路网结构。其中,R1、R3有较多的办公楼,表示工作区,而R2有较多的住宅,表示一个住宅区。如图2.1(c)所示,这些区域的POI分布、路网结构不同,导致,R1、R2、R3三个区域的流入人流量趋势各不相同。但同时,由于R1与R3的POI分布较相似,它们的流量趋势呈现出一定的相似性。因此,交通预测的核心挑战就是建模交通数据中的时空相关性和地理信息对时空相关性的影响。

解决方案为了能在一般化的非规则空间结构上(如路网)预测未来交通,我们首先需要将交通的关联模式抽象成图结构。其中,每个点表示的地图上的地点,而边表示的是两个地点间的关联。接下来,我们提出参数生成的方式,来建模地理信息对时空相关性的影响。如图2.2所示,我们用一个模型从节点的地理特征中,学习节点和边的特性,而后用这些特性,进而学习时间、空间的关联性模型。最后用学到的模型进行交通预测。

1. 循环神经网络(RNN),将交通数据编码映射到高维的空间,学习高维特征。2. 元知识学习器(Meta-Knowledge Learner)。如图2.3(b)我们用两个元知识学习器,分别从点和边的地理信息中学习点元知识(Node meta knowledge,NMK)和边元知识(Edge metaknowledge,EMK),用于生成模型的参数。3. 基于元学习的图注意力网络(Meta-GAT)。该网络接收RNN的输出,用于建模多样的空间关联。由于在图结构中,不同的边所描述的空间相关性取决于这条边的特征属性,所以,我们用一个元学习器从地理信息的元知识中学习GAT模型(图2.3(c))。4. 基于元学习的循环神经网络(Meta-RNN)。该网络接收Meta-GAT的输出,用于建模多样的时间关联性。我们从每个节点地理信息的元知识中学习RNN的参数,来对多样的时间相关性建模(图2.3(d))。

实验结果最后,我们使用出租车流量预测和道路车辆速度预测这两个真实的任务来验证模型的性能。如表2.4所示,从MAE和RMSE这两个指标上看,我们的模型在使用更少参数的情况下,都要优于之前最好的结果。


为了进一步说明深度元学习的有效性,我们对模型所学习到的点元知识进行评估。对于每个节点,其元知识是表征该节点特性的嵌入向量。一组好的嵌入向量需要能表征节点之间的相似度。为此,我们在节点的嵌入空间下(Embedding space),找到每个节点的k邻近节点。然后,用交通数据的测试集计算每个节点和其k临近节点的平均相似度。这里我们选用两种序列相似度指标:Pearson相关性(CORR)和一阶时间相关性(CORT),这两个值越大,表示相似度越高。如图2.6所示,用元学习方法学到的嵌入空间,每个节点与其周围节点的相似度明显高于在非元学习方法的嵌入空间下节点与其邻近节点的相似度。

最后,我们用一个实例来展现元学习的优势。在出租车流量预测任务中,我们选取3个典型的区域:永泰园、中关村和三元桥,分别对应于住宅区、办公区和交通枢纽。然后,我们在嵌入空间下,分别找到它们最近的节点,并且将所有节点所对应的交通流量画在图上。图2.7(a)展现的是非元学习下,每个区域和它在嵌入空间下相邻区域的流量比较。可以发现,在该嵌入空间下,节点和其相邻点并不相似。而图2.7(b)展现的是元学习下的结果,对于每个区域,其嵌入空间下相邻的区域都跟它有非常相似的流量趋势,进而说明了元学习方法的有效性。

http://urban-computing.com/pdf/kdd_2019_camera_ready_ST_MetaNet.pdf
TrajGuard: A Comprehensive Trajectory Copyright Protection Scheme作者:Zheyi Pan, Jie Bao, Weinan Zhang, Yong Yu, Yu Zheng轨迹数据记录了人们活动的大量信息,在城市各个场景中被广泛使用,如交通预测,兴趣点推荐等等,因此很多公司或科研机构向他人公开或售卖数据。但由于轨迹中包含非常多敏感而有价值的信息,所以有必要构建一种机制来有效监管轨迹信息的共享和传播,来识别其他恶意用户的二次售卖行为,阻止他们非法获利。然而,由于恶意用户可以修改轨迹数据后发布或售卖,如何在数据被篡改后依然识别数据的版权方,是一个很大的挑战。


我们在两个真实的轨迹数据上测试了我们的方案,实验结果能够充分验证该方案的有效性。论文原文链接:http://urban-computing.com/pdf/kdd_2019_camera_ready_TrajGuard.pdf
Unifying Inter-region Autocorrelation and Intra-region Structures for Spatial Embedding via Collective Adversarial作者:Yunchao Zhang, Yanjie Fu, Pengyang Wang, Xianli Li, Yu Zheng无监督地理表征学习主要借助地块内部一些有效的地理特征以及一些结构化的数据来进行地块的辨别。已有的一些工作主要借助图表征学习将每个地块看作一个图节点或者一张图来进行学习;这样的方法很难同时周全地考虑到区域内部的一些结构特征和区域间的空间相关性。于是,京东城市联合密苏里科技大学和南京大学提出了一种基于无监督协同对抗学习的模型CGAL(Collective Graph-regularized dual-adversarial Learning)来同时建模区域内的结构特征和区域间的自相关性进行地理区域的表征学习。背景介绍城市的地块表征学习主要为了融合学习城市内的多源异构的特征数据来进行地块的辨别,这些表征同时也可以帮助更好的理解城市的结构和动态变化过程,帮助区域规划,提高城市的管理效率。但同时,城市中的很多数据都是没有标签的,这对很多真实的应用场景带来很大的挑战。为此,本文采用深度无监督学习模型来探索地理表征的学习。同时为了保存学习时地块内部和地块之间的一些特征和相关性,模型构建了多种结构化的特征,采用基于自动编码器的监督协同学习对抗网络进行表征的学习。问题描述本文首先将城市划分成很对个地块区域



整个模型框架主要包含三个部分:(1)对每个区域构建多视角图特征;(2)利用无监督协同图正则对抗编码-解码网络进行地块区域的表征学习;(3)学习得到的区域表征在人口流量预测任务上的应用。首先,在每个地块区域内部构造多视角图结构特征,比如,每一类POI当做一个节点,可以计算每一类POI之间的平均距离,得到一张图,同时每一类POI之间转移的人口流量可以用来构建另一张图。




实验结果文章利用学习得到的每个地块表征,建立一个简单的线性回归模型来进行地块的流行度预测,地块流行度根据地块流入人口量计算得到,流量越大,流行度越高。通过在真实的数据集上进行实验比较,文章提出的CGAL模型比几个流行的模型效果都有更好的提升。




所设计的深度学习方法不仅能够更准确地进行气象要素单值预报,也可以对气象变化范围进行区间预报。连续9天的天气预报实验结果如下表所示,与传统的数值天气预报方法相比,该方法能够降低51.28%的预报误差。

论文原文链接:http://urban-computing.com/pdf/kdd19-BinWang.pdf
(*本文为 AI科技大本营转载文章,转载请联系原作者)
社群福利
扫码添加小助手,回复:大会,加入2019 AI开发者大会福利群,每周一、三、五更新技术福利,还有不定期的抽奖活动~
◆
精彩推荐
◆
60+技术大咖与你相约 2019 AI ProCon!大会早鸟票已售罄,优惠票速抢进行中......2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。
推荐阅读
通俗易懂:图解10大CNN网络架构
BERT的成功是否依赖于虚假相关的统计线索
AI+DevOps正当时
5天破10亿的哪吒,为啥这么火,Python来分析
5G+AI重新定义生老病死
如何从零开始设计一颗芯片?
在其他国家被揭穿骗子又盯上非洲? 这几个骗子公司可把非洲人民坑苦了…
国内首款 5G 机型开售;Google Chrome 大部分插件无人用;Firefox 69 Beta 9 发布

相关文章:

OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so
OSError: Could not find library geos_c or load any of its variants [libgeos_c.so.1, libgeos_c.so 解决: sudo vim /etc/ld.so.conf 添加:/opt/source/geos-3.5.0/build/lib sudo ldconfig

五分钟搭建BERT服务,实现1000+QPS,这个Service-Streamer做到了
作者 | 刘欣简介:刘欣,Meteorix,毕业于华中科技大学,前网易游戏技术总监,现任香侬科技算法架构负责人。之前专注游戏引擎工具架构和自动化领域,2018年在GDC和GoogleIO开源Airtest自动化框架,广泛…

Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)
nagios博大精深,可以以shell、perl等语句为nagios写插件,来满足自己监控的需要。本文写mysql中tps、qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要求了。 编写插件tps qps check_qps 插件如下内容 #…

OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 SSL是SecureSockets Layer(安全套接层协议)的缩写,可以在Interne…

Guava Cache本地缓存在 Spring Boot应用中的实践
概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小。而 3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是支持缓存特性的。当然 Spring Boot默认使用的是 SimpleCache…

Windows 8.1 Preview(Windows Blue)预览版简体中文官方下载(ISO完整版镜像)
Windows 8.1是微软继Windows 8以来的又一全新力作,又名Windows Blue(视窗蓝,专注蓝屏30年),个人觉得Win8还是比较流畅的但大众始终觉得还是有很多需要改进或者改善的,如今微软为了迎合大众需求对Win8进行升…
Linux下编辑器vi/vim的使用介绍
vi编辑器是所有Unix及Linux系统下标准的编辑器。对Unix及Linux系统的任何版本,vi编辑器是完全相同的。 基本上vi可以分为三种状态,分别是命令模式(commandmode)、插入模式(insert mode)和底行模式(last line mode),各模式的功能为࿱…

Clojure程序设计
《Clojure程序设计》基本信息作者: (美)Stuart Halloway Aaron Bedra [作译者介绍]出版社:人民邮电出版社ISBN:9787115308474上架时间:2013-3-1出版日期:2013 年3月开本:16开页码:230版次&#…

重磅!AI Top 30+案例评选正式启动
2019 年,人工智能应用落地的重要性正在逐步得到验证,这是关乎企业生死攸关的一环。科技巨头、AI 独角兽还有起于草莽的创业公司在各领域进行着一场多方角斗。进行平台布局的科技巨头们,正在加快承载企业部署 AI 应用的步伐,曾经无…

直播回顾 | 关于Apollo 5.0控制在环仿真技术的分享
Apollo 用于模型验证和测试的基于 Web 的仿真平台 Dreamland 已经更新到能使用更强大的场景编辑器和环控制模拟。基于 Apollo 流水线和机器学习的动力学模型,复杂度较高,同时基于 AI 的全景数据建模,模型精细度高,误差比传统方式可…

eclipes 安装 pytdev,svn,插件
1, python pydevhttp://pydev.org/updates2, svnhttp://subclipse.tigris.org/update3, 推荐http://subclipse.tigris.org/update_1.10.x 转载于:https://blog.51cto.com/swq499809608/1240873

FFmpeg简介及在vc2010下编译步骤
FFmpeg是一个开源的多媒体库,最新版本是2.4.3,它的License是LGPL或GPL。FFmpeg可以用来记录、转换数字音频、视频,并能将其转换为流的开源计算机程序。它包括了音/视频编码库libavcodec。FFmpeg是在Linux下开发出来的,但它可以在包…

医院六级电子病历建设思路及要点
产生背景 在医院电子病历信息化发展的过程中,先后经历了纸质病历、电子病历、结构化电子病历以及具有全医疗过程管理能力的电子病历四个阶段。临床业务需求质量的逐步提升,标准规范的逐步细化,互联网战略的落地实施,无疑对目前电子…

上手必备!不可错过的TensorFlow、PyTorch和Keras样例资源
作者 | 黄海广来源 | 机器学习初学者(ID: ai-start-com)TensorFlow、Keras和PyTorch是目前深度学习的主要框架,也是入门深度学习必须掌握的三大框架,但是官方文档相对内容较多,初学者往往无从下手。本人从github里搜到…
Linux下gdb调试工具的使用
gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。 gdb主要完成四个方面的功能:(1)、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;(2)、可让被调试的程序在你所指定的调试的断点处停住(断点可以是条件表达式)…

UESTC 1726 整数划分(母函数)
题目链接:http://222.197.181.5/problem.php?pid1726 题意:求n的划分数。一种划分方案中不能有相同的数字。 思路:(1x)(1x^2)(1x^3)……(1x^1000). int f[N];void init() {f[1]1;int a[N]{0};a[0]1; a[1]1;int i,j;for(i2;i<1000;i){for(…

JS nodeType返回类型
JS nodeType返回类型 前几天朋友正好问道 这个 js的nodeType是个什么概念(做浏览器底层的)正好遇到这篇文章可以向大家解释下 将HTML DOM中几个容易常用的属性做下记录: nodeName、nodeValue 以及 nodeType 包含有关于节点的信息。 nodeName …

C# 获取指定目录下所有文件信息、移动目录、拷贝目录
/// <summary>/// 返回指定目录下的所有文件信息/// </summary>/// <param name"strDirectory"></param>/// <returns></returns>public List<FileInfo> GetAllFilesInDirectory(string strDirectory){List<FileInfo&g…

文件夹浏览(SHBrowseForFolder)
from http://www.cnblogs.com/Clingingboy/archive/2011/04/16/2018284.html 一.首先要为SHBrowseForFolder准备一个结构体BROWSEINFO typedef struct _browseinfoW {HWND hwndOwner;PCIDLIST_ABSOLUTE pidlRoot;LPWSTR pszDisplayName; // Return display…

技术新贵:RPA与NLP技术的结合与应用
什么是 RPA(Robotic Process Automation)?机器人流程自动化(RPA)是一种自动化工具,用于创建软件机器人的虚拟劳动力,从而优化和降低企业中端到端业务流程的成本。RPA 可以翻译成机器人流程自动化…
API Sanity Checker在Ubuntu中的使用
API Sanity Checker是一个自动生成单元测试用例的工具,可用于链接测试。它可用于三大桌面平台,下面简单介绍它在Linux下的使用步骤:1. 从http://ispras.linuxbase.org/index.php/API_Sanity_Autotest 下载最新的api-sanity-checker-1.98…

手动脱壳—dump与重建输入表(转)
文章中用到的demo下载地址: http://download.csdn.net/detail/ccnyou/4540254 附件中包含demo以及文章word原稿 用到工具: Ollydbg LordPE ImportREC 这些工具请自行下载准备 Dump原理这里也不多做描述,想要了解google it!常见的dump软件有Lo…

如何用RNN生成莎士比亚风格的句子?(文末赠书)
作者 | 李理,环信人工智能研发中心vp,十多年自然语言处理和人工智能研发经验。主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设计与研发。来源 | 《深度学习理论与实战:基础篇》基本概…

图像相似度计算之哈希值方法OpenCV实现
感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字符串,然后比较不同图像的指纹。结果越接近,就说明图像越相似。 实现步骤: 1. 缩小尺寸:将图像缩小到8*8的尺寸&am…

七夕大礼包:26个AI学习资源送给你!
整理 | Jane出品 | AI科技大本营(ID:rgznai100)免费的在线学习课程一直是大多数人学习 AI 知识和技能的方式之一。今天,基于 Github 上一位小姐姐 Chip Huyen 分享的 10 门机器学习课程,AI科技大本营将这份收藏大礼包进…

HTML Inspector – 帮助你编写高质量的 HTML 代码
HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码。HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工具。 您可能感兴趣的相关文章Metronic – 赞!Bootstrap 响应式后台管理模板…

Git简介以及与SVN的区别
Git是由著名Linux内核(Kernel)开发者Linus Torvalds为了便利维护Linux而开发的。 Git是一个分布式的版本控制系统。作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处…

java集合中某一个元素出现的次数
int count Collections.frequency(list, key); java的内置方法转载于:https://www.cnblogs.com/wysAC666/p/10252676.html

加密解密-DES算法和RSA算法
昨天忽然对加密解密有了兴趣,今天上班查找了一些资料,现在就整理一下吧:) 一.DES算法 这种算法如图所示,这里将描述它的每一个步骤。这个算法进行了16次迭代(圈),把各块明文交织起来…

开始Dojo之路
开始Dojo之路waiting……转载于:https://blog.51cto.com/frabbit2013/1242108