校园API化

图片描述

以前应人邀请写的个东西,结果人家说看不懂哈,那就发在这里啦。

在我心目中,理想的校园应该是个大实验室,学生和老师在其中学习了解各种知识,实践尝试各种创新的想法。而在这个人人都在喊“大数据,物联网”的时代里,校园更应该是最活跃的实验场。

当我们讨论iWatch,iBeacon,Oculus这类新型的可穿戴,物联网技术的时候,可能都隐约意识到其中所蕴含的变化的内涵,在这些人与环境,人与人,人与自身感官之间交互方式的转变背后,其实是人类社会自身数字化的过程。在这里我只想就这种数字化的构想做一些想象,设想一些在校园内可能的数字化实验的场景。

API的力量

API是应用程序接口(Application Programming Interface)的简称,一般用来指代系统的不同模块之间通信的约定。Wiki中解释API设计的目的:“程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。”。由于现代系统的复杂度非常高,人们不得不将系统划分为大量基本模块,这就使得合理的模块间通信设计变的十分重要。

对于工程师来说,提到API,多数会想到那些可以弹出个对话框,把一些字符串拼到一起这类软件开发工具(SDK)。但对于许多新公司而言,API代表的是更高级,更抽象的服务,而这些或多或少的已经成为了公司核心的一部分。

如果我们现在创业做一款产品,所需要的大部分技术工作都可以寻找到对应的API。底层的如提供服务器托管的阿里云,直接服务应用开发者的的LeanCloud;应用层的如用语用户反馈的Uservoice,可以完成大量复杂数据分析的Mixpanel;再到直接提供机器学习算法服务的algorithms.io,专门提供图像内容识别服务的Rekognition。可以说,开发者需要的基本工具,都能以很低廉的价格,以服务的方式获取到。而这些服务,就是新一代的API。

新一代的API不局限具有更广的“光谱”:小至算法(algorithms.io),大至企业帐目核算(Mint.com),银行资金托管(bancbox.com)。这些服务现在都在或多或少的以一种“可编程”的形式出现。这就使得原来需要人力去“粘合”才能保证企业运转的工作,比如员工招聘,会计,行政的工作,都可以被程序更高效的替代。

我相信,能够善用这些新API(也就是擅长Mashup),将是未来工程师的重要技能。所以,我模仿了国外的一个博客系列,Learning 30 technologies in 30 days,也开始了自己的30天30项技术的30hackdays系列,可以在segmentfault的博客看到。

未来的人工智能是网状的。前面提到了algorithms.io这样的产品,可以给那些完全没有机器学习算法经验的团队提供复杂的算法服务。而近些年,类似的产品(服务)也出现暴增的趋势,如出门问问,Tuling123,虫洞助手这样的智能助手产品等。这意味着,原来被视为大公司才能拥有的人工智能服务正在被一个个细小的产品分食。这些微型智能服务从许多小需求点切入,并且尽量大程度的开放API给其他开发者。一方面提高了自己产品的生存能力,另一方面也为以后形成微型智能服务之上的中型智能服务奠定了基础。

假设某个开发者想实现一个检测橱窗里海报被关注度的产品,他完全可以购买一款可以通过API访问当前视频流的摄像头放在海报版前面,将数据流分别导入一个提供OpenCV的服务和一个如Amazon EMR的大数据存储平台中,在获得当前板子前的同学的轮廓以及朝向后,将这个数据分留给如chartbeat这样的实时数据分析平台,以及提供用户行为预测服务的Framed Data类平台。最后将得到的分析结果输出给Mixpanel这样的数据可视化平台。这样就借助许多第三方服务完成了一个看起来每个点都需要很大工作量的系统。

释放巨龙的力量

算法已经被充分互联网化,甚至服务化。但现实世界在这方面就落后的多。物联网算是离人们最近的数字化技术,但人们目前可以接触到普及了的相关技术也就是NFC和短期内可能兴起的iBeacon技术。机器人算是填补这个沟壑的重要手段。通过大量的传感器和具有实际干预能力的机械装置,机器人可以实现充分释放“淤积”在互联网中算法的巨大力量。

除了最近火到黑的Jibo家庭机器人,比较低技术含量的家用机器人也已经崭露头角。如添加了各种传感器的联网扫地机器人,微型飞行器,联网的空气质量监测器,这些设备的根本目的都是将人们周围的环境量化,将数据传入云中,利用算法的力量来尝试解决实际问题。为什么叫尝试解决呢?第一,这里的问题可能在拿到一定数量的数据之前都是未知的,只有到了“大数据”的量级,问题才会浮出水面。第二,除了那些明显通过改进算法可以解决的确定性问题之外,发现那些原来并不存在因果关系的,只是概率上存在关联的问题会成为算法的重要责任。这也就是为什么在中型规模的智能服务没有兴起前,所谓的智能家居也只是“App上的开关”的原因。

校园,变革的前线

生活在校园中,我们肯定经常遇到到某些不便,去自习室看书却不知道哪间教室人少;去操场打球却要花很长时间招呼朋友;去图书馆借书却又找不到XY书架在哪。这些问题的本质都是信息的不对称。过去人们通过发明电话,地图等方式来辅助人们减少这种不对称。而大数据时代的做法则是,API化一切,利用算法的力量解决物理世界的问题。

正如前面提到的,API化包含两方面含义:对物理世界的数据化,以及数据的物理化。前者指的就是通过各种各样的传感器,将物理世界的各种表相转换为可以被算法处理的数据信息,比如各种监控摄像头所存储的校园内的影像信息。后者指的是将以上数据处理以后的结果转换为实际的物理行为,比如荷兰设计师设计的可以跟随人的椅子,Take a seat。

在学校中,我们可以做些什么API化的尝试呢?

安全。相比社会,学校一般还是更安全的地方,但一旦出现事故在社会上的影响也是更严重。所以如果学校能够将学生的位置,比较实时的获取到,在保证学生隐私的前提下,检测每个学生的安全程度。一旦发生事件,学生可以很容易的报告学校保安部门,也许就可以及时阻止可能的危险行为。这在技术上并没有难度,每个学生几乎都有智能设备。通过在室内增加一些诸如iBeacon的设备也可以更精准的定位学生的位置。但正如前面所说,学生对于隐私的疑虑也许会高于对自身安全的担心。

社交。基于如上的安全产品,学校的学生位置就已经被API化了。除了Dota,撸啊撸以外,学生关心的应该就是社交了。做校园社交的产品很多,但由于各家都不会开放自己的数据,所以在使用不同产品的时候都需要重复填写很多信息。这个问题对于职场人来说没有多大问题,因为大家都在几个大的社交平台活动,如linkedin,facebook等。但学生会具有更多细化的筛选需求,比如某个院系专业的,正在选修某些课程的。课程格子在这方面做了很多有趣的尝试。

开放。学校应该建设自己的数据开放平台,为学生提供实现上述类型想法的最基础设施。比如在教学楼内部署温度湿度红外传感器,并将这些数据同步到网络中供大家访问。这个时代的开放校园,除了开放的课程以外,学校的公开信息,甚至一草一木的数据都应该被开放出来供大家访问。

双刃

另一方面,美剧《Person of interests》讲了一个大数据的另一面,一个令人很恐慌的黑暗面。政府建造了一个监控所有数据的机器,由此发展出了智能,反过头来干预现实人们的生活。就目前的技术发展来看,很有可能片中的情况已经发生,只是我们被机器“照顾”的很“正常”,并没有意识到另一个“大意识”的存在。

算法的力量已经开始渗入普通人的现实世界。《互联网思维与我们的未来》一书中的海妖服务器即将成为未来的游戏规则。尽量接近“核心算法”,找到自己的位置,至关重要。

校内应用程序开发:.NET应用程序开发标准 通过为你企业建立个公共应用结构框架来提高.NET应用开发效率 by Rao Chejarla (印度) 涉及技术:ADO.NET、ASP.NET 开发企业应用是个复杂过程你可以运用Microsoft .NET技术许多工具来使这个过程变得更快更容易但由于 .NET复杂性选择最直接思路方法是很难如果没有明确标准和方针用来开发应用企业中每个开发小组就可能在安 全、数据库访问策略和测试过程上进行重复开发虽然每个小组都可能在这些领域中开发出有效思路方法但会导 致不必要重复工作而且在重要安全性方面如果每个开发小组都确定各自安全实现思路方法那么应用可能变得很 容易受到攻击 如果你在IT集团公司工作这种情况确很常见幸运是你可以把事情简单虽然企业中开发每个应用都解决个独特 商业问题但你可以将所有应用建立在同样底层框架组件上通过开发标准和公从命名惯例到用来强应用结构预 装组件最好思路方法共应用结构组件你开发小组就可以节省时间、确保应用是安全、并改善各小组间协作标准 范围很广 在本文中我将探讨在企业中实现个公共应用结构框架最好思路方法我将特别关注 3个主要方面:应用安全性、数 据库访问策略和测试过程我将讲述验证你用户身份、用 4个层来构建你企业级应用、还将讲述下Microsoft两个 新对象——Data和DataReader——它们是ADO.NET部分可以帮你分离各个层 运用预装组件是加强应用结构并提供般服务个好思路方法应用结构是个企业级问题你现有企业组织结构中可能 并没有个小组来承担这项工作然而形成这样个小组是很简单你只需要重新编制各个小组然后分配些技术很强人 员(已经在你们公司中)来从事应用结构方面工作 你在引进个公共底层框架应用时各小组可能主要关注商业问题而不是担心结构问题这就使我们对做每个应用开 发人员技术要求并不高因此开发进度就会缩短可以更好地响应市场情况所有这些原因结合就会减少开发和维护 方面投资最终提高你们公司赢利然而你首先需要在 3个主要方面建立个公共底层框架:应用安全性、数据库访问 策略和测试过程 安全是很重要你应该从开发早期阶段就控制应用结构这个方面适当用户身份验证和授权可以保证个应用安全在 没有集中安全组件时候每个小组编写它自己安全代码这是很危险个中心安全策略不仅可以使开发人员避免重复 劳动为企业中所有应用提供同样级别保护还可以创建个结构使所有修改都在个地方进行而且不会产生新安全漏 洞安全结构中首要步就是用户身份验证 验证你用户身份 个典型企业需要验证两类用户身份:内部用户(雇员)和外部用户(供应商和客户)你企业应该建立统策略来验证这两 类用户身份并对他们授权 在传统ASP中如果你不用集成Windows验证用户身份验证和授权是很难实现例如确定每个用户身份都经过了验 证并不容易每个ASP页面都需要代码来检验用户身份验证cookie并证明用户身份得到了确定在ASP.NET中身份 验证和授权比在传统ASP中要容易多了在ASP.NET中有 3种形式身份验证:Windows验证、Passport验证和 Forms验证 Windows验证很简单用于简单应用它根据当前域Active Directory(AD)来验证用户身份用户组被当作角色来进 行基于角色验证用户组角色可能不像应用需要那么细所以它们必须存在另个数据库或自己AD中 ;Windows验证不能改变这些角色 Passport验证是Microsoft.NET My Services策略部分用来验证Internet中用户Passport是个单点登录(SSO)服 务允许注册用户用个单用户ID和密码来访问相关网站WebSiteMicrosoft Passport服务器负责维护用户身份信 息并提供个验证机制Passportwallet功能给用户提供了选项来存储他们信用卡信息并和网站WebSite共享如果 网站WebSite需要更多信息它们可以在它们自己数据库中得到那个信息并将它同Passport用户ID结合起来这对 用户是有好处她信息是集中存储她不需要访问每个网站WebSite时都重复输入信息对于企业来说这种验证有不 好地方它们必须相信个数据库而它们对这个库却无法控制到目前为止Passport验证很难被人们广泛采用而成为 种可行验证思路方法 和Passport验证区别Forms验证具有灵活性你可以插入定制验证代码并开发公共安全组件你可以在服务器端 machine.config中配置它旦完成配置组件就自动插入那个服务器上所有应用中了 研究安全组件 ASP.NET提供了个很好思路方法用HttpModule在请求执行路径中插入新功能开发人员可以创建定制 HttpModule用来验证内部/外部用户建立用户角色并创建个定制主要对象有关个简单定制HttpModule你可以 下载代码样例(见列表1) 你也可能想考虑你安全组件些其它功能例如拥有个安全管理控制台会很好这样就提供了设施来定义应用角色给 角色授权(URLS和操作)并给用户授予角色当你有个控制台应用时你可以委派管理责任包括安全设置人们改变角 色时对于个给定角色来说应用功能就改变了这时候组件很有用 你可能想扩展安全模块来查看URL和它操作代码并查看用户是否被授权了应用中每个资源或URL可以有多个操 作过程如查看、创建、更新和删除如果你可以在操作上(而不是资源上)控制用户访问这会很有用这就使 ASP.NET页面可以为相关用户得到操作清单而不用担心用户拥有什么角色最后考虑提供ASP.NET服务器端组件 个性根据用户能力来实施应用菜单 旦你得到了适当安全组件你就做好准备研究你数据访问思路方法了人们在这方面常犯就是在显示层开发所有东 西包括你商业逻辑和数据访问组件这种开发就导致了很难维护像意大利面条样代码(见资源)它也使改变数据库计 划或者改变到个全新数据库变得很难、很昂贵你必须找到散布在你应用中所有单独数据访问指令用 4个层来构 建你企业级应用——显示层、工作流层、商业层和数据访问层——可以使应用更容易维护、更具扩展性 有关这个话题我将重点讲述数据访问层应用需要将数据访问层同商业对象明显分离开你不想让SQL语句散布在 从显示层到商业层所有代码中这些层不需要知道数据是如何得到从哪里得到 Microsoft包含两个新对象——Data和DataReader——它们作为ADO.NET部分来分离各个层Data对象对于个 不连接应用模式是很有用而DataReader对象则用于连接应用然而这些对象都有个缺点:当你访问属性值时它们 或者通过名字或者通过列号来查找在通过列名字访问数据情况下如果在这些名字中有个typo在编译时就不会被 检测出来当列名散布在你代码中时就很难在以后改变它们名字了如果你通过列号来访问数据代码更难读而且你 需要知道列在Data或DataReader中出现顺序 运用Strongly Typed Datas 强类型(strongly typed) datas解决了这个问题但你不能总用Data对象当你运用Data对象时它把所有记录都读 进内存中在大量应用中服务器资源会用尽但如果用DataReader就没有个等同于strongly typed Row对象种思 路方法就是反复运用Data和DataReader这样会形成强类型对象是很理想 我用种思路方法就是对每个表用个Proxy对象和个Do对象Proxy对象包含SQL语句或存储过程指令来得到或保存 域对象Do对象包含属性来体现表特性商业逻辑组件和Proxy对象交互并在Do对象上执行商业逻辑这种思路方法 为Proxy对象限制了SQL语句或过程名字内容它提供了个统数据访问策略提高了应用代码可读性减少了运行时并 提供了灵活性如果它有必要转换到个区别数据库层话(见图1) 你应该用松散藕合层来构建应用这样可以提高应用可维护性、可扩展性和重用性这种思路方法包含用于每个表 个Proxy对象和个Do对象Proxy对象包含SQL语句或存储过程来得到或保存do对象Do对象包含属性来呈现表特 性 我们有必要探讨下有关Proxy对象更多细节问题个引起人们争议问题就是在Proxy对象中是运用SQL语句还是运 用存储过程运用存储过程比SQL语句更有效因此些公司更喜欢用存储过程但你应该选用更适合你公司思路方法 不管你采用什么思路方法避免割裂存储过程和商业逻辑组件的间商业逻辑我喜欢把商业逻辑保存在商业对象中 作为例子我提供了个C#代码列表它显示了个Authors表Proxy和Do类(见列表2) 你需要考虑应用结构框架中最后步就是测试过程测试在开发阶段很重要它是证明软件Software可行唯方式然而 在时间紧迫情况下比如发行日期快到了测试通常似乎处于个次要位置而且在大多数情况下测试这项工作需要人 们精力集中、担负责任每次代码改变时都需要人们严格地重复测试过程 种新软件Software开发思路方法学极端编程(extreme programming)引进了个严格软件Software开发思路方 法这种思路方法牢记使最终产品可以交付、使用户满意并质量合格(见资源)它是建立在个基于测试开发理念上鼓 励开发人员在编写实际功能代码前编写测试用例所有测试用例都作为类来开发它们测试商业功能类功能性 旦将测试用例作为类你就可以在任何时候重复测试如果所有测试用例都不能运行你就会知道有问题当现有代码 被改变时(很可能有些东西被破坏)这种测试思路方法尤其有效 为了使测试更容易极端编程思路方法创立人Kent Beck创建了种简单称为JUnit框架使人们可以用Java编写测试 用例作为.NET“工厂”你可以运用同等公开资源NUnit(见资源)它是建立在JUnit最初观念上你可以把它同 Visual Studio .NET(VS.NET)集成起来它可以让你在同个项目中包含测试类和功能类在相同项目中拥有测试类 和功能类就可以进行有效测试每次当个功能类改变时你不需要转换项目来测试在开发周期中你将测试思路方法 添加到测试用例类并添加功能到商业类然后运行测试用例测试类也同商业类起集成在Visual SourceSafe中当你 将测试作为开发过程个不可分割部分时你代码质量就提高了重复测试很简单它也消除了由于改变代码而引起恐 惧 现在你已经知道了建立个公共应用结构步骤你已经做好准备将它们用于你企业了建立个积极小组让它们负责公 共底层框架及其前景每个企业都会构建自己应用并为此投资创建个公共底层框架可以帮你更快地开发更高质量 应用而且投资更少
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值