我们挑选了本周研发频道的精华文章,推荐给您的绝对“有料”,闲暇时不妨来细细品味我们精心为你呈现的这份技术大餐,或许有您意想不到的收获。本期热点:屏蔽GitHub是互联网时代的“闭关锁国”吗?微软无视W3C 拒绝遵循WebRTC标准;为何乔布斯脾气怪糟 却能让一群最优秀的人为他卖命?
本期热点回放:
1.屏蔽GitHub是互联网时代的“闭关锁国”吗?
日前,全球最大的社交编程及代码托管网站GitHub被“墙”掉一事在国内技术人员间引起激烈热议。本次屏蔽莫名其妙,有人猜测是12306插件或其他项目用了这个工具社区,导致被屏蔽。而在更多人看来,封锁GitHub相当于为了抓一只老鼠而点了整栋房子。最可能的结果是老鼠没烧到,房子却没了。
创新工场CEO李开复认为:在GitHub的300万会员中,中国是第四大国。GitHub是程序员学习和与世界接轨的首选工具。GitHub并无意识形态,也没有反动内容。封锁GitHub毫无道理,只会导致国内程序员和国际脱轨,失去竞争力和前瞻性。
若干年后,这种行为会被定义为互联网时代的“闭关锁国”吗?
在广大开发者的不懈努力下,GitHub在北京时间1月24日可以正常访问,回归后的GitHub已在搜索上已进行了一些改进,这些改进包括技术上、设计上、高级搜索上和资源库结果(Repository Results)等。
2.微软无视W3C 拒绝遵循WebRTC标准
微软刚刚发布了自己CU-RTC-Web标准的原型,无视了W3C”既定标准“WebRTC”。为什么这么做?微软也有他自己的理由。
首先,WebRTC尚未完备,微软相信他能阐明如何解决带宽变化下的挑战,以及WiFi下并行的失效备援,虽然Redmond的规范未被广泛采用,但仍有其价值。
第二,微软还相信WebRTC最终也不会像它的鼓吹者那样,最终会成为真正的标准,问题在于SDP。因为SDP本非为浏览器间异步通信所设计,WebRTC使用到的一些东西已经超过了其规范,因此微软及其盟友认为Chrome和Firefox最终的实现也不会互相兼容。
除此之外,WebRTC的基础——SDP标准并非由W3C管理,而是IETF的MMUSIC(“Multiparty Multimedia Session Control”),如果他们不合作的话,最终也很难实现浏览器间的兼容。
目前,微软的标准已经在IE10和最新版本的Chrome中以插件的形式实现。也许现在标准确立的问题停留在WebRTC和SDP之间,如果能找到一个快速解方案,WebRTC将毫无疑问成为标准;反之微软的无SDP提议则更合适。
微软龚培元对此表示:“我们内部近期还在召开WebRTC的会议,CU-RTC-Web是为Skype等封闭应用服务的。微软两方面是都兼顾的,不存在非此即彼的事情”。而W3C负责人Alan Bird也表示,比如谷歌及其他大型互联网企业也都在推自己的标准,融合和竞争是很常见的态势。
3.为何乔布斯脾气怪糟 却能让一群最优秀的人为他卖命?
日前,一篇旧文 What it's Really Like Working with Steve Jobs (CSDN译文地址)冲上了Hacker News Top3,引发了激烈讨论。文中作者Glenn Reid回忆了自己和乔帮主一起工作的真实回忆。Glenn Reid从Next时代就跟着帮主,负责了iMovie和iPhoto的开发,团队一开始只有3到4人,产品的细节讨论帮主都参加,帮主最喜欢设计产品,并说自己当CEO的原因是可以自由参加产品设计讨论。
与此相对应的一篇趣贴来自于Quora上的If Steve Jobs was such a bad boss, why did so many people work with him? 乔布斯脾气暴躁,不善于与人交际,却依然能团结一群最优秀的人为他卖命。在贴中,Scott Dunlap认为是因为:“乔布斯既能准确认清现在,又能清楚地看到未来。如果你曾经与这些人共事过,你的职业生涯高度将被拔高,他们会是你最好的职业引导师。”
danabramov 将其归功于乔布斯的“现实扭曲力场”(Reality Distortion Field)能力。所谓现实扭曲力场,原意是说乔布斯口若悬河的表述能力、过人的意志力、扭曲事实以达到目标的迫切愿望,所形成的视听混淆能力。由此推动人做不可能的事。一个早期的例子是,当年Steve Wozniak在创建一个叫突围(Breakout)的游戏,Steve Wozniak告诉他,这将需要几个月的时间,但乔布斯盯着他,坚持能在四天之内完成,他能做到这一点。Steve Wozniak知道那是不可能的,但他最后真的在四天之内完成了。
4.构建高可扩Web架构和分布式系统实战(下)
本文作者Kate Matsudaira是一位美丽的女工程副总裁,曾在Sun Microsystems、微软、亚马逊这些一流的IT公司任职。她有着非常丰富的工作经验和团队管理经验,当过程序员、项目经理、产品经理以及人事经理。专注于构建和操作大型Web应用程序/网站,目前她的主要研究方向是SaaS(软件即服务)应用程序和云计算(如大家所说的大数据)。
本文是作者在AOSA一书介绍如何构建可扩展的分布式系统里的内容,我们进行了翻译并分为上下两篇分布分享给大家。在上一篇《构建高可扩Web架构和分布式系统实战》中,我们举例讨论了设计分布式系统需要考虑的核心要素:可用性、性能、可靠性、可扩展、易管理、成本。而在这篇文章中,我们将深入介绍如何设计可扩展的数据访问,包括负载均衡、代理、全局缓存、分布式缓存等。
构建快速可伸缩的数据访问块
在讨论完设计分布式系统的核心考虑因素后,下面让我们再一起讨论难点部分:可扩展的数据访问。
大多数简单的Web应用程序,例如LAMP堆栈应用程序,看起来如图5所示:
图5:简单的Web应用程序
随着系统渐渐扩大,他们将面临两大主要挑战:构建可扩展的应用程序服务器和数据访问机制。在一个高可扩的应用程序设计中,通常最小化的应用程序(或Web)服务往往能体现一种无共享的架构。这就使得应用程序服务器层要进行横向扩展,这种设计的结果就是把繁重的工作转移到堆栈下层的数据库服务和配置服务上,这才是这一层上真正的可扩展和性能挑战。
本文的剩余部分专门讨论一些常见策略和方法来使这些服务可以快速和可扩展,提升数据的访问速度。
图6 过于简化的的Web应用程序
大多数系统可能会简化成图6那样,这是个非常不错的起点。如果你有大量的数据,想要快速便捷地访问,就好比在你书桌抽屉的最上面有一堆糖果。虽然过于简化,但也暗示了两个难题:可扩展存储和快速的数据访问。
为了这个例子,让我们假设有许多太字节(TB)数据,并且允许用户随机访问一小部分数据(见图7)。这与本文图片应用程序里的在文件服务器上定位一个图片文件非常相似。
图7 访问特定数据
这也是个非常大的挑战,把TB级数据加载到内存中的成本比较昂贵,这可以直接转化到磁盘上进行IO。从磁盘上读取要比内存慢的多——内存访问和Chuck Norris一样快,而磁盘的访问速度要比在DMV上慢。这个速度不同于大数据集上的合计,实数内存访问大概要比顺序访问快6倍,或者比随机从磁盘上读取快10万倍(参考The Pathologies of Big Data)。此外,即使是unique ID,想要在较少的数据中查找确切的位置也是一项艰巨的任务。
5.为什么函数式编程在Java中很危险?
函数式编程这个不温不火的语言由来已久。有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由。那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的。
在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT、CMU以及Chicago,他们初次涉及的语言是Haskell、Scheme及Lisp。他们认为函数式编程是一种自然的、直观的、美丽的且高效的编程样式。但奇怪的是,我和我的同事并没有为Haskell、Scheme、Lisp、Clojure、Scala而编程,这个行业里的绝大部分人都会使用Python、 Ruby、Java或C#等编程,因为它们用起来比较顺手。但在Java中,函数式编程却是低效且危险的。
为什么函数式编程在Java中很危险呢?
每隔几个月,我都会在调试中发现问题,究其原因最终可追溯到滥用函数的想法以及编程算法,更重要的原因是这个虚拟机无法创建这种编程样式。
6.API设计的十大最差和五大最佳实践
目前ProgrammableWeb上收录的API数已过8000,这也说明API的火热趋势锐不可当。在2012年,CSDN就做过许多关于API已越来越热的报道,如API趋势锐不可当 收录数同比翻番、开放API正在取代开源软件?,甚至有人提问我们是否正处于API的黄金时代?这似乎也在说明软件已变的越来越开放。
点击查看PPT(需翻墙)
十大最差实践
错误处理不完善或者比较差
Rest API忽视HTTP规则
暴露原始底层数据模型
安全复杂性
意外和非法发布
缺乏开发经验
期待一个MVC架构带给你一个伟大的API
假设你构建API,用户就会被引进来(Assume if you build it they will come)
技术支持不充分
文档不给力
五大最佳实践
提供一个有价值的服务器
有一个计划和商务模型
简单灵活
它应该被管理和测量
提供充足的技术支持
在这五个最佳实践里,最重要的是提供一个有价值的服务器,如果你在一台非常糟糕的服务上建立了一套非常伟大的API,那么就相当于给猪涂口红。
7.单页Web设计案例+技巧攻略(多图)
设计行业日新月异,设计师和开发人员必须紧跟潮流。2013年,网页设计师应该做什么准备?我们一起来欣赏时下流行的网页设计趋势——单页Web设计。
单页网站设计正快速成为Web应用开发标准,单页网站是指只有一个页面的网站,这种形式的网站曾经非常流行,但并不是每个网站都适合做成单页。很多开发者的作品集网站会设计成单页网站,在内容很少而需要追求创意的时候,单页网站是很好的选择。单页Web设计网页因其超强的视觉效果、独特的外观备受用户关注。单页Web设计同样适用于移动版网页,拜移动大潮所赐,越来越多用户倾向于用手机观看网页。
单页面应用是指用户通过浏览器加载独立的HTML页面并且无需离开此导航页面,这也是其独特的优势所在。对用户操作来说,一旦加载和执行单个页面应用程序通常会有更多的响应,这就需要返回到后端Web服务器,而单页面应用为用户提供了更接近一个本地移动或桌面应用程序的体验。
那么,如何做出优美的单页设计呢?如果你想从事这一方面的设计,那么文中例举的四大案例或许能带给你一丝灵感。
单页设计之无导航
单页设计之点击导航
单页设计之——滚动导航
单页设计之——添加效果
最后还分享了设计单页Web成功秘诀:
保持简单。不要疯狂的使用颜色和字体。要知道太多的东西挤压在一个小空间里,势必会带来反效果。明确你的网站想传达什么样信息并围绕这个做下去。
思考比例。如果你有大量的内容,那么换一种方式。页面上承载太多东西,以致无法达到预期效果。
创建层次结构和导航功能。向用户推荐,在哪点击或者滚动(在可能的情况下)。确保用户通过网站能获取到什么;确保导航工具包括菜单、点击按钮或者滚动、网站内容和联系方式等能轻易被找到、使用。
展示。展示网页设计优势,给用户带来额外的惊喜——动画、悬停效果、伟大的艺术或者排版。把设计发挥到淋漓尽致。
网页设计师所做的不是一项简单的工作,需要不断学习和适应行业的最新潮流,因为新的很快就会变成旧的,而现在正在变成过去。
8.开源产品系列:简单强大的模板语言JSON Template
JSON Template是一款非常强大的模板语言,目前有Python和JavaScript两个实现版。遵循Apache License 2.0许可。
JSON Template使用起来也非常方便,只需把Python file或者JavaScript file拷贝到你的项目里即可,无任何约束限制。
简单示例
>>>importjsontemplate >>>jsontemplate.expand('Hello{name}',{'name':'world'}) 'Helloworld'
这个例子看起来与people.*非常相似,JavaScript版是对这个API的直接转换。
点击查看更多JavaScript示例。
有哪些特征:
JSON Template是JSON模板的补充
简单易读的语法,即使是非专业程序员也可以轻松编辑模板文件
默认“格式化”设置,因此很容易获取escaping/security权利
可扩展特定应用程序格式
这种较小程度的自定义语法可以解决许多领域里的问题(不仅仅是Web方面)
定义良好的声明、面向数据API,并且使用JSON作为数据模型
点击查看更多特征
项目首页:http://code.google.com/p/json-template/
下载地址:http://code.google.com/p/json-template/downloads/list
详细介绍及教程:http://json-template.googlecode.com/svn/trunk/doc/Introducing-JSON-Template.html
相关阅读:
研发周报:代码之美——Doom3源代码赏析
(责任编辑:leonlee07)