“云控制服务”的设想
“云控制”雏形
去年做ImagineCup的时候,曾经有过这个还不大成熟的创意,到现在一年多过去了,无论从硬件软件还是思想上都成熟了很多,“云”终于不只是一个概念,“云”已经来到了我们身边。
当时我写过一个很炫酷的DEMO。我使用了Blend 2中自带的一个Sample程序,原来的程序内容很简单,是用Silverlight制作的一个菜单,支持触摸平滑拖动,包括“惯性模拟”等效果(其实很像iPhone,实在不好意思现在电脑里Blend 3的Sample程序变化了,因此没找到截图)。
Sample程序本身的效果很炫酷,又是3D,又是倒影。但键盘的输入接口却很简单,仅仅是“左”“右”。正好我当时在研究手机设备的加速度传感器(这其实也不算新鲜东西了),通过某种算法,我能够捕捉到手机的“向左甩”,“向右甩”功能(俱乐部的童鞋们还记得我那个“方差算法”吧),下面的问题是如何用手机控制电脑上的程序。
这让我伤了不少脑筋,一般来说,方法就是将手机模拟成一个键盘,接入到电脑,从而控制电脑。但很难实现,至少我不想去编写键盘驱动,而且我也不知道如何将跑着WM系统的手机模拟成一个键盘设备。
最后我用了一个很笨拙的方法:
手机通过WIFI和网络相连,PC也接入网络,在PC上跑一个Web Service,暴露一个很简单的接口,类似这样:
void SendCommand(CommandType commandType);
Services处理程序很容易调用一些API来模拟键盘按键。这个程序并不困难,而神奇的事情就发生了,我发现运行了这个程序后,我的手机就好像一个电视机遥控器一样,通过“向左甩”“向右甩”,就能够控制我的计算机,这种很类似任天堂wii的操作方式让我觉得幸福!
“云控制”改进
基本的雏形形成:
控制设备(手机) –> 控制中心(Web Service) –> 被控制设备(模拟键盘,模拟鼠标等)
随后我开始思考这其中存在的问题,最大的问题是:我们的Web Service如何识别我的手机,也就是控制设备?
换句话说,如果我想换一个手机来控制我的电脑,是否需要更改程序呢?我很快做了一个很简单的实现,也就是在Web Service中添加了一些类似这样的接口:
void RegisterDevice(Guid deviceId);
IList<Guid> GetRegistedDevices();
很简单嘛,其实这和Web登陆验证有些类似。每一个新的设备,只要连入服务器中,提供一个设备的ID用来登录(相当于用户名密码),一旦控制中心知道了控制设备的存在,我们自然可以用很多方式去将控制设备和被控制设备绑定。比如我实现了这么一个机制,将一些控制设备和被控制设备标记上Guid后绑定到某个LiveID账户上,当从某个控制设备提供Live ID用户名密码登陆成功后,则可以控制已经绑定的控制设备。
基本的安全性和验证问题解决后,我尝试着将控制中心的Web Service放到Windows Azure上去,一切完成后,可以满足这么一个用户场景:
用户场景:小明老师走到教师讲台前,打开手机(此时已经连接控制中心并登陆了LiveID),这时在手机上出现了“东九楼C302-PPT演示PC”供选择?;小明老师选择它,大屏幕上显示出当前“已被小明老师用户控制”;按照实现的设定,小明老师开始用“向前甩”“向左甩”“向右甩”的控制方式,在大屏幕上控制PPT播放;演示结束后,小明老师断开手机,大屏幕恢复原样,大屏幕显示开始等待下一个用户接入。整个过程中从未操作PC。
整个过程是不是有点像蓝牙连接?它与蓝牙的区别是,将控制服务放在了云中,而不是所谓“宿主”一端。
我当时的实验就完成了这么多(其实都还没这么完善),后来因为各种原因没有把这个炫酷的功能加入到IC比赛的作品中。
“云控制”展望
一年多之后的今天,3G已经进入了我的手机,iPhone, Android甚至最新的Windows Phone,各种移动设备越来越成熟。这个时候再来思考这个“云控制”系统,又有了更多的意义。
1. 当“永远在线”成为一种习惯,互联网接入成本越来越低,这正在慢慢取代“红外线”“蓝牙”这类短距离无线通信技术。
当一切数据都到云里去一趟之后,我们可以更容易的做到以前不敢想象的事情,比如在上面的例子中,如果使用蓝牙,红外来控制PPC,我们要么需要完成复杂的配对,密码功能,要么难以做到复杂的操控。使用“云控制”服务,我们把复杂的权限控制,设备绑定等等,都交给了云端的服务器。
用户场景:
还是小明老师吧,他家里电视机遥控器使用了“云控制服务后”,整个家里只需要一个遥控器了。由于不使用红外线,这个遥控器使用非常自由,关键是,它能控制家里几乎所有的设备,包括电视机,DVD播放器,HD播放器,空调,电冰箱……
(这在硬件上已经有产品了,参考:http://cn.engadget.com/2010/01/07/samsung-led-9000-the-only-led-tv-with-a-cooler-remote-than-disp/)
2. 当“在线设备”也就是“端”越来越多,我们需要“云控制服务”这样的技术让我们在不同的“端”设备之间更加自然地控制、切换。
想象一下未来的生活场景,你的身边将充斥着多少接入互联网的“端”设备:笔记本,PC,上网本,平板本,手机,甚至是家庭电视机,HD播放器,电子画框,照相机……每个设备都有屏幕(输出设备),都有键盘,触摸屏等(输入设备),当这些设备环绕在周围时,我们迫切的需要一个“控制中枢”,比如我们需要用手机方便的控制电视机,电子画框,又或者需要用包包里的平版本控制电视机播放家庭PC中存放的电影……可能现在很多人在家想在电视上看电影的时候,就会想到要把笔记本连接到电视机上,于是开始头疼什么“音频输出”“VGA输入”了,至少我是这样。“云控制服务”能够解决这一切问题。
用户场景:
小明老师在家想看电影怎么办?不需要抱着笔记本再去往电视机上插了。小明老师能够利用身边的任何设备,不管是手机,笔记本,平板……比如说笔记本吧,连接到“云控制服务”中,选择电视,开始控制电视,然后再网络上选择一部电影,开始播放,完成。这时电视开始播放电影;
要听音乐也是一样,用手机播放音乐,稍作选择,出声音的是家里的音响;
(说实话,现在我在家大体能够完成这样的工作,我是将家里的各种设备接入WIFI后,用“远程桌面”实现的)
3. “云控制服务”能够集中管理“私有设备”和“公共设备”,也许这是未来的趋势。
这也许是更广泛意义的场合,想象一下未来的你包包里有一只功能强大的手机或是平板本或是上网本,但是你走到讲台上却非要去面对那个陈旧的用来放映PPT的老式PC,或是到了公共场合使用公共电脑而不能使用自己强大的随身设备(这种情况常常发生在医院,电影院,车站,机场等公共场合),有了“云控制服务”,“云控制服务”就像一个在线的操作系统,能够让你随时随地按照自己熟悉的界面,熟悉的方式(使用自己的手机,平板)接受服务。
用户场景:
小明去医院看病,一进入医院便打开手机登入“云控制服务”,选择控制自己的“医院账户”。在医院看病的每时每刻,都在自己的手机(平板本)上完成“地点导航”,“收费”,“指引”,甚至“与医生交流”等工作,他的手机完全接入了医院复杂的IT系统中(就好像通过远程桌面连接到了医院IT系统中的某台PC上),享受一切服务。而随着小明的出院,手机也恢复了往日的功能。
(也许这才是“互联网时代”)
技术展望
虽然这一年来,“云控制服务”已经越来越成熟,但是从技术的角度来说,还有一些局限性,简单分析一下:
操作系统平台统一:各种“端设备”,硬件架构千百种,软件更是有千百种,要让他们服从一种统一的“云控制”,那需要一个非常统一的平台。虽然说理论上Web Serivice能够完成这个工作,但是实际上要想支持几乎所有的“端”设备的话,可能也只有Google, Microsoft这样的巨无霸能有这样的霸气;
用户ID,隐私:其实,“云控制服务”的本质,是将以“机器”为中心的服务转变成以“用户”为中心的服务。那么我们必须将机器通过某种机制“绑定”到用户身上,而且这种“绑定”必须在“云”上进行,这就涉及到很多关于用户隐私的问题。我认为,建立一个“实名制”的ID系统是解决这个问题的最好方法,例如Facebook将你的手机绑定到Facebook ID上,你并不感到太意外,因为“实名”。
互联网:真的能满足“所有设备”随时随地“无缝接入”吗?至少在当前运行商大肆限流量的天朝国还很难。如果设备不能随便的使用移动互联网进行数据传输的话,“云控制服务”带来的便利就大打折扣了
当然有很多细节问题我还没提到,这些都有待探索。
说真的,不知道微软那帮人有没有可能再下一代Windows能整合这样的技术。甚至往大了说,这个“云控制服务”就是下一代操作系统。
任何想法欢迎与我交流。