Friday, August 3, 2012

WWDC2012的学习笔记(3)

今天完成了所有WWDC 2012视频讲座,一共111集,相当于一百一十一个小时的视频。在过去的一个半月的时间里,我是利用工作之余的午间休息,晚上和周末的时间学习了这些技术讲座。其中有许多非常精彩的内容,虽然很少部分的内容很深,我并不是完全明白,但是还是非常值得了解。通过学习,可以说在技术方面了解了苹果的最新技术,这对于我来说是十分重要的。

下面的博文是我前一段时间写的学习笔记。我目前所写的笔记只是前面的两个序列,400和700序列,700序列还没有写完。后面还有200序列Essentials(42集),500序列Graphics, Media, and Games(24集),300序列App Services(11集),600序列Safari and Web(6集)。估计我的笔记只能止步于700系列。


WWDC 2012视频的第700系列主要是介绍核心的操作系统:Core OS,我现在已经进入200系列,但是我尽量补上我看完这些技术讲座之后的大概内容笔记和我的心得体会。通过这些技术内容可以为软件开发人员提供最新的技术,并且由此可以从更深的层次窥视苹果操作系统的发展。

从2010年以来,我学习了所有的WWDC视频,这对于我了解苹果软件开发技术有十分重大的帮助作用,通过这些学习,我可以了解什么是苹果推荐的最新技术和编写软件的技巧,这些视频为我在学习苹果软件开发技术方面提供了一种规范大纲的作用,从中我也十分高兴地看到苹果在核心技术和软件开发支持方面提供范围更为广泛和编码更为便利的支持。

705 Advanced Core Bluetooth


本讲座介绍苹果核心蓝牙技术的高级内容。苹果对蓝牙技术的支持起始于iOS 5和OS X(10.7),在iOS 6又提供了许多新的支持。

本讲座重点是app方面的设计。蓝牙是一种server<-->client的结构。根据蓝牙的规范,苹果在支持的api方面提供许多新的支持,讲座介绍了iOS 5和iOS 6相应的classes:server & client的classes, 数据classes, 已经helper classes。

蓝牙设备是server,这也包括了苹果设备(电脑和iPhone),client一般是app。从client角度,苹果工程师介绍了三个简单步骤:

  • Discover:接受server发出的Ad信号,软件可以由选择性对某些clients感兴趣
  • Explorer:探索server的内容,比如有关健康的软件可能只对有心脏跳动信息感兴趣
  • Interact:互动,如果发现到自己知道的client,开始进行数据交流

接着介绍如何进行连接的过程。我使用过iPhone的这一功能,比如,第一次通过iPhone连接Apple TV或Wifi,相互之间的连接需要一段时间,有时需要输入用户和密码,但是以后的连接就不需要再进行这些步骤了。我的iPhone通过第一次设定之后,以后可以迅速连接。

讲座介绍了三种再连接方式,浏览发现和连接;采用UUID连接;已经连接。其中采用UUID的方式最为迅速、平稳和连续,不需用户介入。

从操作系统iOS方面来说,iOS提供许多底层的背后服务(backgrounded app),这次介绍了苹果提供新的支持服务。

从server角度,讲座介绍了三个基本步骤或要做的工作:

  • Build Tree:建立自己的树数据结构和内容
  • Publish and Advertise:公开发出广告信息
  • Handle Requests:处理请求

有关这些工作,苹果提供了一系列API支持。

最后介绍了有关使用蓝牙技术技巧。在示例中,演示了一个相互交流用户数据的例子,两个手机在近距离内,迅速交流了名字,就像给对方递交了一张名片。这个例子正好说明利用蓝牙技术传输小量数据的范例。示范软件在server一端通过点击屏幕显示名片的方式开始发出Ad信号,另一手机立刻在接受状态下得到信息,结果显示同样的名片,真酷!

蓝牙低能技术最适合近距离于传输小量数据,不适用于传输文件或图像。

706 Netwoking Best Practices


本讲座介绍有关网络技术的编程技巧。

首先大概介绍了网络通讯的基本概念:影响网络通讯的两大因素为宽带(bandwidth)和迟缓性(Latency);网络通讯协议:TCP, HTTP;苹果提供网络通讯的基本平台和API。

CFSocketStream用于TCP通讯;在iOS 6增加了手机通讯功能,如在Wifi没有的情况下自动转为手机通讯,在Wifi出现情况下自动取消手机通讯,以及迅速发现手机信号。

NSInputStream & NSOutputStream是高一层api支持。

NSURLConnection用于HTTP & HTTPS支持。

WebKit是网络支持的最好API。

接着介绍了移动设备的通讯特点,通讯方式会随时变化,采用不同方式保持通讯会影响到电池和用户的时间(使用成本)。因此在写软件时要考虑这些因素,采用cache数据的技术,请求数据时考虑到数据大小和内容,避免请求不必要的数据。

最后介绍了debug的一些技巧:OS X和iOS设备上如何debug的技巧。

707 Simplify Networking with Bonjour


本讲座介绍了苹果的Bonjour网络通讯技术。在过去WWDC,苹果工程师都有该内容的介绍,这次讲座也不例外。从这些讲座内容上,可以看到苹果十几年前推出的这一技术,开始在各个方面得到越来越多的广泛应用。

Bonjour是苹果在2002年推出的一套局部网络零设置技术。这种技术通过动态自动设置网络交流地址的方式,免除了需要用户设置各种网络连接参数的困扰(如地址和接口号等)。

讲座介绍了这一技术基本概念,如名字的三个基本部分:用户可以看见的名字,服务类型协议名,域名。服务类型协议名长度为15个字符,服务类型可以通过IANA(Internet Assigned Numbers Authority互联网网号码分配局)管理。

苹果推出这一技术的考量是解决网络通讯的许多技术难题,提高网络通讯的效率、可靠性、省能源性和方便性。

讲座介绍了苹果为Bonjour提供的API和设计结构,这种结构是建立在server与client的基础之上。

  • Server流程:通过NSNetService或CFSockeRef注册,然后publish;
  • Client流程:通过NSNetServiceBrowser浏览搜索,这些服务搜索到之后,让用户选择一种服务,连接之后通过NSInputStream & NSOutputStream发出请求。
  • Server流程:通过NSInputSteam & NSOutputStream接受请求
  • Server & Client通讯交流:通过NSInputSream & NSOutputSteam交流数据。

讲座就以上内容进行了讲解和说明,并有编码示例。

在技巧方面,推荐使用GCD进行网络之间的搜索和通讯交流,以及如何存储Services。由于Bonjour是建立在动态连接技术之上,即使最基本的连接仍然是TCP方式,但是不要储存IP和Port,储存{Name, Type, Domain}信息。


708 The Accelerate Framework


本讲座是由苹果矩阵与数据组的工程师Luke Chang介绍苹果的Accelerate Framework,即加速计算平台,这是一个数学计算库的软件包,这一平台的最大特点是高速和省能源。对于iOS来说,这是非常重要的,通过这一平台,可以进行非常复杂的数据计算和处理,如:

  • 数据信号处理
  • 图像处理
  • 线性代数计算
  • 模糊数学计算等

由于苹果产品是硬件和软件全部设计,因此这些数据库可以充分利用硬件的特殊功能和快速宽道传输,从而大大提高计算的速度。Chang举例一些基本的数学计算,采用AF库function比用C语言写的计算可以提高近十倍,而能源只是1/8。

使用AF的优点:

  • 拥有2000APIs
  • 这些库都是经过测试验证,非常精确
  • 这些库都是采用最优化的硬件编码,速度快,省能源
  • OS X & iOS都有支持,编写的程序可以在两种平台上使用
  • 数据库可以解决免除写陈沉长复杂的C程序困扰

Chang说,在苹果店中,最受欢迎的软件十中有九都采用了AF。Chang说AF的秘密是苹果的工程师充分利用硬件的各种优势,并且在汇编语言上进行了大量的优化,还有采用了GCD的技术,并充分利用多计算芯片计算能力。

在举出例子中,Chang解释了省能源的道理,虽然AF的实际计算所用的能源比C程序略高一点,但是运行的速度非常快,而C程序运行的时间长,因此从总的耗电情况来说,AF具有省能源的明显优点。

讲座介绍了如何在Xcode中使用AF:在project中选择和加入Accelerate.framework,然后在使用的程序文件中加入

#include <Accelerate/Accelerate.h>

讲演中介绍了几个数据库的使用,虽然十分简练,但是这些还是比较专业人员使用的数学计算内容。讲演还介绍了图像处理数学库的使用和示范。其中图像处理的速度是一般C程序的150倍以上。


参考


No comments:

Post a Comment