文档库 最新最全的文档下载
当前位置:文档库 › 程序员电子刊2017年第九期

程序员电子刊2017年第九期



Contents
CSDN要闻 3
外刊速递
5
封面报道
微 信微信小程序 小程序
微信小程序技术解读 从 谈微信小程序开发的实用技术与注意事项 《小睡眠》 微信小程序踩坑历险记 《轻课》 使用Vue.js开发小程序: 解析前端框架mpVue 微信开发深度解析之缓存策略 9 14 18 21 25
中国人工智能大会集锦 CCAI 2017集锦
洞悉人工智能新进展
CCAI 2017中国人工智能大会掠影
36
迁移学习是AI的下一个热点, 中国正在这个领域领跑
杨强教授CCAI 2017访谈
43 48 52
周志华: 深度学习很有用, 但过度追捧就有危险了 观点综述: 金融领域能否完全交给人工智能?

人工智能
ACL 2017精选论文
2017.09 主办单位:CSDN 出品人:蒋 涛 孟 岩 顾问:李 航 俞 栋 总编:孟迎霞 主编:卢鸫翔 编辑:何永灿 郭 芮 魏 伟 唐小引 陈秋歌 钱曙光 屠 敏 仲培艺 贾维娣 景 琦 孙浩峰 蒲 鸽 胡永波 特约编辑:徐威龙 杨福川 张国强 杨 爽 责任编辑:屠 敏 美术设计:纪明超 美术编辑:张 虓
57 62 70 74
深度学习中的注意力机制 声纹识别技术助力远程身份认证 微博深度学习平台架构和实践
移动
微信全文搜索优化之路 80
大数据与云计算
Mesos容器引擎的架构设计和实现解析 图数据库在CMDB领域的应用 网易云容器服务基于Kubernetes的实践探索 85 90 98
Tel:010-******** E-mail:editor@https://www.wendangku.net/doc/4316376773.html, 读者服务部 读者信箱:reader@https://www.wendangku.net/doc/4316376773.html, 地址:北京市朝阳区广顺北大街33号院6号楼 福泰中心9层 邮政编码:100102 电话:010-******** 传真:010-******** 出版日期:每月1日
技术
C++17中那些值得关注的特性 103
文章版权归CSDN所有,未经许可不得转载 如发现装订错误或缺页,请寄回读者服务部调换
Chrome扩展开发
定制HTTP请求响应头域 (一)
109 116
CSS模块化演进
欢迎关注CSDN微信公众账号

News 资讯
要闻 Headline
CSDN要闻
2017年7月28日~8月28日
“好吃的”奥利奥Android 8.0火热发布
听说, Oreo(奥利奥)和日全食更配哦——8月21日, 超级日全 食引爆全美狂欢的同时, Google亦正式发布Android 8.0, 并最终 敲定以甜点 “Oreo” 来命名, 其最新的源代码已推送至Android 开源项目 (AOSP) 。该版本的新增特性包括: 后台执行限制、 重要通知、 Dot、 自动填充框架、 画中画模式、 用户界面、 XM字 体资源、 可下载字体、 表情符号兼容性、 为改进电池续航而添 加的运行限制、 Google Play Protect等。 另外, Google还改进了 蓝牙音频,而操作系统优化将提升启动时速, 使App更流畅。 Google官方表示, 正式版Android 8.0将很快推送给Pixel和Nexus 设备, 首批可以升级到 “Oreo” 的设备还包括Pixel、 Pixel XL、 Pixel C、 Nexus 6P、 Nexus 5X以及Nexus Player。 而如果手持上 述设备的用户加入了Android Beta Program并运行着最新的预 览版系统,将会很快收到更新。官方建议开发者参考迁移指 南, 基于Android 8.0进行应用测试。 此外, Google还承诺, 包括 Essential、 General Mobile、 HMD Global Home、 Nokia、 华为、 HTC、 Kyocera、 LG、 摩托罗拉、 三星、 夏普和索尼等硬件制造商 预计在 “今年之内” 升级设备至Android 8.0 Oreo。 Pao于2016年组建了Project Include游说组织, 致力于科技行业多 样性的改善工作。 据悉, Ellen Pao已于2017年1月重归风投旧业。 此文一出, 读者反馈喜恶参半, 有评论称这极有可能给媒体造 成误导, 误以为这戏剧化的一切是女性技术人的普遍经历, 事 实上, 这仅仅是一个广泛的性别歧视议题, 与 “技术” 这个词其 实关联不大。
Ellen Pao效应进行时:女性科技从业者平权之争未完待续
近年来, 科技圈女性从业者平权之争可谓风波不绝, 一度闹得 沸沸扬扬的硅谷性别歧视案再次进入公众视野。 8月21日, 《纽 约杂志》刊载了一篇题为《硅谷性别歧视披露: 吾案虽败,前 路未尽》的文章, 作者正是彼时事件的主人公Ellen Pao (鲍康 如) 。 文章以类似回忆录的形式展开, 从第一人称视角叙述了其 自2005年入行以来, 先后经历的诸多 “不平等”待遇。 2015年, 时任美国社交网站Reddit临时CEO的Ellen Pao起诉老东家凯鹏华 盈 (KPCB) 性别歧视一案引发业内外广泛关注, Ellen Pao几乎 立刻被推至风口浪尖, 大量关于其工作能力的质疑铺天盖地而 来, 其本人更是于同年7月正式向Reddit递出辞呈。 虽然该案件 最终以Ellen Pao败诉告终, 但 “科技行业女性从业者边缘化” 这 一标签也在各大热搜榜单盘踞了一段时日。 此次文章中, Ellen Pao对当年的很多细节做了补充, 小到会议桌前的 “曲奇事件” (零食分享自动忽略女性员工) , 再到那场引发后续私人报复的 情感纠纷、 接踵而至的负面评价、 男性俱乐部, 以及法庭上的被 迫沉默。 她坦言这是一场小群体与大型权利经济体的较量, 过 程中有太多见不得光的手段, 起点即是不公, 败诉也是必然。 面 对 “正确的话题导向+非完美受害人” 的评论, 她直言自己是那 一时期和背景下, 唯一有资源有地位做这件事的人, 有义务将 这幕后种种公之于众。 与此同时, 她还强调此举并非全然的螳 臂当车, 至少成功让更多人开始关注这个话题, 更多女性工作 者愿意为此开启一条关于发言权、 勇气与开放的有科技圈变革 之路, 有媒体甚至称之为 “Pao效应” 。 怀着这一共同理念, Ellen
浏览器市场Mozilla对阵Google
Mozilla旗下的Firefox (火狐浏览器) 素来被视作颇具江湖地位的 元老级浏览器, 曾一度以程序员宠儿的形象活跃于整个浏览器 市场, 所占份额极大。 然难抵时移世易, 纵观如今的市场, 早已 是Chrome一家独大, 而据全球浏览器报告显示, Firefox的市场 份额已缩水至18%。 面对局势转变, Mozilla进来在浏览器领域动 作频繁, 显然有意力挽颓势以重起霸主之位。 据最新消息显示, Mozilla预计将于11月正式推出全新的Firefox 57, 届时浏览器速度 将明显提升, 从而升级用户体验。 此外, Mozilla还属意进军人工 智能行业, 并于8月正式开始新功能Voice Fill (语音填写) 在浏览 器环境下的测试。 而早在此前, Mozilla便曾推出一款名为Firefox Focus的私人浏览器, 现阶段已开放Android及iOS版本, 旨在加 速网页浏览, 并保障用户的隐私安全。 其本质是一个精简版的 Web浏览器, 只有一个单一标签, 特性也极其明晰, 包括去广告 化、 轻量、 极简、 隐私防护等。 其主要功能为默认屏蔽广告跟踪 器、 分析跟踪器和社交跟踪器等网页追踪器, 进而极大提升用 户的浏览体验。
3

News 资讯
要闻 Headline
Essential Phone发售,安卓之父Andy Rubin列六大 购机理由
8月16日, 自发布以来便频频难产的全屏手机Essential Phone终 于迎来上市曙光——安卓之父Andy Rubin在其博文中放出开售 信息, 作为其离开Google后创立的Essential公司推出的首款智能 手机, Essential Phone自概念形成起即备受关注。 早在5月下旬, Essential官方就曾在Twitter上透露5月底将有大事发生, 暗示发 售在即, 然则后续几经经管理层动荡等波折, 原本承诺的30天 内发货屡屡跳票。 如今官方再度松口, 期待值足以相见。 在最新 发布的博文中, Andy Rubin谈及该款手机的必买理由时, 列出了 六条产品理念: 个性化、 极简与大内存、 强兼容性、 优等材质及 锻造工艺、 以科技优化生活品质, 以及长达两年的Android系统 更新及三年的月安全补丁。 但在一切看似顺利的时候, 此次发 售再现小插曲: 截至8月25日, 有用户反馈称此前承诺于7日后正 式发布的Essential Phone迟迟未有动作, 不免怀疑是否再次陷入 “发货诅咒” 的危机。 对此, Essential官方于次日回应发货已经 开始, 并向等待中的用户表达了歉意与感谢。 力确实普遍优于女性工作者, 我们并不是不曾向女性员工提供 工作机会, 但结局往往不是那么令人满意, 甚至会造成公司资 源的过度消耗。 当然, 女性本身也有着更为擅长的工作领域。 ” 相对应的, 也不乏女性工作者, 对 “生理上的差异是导致女性工 程师数量较少的主要因素”这一观点提出反对意见, 认为更多 是竞争环境上的不公平, 大量先入为主的观念让这场战争从起 点开始就是不对等的。
Google员工内部备忘录流出,反多样化言论惹争议
由性别偏见及多样性导致的各类纠纷维权在硅谷可谓屡见不 鲜, 每每是一波未平一波又起。 战火从2017年2月蔓延至6月的 Uber公司性骚扰丑闻, 最后以CEO Travis Kalanick的被迫下台而 告终, 而今硝烟尚未散尽, Google亦被卷入一场新的性别歧视纷 争之中。 据彭博社8月8日讯, Alphabet旗下的Google开除了工程 师James Damore, 事件源头则是一份由其撰写的长达十页的内 部备忘录。 他在这篇题为《Google’ s Ideological Echo Chamber (谷歌意识形态回声室) 》的备忘录中, 严词抨击了Google追求 性别平等的多样化政策, 强调由于生理差异, 女性科技从业者 无论在科研层面还是领导层面, 都难逃先天劣势, 应当停止泛 化的员工多样性。 同时他还指出, 公司内部对于这类 “保守性别 观” 持有者并不友好, 主张Google给予少数派足够的发言权。 该 内容一经流出, 当即在Google内外疯传, 巨大的信息量引发了爆 炸反应。 事实上, Google此前不久正因薪水分配及员工比例失衡 等问题, 遭到美国劳工部有关性别歧视的指控, 如今恰逢收尾 夹击, CEO Sundar Pichai也不得不提前结束休假以商讨对策, 称 Damore此举违背公司行为准则, 已逾底线。 随着事件不断发酵 升级, Google新任多样性副总裁Danielle Brown在全体员工声明 中, 在谴责Damore言论之余, 亦强调了公司对于多样化及包容 性政策的支持与坚守。 虽然Google方已对此事做出裁决, 但网络 热议似乎并未因此降温, 甚至呈现出尤为严重的两极分化。 有 评论指出, Danielle Brown就任初曾表示对任何不同声音的绝对 包容, 此番决断则显得自相矛盾。 对此, 有评论驳斥称, 言论多 元化是在不触及底线的原则上建立的, 而备忘录中的内容显然 有失理性。 而在对公司判决的质疑之外, 更多的是对此次观点 本身的质询。 某公司女性高管在博文中表达了其对于多样化管 理方式的否定, “多次实践证明, 男性员工在科技领域的综合能
Swift和LLVM之父Chris Lattner宣布加入Google
北京时间8月14日,Swift语言及LLVM之父Chris Lattner透过 Twitter宣布, 将于8月21日加入Google Brain, 从事人工智能相关 工作, 同时还透露了自己对新工作超高的期待值, 以及全面普 及AI的目标规划。 Google Brain原本仅是Google X的一项研究项 目, 后独立为Alphabet旗下一个专攻深度学习和人工智能的部 门, 旨在将AI技术引入各大产品, 以应对各类研究及产品集成 的问题, 同时与包括DeepMind在内的各Alphabet下属部门通力 合作, 且其终极目标是通过开源项目、 学术合作等手段将人工 智能广泛推广到公司之外的领域。 实际上, 自6月20日Lattner选 择结束自己仅维持了六个月的特斯拉工作生涯, 其下一步选择 便一直成谜, 其间也曾引发颇多猜测, 此番尘埃落定, 仍有评论 对其此前的特斯拉离职事件缘由存疑, 认为他多方转战很有可 能只是单纯寻求新的刺激和挑战, 其加入对Google人工智能团 队的价值还有待进一步考量。 据悉, Lattner此番入职将会接手 Google为简化AI编程而开发的Tensorflow。 对此, 有评论表示如 有Lattner在编程语言方面的专业加持, 则有望助力Tensor?ow成 长为对开发者更友好的平台, 不失为一大良机。
责任编辑:仲培艺(zhongpy@https://www.wendangku.net/doc/4316376773.html,)
4

News 资讯
Abroad Media 外刊速递
Communications of the ACM
证实。甚至使用所谓的“安全”语言, 比 如Java来编写程序都不能保证它们绝对 正确, 仅是较少出现毁灭性故障。 安全很重要,但正确性对于系统的关键 基础部分尤为重要。因此需要保证程序 既正确又安全,需要证明其行为满足某 些规范。你应该严谨地写下输入所对应 的正确输出,并且找到方法来保证任何 可能的输入都可以得到满意的结果,尤 其是在一些特殊情况下。
2017.08
新证明都表明,包括数学届和工业界都 需要这种新计算技术。 从人工智能到组合数学,都有证明方法 是通过搜索大的搜索空间来确定某个对 象存在与否。 由于组合学爆炸, 这些问题 往往都很难,传统方法基本上都被认为 是不可行的。而至少隐含能探索所有可 能性的暴力计算方法成为了系统地搜索 这些搜索空间的一般方法。 长期以来,暴力计算一直被认为只适用 于简单的问题。 不过在过去二十年来, 由 于“SAT” (Satisfiability)解决方案的进 步, 这方面已经发生了变化。 通过增加暴 力因素来将暴力计算变成一种强有力的 方法,从而实现轻松自动和系统地处理 许多问题。许多具有比宇宙中的基本粒 子数目更多可能性的搜索空间如今已可 能被完全探索。 SAT方法可以推断一个命题逻辑中的公 式是否具有解决方案,其暴力推理行为 采取的是盲目和不知情的方式。一个 SAT问题使用一个或多个受语句约束的 布尔变量(它们可以分配给 true或false 值),如果最终被分配给true(真值), 那么相应的语句即为真; 一个SAT公式由 一组语句组成,当一个SAT 公式的所有 布尔变量都能满足相应的语句,则代表 找到了一个SAT解决方案。 解决SAT公式的程序, 被称为SAT解决器
防黑客式编程
在用于治疗舌癌和食道癌的放射治疗 系统中,任何一个软件错误都会是致命 的。因此,医学工程师和计算机科学家 通力合作以保证系统不会出任何差错, 这种过程称为“软件验证” 。 医疗系统软 件验证的挑战之处在于关键系统通常是 由多种语言编写而成,因此需要运用不 同的技术来验证整个系统;系统也往往 由十几个部分组成, 每部分都有不同的 临界值,软件验证需要使用强大的验证 方法,包括使用自动理论验证工具及人 工手动验证方法。 一般来说,计算机代码编写没有特别统 一的正式流程,测试的主要标准就是看 代码是否可以正常运作。测试过程中并 不一定要保证所有在运行时可能涉及的 基础功能都被覆盖,也不需要保证代码 能防止恶意攻击。形式化软件验证依赖 于数学理论推导,使用演绎方法来检测 一个系统最危险的部分。 形式化软件验证使用的方法并不依赖于 运行程序。而是通过分析程序源代码, 对所有可能的输入导致的行为结果进行
DeepSpec项目研究组的任务就是检测应 用软件和硬件的功能正确性。为了完成 这项任务,DeepSpec建立了一系列工具 用于验证程序是否满足深度规范(deep specification)——根据严谨的逻辑和数 学知识,非常准确地描述软件行为—— 并且软件组件如操作系统内核也要被验 证能够满足深度规范。 建议者认为该技术可以使防黑客式软件 成为可能。黑客往往通过寻找安全弱点 来对机器和网络进行攻击,比如缓冲区 溢出的弱点。近年来,部分行业如汽车 行业已经意识到汽车是如何被黑客入 侵的,他们正在急于寻求安全研究人员 和验证研究人员的解决方案。在未来十 年,将会有更多的行业使用软件验证, 还有更多消费者可以购买的软件将会被 验证。
暴力计算的科学
自动推理和超级计算的最新进展引发了 暴力计算的新纪元。技术的颠覆者名为 (Satisfiability) ,这是工业届和 “SAT” 学术界中应用的一种新的破坏性、暴力 推理技术。一系列超出人类理解能力的
(SAT solver) ,在过去二十年中变得非 常强大,其进步是跨越式的。从戴维斯 和普特南的开创性工作开始,20世纪90 年代初,SAT 解决器可以处理具有数千 条语句的公式;今天的SAT 解决器已经 可以处理数百万条语句的公式。这种性 能提升导致SAT革命: 将许多有趣的问题 5

News 资讯
Abroad Media 外刊速递
编码为SAT公式, 解决这些公式, 并解码 解决方案从而获得原始问题的答案。 最近在暴力推理方面取得的成功,显示 出这种方法在处理长期未能解决的数 学问题方面的潜力。此外,这些问题的 证明也可以完全自动生成和验证。这些 证明可能很大,但是可以认为,对于某 些数学问题,可能并不存在紧凑的优雅 证明。这些证明的大小不会影响正确性 的水平,这些体积巨大的证明反而可能 会揭示出有关数学问题背后更多的有趣 信息。 总而言之,人类绝对有可能通过使用 SAT 方法获得全新的洞察力,将理解能 力带到一个新的水平。
年关于通用图灵机的数学思想直接过渡 到1945年诞生的存储程序计算机物理机 器 (甚至是机器的设计)的想法。而应当 通过探索图灵在剑桥和普林斯顿的各种 数学领域的战前参与细节,以及两台计 算机的实际建设过程,来认识到认为20 世纪40年代后期所建造的存储程序电子 计算机是图灵1936年所定义的通用图灵 机的物理实现,纯粹是一种事后主观臆 断,而且完全抹灭了图灵二战前在计算 机领域的其他开创性工作。 1936年定义的通用图灵机是一个包括了 20世纪40年代后期的存储程序电子计算 机的代表性数学模型。图灵所探讨的通 用图灵机纯粹是一个数学结构,并没有 被构想为构建物理计算器的蓝图。存储 程序计算机只是构建通用图灵机实际 实现的其中一种方法。另一方面,即使 提及存储程序电子计算机与通用图灵 机之间的联系,应当参考的是图灵后来 重新提出的通用图灵机想法的新版本, 而不是原始的1936年版本。实际上,冯 ?诺依曼和图灵本人都未曾在他们各自 为EDVAC和ACE所提出的技术建议中提 到这一联系。而且图灵在两台计算机的 实际建设中都有参与其中,在这两种情 况下,他自己都没有用到通用图灵机的 想法,甚至通用图灵机没有被提及或暗 示。图灵也没有提到建立真正的计算机 的正确方法应符合通用图灵机的要求。 不容忽视的历史事实是,在图灵1936年 发表他那篇重要的论文《论可计算数及 其在判定问题上的应用》与他1939年被 英国皇家海军招聘从事对德国机密军事 密码的破译工作之间,图灵参与了两种 不同物理计算器的设计和构建。在这些 工作当中,他也没有选择让这两种计算 器进一步向通用图灵机这样的方向走。 相反,他进入完全不同的设计模拟计算 机的方向。证据表明,在当时,图灵认
为模拟方法对于手头的任务是最为适 用的。 事实上,后来数字计算机的巨大成功非 常负面地影响了模拟计算机的发展,以 致后者几乎完全停止发展。在二战前的 许多情况下,模拟计算机不仅是一个自 然的选择,而且即使在二战后数字计算 出现之后也没有立即流离失所。一个最 显着的例子就是利物浦潮汐预测机,直 到二十世纪六十年代才被电子计算机所 取代。 图灵在1939年9月离开剑桥,在布莱奇利 公园为英国皇家海军从事对德国机密军 事密码的破译工作,并在随后的几年里 都将他所有的智力都投入到与战争相关 的项目。这几年的里,他对电子阀门和 各种机器非常的熟悉。他在1945年以后 的活动,当然包括他参与的所有电子计 算机的研发工作,都受到他在布莱奇利 多年的深刻影响。 从图灵的这些经历可以得出结论,由于 其本质,图灵的神话不能成为标准的图 灵机。通用图灵机是处理可判定性问题 (Entsheidungsproblem)非常成功的具 体选择,但这并不意味着它为适用于所 有数学任务的物理通用机器提供一个 模型。如果我们可能以某种方式将这些 数学模型看作建议设计物理设备的蓝 图,那么依据图灵的博士学位论文,模 拟计算机将比通用图灵机更加接近这一 设想。
图灵的战前模拟计算机:对 现代计算机之父的历史回顾
艾伦?图灵(Alan Mathison Turing)经 常被誉为现代电子计算机兴起历史进程 中最重要的人物。图灵1936年所发表论 文中提出的“通用图灵机” ( Universal Turing Machine,UTM)与在20世纪40 年代中期设计和实施的世界第一代存 储程序计算机之间的联系一直被学界 所关注,特别是关于约翰?冯?诺依曼为 EDVAC和图灵自己为ACE各自提出的建 议。一些历史研究将冯?诺依曼和图灵各 自的建议(以及基于他们建议所构造的 机器)信誓旦旦地描述为图灵1936年定 义的通用图灵机的直接实现,甚至谬传 图灵的论文早期影响冯?诺依曼的轶事。 然而最近的研究认为并没有直接的证据 可以证明这一点。 关于图灵在现代电子计算机历史上的实 际作用,特别是通用图灵机与存储程序 计算机之间的假定联系,新近的研究者 认为,为了实现一个完整和平衡的历史 画面,人们必须明确地放弃从图灵1936
6

News 资讯
Abroad Media 外刊速递
IEEE Spectrum
会用到的, 与输入无关的所有硬件” , 项 目负责人Kumar解释道, “所剩下的结构 是一个联合或者超集, 包含了数据会经过 的所有可能路径” 。 最终得到的芯片平均 比原来的小了百分之六十二并且能量耗 费也减少了百分之五十。 这个方法也适用 于两个或多个应用程序, 它甚至可以处理 一个操作系统外加一个应用程序。 而ARM芯片公司在英国剑桥的研究工程 师则认为, 设计一个特定于应用程序的处 理器可能是一个更简单的过程。 他们一直 在一个名为Plastic ARM的项目上进行努
2017.08
(pariah),汽车的主人将做出令人厌 恶的行为。这些问题有可能会在自主驾 驶汽车真正投入市场的数月或几年后出 现。在此之前,工程师需要提前做大量 的工作来使这些汽车更加安全,更加可 用,更加简单,并且让监管者相信这些 自动驾驶汽车可以上路。这些目标将需 要更长的时间去实现。 我坚信我们最终将得到功能全面且安全 的自主驾驶汽车,但是我所关注的是在 多次的试验中我们将会遇到许多意料之 外的结果,这将延迟自主驾驶汽车真正 投入使用的时间。作为一个机器人研究 者和企业家,作者已经让他的公司去想 象并且可视化在特定的环境和情况下, 自主驾驶将如何工作。那么结论是什么 呢?引用贝蒂戴维斯在《彗星美人》电 影中的一句话, 那就是: “系好你的安全 带, 这将是一辆颠簸的车。 ” 在一个缺乏月光的夜晚,如果走在一条
定制处理器:获得便宜芯片 的新途径
对于大部分的应用来说,通用处理器都 是过度设计。这是一个众所周知的事 实:为了具有可编程性和灵活性,处理 器上的元件比任何一个应用程序所需要 使用的都要更多。尤其是对于驱动最新 的嵌入式计算平台(如可穿戴式和物联 网传感器)的超低功耗微控制器而言, 更是如此。这些平台都通常运行一个非 常简单的应用,甚至无需操作系统,这 就意味着一个芯片的大部分电路将根本 不会处理一个字节的数据。 来自美国明尼苏达大学的一组团队决定 在这些没有数据的电路上做些事情。 他们 的解决方法是先观察通用微控制器的设 计, 然后想出了一个能够快速识别永远不 会被应用所使用到的单个逻辑门的方法。 他们把这些多余的逻辑门去除掉。 得到的 处理器就是他们所说的“定制处理器” 。 它们比起原来的微控制器结构更小更简 单, 完全为应用的需要而设计。 该团队在 多伦多举行的第44届国际计算机架构研 讨会上详细地解说了这一定制处理器项 目。 “我们的方法是找出应用程序一定不
力, 该项目是使用电路印刷设备在塑料上 构建成本只要一分钱的一次性微控制器。 他们也正在与明尼苏达大学的团队合作, 看看他们是否实现相同或更好的结果。 降低设计成本以及制造成本,如果可以 自动生成定制的处理器版本,那么这将 是一个巨大的好处。
自主驾驶最大的问题是人
在1969年为新兴的ARPANET建立路由器 的工程师怎么也不会想到网络技术会推 翻新闻业。也没有任何一个人会想到移 动电话的出现会使得人们在同一张桌子 前吃饭时忽略彼此。早期邮件的使用者 不知道何为垃圾邮件。亨利?福特也从未 预见到现在的交通拥堵。技术总会带来 意想不到的结果。有的时候这些结果所 带来的问题会是巨大的,因此尝试提前 指出这些问题非常有价值。 如今被议论最多的新技术就是自主驾 驶汽车。随着自主驾驶汽车的广泛使 用,是否会带来意想不到的结果?我打 赌必定有!我可以想到两个可能的结 果:自主驾驶汽车可能会被视为奴隶
乡间小道上,当听见有一辆车正在靠近 的时候, 你将离开道路, 如果必要的话, 会藏进灌木丛,直到汽车驶过。会这样 做是因为不知道这辆车的司机是否能够 看见行人。在这样的情况下,会把路权 交给汽车。 但是在白天, 在城市地区, 你 敢在停车标志线上走在来车的跟前。或 者, 可能会在路边徘徊一会儿, 同时示意 即将要过马路。 通过试探性地踏入人行横道线, 并且查看 正开来的汽车是否减速或者驾驶员是否 看到了他们这些行人。 行人和驾驶员以这 种方式来进行简单的社会互动, 如果缺少 这样的互动, 就说明驾驶员没有注意到这 些行人。 而对于自主驾驶汽车, 这将有一 些细微的差别。 如果自动驾驶汽车无法处 理这种情况, 那将会怎样?简短的回答自 7

News 资讯
Abroad Media 外刊速递
然是, 它们无法像人类驾驶员那样顺利地 适应行人的行为以作出该有的避让。 如果一辆半自动汽车没有按照不成文的 规则行驶,旁观者可能会责怪使用这辆 车的人。但如果汽车完全自主,旁观者 只会责怪车。另一方面,不具备社会互 动能力的自主汽车的所有者会借此机会 反抗社会。例如,当自主汽车的主人需 要前往邮局寄送一个沉重的包裹,而邮
局门口又没有停车位时,其主人或许并 不会选择耐心等待停车位,而是会选择 在邮局门口下车去寄包裹,而让自主汽 车在周边绕行直到从邮局门口重新接回 主人。这是反社会行为的根源:方便我 自己与令其他人不便之间的对抗。 这就是现今我们所到达的阶段。人们高 估了自主驾驶汽车到来的速度,只看到 了技术的可能性,却没有看到自主驾驶
汽车侵入人类活动空间后所带来的消 极作用,无论它们太过粗鲁或者过于惯 于顺从。当然这种新型的驾驶方式终将 会到来。它将会慢慢渗入人类社会,最 终减少手动驾驶。自主驾驶汽车广泛 使用的那天是必然会到来,只不过不会 很快。
Wired
接任何网页。手机最终无法连接无线网 路,或者信号很快就没有了,这都是因 为你所选择的热点,就像大部分城市的 热点一样,总是因为需求过大而无法连 接。紧接着,你会不停地尝试建立安全 连接,5分钟,10分钟……最终可能连接 上了。 古巴的无线网络总是很慢并且很糟糕。 早些年,在美国硅谷,像 Facebook 和 Twitter这样的公司,通常把古巴看作技 术盲区。这里是一个时间胶囊, “让世界 变得更开放更易连接”的理想还未传递 查看邮件或者浏览网页。
2017.08
因此,古巴人独创地发明了“线下互联 网” ,这个系统名叫el paquete semanal (意为“每周包裹”)。这个包裹是装满 了数字化内容的移动硬盘,都是互联网 的最新内容。凡是订阅了这项服务的家 庭, 每周都会收到一个TB级的移动硬盘, 这个硬盘中包含了来自外界的视频、音 乐、 照片, 以及文本文件等最新的网络内 容。 然后通过口耳相传, 拷贝传播。 此外,古巴人还发明了自己的无线互联 网SNET。 SNET最早起源于“星际争霸” 或“反恐精英”的玩家为了不必将台式 机搬到对方家里去联机游戏,而用自制 天线互相连接的无线游戏网络。他们最 终创造出了一个遍布首都哈瓦那周边城 市的无线网络,通过以太网电缆和无线 热点组成。虽然这个网络与外部世界的 互联网完全隔离, 古巴人使用SNET来浏 览Facebook、Twitter和Reddit的复制品, 还可以分享el paquete包裹带来的流媒体 娱乐和分享内容。 el paquete和SNET依然蓬勃发展,也许 有一天他们甚至会胜出。 编译 / 罗景文
古巴地下互联网
假设你坐在哈瓦那一片壮观且美丽的废 墟之中, 周围尽是残破的石雕和斑驳的铁 艺。 但是你忽略这一切, 只是滑动手机屏 幕浏览着Facebook, 就像一个咖啡因上瘾 者一样。 然后你持续滚动浏览15分钟前同 样的内容, 期待着它可能已经刷新以给你 的大脑提供更多的多巴胺刺激。 然而, 它 并没有刷新, 也将永不可能刷新。 如果想在古巴连接上无线网络,那简 直比中彩 票 还难。如 果 幸运 的 话,你 或许会进入 ETECSA 的密码输入界面 ( ETECSA 是古巴垄断的电信公司)。 当你输入完密码后,有可能依旧无法连 8
到古巴。潜在的假定在于,无论是用于 古巴商业的Facebook网页是还是用于德 克萨斯州的Airbnb短租平台,互联网的 降临应该近乎瞬时地将这个孤立的前苏 维埃社会转变为与世界连接的一部分。 这看上去也就是时间问题。然而不同于 那些开始于上世纪90年代的一些传言的 实验,网络的严格限制一直持续到2015 年, 直到ETECSA公司的无线网络热点突 然散布在其首都的城区。当你走在古老 的哈瓦那街道上,会发现有一群拿着智 能手机闲荡的人,他们或站着或坐着, 在一个公园里尝试连接ETECSA 无线网 络。这就是古巴的互联网,除了少数专 业人员被允许,没有人可以在家合法地

Cover Story 封面报道
微信小程序
微信小程序技术解读
文 / 陈兴艺
自今年初微信正式发布小程序,已有大半年时 间。这期间,行业对微信小程序的关注经历了三 个阶段。

进行探索。
小程序原理简介
摘自微信文档: “小程序开发框架的目标是通过 尽可能简单、高效的方式让开发者可以在微信中 开发具有原生App体验的服务。 ” 在微信内部, 小程序技术框架的代号是MINA(据 说其全称是“MINA IS NOT APP” ) 。 从开发者的 角度看, 该框架包含两部分, 见图1所示。

第一个阶段是刚发布时的火热,大家都盼望
这是“又一个公众号”,尝试从各个不同角度解 读、预测小程序的价值所在,担心像几年前公众 号刚上线时那样再次作出“误判”、错过“流量 红利” 。

第二个阶段是发布一两个星期后的失望和舆论
冷却,大家对小程序的新鲜劲儿过了以后,发现 跟想象中的流量红利很不一样,反而是有着这样 那样的限制和不足。

视图层:接收逻辑层传过来的数据并渲染页
面;当用户与页面产生交互时,视图层将事件发 送给逻辑层。

第三个阶段是从三月底开始,随着微信持续不
断地改善小程序体验和开放新能力, 以及一些小 程序初食螃蟹者传回的正面消息,对小程序的讨 论逐渐回暖,大家开始更理性、更现实地思考微 信小程序的商业、 产品和技术价值。 本文并不会过多地在商业层面对小程序进行分 析,而是主要从技术开发层面对其进行解读。文 章分为四部分,涵盖对小程序技术原理的介绍、 对小程序开发全流程的介绍、开发过程中的常见 问题,以及对小程序第三方平台的简介。微信小 程序开发是个很大的话题,一方面因为小程序技 术框架本身值得讲的内容非常多,另一方面因为 小程序所依附的微信生态有其复杂性。本文将对 小程序开发的一些细节内容点到为止,留给读者 自己通过官方文档、社区讨论、亲身开发等途径
逻辑层:处理数据并发送给视图层,触发视
图层页面渲染;接收并处理视图层发来的用户 事件。 小程序的视图层可以简单地理解成Web开发中的 HTML和CSS, 而逻辑层则可理解成Web开发中的 JavaScript。事实上, 由于小程序框架在开发语言 层面与Web开发高度接近,如果你已经有一定的 Web开发经验, 学习小程序开发将会十分轻松。
视图层(View)
小 程 序 框 架 在 视图层 提 供了自己的 描 述 语 言 W X M L 和 W X S S ,并 提 供 了 一 系 列 基 础 组 件 (Component) 供我们快速构建视图。
9

Cover Story 封面报道
微信小程序
分特殊的Component(比如视频和地图组件)会 被转换成Native组件,这些Native组件会覆盖在 WebView的对应位置之上,在用户角度看来,这 些Native组件与WebView上的HTML组件在视觉 上是融为一体的。
逻辑层(AppService)
逻辑层,顾名思义,是控制小程序业务逻辑的地 方。我们通过处理两个方向的数据流动来实现对 业务逻辑的控制:在逻辑层处理数据并发送到视 图层,触发视图层页面渲染;在视图层获取用户 事件并发送给逻辑层,触发逻辑层的对应业务 代码。 在逻辑层,我们主要通过小程序框架提供的这两
图1 小程序开发框架示意图
个能力来实现业务控制。

WXML(WeiXin Markup Language)是框架提供 的标签语言,在其中我们只能使用小程序框架所 提供的Component。我们通过WXML能做到的最 重要的两个事情是: 通过类似Mustache的双括号 语法实现单向数据绑定(逻辑层→视图层), 比如 通过在标签上绑定事件 {{msg}}; 处理函数实现事件反馈 (视图层→逻辑层) , 比如 ……。 WXSS(WeiXin Style Sheets)是框架提供的样式 并且基于小程序特 语言, 支持大部分的CSS特性, 点进行了一些扩展。其中一个很重要的扩展是引 rpx类似CSS中的em单位, 入了rpx这个尺寸单位, 能为我们进行自适应设计带来很大方便。 小程序框架为我们提供了一系列基础组件,这 些 基 础 组 件 通 常 都自带了一 些 与 微 信 风 格吻 合的基础样式,我们能通过组合这些基础组件 进行快速开发。目前我们只能使用微信提供的 Component, 还不支持自定义组件。 微信小程序的视图层使用WebView 进行实际渲 染。我们所写的WXML里的Component最终会被 转换为普通的HTML标签显示在WebView中,而 为那 WXSS经过转换后也会变成普通的CSS代码, 所以, 虽然感觉上小程序 些HTML标签赋予样式。 但其实我们看到的只是个网页。 部 是个原生App,
注册事件处理函数:小程序里面主要存在两类
事件,生命周期事件和视图层用户事件。前者由 小程序框架负责触发,后者则是由视图层在用户 与页面进行交互时触发。我们通过在所需的事件 节点安插合适的业务代码,便能实现对小程序的 完全控制。

丰富的 API :微信小程序之所以受到跟其它
Web/Hybrid 框架不一样的关注,很重要的一点 就是因为其运行在微信之内,能调用微信提供的 丰富的API。这些API主要分两类,一类是系统功 能, 比如网络请求、数据存储、位置获取等; 另一 类是微信特有功能,比如获取微信用户信息、打 开摄像头扫描二维码、发起微信支付、获取微信 群信息等。 我们 我们在逻辑层使用的开发语言是JavaScript。 放 写的所有JavaScript代码最终会被打包为一份, ,在一个独 入一个JavaScript运行环境(JSCore) 立的线程里运行。 这份JavaScript代码会在小程序 启动的时候开始运行,一直到小程序退出时才会 因此我 停止,类似Web开发里的ServiceWorker, 们也把小程序逻辑层称为AppService。
系统层
在视图层和逻辑层之外,小程序框架其实还有一 个系统层。对开发者来说,平常开发小程序时不
10

Cover Story 封面报道
微信小程序
图2
小程序IDE
会直接接触到系统层,但实际上系统层在整个小 程序框架中是一个关键的组成部分。 小程序的视图层和逻辑层分别运行在两个独立的 线程里, 当两层之间需要发生数据流动时,数据 都是先从出发层流动到系统层,在系统层经过一 定处理以后再转发给目标层。另外,系统层也负 责提供逻辑层用到的各种原生API。如果你有过 Android或iOS的WebView开发经验的话,小程序 系统层的概念就类似WebView里的JSBridge。
代码。无论代码改动来自自带编辑器还是第三方 编辑器,小程序IDE都会自动监听到代码文件改 动并触发页面刷新。 小程序的调试预览, 与Web/Hybrid开发有相同点 也有不同点。相同点在于两者的开发语言都很接 近,编译运行的过程也很类似;不同点在于微信 小程序的“微信”二字,小程序需要调用一些微 信原生功能。在开发小程序的过程中,我们大部 该调 分时间都可以使用IDE自带的网页调试窗口, 试窗口通过类似小程序真实运行环境的JSCore和 Chrome WebView实现,我们在其中看到的运行 效果会跟真机运行效果很接近(当然我们还是需 要真机测试确保一致) 。在调试一些特殊功能时 (比如支付、分享) ,我们需要通过IDE生成开发 版二维码, 用微信扫码打开进行真机调试。
小程序开发简介
开发流程
开发小程序,必须下载并安装微信官方提供的 “开发者工具”。这是微信提供的IDE(见图2) , 其地位就如 AndroidStudio 之于 Android 开发、 Xcode之于iOS开发,通过该IDE我们能完成代码 编辑、 调试预览、 代码上传等工作。 小程序IDE自带简单的代码编辑器,提供了语法 高亮、 自动补全等功能,能满足一般的代码编辑 需求。对一些开发者来说自带编辑器可能略显简 陋,可以选择使用自己喜爱的其它编辑器来编写
小程序发布
当我们的小程序开发到一定阶段,决定对外发布 时, 需要通过IDE将代码上传微信服务器, 然后去 微信管理后台进行后续的发布操作。发布时我们 可以选择两种模式,一种是发布体验版,该版本 只能被指定的体验用户打开,通常用于正式上线
11

Cover Story 封面报道
微信小程序
前的测试;另一种是发布正式版,即最终给普通 用户使用的版本。发布正式版需要将小程序提交 给微信审核,审核通常需要1到3天(微信官方说 法是7天内完成审核) , 审核通过以后小程序将对 普通用户可见。后续升级新版本时也需要走同样 的审核发布流程。
它网络请求库。微信对我们的网络请求有这几个 限制:

域名限制:所请求的域名必须先在微信管理后
台进行设置,且要求已进行备案,不允许使用IP 和指定端口 (开发时除外) 。

HTTPS 要求:所有网络请求都必须是 HTTPS
一些常见问题
用户信息获取
在 微 信 小 程 序 里 面,用户 信 息 获 取 分 为 两 个 环节:login 和getUserInfo。login能让我们得到 用户的 OpenID(一个微信用户的唯一 ID),而 getUserInfo能让我们进一步得到该用户的个人信 息, 比如昵称、 头像。 当我们设计小程序的登录流程时,应该特别注意 一个关键点:login是静默的,而getUserInfo会弹 出一个确认框要求用户授权。与一般移动App社 交登录的做法不同,在微信小程序里面,我们通 常只需要做 login 这一步,只要通过login 获取到 用户的OpenID,我们就能建立自身业务的用户体 系了。只有当我们的业务真正需要用到用户的昵 称、头像等信息时,才应该去做getUserInfo这一 步。用户信息属于个人隐私,所以微信不会直接 交给我们,而是弹出授权确认框让用户做决定; 而弹框有时候会影响用户体验,甚至对用户造成 骚扰。微信小程序在框架层面这样设计,一方面 是为了引导开发者做出真正考虑用户体验的产品 设计,另一方面也与其“用完即走”的产品理念 相吻合。 另外值得一提的是,小程序的运行环境跟浏览器 不一样,没有Cookie机制,所以我们在验证用户 身份后给用户赋予的Token标识无法像Web一样 放到Cookie里,而应该另外找地方存放,比如放 到HTTP Header或作为一个HTTP请求参数。
协议。

并发限制: 同时进行的网络请求最多10个。
页面路由
小程序的页面路由机制与常见的Web单页应用类 似,我们可以通过微信提供的JS API进行页面切 换,新打开的页面会堆砌在当前页面之上,形成 页面栈。需要注意是,微信为了控制小程序复杂 度,限制页面栈中最多存在 5 个页面,一旦达到 该限制,我们将无法打开新的页面,除非关闭一 些已有页面。这个限制要求我们在设计产品的时 候要注意两点。第一是用户流程设计应该尽量简 洁,避免一些没必要的页面步骤;第二是对一些 关键的业务点,要考虑“万一当前页面栈已经满 了”这种情况。 比如说, 在一个电商小程序里, 订 单支付页如果已经是第5个页面的话,用户将无 法跳到新页面去选择地址,此时我们需要做一些 特殊处理, 比如将地址选择页面变为一个页内浮 层, 或者是进入订单支付页时关闭前一个页面。
跨平台兼容
在IDE调试窗口、 iOS微信、Android微信三个环境 里, 小程序的JS API和WXSS的表现都比较一致, 通常我们无需太过关注兼容性问题,而是将主要 精力集中在产品业务逻辑上。但偶尔也会遇到一 些表现不一致的情况, 比如某些JS API在Android 和iOS上的返回参数不一致、 某些UI组件在不同平 正式 台上有不同的padding。我们在开发过程中, 上线前都应该时不时进行不同平台的真机测试, 确保表现一致。
网络请求
虽然我们在小程序里面写的是JavaScript,但和 Web开发不同的是,微信只允许我们使用其提供 的 wx.request()方法进行网络请求,不能使用其
小程序码
为了让小程序形成更好的产品辨识度和视觉冲击 力,微信小程序的主要入口不是普通的二维码,
12

Cover Story 封面报道
微信小程序
而是通过微信自有算法生成的“小程序码”。小 程序码与二维码在编码算法层面类似,但在产品 层面有很大不同。二维码是行业通用格式,任何 App只要实现二维码算法就可以进行解析;小程 序码使用微信自有算法, 只能通过微信提供的API 进行生成, 也只能通过微信App进行扫码读取。
工干预。 在这个过程中, 客户没有泄漏账号密码, 也不需要了解不必要的技术知识;我们没有泄漏 代码,而且整个流程都是自动化的,客户扩展的 边际成本非常低。 搭建一个小程序第三方平台,在普通小程序开发 技术的基础上, 我们还需要考虑这两个环节。

官方文档
我们评价一个新技术的时候,很重要的一个标准 就是其文档质量, 因为通过观察其文档我们能判 断出其技术特点、学习难度,以及其维护者对该 技术的投入程度。在这方面微信小程序文档做得 很不错,对学习者非常友好。小程序在年初刚发 布的时候存在不少问题,但我们能看到微信技术 添加 团队保持持续不断的迭代优化, 在修复Bug、 新功能的同时, 文档也在不停地保持更新同步。
客户授权:接收客户授权请求,并从微信服务
器获取授权凭证。

代客户实现业务:获取到客户的授权凭证以
后,我们便能拿着这个凭证为客户进行业务操作 了, 比如自动发布小程序、 发送客服消息。 相比普通小程序开发,第三方平台开发有一定复 杂性。难点一方面在于开发并运行一个平台所涉 及的技术难度,另一方面在于代客户进行小程序 操作所涉及的业务难度。
小程序第三方平台
在微信小程序技术生态里,第三方平台是一个重 要但大部分开发者不一定会经常遇到的话题。简 单地说,通过第三方平台,客户能将自己的小程 序账号一键授权给第三方,然后第三方就能为客 户提供对应的小程序技术服务。换个说法,第三 方平台其实就是微信生态里的SaaS模式。 举个例子,假设我们做了一个卖东西的电商小程 序,现在我们想将这个小程序卖给好几个客户。 如果用传统的外包模式,我们可能会分别索取这 几个客户的小程序后台账号密码,然后为他们上 传并发布代码;或者我们可能会直接将小程序代 码交给客户,教客户怎样去上传和发布。这里面 有几个问题: 客户不一定 (也不应该)愿意给出账 号密码;我们给客户讲解小程序发布流程会耗费 大量精力;我们不愿意公开产品的技术代码;对 每个客户我们都需要人工操作,客户越多则人工 工作量越大, 业务容易遇到瓶颈。 而如果通过第三方平台来实现,上面的几个问 题都能得到解决。客户来到我们的电商第三方平 台,一键将自己的小程序账号授权给我们,然后 就什么都不用关心了。我们得到客户的授权,通 无需人 过微信API自动为客户将小程序发布出去,
结语
小程序发布至今虽然还不到一年时间,但其目前 的用户体验、开发者体验都已经达到比较优秀的 水平,而且微信团队对小程序长期保持着积极推 进的态度,我们可以预见小程序生态在未来会越 来越蓬勃。无论是从商业角度考量,还是从技术 角度来看,小程序都值得大家去了解、学习和尝 试。
感谢“造程序” (微信ID: zaochengxucom)对内容 的建议和审校。
陈兴艺
广州帅为网络联合创始人&CTO。曾任职 多盟移动广告,深度参与多盟一键推广工 具、积分墙广告平台等项目;在帅为主导了 apphao123小程序商店、“拼一点商城”小 程序SaaS平台等项目的研发。科幻、滑雪爱 好者。
13

Cover Story 封面报道
微信小程序
从 谈微信小程序开发的实用 《小睡眠》 技术与注意事项
文 / 刘剑华
为什么要做小睡眠
自去年开始,小程序在移动互联网圈,是暗潮汹 涌的存在,总在某个时刻,一个内测版就刷爆朋 友圈。我们团队真正萌生做小睡眠小程序的想 法,是在今年元旦过后,属于很后知后觉。毕竟 在创业阶段,对于开发资源的分配很慎重,最终 小睡眠小程序是由一个设计师和一个程序员负 责, 从敲定名字到完成提交, 总共耗时36个小时。 下面列出几点在开发小程序上的思考,分享给大 家, 或许有些帮助。
时间向用户表达自己。以小睡眠为例,微信授权 登陆是我们最先舍弃的功能,而且我们也是在最 后时刻进行删减,把两个页面变成一个页面,所 以它的学习成本极低,几乎点到哪里都会有声音 播放出来, 目前小睡眠竟然有8%的用户是50岁以 上的老人, 算得上是全民小程序。
市场推广
毕竟是微信内部功能,分享是绕不过的需求。我 们当时做了一件事情,把几十个白噪音和脑波 进行颜色上的分类,并根据声音的种类和特性, 以及听觉和认知给人的第一印象,比如“潮拍海 岸”是蓝色, “红泥小炉”是红的,我们选出了五 种很好看的颜色,后面在微信群分享的时候,小 睡眠的分享界面骚气十足,很好看也抢眼球,吸 引了很多人关注。所以说小程序天然带有推广属 性,特别是目前微信也计划增加一个新入口,用 户可以在群设置页看到“群小程序”,也就是最 近群成员分享过的小程序,大家也可以在这方面 多加思考。
技术框架
初期阶段,小程序的开发框架比较弱,特别是针 对音乐类的,很多功能无法实现,比如支持多音 频播放和无缝衔接等。如果是 App的话,往往多 想想办法是可以解决的, 例如Android的WebView 自带的音频播放器无法进行音频的无缝播放,但 是接入Google的扩展播放器ExoPlayer就可以解 决这个问题。所以大家在设计小程序的功能框架 时,不能简单照搬App的功能或者想当然地做减 法, 需要仔细评估小程序的技术支持程度。
微信小程序技术浅析
小程序初期,网络上能供参考的学习资源并不 多, 于是只能紧抱官方文档。 翻看官方文档后, 发 现小程序虽然定义了一套新的开发框架、语言, 但实际上与传统的前端开发技术非常相似(因为 基于Web开发技术) 。 本质上是寄托于WebView, 而WXML相当于HTML,WXSS相当于CSS,脚本 也正是前端一直以来的网页 代码均是JavaScript,
设计交互
不考虑微信好友即时分享的入口,从启动微信开 始,要进入小程序页面,至少需要三次点击(微 信—发现—小程序) ,这还不包括进去之后的下 拉搜索,而在最开始阶段,微信小程序也并没有 开放模糊搜索和星标功能,所以对于小程序交互 上的考虑,尽量要做到一键抵达功能,用最快的 14

Cover Story 封面报道
微信小程序
开发三剑客。 所以, 对于前端程序员来说, 学习曲 线并不高。 会出现很多熟悉的代码, 创建quick start项目后, onLoad、onReady、onShow等等。使用过Vue.js、 接触过iOS、Android等开发的同学,一定不会陌 生。每一个页面都有自己的生命周期,跟Vue.js的 每一个page,iOS的每一个Controller,Android的 小程序就像集百家之所长一 每一个Activity一样。 样, 把最经典、 最简单, 大家最熟悉的开发模式呈 现出来。 这样一来, 学习门槛又降低了很多。 而在UI布局方面,小程序采用了rpx(responsive pixel),其可以根据屏幕宽度进行自适应,规定 由于这是一个自适应的单位, 所 屏幕宽为750rpx。 开发的时候, 以, 所有手机屏幕宽度均为750rpx, 适配问题就减轻很多。开发时, 设计师以iPhone6 作为视觉稿的标准,就可以满足绝大部分机型。 而在标签语言 WXML(类HTML)中,view 标签 相当于HTML中的div,其他标签根据功能定义也 很容易理解,可以当作一种变体HTML开发。而 而在WXSS中, 几乎不用像 WXSS就相当于CSS了, 传统浏览器那样考虑各种兼容属性前缀,也不需 要考虑低版本浏览器的兼容,可以放心使用Flex 布局和各种CSS3特性。 微信官方提供的开发工具, 是使用node-webkit开 ,所以整套开发工具的源码均 发的(JavaScript) 可查看, 见图1所示。这就对广大开发者深入了解 小程序的机制、框架提供了非常好的资料。 目前 也有很多优秀的开发者已经通过此对小程序开发 框架进行了原理、 基础、 底层运行的详细分析。
接下来谈谈开发中需要注意的技术点。

生产发布环境中小程序所有网络请求都必须为
HTTPS, 并在小程序后台绑定域名。 目前, 各大云 服务提供商都提供免费的证书申请,过程也并不 复杂。

在小程序开发中并不能调试查看uploadFile和
downloadFile的网络请求,但你可以通过代理去 查看。

小程序迭代升级过程中,很多新的 API出现,
需要向下兼容,并不是每个人都会升级微信客 户端, 由于一些新功能的升级可能会导致老版本 crash掉。
微信小程序开发资源
下面是我们在项目中曾经接触到、使用过的优秀 第三方库, 并做简要说明。
开发框架
WePY,小程序组件化开发框架。它是Vue.js开发 者的福音,让小程序开发变得“ vue ”化,支持 NPM包,支持多种编译器,支持代码压缩、图片 压缩, 支持ESLint等众多功能。使用之后, 小程序 开发更加简单、 高效。
工具库
wafer-client-sdk:Wafer,可用来快速构建具备 弹性能力的微信小程序。这是腾讯云团队提供的
图1
微信Web开发工具源码目录结构
15

Cover Story 封面报道
微信小程序
SDK,让小程序用户授权会话变得相当方便和简 服务器端SDK。 单, 同时提供了小程序SDK、 XpmJS,微信小程序云端增强SDK。提供了用户 登录、WebSocket 通信、微信支付、云端数据表 格、 文件存储等轮子。 微信小程序富文本解析自定义组件。支 wxParse, 持HTML及Markdown解析。有了这个框架,就可 阅读类、 资讯类的App就 以显示基本的HTML了, 拥有了简单高效的富文本显示能力。 wemark,微信小程序Markdown渲染库。可用于 在小程序中渲染Markdown。
小程序源码。
第一步,设置代理
以Mac为例,首先,打开Charles,然后手机接入 , 而Charles怎么连接, 如果有疑 Charles(见图2) 问,可以在网络上搜索教程。连接Charles后,不 (使用Charles期间, 注 需要特别代理相关SSL域名 意关掉手机和电脑的其他代理, 以免链接失败) 。
UI组件
ZanUI-WeApp,高颜值、好用、易扩展的微信小 有赞出品。UI组件库包含badge、 btn、 程序UI库, card、cell、color、dialog、form、helper、icon、 label、loadmore、panel、quantity、steps、tab、 设计优美,使 toast、toptip共计17类组件或元素, 用方便。 wx-charts,微信小程序图表charts组件。图表组 件包含饼图、圆环图、线图、柱状图、区域图、雷 达图, 为数据分析利器。 微信官方设计团队提供的一套UI组件 weui-wxss, 库, 提供了最有用的插件、 模块。 当然还有一大批优秀开发者开发出的优秀的库, 在此就不一一列出了。
图2 手机接入Charles
第二步,打开并加载想要查看的微信小程序
查找并下载想要“偷窥”的小程序。如果微信小 程序已经加载过, 先删掉再重新搜索下载。
第三步,查看Charles,可以发现微信小 程序的安装包
下载完毕后, 回头查看Charles。此时你可以发现 (wexin app package) 的小程序安 有一个wxapkg 装包请求链接, 果断右键保存下来, 见图3。
微信小程序调试实战
优秀的代码资源,对每个开发者、学习者来说都 是非常重要的。往往研读一个优秀的项目都能有 很多收获。而小程序也是一样,小程序开发作为 前端开发的变体, 自然很多人也会希望像一般前 端项目一样,打开开发者工具调试查看别人代码 参考学习 (当然不排除有作恶的人) 。而实际上, 确实是可以查看其他优秀小程序的源码。也正因 为你的小程序源码是可以被查看的,所以敏感信 息不应该写到代码中。 以下进入干货环节,将一步步实战带你查看别人 16
图3 小程序下载完毕后,将发现安装包请求链接
第四步,研究安装包源码
实际上,微信小程序的安装包是包含所有图片、 代码等资源。所以,你可以使用文本编辑器以纯 文本模式查看整个安装包(像iOS、Android安装 。这是你可以 包一样后缀改为zip解压是没用的) 看到资源编排, 图片数据(可能会呈现为乱码) , WXSS代码等。 而所有小程序需要 JavaScript代码,

Cover Story 封面报道
微信小程序
的数据, 都可以据此一一还原出来, 见图4所示。
图4
查看小程序源码
第五步,格式化代码
一 般 来 说 ,对 程 序 员 最 有 参 考 价 值 的 就 是 J a v a S c r i p t 了 ,所 以 往 下 浏 览 查 找 并 截 取 JavaScript部分代码,并新建JavaScript文件,在 编辑器中格式化后,便可以开始我们的学习之旅 了。图5是《小睡眠》小程序格式化后的代码, 已 经变得很具可读性了。 当然, 《小睡眠》的代码由 于程序员“偷懒”,肯定有很多不足和可提高的 地方, 欢迎大家指导并督促改进。 到此, 微信小程序源码查看基本告一段落。 然而, 在最近的微信更新之后,就不能再通过捉包获取 微信小程序的安装包了,源码数据流似乎不再走 HTTP协议。 这一变化大概是微信出于安全性的考 虑,毕竟源码暴露对很多有数据安全要求的小程 序来说是很致命的。也正因为此,小程序的开发 也要格外注意不能把各种key、 secrect写在小程序 代码中, 该服务器处理的还是得服务器处理。 当然, 聪明的你肯定已经想到解决方法了。 场会给出答案, 希望我们技术从业者们能以动态, 不断成长的眼光去看待小程序,也希望此文能给 大家一些启发与帮助, 共勉。 感谢“造程序” (微信ID: zaochengxucom)对内容 的建议和审校。
图5 小睡眠小程序格式化后的代码
结语
刘剑华
小程序自正式诞生至今, 才刚刚过了半年, 外界对 它的看法便已经历很多起伏。 同样的, 今天的小程 序所提供的技术特性, 跟半年前也不可同日而语, 未来小程序能走多远, 是否可以形成一个生态, 市
心潮&小睡眠移动技术开发总监,全栈工程 师。曾于多家企业任职技术咨询、技术总监 等职位。熟悉Web前端、Node.js、PHP、 Python、Android、iOS等技术开发领域。热 爱技术,乐于分享,当前关注人工智能方向。
17

Cover Story 封面报道
CCAI 2017集锦
洞悉人工智能新进展
CCAI 2017中国人工智能大会掠影
记者 / 唐小引
2017年7月22-23日,在中国科学技术协会、中国科学院的指 阿里巴巴集团 & 蚂蚁金服主办, 导下, 由中国人工智能学会、 中国科学院自动化研究所承办的2017中国人工智能大 CSDN、 会(CCAI 2017)在有着“日月同辉”美好寓意的杭州国际会 议中心盛大召开, 时值国务院刚刚印发新一代人工智能发展规 数千位AI现场参会者、 近3万名观 划, 来自海内外近50位讲师、 看网络直播的网友, 共同见证了2017年人工智能的精彩发展及 丰硕成果。
作为由中国人工智能学会发起的人工智 能领域顶级盛会,CCAI代表着国内最高 水准的产学研AI技术交流。今年大会更 是在前两届成功经验的基础上,将全球 人工智能领域的顶级专家、学者和产业 界优秀人才汇聚一堂,围绕着当前 AI热 点话题、 核心技术, 以及与会者共同关注 的科学问题进行了深入交流和探讨,并 针对语言智能与应用、 智能金融、 人工智 能科学与艺术、人工智能青年设立专题 论坛,对于我国人工智能的科学研究及 各行业落地有着极大的推进作用。 分享他的切 参会者Stranger在会后撰文, 身感受: “在智能时代, 应该没有任何一 种力量可以媲美脑力的汇集与碰撞,特 别对于人工智能领域来说,一场大会的 差异化已经很难用汇聚全球专家的数量 来打造, 而是看听众脑力和热情的激发 程度。 我第一次看到学术明星被当作网红 36
一样被追捧,第一次见证女性在技术深 度领域的出类拔萃,第一次被无数行业 投向人工智能的热情所折服。一场分享 的知识密度往往用 ‘烧脑’ 这个词语来形 容, 而这场大会更是汇集了各个行业和 领域的脑力精英, 共同谱写出了奇幻绝妙 的思想交响乐。 ” 那么,究竟是什么样的会议组织及专家 内容分享引得参会者们如此赞誉,接下 来,就让我们一起回到CCAI 2017现场, 直面精彩纷呈的人工智能技术分享及价 值观点碰撞。
升到国家战略的高度。 在开场致辞中, 中 国工程院院士、 中国人工智能学会理事长 李德毅院士, 中国科学院院士、 中国人工 智能学会副理事长谭铁牛院士都特别谈 到了这一点。 李德毅院士表示, 经过60多 年的发展, 人工智能已经成为国际的新焦 点、 经济发展的新引擎, 为社会建设带来 了新机遇, 同时也带来了新挑战。 而作为CCAI发起人,谭铁牛院士则回顾 了历届中国人工智能大会的举办为产学 研界所带来的深远意义,并衷心希望所 有参会者都能够大有收获,充分交流学 术思想, 探讨前沿发展, 破解发展难题, 共同为中国人工智能规划的实施落地、 开花结果,推动我国真正成为世界人工 智能创新中心而努力。
当人工智能已上升至国家战 略高度,中国人工智能又该 何为?
就在大会举办前两天,国家发布了新一 代人工智能的发展规划,将人工智能提
阿里巴巴技术委员会主席王坚博士致 辞说,今年将CCAI引入到杭州,是一个

相关文档